Skip to content

Commit 87d022a

Browse files
committed
[VPlan] Remove ResumePhi opcode, use regular PHI instead (NFC).
Use regular VPPhi instead of a separate opcode for resume phis. This removes an unneeded specialized opcode and unifies the code (verification, printing, updating when CFG is changed). Depends on llvm#140132.
1 parent f5757fe commit 87d022a

File tree

7 files changed

+47
-75
lines changed

7 files changed

+47
-75
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2376,8 +2376,8 @@ void InnerLoopVectorizer::introduceCheckBlockInVPlan(BasicBlock *CheckIRBB) {
23762376
// We just connected a new block to the scalar preheader. Update all
23772377
// ResumePhis by adding an incoming value for it, replicating the last value.
23782378
for (VPRecipeBase &R : *cast<VPBasicBlock>(ScalarPH)) {
2379-
auto *ResumePhi = dyn_cast<VPInstruction>(&R);
2380-
if (!ResumePhi || ResumePhi->getOpcode() != VPInstruction::ResumePhi)
2379+
auto *ResumePhi = cast<VPPhi>(&R);
2380+
if (ResumePhi->getNumIncoming() == ScalarPH->getNumPredecessors())
23812381
continue;
23822382
ResumePhi->addOperand(
23832383
ResumePhi->getOperand(ResumePhi->getNumOperands() - 1));
@@ -2524,7 +2524,8 @@ BasicBlock *InnerLoopVectorizer::emitMemRuntimeChecks(BasicBlock *Bypass) {
25242524
static void replaceVPBBWithIRVPBB(VPBasicBlock *VPBB, BasicBlock *IRBB) {
25252525
VPIRBasicBlock *IRVPBB = VPBB->getPlan()->createVPIRBasicBlock(IRBB);
25262526
for (auto &R : make_early_inc_range(*VPBB)) {
2527-
assert(!R.isPhi() && "Tried to move phi recipe to end of block");
2527+
assert((IRVPBB->empty() || IRVPBB->back().isPhi() || !R.isPhi()) &&
2528+
"Tried to move phi recipe to end of block");
25282529
R.moveBefore(*IRVPBB, IRVPBB->end());
25292530
}
25302531

@@ -7762,10 +7763,7 @@ static void fixReductionScalarResumeWhenVectorizingEpilog(
77627763
// created a bc.merge.rdx Phi after the main vector body. Ensure that we carry
77637764
// over the incoming values correctly.
77647765
using namespace VPlanPatternMatch;
7765-
auto IsResumePhi = [](VPUser *U) {
7766-
auto *VPI = dyn_cast<VPInstruction>(U);
7767-
return VPI && VPI->getOpcode() == VPInstruction::ResumePhi;
7768-
};
7766+
auto IsResumePhi = [](VPUser *U) { return isa<VPPhi>(U); };
77697767
assert(count_if(EpiRedResult->users(), IsResumePhi) == 1 &&
77707768
"ResumePhi must have a single user");
77717769
auto *EpiResumePhiVPI =
@@ -9140,9 +9138,8 @@ static VPInstruction *addResumePhiRecipeForInduction(
91409138
WideIV->getDebugLoc());
91419139
}
91429140

9143-
auto *ResumePhiRecipe =
9144-
ScalarPHBuilder.createNaryOp(VPInstruction::ResumePhi, {EndValue, Start},
9145-
WideIV->getDebugLoc(), "bc.resume.val");
9141+
auto *ResumePhiRecipe = ScalarPHBuilder.createScalarPhi(
9142+
{EndValue, Start}, WideIV->getDebugLoc(), "bc.resume.val");
91469143
return ResumePhiRecipe;
91479144
}
91489145

@@ -9171,8 +9168,7 @@ static void addScalarResumePhis(VPRecipeBuilder &Builder, VPlan &Plan,
91719168
if (VPInstruction *ResumePhi = addResumePhiRecipeForInduction(
91729169
WideIVR, VectorPHBuilder, ScalarPHBuilder, TypeInfo,
91739170
&Plan.getVectorTripCount())) {
9174-
assert(ResumePhi->getOpcode() == VPInstruction::ResumePhi &&
9175-
"Expected a ResumePhi");
9171+
assert(isa<VPPhi>(ResumePhi) && "Expected a phi");
91769172
IVEndValues[WideIVR] = ResumePhi->getOperand(0);
91779173
ScalarPhiIRI->addOperand(ResumePhi);
91789174
continue;
@@ -9197,8 +9193,7 @@ static void addScalarResumePhis(VPRecipeBuilder &Builder, VPlan &Plan,
91979193
VPInstruction::ExtractLastElement, {ResumeFromVectorLoop}, {},
91989194
"vector.recur.extract");
91999195
StringRef Name = IsFOR ? "scalar.recur.init" : "bc.merge.rdx";
9200-
auto *ResumePhiR = ScalarPHBuilder.createNaryOp(
9201-
VPInstruction::ResumePhi,
9196+
auto *ResumePhiR = ScalarPHBuilder.createScalarPhi(
92029197
{ResumeFromVectorLoop, VectorPhiR->getStartValue()}, {}, Name);
92039198
ScalarPhiIRI->addOperand(ResumePhiR);
92049199
}
@@ -10400,9 +10395,7 @@ static void preparePlanForMainVectorLoop(VPlan &MainPlan, VPlan &EpiPlan) {
1040010395
VPI->setOperand(1, Freeze);
1040110396
if (UpdateResumePhis)
1040210397
OrigStart->replaceUsesWithIf(Freeze, [Freeze](VPUser &U, unsigned) {
10403-
return Freeze != &U && isa<VPInstruction>(&U) &&
10404-
cast<VPInstruction>(&U)->getOpcode() ==
10405-
VPInstruction::ResumePhi;
10398+
return Freeze != &U && isa<VPPhi>(&U);
1040610399
});
1040710400
}
1040810401
};
@@ -10415,13 +10408,12 @@ static void preparePlanForMainVectorLoop(VPlan &MainPlan, VPlan &EpiPlan) {
1041510408
// scalar (which will become vector) epilogue loop we are done. Otherwise
1041610409
// create it below.
1041710410
if (any_of(*MainScalarPH, [VectorTC](VPRecipeBase &R) {
10418-
return match(&R, m_VPInstruction<VPInstruction::ResumePhi>(
10419-
m_Specific(VectorTC), m_SpecificInt(0)));
10411+
return match(&R, m_VPInstruction<Instruction::PHI>(m_Specific(VectorTC),
10412+
m_SpecificInt(0)));
1042010413
}))
1042110414
return;
1042210415
VPBuilder ScalarPHBuilder(MainScalarPH, MainScalarPH->begin());
10423-
ScalarPHBuilder.createNaryOp(
10424-
VPInstruction::ResumePhi,
10416+
ScalarPHBuilder.createScalarPhi(
1042510417
{VectorTC, MainPlan.getCanonicalIV()->getStartValue()}, {},
1042610418
"vec.epilog.resume.val");
1042710419
}

llvm/lib/Transforms/Vectorize/VPlan.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -887,11 +887,6 @@ class VPInstruction : public VPRecipeWithIRFlags,
887887
SLPStore,
888888
ActiveLaneMask,
889889
ExplicitVectorLength,
890-
/// Creates a scalar phi in a leaf VPBB with a single predecessor in VPlan.
891-
/// The first operand is the incoming value from the predecessor in VPlan,
892-
/// the second operand is the incoming value for all other predecessors
893-
/// (which are currently not modeled in VPlan).
894-
ResumePhi,
895890
CalculateTripCountMinusVF,
896891
// Increment the canonical IV separately for each unrolled part.
897892
CanonicalIVIncrementForPart,
@@ -1170,11 +1165,15 @@ struct VPPhi : public VPInstruction, public VPPhiAccessors {
11701165
VPPhi(ArrayRef<VPValue *> Operands, DebugLoc DL, const Twine &Name = "")
11711166
: VPInstruction(Instruction::PHI, Operands, DL, Name) {}
11721167

1173-
static inline bool classof(const VPRecipeBase *U) {
1168+
static inline bool classof(const VPUser *U) {
11741169
auto *R = dyn_cast<VPInstruction>(U);
11751170
return R && R->getOpcode() == Instruction::PHI;
11761171
}
11771172

1173+
VPPhi *clone() override {
1174+
return new VPPhi(operands(), getDebugLoc(), getName());
1175+
}
1176+
11781177
void execute(VPTransformState &State) override;
11791178

11801179
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)

llvm/lib/Transforms/Vectorize/VPlanAnalysis.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ Type *VPTypeAnalysis::inferScalarTypeForRecipe(const VPInstruction *R) {
101101
return inferScalarType(R->getOperand(0));
102102
case VPInstruction::FirstOrderRecurrenceSplice:
103103
case VPInstruction::Not:
104-
case VPInstruction::ResumePhi:
105104
case VPInstruction::CalculateTripCountMinusVF:
106105
case VPInstruction::CanonicalIVIncrementForPart:
107106
case VPInstruction::AnyOf:

llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -754,17 +754,6 @@ Value *VPInstruction::generate(VPTransformState &State) {
754754
Value *Addend = State.get(getOperand(1), VPLane(0));
755755
return Builder.CreatePtrAdd(Ptr, Addend, Name, getGEPNoWrapFlags());
756756
}
757-
case VPInstruction::ResumePhi: {
758-
auto *NewPhi =
759-
Builder.CreatePHI(State.TypeAnalysis.inferScalarType(this), 2, Name);
760-
for (const auto &[IncVPV, PredVPBB] :
761-
zip(operands(), getParent()->getPredecessors())) {
762-
Value *IncV = State.get(IncVPV, /* IsScalar */ true);
763-
BasicBlock *PredBB = State.CFG.VPBB2IRBB.at(cast<VPBasicBlock>(PredVPBB));
764-
NewPhi->addIncoming(IncV, PredBB);
765-
}
766-
return NewPhi;
767-
}
768757
case VPInstruction::AnyOf: {
769758
Value *A = State.get(getOperand(0));
770759
return Builder.CreateOrReduce(A);
@@ -863,8 +852,7 @@ bool VPInstruction::isVectorToScalar() const {
863852
}
864853

865854
bool VPInstruction::isSingleScalar() const {
866-
return getOpcode() == VPInstruction::ResumePhi ||
867-
getOpcode() == Instruction::PHI;
855+
return getOpcode() == Instruction::PHI;
868856
}
869857

870858
#if !defined(NDEBUG)
@@ -963,7 +951,6 @@ bool VPInstruction::onlyFirstLaneUsed(const VPValue *Op) const {
963951
case VPInstruction::CanonicalIVIncrementForPart:
964952
case VPInstruction::BranchOnCount:
965953
case VPInstruction::BranchOnCond:
966-
case VPInstruction::ResumePhi:
967954
return true;
968955
case VPInstruction::PtrAdd:
969956
return Op == getOperand(0) || vputils::onlyFirstLaneUsed(this);
@@ -1020,9 +1007,6 @@ void VPInstruction::print(raw_ostream &O, const Twine &Indent,
10201007
case VPInstruction::ActiveLaneMask:
10211008
O << "active lane mask";
10221009
break;
1023-
case VPInstruction::ResumePhi:
1024-
O << "resume-phi";
1025-
break;
10261010
case VPInstruction::ExplicitVectorLength:
10271011
O << "EXPLICIT-VECTOR-LENGTH";
10281012
break;
@@ -1130,15 +1114,16 @@ void VPInstructionWithType::print(raw_ostream &O, const Twine &Indent,
11301114

11311115
void VPPhi::execute(VPTransformState &State) {
11321116
State.setDebugLocFrom(getDebugLoc());
1133-
assert(getParent() ==
1134-
getParent()->getPlan()->getVectorLoopRegion()->getEntry() &&
1135-
"VPInstructions with PHI opcodes must be used for header phis only "
1136-
"at the moment");
1137-
BasicBlock *VectorPH = State.CFG.VPBB2IRBB.at(getIncomingBlock(0));
1138-
Value *Start = State.get(getIncomingValue(0), VPLane(0));
1139-
PHINode *Phi = State.Builder.CreatePHI(Start->getType(), 2, getName());
1140-
Phi->addIncoming(Start, VectorPH);
1141-
State.set(this, Phi, VPLane(0));
1117+
PHINode *NewPhi = State.Builder.CreatePHI(
1118+
State.TypeAnalysis.inferScalarType(this), 2, getName());
1119+
unsigned NumIncoming =
1120+
getParent()->getNumPredecessors() == 0 ? 1 : getNumIncoming();
1121+
for (unsigned Idx = 0; Idx != NumIncoming; ++Idx) {
1122+
Value *IncV = State.get(getIncomingValue(Idx), /* IsScalar */ true);
1123+
BasicBlock *PredBB = State.CFG.VPBB2IRBB.at(getIncomingBlock(Idx));
1124+
NewPhi->addIncoming(IncV, PredBB);
1125+
}
1126+
State.set(this, NewPhi, VPLane(0));
11421127
}
11431128

11441129
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,8 +1749,8 @@ static void removeBranchOnCondTrue(VPlan &Plan) {
17491749
!isa<PHINode>(cast<VPIRInstruction>(&R)->getInstruction())) &&
17501750
!isa<VPHeaderPHIRecipe>(&R) &&
17511751
"Cannot update VPIRInstructions wrapping phis or header phis yet");
1752-
auto *VPI = dyn_cast<VPInstruction>(&R);
1753-
if (!VPI || VPI->getOpcode() != VPInstruction::ResumePhi)
1752+
auto *VPI = dyn_cast<VPPhi>(&R);
1753+
if (!VPI)
17541754
break;
17551755
VPBuilder B(VPI);
17561756
SmallVector<VPValue *> NewOperands;
@@ -1760,9 +1760,8 @@ static void removeBranchOnCondTrue(VPlan &Plan) {
17601760
continue;
17611761
NewOperands.push_back(Op);
17621762
}
1763-
VPI->replaceAllUsesWith(B.createNaryOp(VPInstruction::ResumePhi,
1764-
NewOperands, VPI->getDebugLoc(),
1765-
VPI->getName()));
1763+
VPI->replaceAllUsesWith(
1764+
B.createScalarPhi(NewOperands, VPI->getDebugLoc(), VPI->getName()));
17661765
VPI->eraseFromParent();
17671766
}
17681767
// Disconnect blocks and remove the terminator. RemovedSucc will be deleted

llvm/lib/Transforms/Vectorize/VPlanVerifier.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,7 @@ bool VPlanVerifier::verifyVPBasicBlock(const VPBasicBlock *VPBB) {
245245
continue;
246246
}
247247
// TODO: Also verify VPPredInstPHIRecipe.
248-
if (isa<VPPredInstPHIRecipe>(UI) ||
249-
(isa<VPInstruction>(UI) && (cast<VPInstruction>(UI)->getOpcode() ==
250-
VPInstruction::ResumePhi)))
248+
if (isa<VPPredInstPHIRecipe>(UI))
251249
continue;
252250

253251
// If the user is in the same block, check it comes after R in the

llvm/test/Transforms/LoopVectorize/vplan-printing.ll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ define void @print_call_and_memory(i64 %n, ptr noalias %y, ptr noalias %x) nounw
4646
; CHECK-NEXT: No successors
4747
; CHECK-EMPTY:
4848
; CHECK-NEXT: scalar.ph
49-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
49+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<for.body.preheader> ]
5050
; CHECK-NEXT: Successor(s): ir-bb<for.body>
5151
; CHECK-EMPTY:
5252
; CHECK-NEXT: ir-bb<for.body>:
@@ -117,7 +117,7 @@ define void @print_widen_gep_and_select(i64 %n, ptr noalias %y, ptr noalias %x,
117117
; CHECK-NEXT: No successors
118118
; CHECK-EMPTY:
119119
; CHECK-NEXT: scalar.ph
120-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
120+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<for.body.preheader> ]
121121
; CHECK-NEXT: Successor(s): ir-bb<for.body>
122122
; CHECK-EMPTY:
123123
; CHECK-NEXT: ir-bb<for.body>:
@@ -206,7 +206,7 @@ define void @print_replicate_predicated_phi(i64 %n, ptr %x) {
206206
; CHECK-NEXT: No successors
207207
; CHECK-EMPTY:
208208
; CHECK-NEXT: scalar.ph
209-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
209+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
210210
; CHECK-NEXT: Successor(s): ir-bb<for.body>
211211
; CHECK-EMPTY:
212212
; CHECK-NEXT: ir-bb<for.body>:
@@ -289,7 +289,7 @@ define void @print_interleave_groups(i32 %C, i32 %D) {
289289
; CHECK-NEXT: No successors
290290
; CHECK-EMPTY:
291291
; CHECK-NEXT: scalar.ph
292-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[IV_END]]>, ir<0>
292+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[IV_END]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
293293
; CHECK-NEXT: Successor(s): ir-bb<for.body>
294294
; CHECK-EMPTY:
295295
; CHECK-NEXT: ir-bb<for.body>:
@@ -394,7 +394,7 @@ define void @debug_loc_vpinstruction(ptr nocapture %asd, ptr nocapture %bsd) !db
394394
; CHECK-NEXT: No successors
395395
; CHECK-EMPTY:
396396
; CHECK-NEXT: scalar.ph:
397-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
397+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
398398
; CHECK-NEXT: Successor(s): ir-bb<loop>
399399
; CHECK-EMPTY:
400400
; CHECK-NEXT: ir-bb<loop>:
@@ -479,7 +479,7 @@ define void @print_expand_scev(i64 %y, ptr %ptr) {
479479
; CHECK-NEXT: No successors
480480
; CHECK-EMPTY:
481481
; CHECK-NEXT: scalar.ph
482-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[IV_END]]>, ir<0>
482+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[IV_END]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
483483
; CHECK-NEXT: Successor(s): ir-bb<loop>
484484
; CHECK-EMPTY:
485485
; CHECK-NEXT: ir-bb<loop>:
@@ -548,7 +548,7 @@ define i32 @print_exit_value(ptr %ptr, i32 %off) {
548548
; CHECK-NEXT: No successors
549549
; CHECK-EMPTY:
550550
; CHECK-NEXT: scalar.ph
551-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
551+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
552552
; CHECK-NEXT: Successor(s): ir-bb<loop>
553553
; CHECK-EMPTY:
554554
; CHECK-NEXT: ir-bb<loop>:
@@ -616,7 +616,7 @@ define void @print_fast_math_flags(i64 %n, ptr noalias %y, ptr noalias %x, ptr %
616616
; CHECK-NEXT: No successors
617617
; CHECK-EMPTY:
618618
; CHECK-NEXT: scalar.ph
619-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
619+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
620620
; CHECK-NEXT: Successor(s): ir-bb<loop>
621621
; CHECK-EMPTY:
622622
; CHECK-NEXT: ir-bb<loop>:
@@ -686,7 +686,7 @@ define void @print_exact_flags(i64 %n, ptr noalias %x) {
686686
; CHECK-NEXT: No successors
687687
; CHECK-EMPTY:
688688
; CHECK-NEXT: scalar.ph
689-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
689+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
690690
; CHECK-NEXT: Successor(s): ir-bb<loop>
691691
; CHECK-EMPTY:
692692
; CHECK-NEXT: ir-bb<loop>:
@@ -776,7 +776,7 @@ define void @print_call_flags(ptr readonly %src, ptr noalias %dest, i64 %n) {
776776
; CHECK-NEXT: No successors
777777
; CHECK-EMPTY:
778778
; CHECK-NEXT: scalar.ph
779-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
779+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
780780
; CHECK-NEXT: Successor(s): ir-bb<for.body>
781781
; CHECK-EMPTY:
782782
; CHECK-NEXT: ir-bb<for.body>:
@@ -855,7 +855,7 @@ define void @print_disjoint_flags(i64 %n, ptr noalias %x) {
855855
; CHECK-NEXT: No successors
856856
; CHECK-EMPTY:
857857
; CHECK-NEXT: scalar.ph
858-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
858+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
859859
; CHECK-NEXT: Successor(s): ir-bb<loop>
860860
; CHECK-EMPTY:
861861
; CHECK-NEXT: ir-bb<loop>:
@@ -972,8 +972,8 @@ define i16 @print_first_order_recurrence_and_result(ptr %ptr) {
972972
; CHECK-NEXT: No successors
973973
; CHECK-EMPTY:
974974
; CHECK-NEXT: scalar.ph
975-
; CHECK-NEXT: EMIT vp<[[RESUME_P:%.*]]> = resume-phi vp<[[RESUME_1]]>, ir<22>
976-
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = resume-phi vp<[[VTC]]>, ir<0>
975+
; CHECK-NEXT: EMIT vp<[[RESUME_P:%.*]]> = phi [ vp<[[RESUME_1]]>, middle.block ], [ ir<22>, ir-bb<entry> ]
976+
; CHECK-NEXT: EMIT vp<[[RESUME_IV:%.+]]> = phi [ vp<[[VTC]]>, middle.block ], [ ir<0>, ir-bb<entry> ]
977977
; CHECK-NEXT: Successor(s): ir-bb<loop>
978978
; CHECK-EMPTY:
979979
; CHECK-NEXT: ir-bb<loop>:

0 commit comments

Comments
 (0)