[llvm] [ARM] Port CSINC patterns from AArch64 to ARM (PR #194956)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 29 13:53:40 PDT 2026
https://github.com/LumioseSil created https://github.com/llvm/llvm-project/pull/194956
This folds (or x, (csinc 0, 0, cc)) -> (csinc x, 0, cc) in TableGen.
And add val, csel(0,1,cc) -> CSINC val,val,cc)
Use add_like for csinc.
>From 54e5706dfef2f611c3a3387d63dd389110e56dda Mon Sep 17 00:00:00 2001
From: AZero13 <gfunni234 at gmail.com>
Date: Wed, 29 Apr 2026 16:38:57 -0400
Subject: [PATCH] [ARM] Port CSINC patterns from AArch64 to ARM
This folds (or x, (csinc 0, 0, cc)) -> (csinc x, 0, cc) in TableGen.
And add val, csel(0,1,cc) -> CSINC val,val,cc)
Use add_like for csinc.
---
llvm/lib/Target/ARM/ARMInstrThumb2.td | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/ARM/ARMInstrThumb2.td b/llvm/lib/Target/ARM/ARMInstrThumb2.td
index e79adb370798e..e05d96e8c3183 100644
--- a/llvm/lib/Target/ARM/ARMInstrThumb2.td
+++ b/llvm/lib/Target/ARM/ARMInstrThumb2.td
@@ -5819,12 +5819,18 @@ let Predicates = [HasV8_1MMainline] in {
(Insn GPRwithZR:$tval, GPRwithZR:$fval,
(i32 (inv_cond_XFORM imm:$cc)))>;
}
- defm : ModifiedV8_1CSEL<t2CSINC, (add rGPR:$fval, 1)>;
+ defm : ModifiedV8_1CSEL<t2CSINC, (add_like rGPR:$fval, 1)>;
defm : ModifiedV8_1CSEL<t2CSINV, (xor rGPR:$fval, -1)>;
defm : ModifiedV8_1CSEL<t2CSNEG, (sub 0, rGPR:$fval)>;
def : T2Pat<(ARMcmov (topbitsallzero32:$Rn), (i32 1), imm:$cc, CPSR),
(t2CSINC $Rn, ZR, (inv_cond_XFORM imm:$cc))>;
+ def : T2Pat<(add_like rGPR:$Rn,
+ (ARMcsinc_su (i32 0), (i32 0), imm:$cc, CPSR)),
+ (t2CSINC $Rn, $Rn, imm:$cc)>;
+ def : T2Pat<(or (topbitsallzero32:$Rn),
+ (ARMcsinc_su (i32 0), (i32 0), imm:$cc, CPSR)),
+ (t2CSINC $Rn, ZR, imm:$cc)>;
def : T2Pat<(and (topbitsallzero32:$Rn),
(ARMcsinc_su (i32 0), (i32 0), imm:$cc, CPSR)),
(t2CSEL ZR, $Rn, imm:$cc)>;
More information about the llvm-commits
mailing list