@@ -48,16 +48,19 @@ TEST_F(VPlanHCFGTest, testBuildHCFGInnerLoop) {
4848 EXPECT_EQ (0u , Entry->getNumPredecessors ());
4949 EXPECT_EQ (1u , Entry->getNumSuccessors ());
5050
51- // Check that the region following the preheader is a single basic- block
52- // region (loop) .
51+ // Check that the region following the preheader consists of a block for the
52+ // original header and a separate latch .
5353 VPBasicBlock *VecBB = Plan->getVectorLoopRegion ()->getEntryBasicBlock ();
54- EXPECT_EQ (8u , VecBB->size ());
54+ EXPECT_EQ (7u , VecBB->size ());
5555 EXPECT_EQ (0u , VecBB->getNumPredecessors ());
56- EXPECT_EQ (0u , VecBB->getNumSuccessors ());
56+ EXPECT_EQ (1u , VecBB->getNumSuccessors ());
5757 EXPECT_EQ (VecBB->getParent ()->getEntryBasicBlock (), VecBB);
58- EXPECT_EQ (VecBB->getParent ()->getExitingBasicBlock (), VecBB);
5958 EXPECT_EQ (&*Plan, VecBB->getPlan ());
6059
60+ VPBlockBase *VecLatch = VecBB->getSingleSuccessor ();
61+ EXPECT_EQ (VecLatch->getParent ()->getExitingBasicBlock (), VecLatch);
62+ EXPECT_EQ (0u , VecLatch->getNumSuccessors ());
63+
6164 auto Iter = VecBB->begin ();
6265 VPWidenPHIRecipe *Phi = dyn_cast<VPWidenPHIRecipe>(&*Iter++);
6366 EXPECT_NE (nullptr , Phi);
@@ -127,29 +130,33 @@ compound=true
127130 " EMIT store ir\<%res\>, ir\<%arr.idx\>\l" +
128131 " EMIT ir\<%indvars.iv.next\> = add ir\<%indvars.iv\>, ir\<1\>\l" +
129132 " EMIT ir\<%exitcond\> = icmp ir\<%indvars.iv.next\>, ir\<%N\>\l" +
130- " EMIT branch-on-cond ir\<%exitcond\>\l" +
133+ "Successor(s): vector.latch\l"
134+ ]
135+ N2 -> N4 [ label=""]
136+ N4 [label =
137+ "vector.latch:\l" +
131138 "No successors\l"
132139 ]
133140 }
134- N2 -> N4 [ label="" ltail=cluster_N3]
135- N4 [label =
141+ N4 -> N5 [ label="" ltail=cluster_N3]
142+ N5 [label =
136143 "middle.block:\l" +
137144 " EMIT vp\<%cmp.n\> = icmp eq ir\<%N\>, vp\<%0\>\l" +
138145 " EMIT branch-on-cond vp\<%cmp.n\>\l" +
139146 "Successor(s): ir-bb\<for.end\>, scalar.ph\l"
140147 ]
141- N4 -> N5 [ label="T"]
142- N4 -> N6 [ label="F"]
143- N5 [label =
148+ N5 -> N6 [ label="T"]
149+ N5 -> N7 [ label="F"]
150+ N6 [label =
144151 "ir-bb\<for.end\>:\l" +
145152 "No successors\l"
146153 ]
147- N6 [label =
154+ N7 [label =
148155 "scalar.ph:\l" +
149156 "Successor(s): ir-bb\<for.body\>\l"
150157 ]
151- N6 -> N7 [ label=""]
152- N7 [label =
158+ N7 -> N8 [ label=""]
159+ N8 [label =
153160 "ir-bb\<for.body\>:\l" +
154161 " IR %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]\l" +
155162 " IR %arr.idx = getelementptr inbounds i32, ptr %A, i64 %indvars.iv\l" +
@@ -204,14 +211,17 @@ TEST_F(VPlanHCFGTest, testVPInstructionToVPRecipesInner) {
204211 EXPECT_EQ (0u , Entry->getNumPredecessors ());
205212 EXPECT_EQ (1u , Entry->getNumSuccessors ());
206213
207- // Check that the region following the preheader is a single basic- block
208- // region (loop) .
214+ // Check that the region following the preheader consists of a block for the
215+ // original header and a separate latch .
209216 VPBasicBlock *VecBB = Plan->getVectorLoopRegion ()->getEntryBasicBlock ();
210- EXPECT_EQ (8u , VecBB->size ());
217+ EXPECT_EQ (7u , VecBB->size ());
211218 EXPECT_EQ (0u , VecBB->getNumPredecessors ());
212- EXPECT_EQ (0u , VecBB->getNumSuccessors ());
219+ EXPECT_EQ (1u , VecBB->getNumSuccessors ());
213220 EXPECT_EQ (VecBB->getParent ()->getEntryBasicBlock (), VecBB);
214- EXPECT_EQ (VecBB->getParent ()->getExitingBasicBlock (), VecBB);
221+
222+ VPBlockBase *VecLatch = VecBB->getSingleSuccessor ();
223+ EXPECT_EQ (VecLatch->getParent ()->getExitingBasicBlock (), VecLatch);
224+ EXPECT_EQ (0u , VecLatch->getNumSuccessors ());
215225
216226 auto Iter = VecBB->begin ();
217227 EXPECT_NE (nullptr , dyn_cast<VPWidenPHIRecipe>(&*Iter++));
@@ -221,7 +231,6 @@ TEST_F(VPlanHCFGTest, testVPInstructionToVPRecipesInner) {
221231 EXPECT_NE (nullptr , dyn_cast<VPWidenMemoryRecipe>(&*Iter++));
222232 EXPECT_NE (nullptr , dyn_cast<VPWidenRecipe>(&*Iter++));
223233 EXPECT_NE (nullptr , dyn_cast<VPWidenRecipe>(&*Iter++));
224- EXPECT_NE (nullptr , dyn_cast<VPInstruction>(&*Iter++));
225234 EXPECT_EQ (VecBB->end (), Iter);
226235}
227236
0 commit comments