[llvm] [AArch64][GlobalISel] Use integer types for widening shift icmp (PR #222257)

via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 9 00:21:34 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: David Green (davemgreen)

<details>
<summary>Changes</summary>



---

Patch is 30.12 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/222257.diff


2 Files Affected:

- (modified) llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp (+2-2) 
- (modified) llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir (+375) 


``````````diff
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
index 0257119da0a6e..253a41bdc62e9 100644
--- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
@@ -6603,7 +6603,7 @@ Register LegalizerHelper::buildVariableShiftPart(unsigned Opcode,
   // so carry bits aren't needed.
   LLT ShiftAmtTy = MRI.getType(ShiftAmt);
   auto ZeroConst = MIRBuilder.buildConstant(ShiftAmtTy, 0);
-  LLT BoolTy = LLT::scalar(1);
+  LLT BoolTy = LLT::integer(1);
   auto IsZeroBitShift =
       MIRBuilder.buildICmp(ICmpInst::ICMP_EQ, BoolTy, ShiftAmt, ZeroConst);
 
@@ -6727,7 +6727,7 @@ LegalizerHelper::narrowScalarShiftMultiway(MachineInstr &MI, LLT TargetTy) {
 
   // Shifting by zero should be a no-op.
   auto ZeroAmtConst = MIRBuilder.buildConstant(ShiftAmtTy, 0);
-  LLT BoolTy = LLT::scalar(1);
+  LLT BoolTy = LLT::integer(1);
   auto IsZeroShift =
       MIRBuilder.buildICmp(ICmpInst::ICMP_EQ, BoolTy, AmtReg, ZeroAmtConst);
 
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
index 763e11e91912b..bf3e812e22ba6 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
@@ -576,3 +576,378 @@ body:             |
     RET_ReallyLR implicit $w0
 
 ...
+---
+name: test_lshr_i512
+body:             |
+  bb.1.entry:
+    liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8
+
+    ; CHECK-LABEL: name: test_lshr_i512
+    ; CHECK: liveins: $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8
+    ; CHECK-NEXT: {{  $}}
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(i64) = COPY $x0
+    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(i64) = COPY $x1
+    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(i64) = COPY $x2
+    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(i64) = COPY $x3
+    ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(i64) = COPY $x4
+    ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(i64) = COPY $x5
+    ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(i64) = COPY $x6
+    ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(i64) = COPY $x7
+    ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(i64) = COPY $x8
+    ; CHECK-NEXT: [[C:%[0-9]+]]:_(i64) = G_CONSTANT i64 0
+    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[COPY8]](i64), [[C]]
+    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(i64) = G_CONSTANT i64 6
+    ; CHECK-NEXT: [[C2:%[0-9]+]]:_(i64) = G_CONSTANT i64 63
+    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(i64) = G_LSHR [[COPY8]], [[C1]](i64)
+    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(i64) = G_AND [[COPY8]], [[C2]]
+    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(i64) = G_SHL [[COPY]], [[AND]](i64)
+    ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(i64) = G_SELECT [[ICMP1]](i32), [[SHL]], [[C]]
+    ; CHECK-NEXT: [[C3:%[0-9]+]]:_(i64) = G_CONSTANT i64 1
+    ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C3]]
+    ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(i64) = G_SELECT [[ICMP2]](i32), [[C]], [[SELECT]]
+    ; CHECK-NEXT: [[C4:%[0-9]+]]:_(i64) = G_CONSTANT i64 2
+    ; CHECK-NEXT: [[ICMP3:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C4]]
+    ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(i64) = G_SELECT [[ICMP3]](i32), [[C]], [[SELECT1]]
+    ; CHECK-NEXT: [[C5:%[0-9]+]]:_(i64) = G_CONSTANT i64 3
+    ; CHECK-NEXT: [[ICMP4:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C5]]
+    ; CHECK-NEXT: [[SELECT3:%[0-9]+]]:_(i64) = G_SELECT [[ICMP4]](i32), [[C]], [[SELECT2]]
+    ; CHECK-NEXT: [[C6:%[0-9]+]]:_(i64) = G_CONSTANT i64 4
+    ; CHECK-NEXT: [[ICMP5:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C6]]
+    ; CHECK-NEXT: [[SELECT4:%[0-9]+]]:_(i64) = G_SELECT [[ICMP5]](i32), [[C]], [[SELECT3]]
+    ; CHECK-NEXT: [[C7:%[0-9]+]]:_(i64) = G_CONSTANT i64 5
+    ; CHECK-NEXT: [[ICMP6:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C7]]
+    ; CHECK-NEXT: [[SELECT5:%[0-9]+]]:_(i64) = G_SELECT [[ICMP6]](i32), [[C]], [[SELECT4]]
+    ; CHECK-NEXT: [[ICMP7:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C1]]
+    ; CHECK-NEXT: [[SELECT6:%[0-9]+]]:_(i64) = G_SELECT [[ICMP7]](i32), [[C]], [[SELECT5]]
+    ; CHECK-NEXT: [[C8:%[0-9]+]]:_(i64) = G_CONSTANT i64 7
+    ; CHECK-NEXT: [[ICMP8:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C8]]
+    ; CHECK-NEXT: [[SELECT7:%[0-9]+]]:_(i64) = G_SELECT [[ICMP8]](i32), [[C]], [[SELECT6]]
+    ; CHECK-NEXT: [[SELECT8:%[0-9]+]]:_(i64) = G_SELECT [[ICMP]](i32), [[COPY]], [[SELECT7]]
+    ; CHECK-NEXT: [[ICMP9:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(i64) = G_SHL [[COPY1]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP10:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[C9:%[0-9]+]]:_(i64) = G_CONSTANT i64 64
+    ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(i64) = G_LSHR [[COPY]], [[SUB]](i64)
+    ; CHECK-NEXT: [[SELECT9:%[0-9]+]]:_(i64) = G_SELECT [[ICMP10]](i32), [[C]], [[LSHR1]]
+    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(i64) = G_OR [[SHL1]], [[SELECT9]]
+    ; CHECK-NEXT: [[SELECT10:%[0-9]+]]:_(i64) = G_SELECT [[ICMP9]](i32), [[OR]], [[C]]
+    ; CHECK-NEXT: [[ICMP11:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C3]]
+    ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(i64) = G_SHL [[COPY]], [[AND]](i64)
+    ; CHECK-NEXT: [[SELECT11:%[0-9]+]]:_(i64) = G_SELECT [[ICMP11]](i32), [[SHL2]], [[SELECT10]]
+    ; CHECK-NEXT: [[ICMP12:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C4]]
+    ; CHECK-NEXT: [[SELECT12:%[0-9]+]]:_(i64) = G_SELECT [[ICMP12]](i32), [[C]], [[SELECT11]]
+    ; CHECK-NEXT: [[ICMP13:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C5]]
+    ; CHECK-NEXT: [[SELECT13:%[0-9]+]]:_(i64) = G_SELECT [[ICMP13]](i32), [[C]], [[SELECT12]]
+    ; CHECK-NEXT: [[ICMP14:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C6]]
+    ; CHECK-NEXT: [[SELECT14:%[0-9]+]]:_(i64) = G_SELECT [[ICMP14]](i32), [[C]], [[SELECT13]]
+    ; CHECK-NEXT: [[ICMP15:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C7]]
+    ; CHECK-NEXT: [[SELECT15:%[0-9]+]]:_(i64) = G_SELECT [[ICMP15]](i32), [[C]], [[SELECT14]]
+    ; CHECK-NEXT: [[ICMP16:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C1]]
+    ; CHECK-NEXT: [[SELECT16:%[0-9]+]]:_(i64) = G_SELECT [[ICMP16]](i32), [[C]], [[SELECT15]]
+    ; CHECK-NEXT: [[ICMP17:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C8]]
+    ; CHECK-NEXT: [[SELECT17:%[0-9]+]]:_(i64) = G_SELECT [[ICMP17]](i32), [[C]], [[SELECT16]]
+    ; CHECK-NEXT: [[SELECT18:%[0-9]+]]:_(i64) = G_SELECT [[ICMP]](i32), [[COPY1]], [[SELECT17]]
+    ; CHECK-NEXT: [[ICMP18:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(i64) = G_SHL [[COPY2]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP19:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(i64) = G_LSHR [[COPY1]], [[SUB1]](i64)
+    ; CHECK-NEXT: [[SELECT19:%[0-9]+]]:_(i64) = G_SELECT [[ICMP19]](i32), [[C]], [[LSHR2]]
+    ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(i64) = G_OR [[SHL3]], [[SELECT19]]
+    ; CHECK-NEXT: [[SELECT20:%[0-9]+]]:_(i64) = G_SELECT [[ICMP18]](i32), [[OR1]], [[C]]
+    ; CHECK-NEXT: [[ICMP20:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C3]]
+    ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(i64) = G_SHL [[COPY1]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP21:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB2:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(i64) = G_LSHR [[COPY]], [[SUB2]](i64)
+    ; CHECK-NEXT: [[SELECT21:%[0-9]+]]:_(i64) = G_SELECT [[ICMP21]](i32), [[C]], [[LSHR3]]
+    ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(i64) = G_OR [[SHL4]], [[SELECT21]]
+    ; CHECK-NEXT: [[SELECT22:%[0-9]+]]:_(i64) = G_SELECT [[ICMP20]](i32), [[OR2]], [[SELECT20]]
+    ; CHECK-NEXT: [[ICMP22:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C4]]
+    ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(i64) = G_SHL [[COPY]], [[AND]](i64)
+    ; CHECK-NEXT: [[SELECT23:%[0-9]+]]:_(i64) = G_SELECT [[ICMP22]](i32), [[SHL5]], [[SELECT22]]
+    ; CHECK-NEXT: [[ICMP23:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C5]]
+    ; CHECK-NEXT: [[SELECT24:%[0-9]+]]:_(i64) = G_SELECT [[ICMP23]](i32), [[C]], [[SELECT23]]
+    ; CHECK-NEXT: [[ICMP24:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C6]]
+    ; CHECK-NEXT: [[SELECT25:%[0-9]+]]:_(i64) = G_SELECT [[ICMP24]](i32), [[C]], [[SELECT24]]
+    ; CHECK-NEXT: [[ICMP25:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C7]]
+    ; CHECK-NEXT: [[SELECT26:%[0-9]+]]:_(i64) = G_SELECT [[ICMP25]](i32), [[C]], [[SELECT25]]
+    ; CHECK-NEXT: [[ICMP26:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C1]]
+    ; CHECK-NEXT: [[SELECT27:%[0-9]+]]:_(i64) = G_SELECT [[ICMP26]](i32), [[C]], [[SELECT26]]
+    ; CHECK-NEXT: [[ICMP27:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C8]]
+    ; CHECK-NEXT: [[SELECT28:%[0-9]+]]:_(i64) = G_SELECT [[ICMP27]](i32), [[C]], [[SELECT27]]
+    ; CHECK-NEXT: [[SELECT29:%[0-9]+]]:_(i64) = G_SELECT [[ICMP]](i32), [[COPY2]], [[SELECT28]]
+    ; CHECK-NEXT: [[ICMP28:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(i64) = G_SHL [[COPY3]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP29:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB3:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(i64) = G_LSHR [[COPY2]], [[SUB3]](i64)
+    ; CHECK-NEXT: [[SELECT30:%[0-9]+]]:_(i64) = G_SELECT [[ICMP29]](i32), [[C]], [[LSHR4]]
+    ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(i64) = G_OR [[SHL6]], [[SELECT30]]
+    ; CHECK-NEXT: [[SELECT31:%[0-9]+]]:_(i64) = G_SELECT [[ICMP28]](i32), [[OR3]], [[C]]
+    ; CHECK-NEXT: [[ICMP30:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C3]]
+    ; CHECK-NEXT: [[SHL7:%[0-9]+]]:_(i64) = G_SHL [[COPY2]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP31:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB4:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(i64) = G_LSHR [[COPY1]], [[SUB4]](i64)
+    ; CHECK-NEXT: [[SELECT32:%[0-9]+]]:_(i64) = G_SELECT [[ICMP31]](i32), [[C]], [[LSHR5]]
+    ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(i64) = G_OR [[SHL7]], [[SELECT32]]
+    ; CHECK-NEXT: [[SELECT33:%[0-9]+]]:_(i64) = G_SELECT [[ICMP30]](i32), [[OR4]], [[SELECT31]]
+    ; CHECK-NEXT: [[ICMP32:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C4]]
+    ; CHECK-NEXT: [[SHL8:%[0-9]+]]:_(i64) = G_SHL [[COPY1]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP33:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB5:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR6:%[0-9]+]]:_(i64) = G_LSHR [[COPY]], [[SUB5]](i64)
+    ; CHECK-NEXT: [[SELECT34:%[0-9]+]]:_(i64) = G_SELECT [[ICMP33]](i32), [[C]], [[LSHR6]]
+    ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(i64) = G_OR [[SHL8]], [[SELECT34]]
+    ; CHECK-NEXT: [[SELECT35:%[0-9]+]]:_(i64) = G_SELECT [[ICMP32]](i32), [[OR5]], [[SELECT33]]
+    ; CHECK-NEXT: [[ICMP34:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C5]]
+    ; CHECK-NEXT: [[SHL9:%[0-9]+]]:_(i64) = G_SHL [[COPY]], [[AND]](i64)
+    ; CHECK-NEXT: [[SELECT36:%[0-9]+]]:_(i64) = G_SELECT [[ICMP34]](i32), [[SHL9]], [[SELECT35]]
+    ; CHECK-NEXT: [[ICMP35:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C6]]
+    ; CHECK-NEXT: [[SELECT37:%[0-9]+]]:_(i64) = G_SELECT [[ICMP35]](i32), [[C]], [[SELECT36]]
+    ; CHECK-NEXT: [[ICMP36:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C7]]
+    ; CHECK-NEXT: [[SELECT38:%[0-9]+]]:_(i64) = G_SELECT [[ICMP36]](i32), [[C]], [[SELECT37]]
+    ; CHECK-NEXT: [[ICMP37:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C1]]
+    ; CHECK-NEXT: [[SELECT39:%[0-9]+]]:_(i64) = G_SELECT [[ICMP37]](i32), [[C]], [[SELECT38]]
+    ; CHECK-NEXT: [[ICMP38:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C8]]
+    ; CHECK-NEXT: [[SELECT40:%[0-9]+]]:_(i64) = G_SELECT [[ICMP38]](i32), [[C]], [[SELECT39]]
+    ; CHECK-NEXT: [[SELECT41:%[0-9]+]]:_(i64) = G_SELECT [[ICMP]](i32), [[COPY3]], [[SELECT40]]
+    ; CHECK-NEXT: [[ICMP39:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL10:%[0-9]+]]:_(i64) = G_SHL [[COPY4]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP40:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB6:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR7:%[0-9]+]]:_(i64) = G_LSHR [[COPY3]], [[SUB6]](i64)
+    ; CHECK-NEXT: [[SELECT42:%[0-9]+]]:_(i64) = G_SELECT [[ICMP40]](i32), [[C]], [[LSHR7]]
+    ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(i64) = G_OR [[SHL10]], [[SELECT42]]
+    ; CHECK-NEXT: [[SELECT43:%[0-9]+]]:_(i64) = G_SELECT [[ICMP39]](i32), [[OR6]], [[C]]
+    ; CHECK-NEXT: [[ICMP41:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C3]]
+    ; CHECK-NEXT: [[SHL11:%[0-9]+]]:_(i64) = G_SHL [[COPY3]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP42:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB7:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR8:%[0-9]+]]:_(i64) = G_LSHR [[COPY2]], [[SUB7]](i64)
+    ; CHECK-NEXT: [[SELECT44:%[0-9]+]]:_(i64) = G_SELECT [[ICMP42]](i32), [[C]], [[LSHR8]]
+    ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(i64) = G_OR [[SHL11]], [[SELECT44]]
+    ; CHECK-NEXT: [[SELECT45:%[0-9]+]]:_(i64) = G_SELECT [[ICMP41]](i32), [[OR7]], [[SELECT43]]
+    ; CHECK-NEXT: [[ICMP43:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C4]]
+    ; CHECK-NEXT: [[SHL12:%[0-9]+]]:_(i64) = G_SHL [[COPY2]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP44:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB8:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR9:%[0-9]+]]:_(i64) = G_LSHR [[COPY1]], [[SUB8]](i64)
+    ; CHECK-NEXT: [[SELECT46:%[0-9]+]]:_(i64) = G_SELECT [[ICMP44]](i32), [[C]], [[LSHR9]]
+    ; CHECK-NEXT: [[OR8:%[0-9]+]]:_(i64) = G_OR [[SHL12]], [[SELECT46]]
+    ; CHECK-NEXT: [[SELECT47:%[0-9]+]]:_(i64) = G_SELECT [[ICMP43]](i32), [[OR8]], [[SELECT45]]
+    ; CHECK-NEXT: [[ICMP45:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C5]]
+    ; CHECK-NEXT: [[SHL13:%[0-9]+]]:_(i64) = G_SHL [[COPY1]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP46:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB9:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR10:%[0-9]+]]:_(i64) = G_LSHR [[COPY]], [[SUB9]](i64)
+    ; CHECK-NEXT: [[SELECT48:%[0-9]+]]:_(i64) = G_SELECT [[ICMP46]](i32), [[C]], [[LSHR10]]
+    ; CHECK-NEXT: [[OR9:%[0-9]+]]:_(i64) = G_OR [[SHL13]], [[SELECT48]]
+    ; CHECK-NEXT: [[SELECT49:%[0-9]+]]:_(i64) = G_SELECT [[ICMP45]](i32), [[OR9]], [[SELECT47]]
+    ; CHECK-NEXT: [[ICMP47:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C6]]
+    ; CHECK-NEXT: [[SHL14:%[0-9]+]]:_(i64) = G_SHL [[COPY]], [[AND]](i64)
+    ; CHECK-NEXT: [[SELECT50:%[0-9]+]]:_(i64) = G_SELECT [[ICMP47]](i32), [[SHL14]], [[SELECT49]]
+    ; CHECK-NEXT: [[ICMP48:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C7]]
+    ; CHECK-NEXT: [[SELECT51:%[0-9]+]]:_(i64) = G_SELECT [[ICMP48]](i32), [[C]], [[SELECT50]]
+    ; CHECK-NEXT: [[ICMP49:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C1]]
+    ; CHECK-NEXT: [[SELECT52:%[0-9]+]]:_(i64) = G_SELECT [[ICMP49]](i32), [[C]], [[SELECT51]]
+    ; CHECK-NEXT: [[ICMP50:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C8]]
+    ; CHECK-NEXT: [[SELECT53:%[0-9]+]]:_(i64) = G_SELECT [[ICMP50]](i32), [[C]], [[SELECT52]]
+    ; CHECK-NEXT: [[SELECT54:%[0-9]+]]:_(i64) = G_SELECT [[ICMP]](i32), [[COPY4]], [[SELECT53]]
+    ; CHECK-NEXT: [[ICMP51:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL15:%[0-9]+]]:_(i64) = G_SHL [[COPY5]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP52:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB10:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR11:%[0-9]+]]:_(i64) = G_LSHR [[COPY4]], [[SUB10]](i64)
+    ; CHECK-NEXT: [[SELECT55:%[0-9]+]]:_(i64) = G_SELECT [[ICMP52]](i32), [[C]], [[LSHR11]]
+    ; CHECK-NEXT: [[OR10:%[0-9]+]]:_(i64) = G_OR [[SHL15]], [[SELECT55]]
+    ; CHECK-NEXT: [[SELECT56:%[0-9]+]]:_(i64) = G_SELECT [[ICMP51]](i32), [[OR10]], [[C]]
+    ; CHECK-NEXT: [[ICMP53:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C3]]
+    ; CHECK-NEXT: [[SHL16:%[0-9]+]]:_(i64) = G_SHL [[COPY4]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP54:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB11:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR12:%[0-9]+]]:_(i64) = G_LSHR [[COPY3]], [[SUB11]](i64)
+    ; CHECK-NEXT: [[SELECT57:%[0-9]+]]:_(i64) = G_SELECT [[ICMP54]](i32), [[C]], [[LSHR12]]
+    ; CHECK-NEXT: [[OR11:%[0-9]+]]:_(i64) = G_OR [[SHL16]], [[SELECT57]]
+    ; CHECK-NEXT: [[SELECT58:%[0-9]+]]:_(i64) = G_SELECT [[ICMP53]](i32), [[OR11]], [[SELECT56]]
+    ; CHECK-NEXT: [[ICMP55:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C4]]
+    ; CHECK-NEXT: [[SHL17:%[0-9]+]]:_(i64) = G_SHL [[COPY3]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP56:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB12:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR13:%[0-9]+]]:_(i64) = G_LSHR [[COPY2]], [[SUB12]](i64)
+    ; CHECK-NEXT: [[SELECT59:%[0-9]+]]:_(i64) = G_SELECT [[ICMP56]](i32), [[C]], [[LSHR13]]
+    ; CHECK-NEXT: [[OR12:%[0-9]+]]:_(i64) = G_OR [[SHL17]], [[SELECT59]]
+    ; CHECK-NEXT: [[SELECT60:%[0-9]+]]:_(i64) = G_SELECT [[ICMP55]](i32), [[OR12]], [[SELECT58]]
+    ; CHECK-NEXT: [[ICMP57:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C5]]
+    ; CHECK-NEXT: [[SHL18:%[0-9]+]]:_(i64) = G_SHL [[COPY2]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP58:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB13:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR14:%[0-9]+]]:_(i64) = G_LSHR [[COPY1]], [[SUB13]](i64)
+    ; CHECK-NEXT: [[SELECT61:%[0-9]+]]:_(i64) = G_SELECT [[ICMP58]](i32), [[C]], [[LSHR14]]
+    ; CHECK-NEXT: [[OR13:%[0-9]+]]:_(i64) = G_OR [[SHL18]], [[SELECT61]]
+    ; CHECK-NEXT: [[SELECT62:%[0-9]+]]:_(i64) = G_SELECT [[ICMP57]](i32), [[OR13]], [[SELECT60]]
+    ; CHECK-NEXT: [[ICMP59:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C6]]
+    ; CHECK-NEXT: [[SHL19:%[0-9]+]]:_(i64) = G_SHL [[COPY1]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP60:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB14:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR15:%[0-9]+]]:_(i64) = G_LSHR [[COPY]], [[SUB14]](i64)
+    ; CHECK-NEXT: [[SELECT63:%[0-9]+]]:_(i64) = G_SELECT [[ICMP60]](i32), [[C]], [[LSHR15]]
+    ; CHECK-NEXT: [[OR14:%[0-9]+]]:_(i64) = G_OR [[SHL19]], [[SELECT63]]
+    ; CHECK-NEXT: [[SELECT64:%[0-9]+]]:_(i64) = G_SELECT [[ICMP59]](i32), [[OR14]], [[SELECT62]]
+    ; CHECK-NEXT: [[ICMP61:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C7]]
+    ; CHECK-NEXT: [[SHL20:%[0-9]+]]:_(i64) = G_SHL [[COPY]], [[AND]](i64)
+    ; CHECK-NEXT: [[SELECT65:%[0-9]+]]:_(i64) = G_SELECT [[ICMP61]](i32), [[SHL20]], [[SELECT64]]
+    ; CHECK-NEXT: [[ICMP62:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C1]]
+    ; CHECK-NEXT: [[SELECT66:%[0-9]+]]:_(i64) = G_SELECT [[ICMP62]](i32), [[C]], [[SELECT65]]
+    ; CHECK-NEXT: [[ICMP63:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C8]]
+    ; CHECK-NEXT: [[SELECT67:%[0-9]+]]:_(i64) = G_SELECT [[ICMP63]](i32), [[C]], [[SELECT66]]
+    ; CHECK-NEXT: [[SELECT68:%[0-9]+]]:_(i64) = G_SELECT [[ICMP]](i32), [[COPY5]], [[SELECT67]]
+    ; CHECK-NEXT: [[ICMP64:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[LSHR]](i64), [[C]]
+    ; CHECK-NEXT: [[SHL21:%[0-9]+]]:_(i64) = G_SHL [[COPY6]], [[AND]](i64)
+    ; CHECK-NEXT: [[ICMP65:%[0-9]+]]:_(i32) = G_ICMP intpred(eq), [[AND]](i64), [[C]]
+    ; CHECK-NEXT: [[SUB15:%[0-9]+]]:_(i64) = G_SUB [[C9]], [[AND]]
+    ; CHECK-NEXT: [[LSHR16:%[0-9]+]]:_(i64) = G_LSHR [[COPY5]], [[SUB15]](i64)
+    ; CHECK-NEXT: [[SELECT69:%[0-9]+]]:_(i64) = G_SELECT [[ICMP65]](i32), [[C]], [[LSHR16]]
+    ; CHECK-NEXT: [[OR15:%[0-9]+]]:_(i64) = G_OR [[SHL21]], [[SELECT69]]
+...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/222257


More information about the llvm-commits mailing list