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.

Reply via email to