Index: llvm/trunk/lib/CodeGen/MachinePipeliner.cpp =================================================================== --- llvm/trunk/lib/CodeGen/MachinePipeliner.cpp +++ llvm/trunk/lib/CodeGen/MachinePipeliner.cpp @@ -2430,7 +2430,7 @@ // Use the value defined by the Phi, unless we're generating the first // epilog and the Phi refers to a Phi in a different stage. else if (VRMap[PrevStage - np].count(Def) && - (!LoopDefIsPhi || PrevStage != LastStageNum)) + (!LoopDefIsPhi || (PrevStage != LastStageNum) || (LoopValStage == StageScheduled))) PhiOp2 = VRMap[PrevStage - np][Def]; } Index: llvm/trunk/test/CodeGen/PowerPC/sms-phi.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/sms-phi.ll +++ llvm/trunk/test/CodeGen/PowerPC/sms-phi.ll @@ -8,7 +8,7 @@ ;CHECK: epilog: ;CHECK: %23:g8rc_and_g8rc_nox0 = PHI %5:g8rc_and_g8rc_nox0, %bb.3, %18:g8rc_and_g8rc_nox0, %bb.4 ;CHECK-NEXT: %24:g8rc = PHI %6:g8rc, %bb.3, %16:g8rc, %bb.4 -;CHECK-NEXT: %25:g8rc = PHI %6:g8rc, %bb.3, %16:g8rc, %bb.4 +;CHECK-NEXT: %25:g8rc = PHI %6:g8rc, %bb.3, %19:g8rc, %bb.4 br label %1 1: ; preds = %1, %0