AArch64: Add if condition in aarch64_function_value [PR96479]
authorPeixin Qiao <qiaopeixin@huawei.com>
Wed, 12 Aug 2020 16:11:41 +0000 (17:11 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 12 Aug 2020 16:11:41 +0000 (17:11 +0100)
Report diagnostic information instead of ICE if it generats fp/simd for
return register when fp/simd is disabled by -mgeneral-regs-only.

gcc/ChangeLog:

* config/aarch64/aarch64.c (aarch64_function_value): Add if
condition to check ag_mode after entering if condition of
aarch64_vfp_is_call_or_return_candidate. If TARGET_FLOAT is
set as false by -mgeneral-regs-only, report the diagnostic
information of -mgeneral-regs-only imcompatible with the use
of fp/simd register(s).

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/mgeneral-regs_1.c: Add the comment that
-mgeneral-regs-only is compatible with the use of vector type
used in the test case.

gcc/config/aarch64/aarch64.c
gcc/testsuite/gcc.target/aarch64/mgeneral-regs_1.c

index b7f5bc7..f80594d 100644 (file)
@@ -5554,6 +5554,10 @@ aarch64_function_value (const_tree type, const_tree func,
   if (aarch64_vfp_is_call_or_return_candidate (mode, type, &ag_mode, &count,
                                               NULL, false))
     {
+      /* TYPE passed in fp/simd registers.  */
+      if (!TARGET_FLOAT)
+       aarch64_err_no_fpadvsimd (ag_mode);
+
       gcc_assert (!sve_p);
       if (!aarch64_composite_type_p (type, mode))
        {
index 336402e..6f785c9 100644 (file)
@@ -4,6 +4,6 @@ typedef int int32x2_t __attribute__ ((__vector_size__ ((8))));
 
 /* { dg-error "'-mgeneral-regs-only' is incompatible with the use of vector types" "" {target "aarch64*-*-*"} .+1 } */
 int32x2_t test (int32x2_t a, int32x2_t b)
-{
-  return a + b;
+{ /* { dg-error "'-mgeneral-regs-only' is incompatible with the use of vector types" } */
+  return a + b; /* { dg-error "'-mgeneral-regs-only' is incompatible with the use of vector types" } */
 }