Skip to content

Commit 626b40c

Browse files
committed
LoopRotate: don't verify the optimized function within the pass
With the new re-borrow flag computation, verification can fail before the re-borrow flags are updated at the end of the pass.
1 parent 7bf0010 commit 626b40c

File tree

1 file changed

+6
-14
lines changed

1 file changed

+6
-14
lines changed

lib/SILOptimizer/LoopTransforms/LoopRotate.cpp

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static llvm::cl::opt<bool> RotateSingleBlockLoop("looprotate-single-block-loop",
4646

4747
static bool rotateLoop(SILLoop *loop, DominanceInfo *domInfo,
4848
SILLoopInfo *loopInfo, bool rotateSingleBlockLoops,
49-
SILBasicBlock *upToBB, bool shouldVerify);
49+
SILBasicBlock *upToBB);
5050

5151
/// Check whether all operands are loop invariant.
5252
static bool
@@ -252,8 +252,7 @@ static void updateDomTree(DominanceInfo *domInfo, SILBasicBlock *preheader,
252252
}
253253

254254
static bool rotateLoopAtMostUpToLatch(SILLoop *loop, DominanceInfo *domInfo,
255-
SILLoopInfo *loopInfo,
256-
bool ShouldVerify) {
255+
SILLoopInfo *loopInfo) {
257256
auto *latch = loop->getLoopLatch();
258257
if (!latch) {
259258
LLVM_DEBUG(llvm::dbgs()
@@ -263,11 +262,11 @@ static bool rotateLoopAtMostUpToLatch(SILLoop *loop, DominanceInfo *domInfo,
263262

264263
bool didRotate = rotateLoop(
265264
loop, domInfo, loopInfo,
266-
RotateSingleBlockLoop /* rotateSingleBlockLoops */, latch, ShouldVerify);
265+
RotateSingleBlockLoop /* rotateSingleBlockLoops */, latch);
267266

268267
// Keep rotating at most until we hit the original latch.
269268
if (didRotate)
270-
while (rotateLoop(loop, domInfo, loopInfo, false, latch, ShouldVerify)) {
269+
while (rotateLoop(loop, domInfo, loopInfo, false, latch)) {
271270
}
272271

273272
return didRotate;
@@ -316,7 +315,7 @@ static bool isSingleBlockLoop(SILLoop *L) {
316315
/// loop for termination.
317316
static bool rotateLoop(SILLoop *loop, DominanceInfo *domInfo,
318317
SILLoopInfo *loopInfo, bool rotateSingleBlockLoops,
319-
SILBasicBlock *upToBB, bool shouldVerify) {
318+
SILBasicBlock *upToBB) {
320319
assert(loop != nullptr && domInfo != nullptr && loopInfo != nullptr
321320
&& "Missing loop information");
322321

@@ -465,12 +464,6 @@ static bool rotateLoop(SILLoop *loop, DominanceInfo *domInfo,
465464
splitCriticalEdgesFrom(preheader, domInfo, loopInfo);
466465
splitCriticalEdgesFrom(newHeader, domInfo, loopInfo);
467466

468-
if (shouldVerify) {
469-
domInfo->verify();
470-
loopInfo->verify();
471-
latch->getParent()->verify();
472-
}
473-
474467
LLVM_DEBUG(llvm::dbgs() << " to " << *loop);
475468
LLVM_DEBUG(loop->getHeader()->getParent()->dump());
476469
return true;
@@ -492,7 +485,6 @@ class LoopRotation : public SILFunctionTransform {
492485
return;
493486
}
494487
LLVM_DEBUG(llvm::dbgs() << "Rotating loops in " << f->getName() << "\n");
495-
bool shouldVerify = getOptions().VerifyAll;
496488

497489
bool changed = false;
498490
for (auto *LoopIt : *loopInfo) {
@@ -509,7 +501,7 @@ class LoopRotation : public SILFunctionTransform {
509501
SILLoop *loop = worklist.pop_back_val();
510502
changed |= canonicalizeLoop(loop, domInfo, loopInfo);
511503
changed |=
512-
rotateLoopAtMostUpToLatch(loop, domInfo, loopInfo, shouldVerify);
504+
rotateLoopAtMostUpToLatch(loop, domInfo, loopInfo);
513505
}
514506
}
515507

0 commit comments

Comments
 (0)