@@ -451,3 +451,33 @@ define i32 @load_select_with_null_gep(i1 %cond, ptr %p, i64 %off) {
451
451
%res = load i32 , ptr %gep , align 4
452
452
ret i32 %res
453
453
}
454
+
455
+ define i16 @load_select_with_null_gep2 (i1 %cond , ptr %p , i64 %x ) {
456
+ ; CHECK-LABEL: @load_select_with_null_gep2(
457
+ ; CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[SEL:%.*]], i64 -2
458
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr [[INVARIANT_GEP]], i64 [[X:%.*]]
459
+ ; CHECK-NEXT: [[RES:%.*]] = load i16, ptr [[GEP]], align 2
460
+ ; CHECK-NEXT: ret i16 [[RES]]
461
+ ;
462
+ %sel = select i1 %cond , ptr %p , ptr null
463
+ %invariant.gep = getelementptr i8 , ptr %sel , i64 -2
464
+ %gep = getelementptr i16 , ptr %invariant.gep , i64 %x
465
+ %res = load i16 , ptr %gep , align 2
466
+ ret i16 %res
467
+ }
468
+
469
+ define i16 @load_select_with_null_gep3 (i1 %cond , ptr %p , i64 %x , i64 %y ) {
470
+ ; CHECK-LABEL: @load_select_with_null_gep3(
471
+ ; CHECK-NEXT: [[INVARIANT_GEP:%.*]] = getelementptr i8, ptr [[SEL:%.*]], i64 -2
472
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr [[INVARIANT_GEP]], i64 [[X:%.*]]
473
+ ; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i16, ptr [[GEP]], i64 [[Y:%.*]]
474
+ ; CHECK-NEXT: [[RES:%.*]] = load i16, ptr [[GEP2]], align 2
475
+ ; CHECK-NEXT: ret i16 [[RES]]
476
+ ;
477
+ %sel = select i1 %cond , ptr %p , ptr null
478
+ %invariant.gep = getelementptr i8 , ptr %sel , i64 -2
479
+ %gep = getelementptr i16 , ptr %invariant.gep , i64 %x
480
+ %gep2 = getelementptr i16 , ptr %gep , i64 %y
481
+ %res = load i16 , ptr %gep2 , align 2
482
+ ret i16 %res
483
+ }
0 commit comments