[llvm] [InstCombine] Canonicalize gep scaling factor (PR #180216)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 2 07:47:48 PST 2026


================
@@ -322,9 +341,10 @@ define ptr @gep_not_inbounds_sext_add_nonneg(ptr %ptr, i32 %a) {
 ; CHECK-SAME: ptr [[PTR:%.*]], i32 [[A:%.*]]) {
 ; CHECK-NEXT:    [[A_NNEG:%.*]] = icmp sgt i32 [[A]], -1
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[A_NNEG]])
-; CHECK-NEXT:    [[TMP1:%.*]] = zext nneg i32 [[A]] to i64
-; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i32, ptr [[PTR]], i64 [[TMP1]]
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[TMP2]], i64 40
+; CHECK-NEXT:    [[ADD:%.*]] = add nuw nsw i32 [[A]], 10
+; CHECK-NEXT:    [[IDX:%.*]] = zext nneg i32 [[ADD]] to i64
+; CHECK-NEXT:    [[TMP1:%.*]] = shl nuw nsw i64 [[IDX]], 2
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[PTR]], i64 [[TMP1]]
----------------
nikic wrote:

Various cases here where we no longer convert gep of add to gep of gep because there is a shl between them now.

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


More information about the llvm-commits mailing list