diff --git a/include/llvm/LinkAllPasses.h b/include/llvm/LinkAllPasses.h index 603e87b003a..973178d6765 100644 --- a/include/llvm/LinkAllPasses.h +++ b/include/llvm/LinkAllPasses.h @@ -84,7 +84,6 @@ namespace { (void) llvm::createLoopIndexSplitPass(); (void) llvm::createLowerAllocationsPass(); (void) llvm::createLowerInvokePass(); - (void) llvm::createLowerSelectPass(); (void) llvm::createLowerSetJmpPass(); (void) llvm::createLowerSwitchPass(); (void) llvm::createNoAAPass(); diff --git a/include/llvm/Transforms/Scalar.h b/include/llvm/Transforms/Scalar.h index eb6e012feac..f07877b15a7 100644 --- a/include/llvm/Transforms/Scalar.h +++ b/include/llvm/Transforms/Scalar.h @@ -229,15 +229,6 @@ extern const PassInfo *BreakCriticalEdgesID; FunctionPass *createLoopSimplifyPass(); extern const PassInfo *LoopSimplifyID; -//===----------------------------------------------------------------------===// -// -// LowerSelect - This pass converts SelectInst instructions into conditional -// branch and PHI instructions. If the OnlyFP flag is set to true, then only -// floating point select instructions are lowered. -// -FunctionPass *createLowerSelectPass(bool OnlyFP = false); -extern const PassInfo *LowerSelectID; - //===----------------------------------------------------------------------===// // // LowerAllocations - Turn malloc and free instructions into %malloc and %free diff --git a/lib/Transforms/Utils/LowerAllocations.cpp b/lib/Transforms/Utils/LowerAllocations.cpp index a43ec4b3573..2f422609fe3 100644 --- a/lib/Transforms/Utils/LowerAllocations.cpp +++ b/lib/Transforms/Utils/LowerAllocations.cpp @@ -48,7 +48,6 @@ namespace { // This is a cluster of orthogonal Transforms: AU.addPreserved(); AU.addPreservedID(PromoteMemoryToRegisterID); - AU.addPreservedID(LowerSelectID); AU.addPreservedID(LowerSwitchID); AU.addPreservedID(LowerInvokePassID); } diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp index 920a0286ead..7f0ef85d75f 100644 --- a/lib/Transforms/Utils/LowerInvoke.cpp +++ b/lib/Transforms/Utils/LowerInvoke.cpp @@ -84,7 +84,6 @@ namespace { virtual void getAnalysisUsage(AnalysisUsage &AU) const { // This is a cluster of orthogonal Transforms AU.addPreservedID(PromoteMemoryToRegisterID); - AU.addPreservedID(LowerSelectID); AU.addPreservedID(LowerSwitchID); AU.addPreservedID(LowerAllocationsID); } diff --git a/lib/Transforms/Utils/LowerSelect.cpp b/lib/Transforms/Utils/LowerSelect.cpp deleted file mode 100644 index e2940c2727a..00000000000 --- a/lib/Transforms/Utils/LowerSelect.cpp +++ /dev/null @@ -1,105 +0,0 @@ -//===- LowerSelect.cpp - Transform select insts to branches ---------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This pass lowers select instructions into conditional branches for targets -// that do not have conditional moves or that have not implemented the select -// instruction yet. -// -// Note that this pass could be improved. In particular it turns every select -// instruction into a new conditional branch, even though some common cases have -// select instructions on the same predicate next to each other. It would be -// better to use the same branch for the whole group of selects. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Transforms/Scalar.h" -#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h" -#include "llvm/Function.h" -#include "llvm/Instructions.h" -#include "llvm/Pass.h" -#include "llvm/Type.h" -#include "llvm/Support/Compiler.h" -using namespace llvm; - -namespace { - /// LowerSelect - Turn select instructions into conditional branches. - /// - class VISIBILITY_HIDDEN LowerSelect : public FunctionPass { - bool OnlyFP; // Only lower FP select instructions? - public: - static char ID; // Pass identification, replacement for typeid - explicit LowerSelect(bool onlyfp = false) : FunctionPass((intptr_t)&ID), - OnlyFP(onlyfp) {} - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - // This certainly destroys the CFG. - // This is a cluster of orthogonal Transforms: - AU.addPreserved(); - AU.addPreservedID(PromoteMemoryToRegisterID); - AU.addPreservedID(LowerSwitchID); - AU.addPreservedID(LowerInvokePassID); - AU.addPreservedID(LowerAllocationsID); - } - - bool runOnFunction(Function &F); - }; - - char LowerSelect::ID = 0; - RegisterPass - X("lowerselect", "Lower select instructions to branches"); -} - -// Publically exposed interface to pass... -const PassInfo *llvm::LowerSelectID = X.getPassInfo(); -//===----------------------------------------------------------------------===// -// This pass converts SelectInst instructions into conditional branch and PHI -// instructions. If the OnlyFP flag is set to true, then only floating point -// select instructions are lowered. -// -FunctionPass *llvm::createLowerSelectPass(bool OnlyFP) { - return new LowerSelect(OnlyFP); -} - - -bool LowerSelect::runOnFunction(Function &F) { - bool Changed = false; - for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) - for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { - if (SelectInst *SI = dyn_cast(I)) - if (!OnlyFP || SI->getType()->isFloatingPoint()) { - // Split this basic block in half right before the select instruction. - BasicBlock *NewCont = - BB->splitBasicBlock(I, BB->getName()+".selectcont"); - - // Make the true block, and make it branch to the continue block. - BasicBlock *NewTrue = new BasicBlock(BB->getName()+".selecttrue", - BB->getParent(), NewCont); - new BranchInst(NewCont, NewTrue); - - // Make the unconditional branch in the incoming block be a - // conditional branch on the select predicate. - BB->getInstList().erase(BB->getTerminator()); - new BranchInst(NewTrue, NewCont, SI->getCondition(), BB); - - // Create a new PHI node in the cont block with the entries we need. - PHINode *PN = new PHINode(SI->getType(), "", NewCont->begin()); - PN->takeName(SI); - PN->addIncoming(SI->getTrueValue(), NewTrue); - PN->addIncoming(SI->getFalseValue(), BB); - - // Use the PHI instead of the select. - SI->replaceAllUsesWith(PN); - NewCont->getInstList().erase(SI); - - Changed = true; - break; // This block is done with. - } - } - return Changed; -} diff --git a/lib/Transforms/Utils/LowerSwitch.cpp b/lib/Transforms/Utils/LowerSwitch.cpp index 5f5e796a358..e31a87fba8e 100644 --- a/lib/Transforms/Utils/LowerSwitch.cpp +++ b/lib/Transforms/Utils/LowerSwitch.cpp @@ -40,7 +40,6 @@ namespace { // This is a cluster of orthogonal Transforms AU.addPreserved(); AU.addPreservedID(PromoteMemoryToRegisterID); - AU.addPreservedID(LowerSelectID); AU.addPreservedID(LowerInvokePassID); AU.addPreservedID(LowerAllocationsID); } diff --git a/lib/Transforms/Utils/Mem2Reg.cpp b/lib/Transforms/Utils/Mem2Reg.cpp index 75e66db9330..f9b1d8d4994 100644 --- a/lib/Transforms/Utils/Mem2Reg.cpp +++ b/lib/Transforms/Utils/Mem2Reg.cpp @@ -43,7 +43,6 @@ namespace { AU.setPreservesCFG(); // This is a cluster of orthogonal Transforms AU.addPreserved(); - AU.addPreservedID(LowerSelectID); AU.addPreservedID(LowerSwitchID); AU.addPreservedID(LowerInvokePassID); AU.addPreservedID(LowerAllocationsID); diff --git a/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp b/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp index d8802abfb1e..f9aaa236666 100644 --- a/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp +++ b/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp @@ -37,7 +37,6 @@ void UnifyFunctionExitNodes::getAnalysisUsage(AnalysisUsage &AU) const{ AU.addPreservedID(BreakCriticalEdgesID); // This is a cluster of orthogonal Transforms AU.addPreservedID(PromoteMemoryToRegisterID); - AU.addPreservedID(LowerSelectID); AU.addPreservedID(LowerSwitchID); }