From a99c46cc73a70b57972c07562072ec5aeb6d8f4c Mon Sep 17 00:00:00 2001 From: Michael Kuperstein Date: Tue, 12 Jul 2016 21:24:06 +0000 Subject: [LV] Remove wrong assumption about LCSSA The LCSSA pass itself will not generate several redundant PHI nodes in a single exit block. However, such redundant PHI nodes don't violate LCSSA form, and may be introduced by passes that preserve LCSSA, and/or preserved by the LCSSA pass itself. So, assuming a single PHI node per exit block is not safe. llvm-svn: 275217 --- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 5c74ad5d851..a8937b09f90 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -3112,9 +3112,6 @@ void InnerLoopVectorizer::fixupIVUsers(PHINode *OrigPhi, // value (the value that feeds into the phi from the loop latch). // We allow both, but they, obviously, have different values. - // We only expect at most one of each kind of user. This is because LCSSA will - // canonicalize the users to a single PHI node per exit block, and we - // currently only vectorize loops with a single exit. assert(OrigLoop->getExitBlock() && "Expected a single exit block"); // An external user of the last iteration's value should see the value that @@ -3132,7 +3129,6 @@ void InnerLoopVectorizer::fixupIVUsers(PHINode *OrigPhi, auto *User = cast(UI); if (User->getBasicBlockIndex(MiddleBlock) == -1) User->addIncoming(EndValue, MiddleBlock); - break; } } @@ -3159,7 +3155,6 @@ void InnerLoopVectorizer::fixupIVUsers(PHINode *OrigPhi, Value *Escape = II.transform(B, CMO, PSE.getSE(), DL); Escape->setName("ind.escape"); User->addIncoming(Escape, MiddleBlock); - break; } } } -- cgit v1.2.3