mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
Remove PreserveNames template parameter from IRBuilder
This reapplies r263258, which was reverted in r263321 because of issues on Clang side. From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 263393
This commit is contained in:
parent
e914699fcf
commit
12d624a26a
@ -198,7 +198,7 @@ typedef std::pair<Value*, Value*> SizeOffsetEvalType;
|
||||
class ObjectSizeOffsetEvaluator
|
||||
: public InstVisitor<ObjectSizeOffsetEvaluator, SizeOffsetEvalType> {
|
||||
|
||||
typedef IRBuilder<true, TargetFolder> BuilderTy;
|
||||
typedef IRBuilder<TargetFolder> BuilderTy;
|
||||
typedef std::pair<WeakVH, WeakVH> WeakEvalType;
|
||||
typedef DenseMap<const Value*, WeakEvalType> CacheMapTy;
|
||||
typedef SmallPtrSet<const Value*, 8> PtrSetTy;
|
||||
|
@ -80,7 +80,7 @@ namespace llvm {
|
||||
/// already in "expanded" form.
|
||||
bool LSRMode;
|
||||
|
||||
typedef IRBuilder<true, TargetFolder> BuilderType;
|
||||
typedef IRBuilder<TargetFolder> BuilderType;
|
||||
BuilderType Builder;
|
||||
|
||||
#ifndef NDEBUG
|
||||
|
@ -38,14 +38,12 @@ 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);
|
||||
if (preserveNames)
|
||||
I->setName(Name);
|
||||
I->setName(Name);
|
||||
}
|
||||
};
|
||||
|
||||
@ -537,14 +535,12 @@ private:
|
||||
/// created. Convenience state exists to specify fast-math flags and fp-math
|
||||
/// tags.
|
||||
///
|
||||
/// 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> >
|
||||
/// 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>
|
||||
class IRBuilder : public IRBuilderBase, public Inserter {
|
||||
T Folder;
|
||||
|
||||
@ -594,10 +590,6 @@ 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 {
|
||||
|
@ -76,7 +76,7 @@ createLoweredInitializer(ArrayType *NewType, Constant *OriginalInitializer) {
|
||||
|
||||
static Instruction *
|
||||
createReplacementInstr(ConstantExpr *CE, Instruction *Instr) {
|
||||
IRBuilder<true,NoFolder> Builder(Instr);
|
||||
IRBuilder<NoFolder> Builder(Instr);
|
||||
unsigned OpCode = CE->getOpcode();
|
||||
switch (OpCode) {
|
||||
case Instruction::GetElementPtr: {
|
||||
|
@ -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<false> &Builder, Value *V, Type *DestTy) {
|
||||
static Value *createCast(IRBuilder<> &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<false> Builder(BB);
|
||||
IRBuilder<> Builder(BB);
|
||||
|
||||
SmallVector<Value *, 16> Args;
|
||||
unsigned i = 0;
|
||||
|
@ -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<true> {
|
||||
: public IRBuilderDefaultInserter {
|
||||
InstCombineWorklist &Worklist;
|
||||
AssumptionCache *AC;
|
||||
|
||||
@ -148,7 +148,7 @@ public:
|
||||
|
||||
void InsertHelper(Instruction *I, const Twine &Name, BasicBlock *BB,
|
||||
BasicBlock::iterator InsertPt) const {
|
||||
IRBuilderDefaultInserter<true>::InsertHelper(I, Name, BB, InsertPt);
|
||||
IRBuilderDefaultInserter::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<true, TargetFolder, InstCombineIRInserter> BuilderTy;
|
||||
typedef IRBuilder<TargetFolder, InstCombineIRInserter> BuilderTy;
|
||||
BuilderTy *Builder;
|
||||
|
||||
private:
|
||||
|
@ -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<true, TargetFolder, InstCombineIRInserter> Builder(
|
||||
IRBuilder<TargetFolder, InstCombineIRInserter> Builder(
|
||||
F.getContext(), TargetFolder(DL), InstCombineIRInserter(Worklist, &AC));
|
||||
|
||||
// Lower dbg.declare intrinsics otherwise their value may be clobbered
|
||||
|
@ -36,7 +36,7 @@ STATISTIC(ChecksAdded, "Bounds checks added");
|
||||
STATISTIC(ChecksSkipped, "Bounds checks skipped");
|
||||
STATISTIC(ChecksUnable, "Bounds checks unable to add");
|
||||
|
||||
typedef IRBuilder<true, TargetFolder> BuilderTy;
|
||||
typedef IRBuilder<TargetFolder> BuilderTy;
|
||||
|
||||
namespace {
|
||||
struct BoundsChecking : public FunctionPass {
|
||||
|
@ -68,7 +68,7 @@ public:
|
||||
const char *getPassName() const override { return "LoadCombine"; }
|
||||
static char ID;
|
||||
|
||||
typedef IRBuilder<true, TargetFolder> BuilderTy;
|
||||
typedef IRBuilder<TargetFolder> BuilderTy;
|
||||
|
||||
private:
|
||||
BuilderTy *Builder;
|
||||
@ -226,7 +226,7 @@ bool LoadCombine::runOnBasicBlock(BasicBlock &BB) {
|
||||
|
||||
AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();
|
||||
|
||||
IRBuilder<true, TargetFolder> TheBuilder(
|
||||
IRBuilder<TargetFolder> TheBuilder(
|
||||
BB.getContext(), TargetFolder(BB.getModule()->getDataLayout()));
|
||||
Builder = &TheBuilder;
|
||||
|
||||
|
@ -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<true> {
|
||||
class IRBuilderPrefixedInserter : public IRBuilderDefaultInserter {
|
||||
std::string Prefix;
|
||||
const Twine getNameWithPrefix(const Twine &Name) const {
|
||||
return Name.isTriviallyEmpty() ? Name : Prefix + Name;
|
||||
@ -101,14 +101,13 @@ public:
|
||||
protected:
|
||||
void InsertHelper(Instruction *I, const Twine &Name, BasicBlock *BB,
|
||||
BasicBlock::iterator InsertPt) const {
|
||||
IRBuilderDefaultInserter<true>::InsertHelper(I, getNameWithPrefix(Name), BB,
|
||||
InsertPt);
|
||||
IRBuilderDefaultInserter::InsertHelper(I, getNameWithPrefix(Name), BB,
|
||||
InsertPt);
|
||||
}
|
||||
};
|
||||
|
||||
/// \brief Provide a typedef for IRBuilder that drops names in release builds.
|
||||
using IRBuilderTy =
|
||||
llvm::IRBuilder<true, ConstantFolder, IRBuilderPrefixedInserter>;
|
||||
using IRBuilderTy = llvm::IRBuilder<ConstantFolder, IRBuilderPrefixedInserter>;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -1196,7 +1196,7 @@ HoistTerminator:
|
||||
NT->takeName(I1);
|
||||
}
|
||||
|
||||
IRBuilder<true, NoFolder> Builder(NT);
|
||||
IRBuilder<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
|
||||
@ -1637,7 +1637,7 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB,
|
||||
|
||||
// Insert a select of the value of the speculated store.
|
||||
if (SpeculatedStoreValue) {
|
||||
IRBuilder<true, NoFolder> Builder(BI);
|
||||
IRBuilder<NoFolder> Builder(BI);
|
||||
Value *TrueV = SpeculatedStore->getValueOperand();
|
||||
Value *FalseV = SpeculatedStoreValue;
|
||||
if (Invert)
|
||||
@ -1657,7 +1657,7 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB,
|
||||
ThenBB->begin(), std::prev(ThenBB->end()));
|
||||
|
||||
// Insert selects and rewrite the PHI operands.
|
||||
IRBuilder<true, NoFolder> Builder(BI);
|
||||
IRBuilder<NoFolder> Builder(BI);
|
||||
for (BasicBlock::iterator I = EndBB->begin();
|
||||
PHINode *PN = dyn_cast<PHINode>(I); ++I) {
|
||||
unsigned OrigI = PN->getBasicBlockIndex(BB);
|
||||
@ -1917,7 +1917,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<true, NoFolder> Builder(InsertPt);
|
||||
IRBuilder<NoFolder> Builder(InsertPt);
|
||||
|
||||
// Move all 'aggressive' instructions, which are defined in the
|
||||
// conditional parts of the if's up to the dominating block.
|
||||
@ -2827,7 +2827,7 @@ static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI,
|
||||
|
||||
// Make sure we get to CommonDest on True&True directions.
|
||||
Value *PBICond = PBI->getCondition();
|
||||
IRBuilder<true, NoFolder> Builder(PBI);
|
||||
IRBuilder<NoFolder> Builder(PBI);
|
||||
if (PBIOp)
|
||||
PBICond = Builder.CreateNot(PBICond, PBICond->getName()+".not");
|
||||
|
||||
|
@ -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<true, NoFolder> Builder(
|
||||
InsertAfter->getParent(), ++BasicBlock::iterator(InsertAfter));
|
||||
IRBuilder<NoFolder> Builder(InsertAfter->getParent(),
|
||||
++BasicBlock::iterator(InsertAfter));
|
||||
InsertElementInst *IE = cast<InsertElementInst>(V);
|
||||
Instruction *Extract = cast<Instruction>(Builder.CreateExtractElement(
|
||||
VectorizedRoot, Builder.getInt32(VecIdx++)));
|
||||
|
@ -252,7 +252,7 @@ TEST_F(IRBuilderTest, FastMathFlags) {
|
||||
}
|
||||
|
||||
TEST_F(IRBuilderTest, WrapFlags) {
|
||||
IRBuilder<true, NoFolder> Builder(BB);
|
||||
IRBuilder<NoFolder> Builder(BB);
|
||||
|
||||
// Test instructions.
|
||||
GlobalVariable *G = new GlobalVariable(*M, Builder.getInt32Ty(), true,
|
||||
|
@ -35,7 +35,7 @@ struct PatternMatchTest : ::testing::Test {
|
||||
std::unique_ptr<Module> M;
|
||||
Function *F;
|
||||
BasicBlock *BB;
|
||||
IRBuilder<true, NoFolder> IRB;
|
||||
IRBuilder<NoFolder> IRB;
|
||||
|
||||
PatternMatchTest()
|
||||
: M(new Module("PatternMatchTestModule", Ctx)),
|
||||
|
Loading…
Reference in New Issue
Block a user