@@ -2794,3 +2794,32 @@ BB4: ; preds = %BB3, %BB2, %BB1, %BB
2794
2794
BB5: ; preds = %BB4
2795
2795
ret void
2796
2796
}
2797
+
2798
+ ; FIXME: This is a miscompilation.
2799
+ define i64 @wrong_gep_arg_into_phi (ptr noundef %ptr ) {
2800
+ ; CHECK-LABEL: @wrong_gep_arg_into_phi(
2801
+ ; CHECK-NEXT: entry:
2802
+ ; CHECK-NEXT: br label [[FOR_COND:%.*]]
2803
+ ; CHECK: for.cond:
2804
+ ; CHECK-NEXT: [[PTR_PN:%.*]] = phi ptr [ [[PTR:%.*]], [[ENTRY:%.*]] ], [ [[DOTPN:%.*]], [[FOR_COND]] ]
2805
+ ; CHECK-NEXT: [[DOTPN]] = getelementptr inbounds nuw i8, ptr [[PTR_PN]], i64 1
2806
+ ; CHECK-NEXT: [[VAL:%.*]] = load i8, ptr [[DOTPN]], align 1
2807
+ ; CHECK-NEXT: [[COND_NOT:%.*]] = icmp eq i8 [[VAL]], 0
2808
+ ; CHECK-NEXT: br i1 [[COND_NOT]], label [[EXIT:%.*]], label [[FOR_COND]]
2809
+ ; CHECK: exit:
2810
+ ; CHECK-NEXT: ret i64 0
2811
+ ;
2812
+ entry:
2813
+ %add.ptr = getelementptr i8 , ptr %ptr , i64 1
2814
+ br label %for.cond
2815
+
2816
+ for.cond: ; preds = %for.cond, %entry
2817
+ %.pn = phi ptr [ %add.ptr , %entry ], [ %incdec.ptr , %for.cond ]
2818
+ %val = load i8 , ptr %.pn , align 1
2819
+ %cond = icmp ne i8 %val , 0
2820
+ %incdec.ptr = getelementptr inbounds nuw i8 , ptr %.pn , i64 1
2821
+ br i1 %cond , label %for.cond , label %exit
2822
+
2823
+ exit: ; preds = %for.cond
2824
+ ret i64 0
2825
+ }
0 commit comments