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

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The fix actually might be simplier than I had expected because csneg is already
implement, just need to extend it to csinv also like so:
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index f12a0bebd3d..8cd259fca9c 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -4203,15 +4203,15 @@ (define_insn "*csinv3<mode>_insn"
   [(set_attr "type" "csel")]
 )

-(define_insn "csneg3_uxtw_insn"
+(define_insn "*cs<neg_not_cs>3_uxtw_insn4"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (zero_extend:DI
          (if_then_else:SI
            (match_operand 1 "aarch64_comparison_operation" "")
-           (neg:SI (match_operand:SI 2 "register_operand" "r"))
+           (NEG_NOT:SI (match_operand:SI 2 "register_operand" "r"))
            (match_operand:SI 3 "aarch64_reg_or_zero" "rZ"))))]
   ""
-  "csneg\\t%w0, %w3, %w2, %M1"
+  "cs<neg_not_cs>\\t%w0, %w3, %w2, %M1"
   [(set_attr "type" "csel")]
 )

Reply via email to