]> gcc.gnu.org Git - gcc.git/commitdiff
aarch64: Fix parens in aarch64_stp_reg_operand [PR113061]
authorAlex Coplan <alex.coplan@arm.com>
Tue, 19 Dec 2023 09:22:20 +0000 (09:22 +0000)
committerAlex Coplan <alex.coplan@arm.com>
Tue, 19 Dec 2023 09:22:20 +0000 (09:22 +0000)
In r14-6603-gfcdd2757c76bf925115b8e1ba4318d6366dd6f09 I messed up the
parentheses in aarch64_stp_reg_operand, the indentation shows the intended
nesting of the conditions.  This patch fixes that.

This fixes PR113061 which shows IRA substituting (const_int 1) into a
writeback stp pattern as a result (and LRA failing to reload the
constant).

gcc/ChangeLog:

PR target/113061
* config/aarch64/predicates.md (aarch64_stp_reg_operand): Fix
parentheses to match intent.

gcc/testsuite/ChangeLog:

PR target/113061
* gfortran.dg/PR113061.f90: New test.

gcc/config/aarch64/predicates.md
gcc/testsuite/gfortran.dg/PR113061.f90 [new file with mode: 0644]

index 9e6231691c08664b4562083afaee38adcad42be6..510d4d2eaca3d0998f3d44436347ec75e97da361 100644 (file)
 (define_special_predicate "aarch64_stp_reg_operand"
   (ior (match_operand 0 "aarch64_ldp_reg_operand")
        (and (match_code "const_int,const,const_vector,const_double")
-           (match_test "aarch64_const_zero_rtx_p (op)"))
+           (match_test "aarch64_const_zero_rtx_p (op)")
            (ior
              (match_test "GET_MODE (op) == VOIDmode")
              (and
                (ior
                  (match_test "mode == VOIDmode")
                  (match_test "known_eq (GET_MODE_SIZE (mode),
-                                        GET_MODE_SIZE (GET_MODE (op)))"))))))
+                                        GET_MODE_SIZE (GET_MODE (op)))")))))))
 
 ;; Used for storing two 64-bit values in an AdvSIMD register using an STP
 ;; as a 128-bit vec_concat.
diff --git a/gcc/testsuite/gfortran.dg/PR113061.f90 b/gcc/testsuite/gfortran.dg/PR113061.f90
new file mode 100644 (file)
index 0000000..989bc38
--- /dev/null
@@ -0,0 +1,12 @@
+! { dg-do compile }
+! { dg-options "-fno-move-loop-invariants -Oz" }
+module module_foo
+  use iso_c_binding
+  contains
+  subroutine foo(a) bind(c)
+    type(c_ptr)  a(..)
+    select rank(a)
+    end select
+    call bar
+  end
+end
This page took 0.089821 seconds and 5 git commands to generate.