@@ -481,3 +481,32 @@ define i16 @load_select_with_null_gep3(i1 %cond, ptr %p, i64 %x, i64 %y) {
481
481
%res = load i16 , ptr %gep2 , align 2
482
482
ret i16 %res
483
483
}
484
+
485
+ define i32 @test_load_phi_with_select (ptr %p , i1 %cond1 ) {
486
+ ; CHECK-LABEL: @test_load_phi_with_select(
487
+ ; CHECK-NEXT: entry:
488
+ ; CHECK-NEXT: br label [[LOOP_BODY:%.*]]
489
+ ; CHECK: loop.body:
490
+ ; CHECK-NEXT: [[BASE:%.*]] = phi ptr [ [[P1:%.*]], [[ENTRY:%.*]] ], [ [[P:%.*]], [[LOOP_BODY]] ]
491
+ ; CHECK-NEXT: [[TARGET:%.*]] = getelementptr inbounds nuw i8, ptr [[BASE]], i64 24
492
+ ; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr [[TARGET]], align 4
493
+ ; CHECK-NEXT: [[P]] = select i1 [[COND1:%.*]], ptr null, ptr [[P1]]
494
+ ; CHECK-NEXT: [[COND21:%.*]] = icmp eq i32 [[LOAD]], 0
495
+ ; CHECK-NEXT: br i1 [[COND21]], label [[LOOP_BODY]], label [[EXIT:%.*]]
496
+ ; CHECK: exit:
497
+ ; CHECK-NEXT: ret i32 [[LOAD]]
498
+ ;
499
+ entry:
500
+ br label %loop.body
501
+
502
+ loop.body:
503
+ %base = phi ptr [ %p , %entry ], [ %sel , %loop.body ]
504
+ %target = getelementptr inbounds i8 , ptr %base , i64 24
505
+ %load = load i32 , ptr %target , align 4
506
+ %sel = select i1 %cond1 , ptr null , ptr %p
507
+ %cond2 = icmp eq i32 %load , 0
508
+ br i1 %cond2 , label %loop.body , label %exit
509
+
510
+ exit:
511
+ ret i32 %load
512
+ }
0 commit comments