[llvm] 8099d6c - [CSKY] Optimize IR pattern icmp-select with INCT32/INCF32

Ben Shi via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 30 07:55:37 PDT 2023


Author: Ben Shi
Date: 2023-06-30T22:55:25+08:00
New Revision: 8099d6c20beeb9465eb036dcfc467a15c0ec516e

URL: https://github.com/llvm/llvm-project/commit/8099d6c20beeb9465eb036dcfc467a15c0ec516e
DIFF: https://github.com/llvm/llvm-project/commit/8099d6c20beeb9465eb036dcfc467a15c0ec516e.diff

LOG: [CSKY] Optimize IR pattern icmp-select with INCT32/INCF32

Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D153436

Added: 
    

Modified: 
    llvm/lib/Target/CSKY/CSKYInstrInfo.td
    llvm/test/CodeGen/CSKY/inct-incf.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/CSKY/CSKYInstrInfo.td b/llvm/lib/Target/CSKY/CSKYInstrInfo.td
index ab053fae9f302..8024d4a7b8e5b 100644
--- a/llvm/lib/Target/CSKY/CSKYInstrInfo.td
+++ b/llvm/lib/Target/CSKY/CSKYInstrInfo.td
@@ -1253,6 +1253,34 @@ let Predicates = [iHasE2] in {
 // Select Patterns.
 let Predicates = [iHasE2] in {
 
+def : Pat<(select (i32 (setne GPR:$rs1, uimm16:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$false),
+          (INCT32 (CMPNEI32 GPR:$rs1, uimm16:$rs2), GPR:$false, GPR:$rx, uimm5:$imm)>;
+def : Pat<(select (i32 (seteq GPR:$rs1, uimm16:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$false),
+          (INCF32 (CMPNEI32 GPR:$rs1, uimm16:$rs2), GPR:$false, GPR:$rx, uimm5:$imm)>;
+
+multiclass INCTF32Pat0<PatFrag cond0, PatFrag cond1, Instruction cmp> {
+  def : Pat<(select (i32 (cond0 GPR:$rs1, oimm16:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$other),
+            (INCT32 (cmp GPR:$rs1, oimm16:$rs2), GPR:$other, GPR:$rx, uimm5:$imm)>;
+  def : Pat<(select (i32 (cond1 GPR:$rs1, oimm16:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$other),
+            (INCF32 (cmp GPR:$rs1, oimm16:$rs2), GPR:$other, GPR:$rx, uimm5:$imm)>;
+  def : Pat<(select (i32 (cond0 GPR:$rs1, oimm16:$rs2)), GPR:$other, (add GPR:$rx, uimm5:$imm)),
+            (INCF32 (cmp GPR:$rs1, oimm16:$rs2), GPR:$other, GPR:$rx, uimm5:$imm)>;
+  def : Pat<(select (i32 (cond1 GPR:$rs1, oimm16:$rs2)), GPR:$other, (add GPR:$rx, uimm5:$imm)),
+            (INCT32 (cmp GPR:$rs1, oimm16:$rs2), GPR:$other, GPR:$rx, uimm5:$imm)>;
+}
+
+defm : INCTF32Pat0<setuge, setult, CMPHSI32>;
+defm : INCTF32Pat0<setlt, setge, CMPLTI32>;
+
+def : Pat<(select CARRY:$ca, (add GPR:$rx, uimm5:$imm), GPR:$false),
+          (INCT32 CARRY:$ca, GPR:$false, GPR:$rx, uimm5:$imm)>;
+def : Pat<(select CARRY:$ca, GPR:$true, (add GPR:$rx, uimm5:$imm)),
+          (INCF32 CARRY:$ca, GPR:$true, GPR:$rx, uimm5:$imm)>;
+def : Pat<(select (and CARRY:$ca, 1), (add GPR:$rx, uimm5:$imm), GPR:$false),
+          (INCT32 CARRY:$ca, GPR:$false, GPR:$rx, uimm5:$imm)>;
+def : Pat<(select (and CARRY:$ca, 1), GPR:$true, (add GPR:$rx, uimm5:$imm)),
+          (INCF32 CARRY:$ca, GPR:$true, GPR:$rx, uimm5:$imm)>;
+
 def : Pat<(select CARRY:$ca, GPR:$rx, GPR:$false),
           (MOVT32 CARRY:$ca, GPR:$rx, GPR:$false)>;
 def : Pat<(select (and CARRY:$ca, 1), GPR:$rx, GPR:$false),
@@ -1277,6 +1305,27 @@ def : Pat<(select (and CARRY:$ca, 1), GPR:$rx, GPR:$false),
 
 
 let Predicates = [iHas2E3] in {
+def : Pat<(select (i32 (setne GPR:$rs1, GPR:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$false),
+          (INCT32 (CMPNE32 GPR:$rs1, GPR:$rs2), GPR:$false, GPR:$rx, uimm5:$imm)>;
+def : Pat<(select (i32 (seteq GPR:$rs1, GPR:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$false),
+          (INCF32 (CMPNE32 GPR:$rs1, GPR:$rs2), GPR:$false, GPR:$rx, uimm5:$imm)>;
+
+multiclass INCTF32Pat1<PatFrag cond0, PatFrag cond1, Instruction cmp, Instruction incdec0,
+                       Instruction incdec1> {
+  def : Pat<(select (i32 (cond0 GPR:$rs1, GPR:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$other),
+            (incdec0 (cmp GPR:$rs1, GPR:$rs2), GPR:$other, GPR:$rx, uimm5:$imm)>;
+  def : Pat<(select (i32 (cond0 GPR:$rs1, GPR:$rs2)), GPR:$other, (add GPR:$rx, uimm5:$imm)),
+            (incdec1 (cmp GPR:$rs1, GPR:$rs2), GPR:$other, GPR:$rx, uimm5:$imm)>;
+  def : Pat<(select (i32 (cond1 GPR:$rs1, GPR:$rs2)), (add GPR:$rx, uimm5:$imm), GPR:$other),
+            (incdec0 (cmp GPR:$rs2, GPR:$rs1), GPR:$other, GPR:$rx, uimm5:$imm)>;
+  def : Pat<(select (i32 (cond1 GPR:$rs1, GPR:$rs2)), GPR:$other, (add GPR:$rx, uimm5:$imm)),
+            (incdec1 (cmp GPR:$rs2, GPR:$rs1), GPR:$other, GPR:$rx, uimm5:$imm)>;
+}
+
+defm : INCTF32Pat1<setuge, setule, CMPHS32, INCT32, INCF32>;
+defm : INCTF32Pat1<setult, setugt, CMPHS32, INCF32, INCT32>;
+defm : INCTF32Pat1<setlt, setgt, CMPLT32, INCT32, INCF32>;
+defm : INCTF32Pat1<setge, setle, CMPLT32, INCF32, INCT32>;
 
 def : Pat<(select (i32 (setne GPR:$rs1, GPR:$rs2)), GPR:$rx, GPR:$false),
           (MOVT32 (CMPNE32 GPR:$rs1, GPR:$rs2), GPR:$rx, GPR:$false)>;

diff  --git a/llvm/test/CodeGen/CSKY/inct-incf.ll b/llvm/test/CodeGen/CSKY/inct-incf.ll
index ea1a76a709650..42d88ac62c7de 100644
--- a/llvm/test/CodeGen/CSKY/inct-incf.ll
+++ b/llvm/test/CodeGen/CSKY/inct-incf.ll
@@ -4,9 +4,8 @@
 define i32 @select_by_icmp_ugt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ugt:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmphs16 a1, a0
-; CHECK-NEXT:    movf32 a3, a2
+; CHECK-NEXT:    incf32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp ugt i32 %t0, %t1
@@ -18,9 +17,8 @@ define i32 @select_by_icmp_ugt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_sgt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_sgt:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmplt16 a1, a0
-; CHECK-NEXT:    movt32 a3, a2
+; CHECK-NEXT:    inct32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp sgt i32 %t0, %t1
@@ -32,9 +30,8 @@ define i32 @select_by_icmp_sgt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_uge(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_uge:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmphs16 a0, a1
-; CHECK-NEXT:    movt32 a3, a2
+; CHECK-NEXT:    inct32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp uge i32 %t0, %t1
@@ -46,9 +43,8 @@ define i32 @select_by_icmp_uge(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_sge(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_sge:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmplt16 a0, a1
-; CHECK-NEXT:    movf32 a3, a2
+; CHECK-NEXT:    incf32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp sge i32 %t0, %t1
@@ -60,9 +56,8 @@ define i32 @select_by_icmp_sge(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ult(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ult:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmphs16 a0, a1
-; CHECK-NEXT:    movf32 a3, a2
+; CHECK-NEXT:    incf32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp ult i32 %t0, %t1
@@ -74,9 +69,8 @@ define i32 @select_by_icmp_ult(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_slt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_slt:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmplt16 a0, a1
-; CHECK-NEXT:    movt32 a3, a2
+; CHECK-NEXT:    inct32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp slt i32 %t0, %t1
@@ -88,9 +82,8 @@ define i32 @select_by_icmp_slt(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ule(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ule:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmphs16 a1, a0
-; CHECK-NEXT:    movt32 a3, a2
+; CHECK-NEXT:    inct32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp ule i32 %t0, %t1
@@ -102,9 +95,8 @@ define i32 @select_by_icmp_ule(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_sle(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_sle:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmplt16 a1, a0
-; CHECK-NEXT:    movf32 a3, a2
+; CHECK-NEXT:    incf32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp sle i32 %t0, %t1
@@ -116,9 +108,8 @@ define i32 @select_by_icmp_sle(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ne(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ne:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmpne16 a0, a1
-; CHECK-NEXT:    movt32 a3, a2
+; CHECK-NEXT:    inct32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp ne i32 %t0, %t1
@@ -130,9 +121,8 @@ define i32 @select_by_icmp_ne(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_eq(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_eq:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a2, 10
 ; CHECK-NEXT:    cmpne16 a0, a1
-; CHECK-NEXT:    movf32 a3, a2
+; CHECK-NEXT:    incf32 a3, a2, 10
 ; CHECK-NEXT:    mov16 a0, a3
 ; CHECK-NEXT:    rts16
   %t4 = icmp eq i32 %t0, %t1
@@ -144,10 +134,9 @@ define i32 @select_by_icmp_eq(i32 %t0, i32 %t1, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ugt_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ugt_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    movi16 a3, 128
 ; CHECK-NEXT:    cmphs16 a3, a0
-; CHECK-NEXT:    movf32 a2, a1
+; CHECK-NEXT:    incf32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp ugt i32 %t0, 128
@@ -159,10 +148,9 @@ define i32 @select_by_icmp_ugt_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_sgt_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_sgt_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    movi16 a3, 128
 ; CHECK-NEXT:    cmplt16 a3, a0
-; CHECK-NEXT:    movt32 a2, a1
+; CHECK-NEXT:    inct32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp sgt i32 %t0, 128
@@ -174,10 +162,9 @@ define i32 @select_by_icmp_sgt_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_uge_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_uge_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    movi16 a3, 127
 ; CHECK-NEXT:    cmphs16 a3, a0
-; CHECK-NEXT:    movf32 a2, a1
+; CHECK-NEXT:    incf32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp uge i32 %t0, 128
@@ -189,10 +176,9 @@ define i32 @select_by_icmp_uge_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_sge_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_sge_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    movi16 a3, 127
 ; CHECK-NEXT:    cmplt16 a3, a0
-; CHECK-NEXT:    movt32 a2, a1
+; CHECK-NEXT:    inct32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp sge i32 %t0, 128
@@ -204,9 +190,8 @@ define i32 @select_by_icmp_sge_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ult_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ult_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    cmphsi32 a0, 128
-; CHECK-NEXT:    movf32 a2, a1
+; CHECK-NEXT:    incf32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp ult i32 %t0, 128
@@ -218,9 +203,8 @@ define i32 @select_by_icmp_ult_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_slt_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_slt_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    cmplti32 a0, 128
-; CHECK-NEXT:    movt32 a2, a1
+; CHECK-NEXT:    inct32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp slt i32 %t0, 128
@@ -232,9 +216,8 @@ define i32 @select_by_icmp_slt_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ule_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ule_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    cmphsi32 a0, 129
-; CHECK-NEXT:    movf32 a2, a1
+; CHECK-NEXT:    incf32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp ule i32 %t0, 128
@@ -246,9 +229,8 @@ define i32 @select_by_icmp_ule_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_sle_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_sle_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    cmplti32 a0, 129
-; CHECK-NEXT:    movt32 a2, a1
+; CHECK-NEXT:    inct32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp sle i32 %t0, 128
@@ -260,9 +242,8 @@ define i32 @select_by_icmp_sle_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_ne_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_ne_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    cmpnei32 a0, 128
-; CHECK-NEXT:    movt32 a2, a1
+; CHECK-NEXT:    inct32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp ne i32 %t0, 128
@@ -274,9 +255,8 @@ define i32 @select_by_icmp_ne_imm(i32 %t0, i32 %t2, i32 %t3) {
 define i32 @select_by_icmp_eq_imm(i32 %t0, i32 %t2, i32 %t3) {
 ; CHECK-LABEL: select_by_icmp_eq_imm:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi16 a1, 10
 ; CHECK-NEXT:    cmpnei32 a0, 128
-; CHECK-NEXT:    movf32 a2, a1
+; CHECK-NEXT:    incf32 a2, a1, 10
 ; CHECK-NEXT:    mov16 a0, a2
 ; CHECK-NEXT:    rts16
   %t4 = icmp eq i32 %t0, 128
@@ -300,9 +280,8 @@ define i32 @select_by_call_t(i32 %t0, i32 %t1, i32 %t2) {
 ; CHECK-NEXT:    mov16 l0, a2
 ; CHECK-NEXT:    mov16 l1, a1
 ; CHECK-NEXT:    jsri32 [.LCPI20_0]
-; CHECK-NEXT:    addi32 a1, l1, 10
 ; CHECK-NEXT:    btsti16 a0, 0
-; CHECK-NEXT:    movt32 l0, a1
+; CHECK-NEXT:    inct32 l0, l1, 10
 ; CHECK-NEXT:    mov16 a0, l0
 ; CHECK-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
 ; CHECK-NEXT:    ld16.w l0, (sp, 4) # 4-byte Folded Reload
@@ -335,10 +314,9 @@ define i32 @select_by_call_f(i32 %t0, i32 %t1, i32 %t2) {
 ; CHECK-NEXT:    mov16 l0, a2
 ; CHECK-NEXT:    mov16 l1, a1
 ; CHECK-NEXT:    jsri32 [.LCPI21_0]
-; CHECK-NEXT:    addi32 a1, l1, 10
 ; CHECK-NEXT:    btsti16 a0, 0
-; CHECK-NEXT:    movt32 a1, l0
-; CHECK-NEXT:    mov16 a0, a1
+; CHECK-NEXT:    incf32 l0, l1, 10
+; CHECK-NEXT:    mov16 a0, l0
 ; CHECK-NEXT:    ld32.w lr, (sp, 0) # 4-byte Folded Reload
 ; CHECK-NEXT:    ld16.w l0, (sp, 4) # 4-byte Folded Reload
 ; CHECK-NEXT:    ld16.w l1, (sp, 8) # 4-byte Folded Reload


        


More information about the llvm-commits mailing list