@@ -287,6 +287,38 @@ TEST_F(VPVerifierTest, BlockOutsideRegionWithParent) {
287287#endif
288288}
289289
290+ TEST_F (VPVerifierTest, NonHeaderPHIInHeader) {
291+ VPlan &Plan = getPlan ();
292+ VPValue *Zero = Plan.getOrAddLiveIn (ConstantInt::get (Type::getInt32Ty (C), 0 ));
293+ auto *CanIV = new VPCanonicalIVPHIRecipe (Zero, {});
294+ VPInstruction *BranchOnCond =
295+ new VPInstruction (VPInstruction::BranchOnCond, {CanIV});
296+
297+ VPBasicBlock *VPBB1 = Plan.getEntry ();
298+ VPBasicBlock *VPBB2 = Plan.createVPBasicBlock (" " );
299+
300+ VPBB2->appendRecipe (CanIV);
301+
302+ PHINode *PHINode = PHINode::Create (Type::getInt32Ty (C), 2 );
303+ VPIRPhi *IRPhi = new VPIRPhi (*PHINode);
304+ VPBB2->appendRecipe (IRPhi);
305+ VPBB2->appendRecipe (BranchOnCond);
306+
307+ VPRegionBlock *R1 = Plan.createVPRegionBlock (VPBB2, VPBB2, " R1" );
308+ VPBlockUtils::connectBlocks (VPBB1, R1);
309+ VPBlockUtils::connectBlocks (R1, Plan.getScalarHeader ());
310+
311+ #if GTEST_HAS_STREAM_REDIRECTION
312+ ::testing::internal::CaptureStderr ();
313+ #endif
314+ EXPECT_FALSE (verifyVPlanIsValid (Plan));
315+ #if GTEST_HAS_STREAM_REDIRECTION
316+ EXPECT_STREQ (
317+ " Found non-header PHI recipe in header VPBB: IR <badref> = phi i32 \n " ,
318+ ::testing::internal::GetCapturedStderr ().c_str());
319+ #endif
320+ }
321+
290322class VPIRVerifierTest : public VPlanTestIRBase {};
291323
292324TEST_F (VPIRVerifierTest, testVerifyIRPhi) {
0 commit comments