Index: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp =================================================================== --- llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -2476,9 +2476,9 @@ // Check implication. BasicBlockEdge Incoming(Pred, BB); if (DT.dominates(TrueEdge, Incoming)) - Inputs[Pred] = IfTrue; + Inputs[Pred] = IfTrue->DoPHITranslation(BB, Pred); else if (DT.dominates(FalseEdge, Incoming)) - Inputs[Pred] = IfFalse; + Inputs[Pred] = IfFalse->DoPHITranslation(BB, Pred); else return nullptr; // Check availability. Index: llvm/test/Transforms/InstCombine/select.ll =================================================================== --- llvm/test/Transforms/InstCombine/select.ll +++ llvm/test/Transforms/InstCombine/select.ll @@ -2000,7 +2000,6 @@ ret i32 %s } -; TODO: Replace with phi[x, z]. define i32 @select_phi_same_condition(i1 %cond, i32 %x, i32 %y, i32 %z) { ; CHECK-LABEL: @select_phi_same_condition( ; CHECK-NEXT: entry: @@ -2010,8 +2009,7 @@ ; CHECK: if.false: ; CHECK-NEXT: br label [[MERGE]] ; CHECK: merge: -; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[IF_TRUE]] ], [ [[Z:%.*]], [[IF_FALSE]] ] -; CHECK-NEXT: [[S:%.*]] = select i1 [[COND]], i32 [[X:%.*]], i32 [[PHI]] +; CHECK-NEXT: [[S:%.*]] = phi i32 [ [[Z:%.*]], [[IF_FALSE]] ], [ [[X:%.*]], [[IF_TRUE]] ] ; CHECK-NEXT: ret i32 [[S]] ; entry: