[llvm] [InstCombine] Split GEPs with multiple variable indices (PR #137297)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 25 01:58:37 PDT 2025


================
@@ -1141,10 +1141,12 @@ define i64 @test59(ptr %foo, i64 %i) {
 
 define i64 @test60(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @test60(
-; CHECK-NEXT:    [[GEP1_IDX:%.*]] = mul nsw i64 [[J:%.*]], 100
-; CHECK-NEXT:    [[GEP1_OFFS:%.*]] = add nsw i64 [[GEP1_IDX]], [[I:%.*]]
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[FOO:%.*]], i64 [[GEP1_OFFS]]
-; CHECK-NEXT:    [[GEPDIFF:%.*]] = add nsw i64 [[GEP1_OFFS]], -4200
+; CHECK-NEXT:    [[GEP1_SPLIT:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO:%.*]], i64 0, i64 [[J:%.*]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x i8], ptr [[GEP1_SPLIT]], i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds nuw i8, ptr [[FOO]], i64 4200
+; CHECK-NEXT:    [[CAST1:%.*]] = ptrtoint ptr [[GEP1]] to i64
+; CHECK-NEXT:    [[CAST2:%.*]] = ptrtoint ptr [[GEP2]] to i64
+; CHECK-NEXT:    [[GEPDIFF:%.*]] = sub i64 [[CAST1]], [[CAST2]]
----------------
nikic wrote:

Similar here, but subtraction of gep and gep.

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


More information about the llvm-commits mailing list