diff options
| -rw-r--r-- | llvm/include/llvm/Analysis/MemoryBuiltins.h | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/Analysis/ScalarEvolutionExpander.h | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/IR/IRBuilder.h | 22 | ||||
| -rw-r--r-- | llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/MergeFunctions.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineInternal.h | 6 | ||||
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstructionCombining.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoadCombine.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/SROA.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 4 | ||||
| -rw-r--r-- | llvm/unittests/IR/IRBuilderTest.cpp | 2 | ||||
| -rw-r--r-- | llvm/unittests/IR/PatternMatch.cpp | 2 |
14 files changed, 41 insertions, 32 deletions
diff --git a/llvm/include/llvm/Analysis/MemoryBuiltins.h b/llvm/include/llvm/Analysis/MemoryBuiltins.h index c31c4df9988..c49cb887834 100644 --- a/llvm/include/llvm/Analysis/MemoryBuiltins.h +++ b/llvm/include/llvm/Analysis/MemoryBuiltins.h @@ -198,7 +198,7 @@ typedef std::pair<Value*, Value*> SizeOffsetEvalType; class ObjectSizeOffsetEvaluator : public InstVisitor<ObjectSizeOffsetEvaluator, SizeOffsetEvalType> { - typedef IRBuilder<TargetFolder> BuilderTy; + typedef IRBuilder<true, TargetFolder> BuilderTy; typedef std::pair<WeakVH, WeakVH> WeakEvalType; typedef DenseMap<const Value*, WeakEvalType> CacheMapTy; typedef SmallPtrSet<const Value*, 8> PtrSetTy; diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h b/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h index 5addbc77af3..2f8810f9522 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h +++ b/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h @@ -80,7 +80,7 @@ namespace llvm { /// already in "expanded" form. bool LSRMode; - typedef IRBuilder<TargetFolder> BuilderType; + typedef IRBuilder<true, TargetFolder> BuilderType; BuilderType Builder; #ifndef NDEBUG diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index c6c12fa2225..296e9ab5faa 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -38,12 +38,14 @@ class MDNode; /// IRBuilder and needs to be inserted. /// /// By default, this inserts the instruction at the insertion point. +template <bool preserveNames = true> class IRBuilderDefaultInserter { protected: void InsertHelper(Instruction *I, const Twine &Name, BasicBlock *BB, BasicBlock::iterator InsertPt) const { if (BB) BB->getInstList().insert(InsertPt, I); - I->setName(Name); + if (preserveNames) + I->setName(Name); } }; @@ -535,12 +537,14 @@ private: /// created. Convenience state exists to specify fast-math flags and fp-math /// tags. /// -/// The first template argument specifies a class to use for creating constants. -/// This defaults to creating minimally folded constants. The second template -/// argument allows clients to specify custom insertion hooks that are called on -/// every newly created insertion. -template <typename T = ConstantFolder, - typename Inserter = IRBuilderDefaultInserter> +/// The first template argument handles whether or not to preserve names in the +/// final instruction output. This defaults to on. The second template argument +/// specifies a class to use for creating constants. This defaults to creating +/// minimally folded constants. The third template argument allows clients to +/// specify custom insertion hooks that are called on every newly created +/// insertion. +template<bool preserveNames = true, typename T = ConstantFolder, + typename Inserter = IRBuilderDefaultInserter<preserveNames> > class IRBuilder : public IRBuilderBase, public Inserter { T Folder; @@ -590,6 +594,10 @@ public: /// \brief Get the constant folder being used. const T &getFolder() { return Folder; } + /// \brief Return true if this builder is configured to actually add the + /// requested names to IR created through it. + bool isNamePreserving() const { return preserveNames; } + /// \brief Insert and return the specified instruction. template<typename InstTy> InstTy *Insert(InstTy *I, const Twine &Name = "") const { diff --git a/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp b/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp index de11ae2e31c..9e98b47380f 100644 --- a/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp +++ b/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp @@ -76,7 +76,7 @@ createLoweredInitializer(ArrayType *NewType, Constant *OriginalInitializer) { static Instruction * createReplacementInstr(ConstantExpr *CE, Instruction *Instr) { - IRBuilder<NoFolder> Builder(Instr); + IRBuilder<true,NoFolder> Builder(Instr); unsigned OpCode = CE->getOpcode(); switch (OpCode) { case Instruction::GetElementPtr: { diff --git a/llvm/lib/Transforms/IPO/MergeFunctions.cpp b/llvm/lib/Transforms/IPO/MergeFunctions.cpp index 7024c68c377..2030c22e0f7 100644 --- a/llvm/lib/Transforms/IPO/MergeFunctions.cpp +++ b/llvm/lib/Transforms/IPO/MergeFunctions.cpp @@ -1646,7 +1646,7 @@ void MergeFunctions::writeThunkOrAlias(Function *F, Function *G) { // Helper for writeThunk, // Selects proper bitcast operation, // but a bit simpler then CastInst::getCastOpcode. -static Value *createCast(IRBuilder<> &Builder, Value *V, Type *DestTy) { +static Value *createCast(IRBuilder<false> &Builder, Value *V, Type *DestTy) { Type *SrcTy = V->getType(); if (SrcTy->isStructTy()) { assert(DestTy->isStructTy()); @@ -1689,7 +1689,7 @@ void MergeFunctions::writeThunk(Function *F, Function *G) { Function *NewG = Function::Create(G->getFunctionType(), G->getLinkage(), "", G->getParent()); BasicBlock *BB = BasicBlock::Create(F->getContext(), "", NewG); - IRBuilder<> Builder(BB); + IRBuilder<false> Builder(BB); SmallVector<Value *, 16> Args; unsigned i = 0; diff --git a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h index 3bb50baa663..1909cbaea64 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineInternal.h +++ b/llvm/lib/Transforms/InstCombine/InstCombineInternal.h @@ -138,7 +138,7 @@ IntrinsicIDToOverflowCheckFlavor(unsigned ID) { /// \brief An IRBuilder inserter that adds new instructions to the instcombine /// worklist. class LLVM_LIBRARY_VISIBILITY InstCombineIRInserter - : public IRBuilderDefaultInserter { + : public IRBuilderDefaultInserter<true> { InstCombineWorklist &Worklist; AssumptionCache *AC; @@ -148,7 +148,7 @@ public: void InsertHelper(Instruction *I, const Twine &Name, BasicBlock *BB, BasicBlock::iterator InsertPt) const { - IRBuilderDefaultInserter::InsertHelper(I, Name, BB, InsertPt); + IRBuilderDefaultInserter<true>::InsertHelper(I, Name, BB, InsertPt); Worklist.Add(I); using namespace llvm::PatternMatch; @@ -171,7 +171,7 @@ public: /// \brief An IRBuilder that automatically inserts new instructions into the /// worklist. - typedef IRBuilder<TargetFolder, InstCombineIRInserter> BuilderTy; + typedef IRBuilder<true, TargetFolder, InstCombineIRInserter> BuilderTy; BuilderTy *Builder; private: diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index 0ac16fe1c77..c6406e4f401 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -3054,7 +3054,7 @@ combineInstructionsOverFunction(Function &F, InstCombineWorklist &Worklist, /// Builder - This is an IRBuilder that automatically inserts new /// instructions into the worklist when they are created. - IRBuilder<TargetFolder, InstCombineIRInserter> Builder( + IRBuilder<true, TargetFolder, InstCombineIRInserter> Builder( F.getContext(), TargetFolder(DL), InstCombineIRInserter(Worklist, &AC)); // Lower dbg.declare intrinsics otherwise their value may be clobbered diff --git a/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp b/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp index f2ccc6d3272..fd3dfd9af03 100644 --- a/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp +++ b/llvm/lib/Transforms/Instrumentation/BoundsChecking.cpp @@ -36,7 +36,7 @@ STATISTIC(ChecksAdded, "Bounds checks added"); STATISTIC(ChecksSkipped, "Bounds checks skipped"); STATISTIC(ChecksUnable, "Bounds checks unable to add"); -typedef IRBuilder<TargetFolder> BuilderTy; +typedef IRBuilder<true, TargetFolder> BuilderTy; namespace { struct BoundsChecking : public FunctionPass { diff --git a/llvm/lib/Transforms/Scalar/LoadCombine.cpp b/llvm/lib/Transforms/Scalar/LoadCombine.cpp index 354a3da93e6..1648878b062 100644 --- a/llvm/lib/Transforms/Scalar/LoadCombine.cpp +++ b/llvm/lib/Transforms/Scalar/LoadCombine.cpp @@ -68,7 +68,7 @@ public: const char *getPassName() const override { return "LoadCombine"; } static char ID; - typedef IRBuilder<TargetFolder> BuilderTy; + typedef IRBuilder<true, TargetFolder> BuilderTy; private: BuilderTy *Builder; @@ -226,7 +226,7 @@ bool LoadCombine::runOnBasicBlock(BasicBlock &BB) { AA = &getAnalysis<AAResultsWrapperPass>().getAAResults(); - IRBuilder<TargetFolder> TheBuilder( + IRBuilder<true, TargetFolder> TheBuilder( BB.getContext(), TargetFolder(BB.getModule()->getDataLayout())); Builder = &TheBuilder; diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp index 535a1ef7366..b759bb50dbe 100644 --- a/llvm/lib/Transforms/Scalar/SROA.cpp +++ b/llvm/lib/Transforms/Scalar/SROA.cpp @@ -89,7 +89,7 @@ static cl::opt<bool> SROAStrictInbounds("sroa-strict-inbounds", cl::init(false), namespace { /// \brief A custom IRBuilder inserter which prefixes all names, but only in /// Assert builds. -class IRBuilderPrefixedInserter : public IRBuilderDefaultInserter { +class IRBuilderPrefixedInserter : public IRBuilderDefaultInserter<true> { std::string Prefix; const Twine getNameWithPrefix(const Twine &Name) const { return Name.isTriviallyEmpty() ? Name : Prefix + Name; @@ -101,13 +101,14 @@ public: protected: void InsertHelper(Instruction *I, const Twine &Name, BasicBlock *BB, BasicBlock::iterator InsertPt) const { - IRBuilderDefaultInserter::InsertHelper(I, getNameWithPrefix(Name), BB, - InsertPt); + IRBuilderDefaultInserter<true>::InsertHelper(I, getNameWithPrefix(Name), BB, + InsertPt); } }; /// \brief Provide a typedef for IRBuilder that drops names in release builds. -using IRBuilderTy = llvm::IRBuilder<ConstantFolder, IRBuilderPrefixedInserter>; +using IRBuilderTy = + llvm::IRBuilder<true, ConstantFolder, IRBuilderPrefixedInserter>; } namespace { diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 4d9bd842c84..3e689f6ad9a 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1199,7 +1199,7 @@ HoistTerminator: NT->takeName(I1); } - IRBuilder<NoFolder> Builder(NT); + IRBuilder<true, NoFolder> Builder(NT); // Hoisting one of the terminators from our successor is a great thing. // Unfortunately, the successors of the if/else blocks may have PHI nodes in // them. If they do, all PHI entries for BB1/BB2 must agree for all PHI @@ -1640,7 +1640,7 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB, // Insert a select of the value of the speculated store. if (SpeculatedStoreValue) { - IRBuilder<NoFolder> Builder(BI); + IRBuilder<true, NoFolder> Builder(BI); Value *TrueV = SpeculatedStore->getValueOperand(); Value *FalseV = SpeculatedStoreValue; if (Invert) @@ -1660,7 +1660,7 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB, ThenBB->begin(), std::prev(ThenBB->end())); // Insert selects and rewrite the PHI operands. - IRBuilder<NoFolder> Builder(BI); + IRBuilder<true, NoFolder> Builder(BI); for (BasicBlock::iterator I = EndBB->begin(); PHINode *PN = dyn_cast<PHINode>(I); ++I) { unsigned OrigI = PN->getBasicBlockIndex(BB); @@ -1920,7 +1920,7 @@ static bool FoldTwoEntryPHINode(PHINode *PN, const TargetTransformInfo &TTI, // If we can still promote the PHI nodes after this gauntlet of tests, // do all of the PHI's now. Instruction *InsertPt = DomBlock->getTerminator(); - IRBuilder<NoFolder> Builder(InsertPt); + IRBuilder<true, NoFolder> Builder(InsertPt); // Move all 'aggressive' instructions, which are defined in the // conditional parts of the if's up to the dominating block. @@ -2831,7 +2831,7 @@ static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI, // Make sure we get to CommonDest on True&True directions. Value *PBICond = PBI->getCondition(); - IRBuilder<NoFolder> Builder(PBI); + IRBuilder<true, NoFolder> Builder(PBI); if (PBIOp) PBICond = Builder.CreateNot(PBICond, PBICond->getName()+".not"); diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index a90bd09326a..f20d14f15d2 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -3796,8 +3796,8 @@ bool SLPVectorizer::tryToVectorizeList(ArrayRef<Value *> VL, BoUpSLP &R, Instruction *InsertAfter = cast<Instruction>(BuildVectorSlice.back()); unsigned VecIdx = 0; for (auto &V : BuildVectorSlice) { - IRBuilder<NoFolder> Builder(InsertAfter->getParent(), - ++BasicBlock::iterator(InsertAfter)); + IRBuilder<true, NoFolder> Builder( + InsertAfter->getParent(), ++BasicBlock::iterator(InsertAfter)); InsertElementInst *IE = cast<InsertElementInst>(V); Instruction *Extract = cast<Instruction>(Builder.CreateExtractElement( VectorizedRoot, Builder.getInt32(VecIdx++))); diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp index 5cac3fa90c3..bd0eae0399a 100644 --- a/llvm/unittests/IR/IRBuilderTest.cpp +++ b/llvm/unittests/IR/IRBuilderTest.cpp @@ -252,7 +252,7 @@ TEST_F(IRBuilderTest, FastMathFlags) { } TEST_F(IRBuilderTest, WrapFlags) { - IRBuilder<NoFolder> Builder(BB); + IRBuilder<true, NoFolder> Builder(BB); // Test instructions. GlobalVariable *G = new GlobalVariable(*M, Builder.getInt32Ty(), true, diff --git a/llvm/unittests/IR/PatternMatch.cpp b/llvm/unittests/IR/PatternMatch.cpp index 1121d6554db..f3a27b8d250 100644 --- a/llvm/unittests/IR/PatternMatch.cpp +++ b/llvm/unittests/IR/PatternMatch.cpp @@ -35,7 +35,7 @@ struct PatternMatchTest : ::testing::Test { std::unique_ptr<Module> M; Function *F; BasicBlock *BB; - IRBuilder<NoFolder> IRB; + IRBuilder<true, NoFolder> IRB; PatternMatchTest() : M(new Module("PatternMatchTestModule", Ctx)), |

