diff --git a/llvm/test/Transforms/InstCombine/freeze-phi.ll b/llvm/test/Transforms/InstCombine/freeze-phi.ll index fcda502a0d7f8f..430c2d2e8fe666 100644 --- a/llvm/test/Transforms/InstCombine/freeze-phi.ll +++ b/llvm/test/Transforms/InstCombine/freeze-phi.ll @@ -20,7 +20,52 @@ B: C: %y = phi i32 [0, %A], [1, %B] %y.fr = freeze i32 %y - ret i32 %y + ret i32 %y.fr +} + +define <2 x i32> @vec(i1 %cond) { +; CHECK-LABEL: @vec( +; CHECK-NEXT: br i1 [[COND:%.*]], label [[A:%.*]], label [[B:%.*]] +; CHECK: A: +; CHECK-NEXT: br label [[C:%.*]] +; CHECK: B: +; CHECK-NEXT: br label [[C]] +; CHECK: C: +; CHECK-NEXT: [[Y:%.*]] = phi <2 x i32> [ , [[A]] ], [ , [[B]] ] +; CHECK-NEXT: ret <2 x i32> [[Y]] +; + br i1 %cond, label %A, label %B +A: + br label %C +B: + br label %C +C: + %y = phi <2 x i32> [, %A], [, %B] + %y.fr = freeze <2 x i32> %y + ret <2 x i32> %y.fr +} + +define <2 x i32> @vec_undef(i1 %cond) { +; CHECK-LABEL: @vec_undef( +; CHECK-NEXT: br i1 [[COND:%.*]], label [[A:%.*]], label [[B:%.*]] +; CHECK: A: +; CHECK-NEXT: br label [[C:%.*]] +; CHECK: B: +; CHECK-NEXT: br label [[C]] +; CHECK: C: +; CHECK-NEXT: [[Y:%.*]] = phi <2 x i32> [ , [[A]] ], [ , [[B]] ] +; CHECK-NEXT: [[Y_FR:%.*]] = freeze <2 x i32> [[Y]] +; CHECK-NEXT: ret <2 x i32> [[Y_FR]] +; + br i1 %cond, label %A, label %B +A: + br label %C +B: + br label %C +C: + %y = phi <2 x i32> [, %A], [, %B] + %y.fr = freeze <2 x i32> %y + ret <2 x i32> %y.fr } define i32 @one(i1 %cond, i32 %x) {