@@ -2794,3 +2794,32 @@ BB4: ; preds = %BB3, %BB2, %BB1, %BB
27942794BB5: ; preds = %BB4
27952795 ret void
27962796}
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