]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
aarch64: Use aarch64_gen_compare_zero_and_branch in aarch64_restore_za
authorRichard Henderson <richard.henderson@linaro.org>
Mon, 4 Aug 2025 12:02:42 +0000 (22:02 +1000)
committerRichard Henderson <richard.henderson@linaro.org>
Mon, 11 Aug 2025 23:25:08 +0000 (23:25 +0000)
With -mtrack-speculation, the pattern that was directly expanded by
aarch64_restore_za is disabled.  Use the helper function instead.

gcc:
* config/aarch64/aarch64.cc
(aarch64_gen_compare_zero_and_branch): Export.
* config/aarch64/aarch64-protos.h
(aarch64_gen_compare_zero_and_branch): Declare it.
* config/aarch64/aarch64-sme.md (aarch64_restore_za): Use it.
* config/aarch64/aarch64.md (*aarch64_cbz<EQL><GPI>): Unexport.

gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64-sme.md
gcc/config/aarch64/aarch64.cc
gcc/config/aarch64/aarch64.md

index 36bd88593ffe8b2c2efe80a5ec95acf7e528673c..7b9b16bd3bd75d86cb2f963c607a6f277d5e5fe2 100644 (file)
@@ -1281,4 +1281,7 @@ extern bool aarch64_gcs_enabled ();
 extern unsigned aarch64_data_alignment (const_tree exp, unsigned align);
 extern unsigned aarch64_stack_alignment (const_tree exp, unsigned align);
 
+extern rtx aarch64_gen_compare_zero_and_branch (rtx_code code, rtx x,
+                                               rtx_code_label *label);
+
 #endif /* GCC_AARCH64_PROTOS_H */
index 6b1a747a0f4e8e642e1a7858416e7877c5211c5f..0123ea0e23497e2fc35e38d03c2fe4ef275aa99c 100644 (file)
     auto label = gen_label_rtx ();
     auto tpidr2 = gen_rtx_REG (DImode, R16_REGNUM);
     emit_insn (gen_aarch64_read_tpidr2 (tpidr2));
-    auto jump = emit_likely_jump_insn (gen_aarch64_cbznedi1 (tpidr2, label));
+    auto pat = aarch64_gen_compare_zero_and_branch (NE, tpidr2, label);
+    auto jump = emit_likely_jump_insn (pat);
     JUMP_LABEL (jump) = label;
 
     aarch64_restore_za (operands[0]);
index 123aa1090bb63b40989e015287169a1098d59f30..cb38870e6088b56a05b7b58008523c9fb94eec50 100644 (file)
@@ -2885,7 +2885,7 @@ aarch64_gen_compare_reg_maybe_ze (RTX_CODE code, rtx x, rtx y,
 /* Generate conditional branch to LABEL, comparing X to 0 using CODE.
    Return the jump instruction.  */
 
-static rtx
+rtx
 aarch64_gen_compare_zero_and_branch (rtx_code code, rtx x,
                                     rtx_code_label *label)
 {
index 2d86a02dea1dac54290ff66987fbde04ec0313c6..3da5bc2122dfb68df26a61281b8f56a3247cddfc 100644 (file)
 )
 
 ;; For an EQ/NE comparison against zero, emit `CBZ`/`CBNZ`
-(define_insn "aarch64_cbz<optab><mode>1"
+(define_insn "*aarch64_cbz<optab><mode>"
   [(set (pc) (if_then_else (EQL (match_operand:GPI 0 "register_operand" "r")
                                (const_int 0))
                           (label_ref (match_operand 1))