; CHECK: getelementptr{{.*}}i64 1
; CHECK: exit:
}
+
+@.str.4 = external unnamed_addr constant [100 x i8], align 1
+
+; Instcombine shouldn't add new PHI nodes while folding GEPs if that will leave
+; old PHI nodes behind as this is not clearly beneficial.
+; CHECK-LABEL: @test5(
+define void @test5(i16 *%idx, i8 **%in) #0 {
+entry:
+ %0 = load i8*, i8** %in
+ %incdec.ptr = getelementptr inbounds i8, i8* %0, i32 1
+ %1 = load i8, i8* %incdec.ptr, align 1
+ %cmp23 = icmp eq i8 %1, 54
+ br i1 %cmp23, label %while.cond, label %if.then.25
+
+if.then.25:
+ call void @g(i8* getelementptr inbounds ([100 x i8], [100 x i8]* @.str.4, i32 0, i32 0))
+ br label %while.cond
+
+while.cond:
+; CHECK-LABEL: while.cond
+; CHECK-NOT: phi i8* [ %0, %entry ], [ %Ptr, %while.body ], [ %0, %if.then.25 ]
+ %Ptr = phi i8* [ %incdec.ptr, %entry ], [ %incdec.ptr32, %while.body], [%incdec.ptr, %if.then.25 ]
+ %2 = load i8, i8* %Ptr
+ %and = and i8 %2, 64
+ %lnot = icmp eq i8 %and, 0
+ br i1 %lnot, label %while.body, label %while.cond.33
+
+while.body:
+ %incdec.ptr32 = getelementptr inbounds i8, i8* %Ptr, i32 1
+ br label %while.cond
+
+while.cond.33:
+ %incdec.ptr34 = getelementptr inbounds i8, i8* %Ptr, i32 1
+ br label %while.cond.57
+
+while.cond.57:
+ %3 = load i8, i8* %incdec.ptr34, align 1
+ %conv59 = zext i8 %3 to i32
+ %arrayidx61 = getelementptr inbounds i16, i16* %idx, i32 %conv59
+ %4 = load i16, i16* %arrayidx61, align 2
+ %and63 = and i16 %4, 2048
+ %tobool64 = icmp eq i16 %and63, 0
+ br i1 %tobool64, label %while.cond.73, label %while.cond.57
+
+while.cond.73:
+ br label %while.cond.73
+
+}
+
+declare void @g(i8*)