https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96795
Bug ID: 96795
Summary: MVE: issue with polymorphism and integer promotion
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: avieira at gcc dot gnu.org
Target Milestone: ---
An example of this issue can be observed when trying to compile:
#include <arm_mve.h>
uint16x8_t foo (uint16x8_t a, int16_t b)
{
return vaddq (a, (b<<3));
}
This will lead to an __ARM_undef being selected.
I believe this is because __ARM_mve_coerce only accepts one type for scalar
parameters and should have accepted the same range of types for scalar as is
done in __ARM_mve_typeid.
A workaround for this is to cast (b<<3) to uint16_t.