https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103727

            Bug ID: 103727
           Summary: [aarch64] Too strict built-in decl check
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: linkw at gcc dot gnu.org
  Target Milestone: ---

As PR102347 discussed and tested, aarch64 also does too strict built-in
function decl check. Here is one test case copied from
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102347#c3

Testcase:

int64x2_t v1 = {100, 200};
int32x4_t v2 = {11, 22, 33, 44};

#pragma GCC target ("+simd")
int main()
{
  uint64x2_t vres = (uint64x2_t) __builtin_aarch64_usubw2v4si (v1, v2);
  printf("vres: %lld %lld\n", vres[0], vres[1]);
  return 0;
}

-march=armv8-a+nosimd  // PASS
-march=armv8-a+nosimd  -flto  // FAIL


Andrew had more insightful comments
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102347#c5)

"Right for aarch64, most people won't use +simd/+nosimd combo (though it might
show up inside the kernel) but they might use +sve/+nosve ...
So the aarch64 bug should be fixed"

Reply via email to