diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2016-09-17 06:00:02 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2016-09-17 06:00:02 +0000 |
commit | a53d49e1b547a9658be46865d687aeb481b3b32c (patch) | |
tree | 6af44087ae1c06b8690e2a40259801c80049020b /llvm/lib/IR | |
parent | 05188a646d9e5c097a9d18fcae397c6312fe786d (diff) | |
download | bcm5719-llvm-a53d49e1b547a9658be46865d687aeb481b3b32c.tar.gz bcm5719-llvm-a53d49e1b547a9658be46865d687aeb481b3b32c.zip |
Don't create a SymbolTable in Function when the LLVMContext discards value names (NFC)
The ValueSymbolTable is used to detect name conflict and rename
instructions automatically. This is not needed when the value
names are automatically discarded by the LLVMContext.
No functional change intended, just saving a little bit of memory.
This is a recommit of r281806 after fixing the accessor to return
a pointer instead of a reference and updating all the call-sites.
llvm-svn: 281813
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/BasicBlock.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/IR/Function.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/IR/Value.cpp | 6 |
3 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp index 4640b4f9d41..19e78492365 100644 --- a/llvm/lib/IR/BasicBlock.cpp +++ b/llvm/lib/IR/BasicBlock.cpp @@ -26,7 +26,7 @@ using namespace llvm; ValueSymbolTable *BasicBlock::getValueSymbolTable() { if (Function *F = getParent()) - return &F->getValueSymbolTable(); + return F->getValueSymbolTable(); return nullptr; } diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index fa34158e9c5..f9f33fef452 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -258,7 +258,10 @@ Function::Function(FunctionType *Ty, LinkageTypes Linkage, const Twine &name, assert(FunctionType::isValidReturnType(getReturnType()) && "invalid return type"); setGlobalObjectSubClassData(0); - SymTab = new ValueSymbolTable(); + + // We only need a symbol table for a function if the context keeps value names + if (!getContext().shouldDiscardValueNames()) + SymTab = make_unique<ValueSymbolTable>(); // If the function has arguments, mark them as lazily built. if (Ty->getNumParams()) @@ -279,7 +282,6 @@ Function::~Function() { // Delete all of the method arguments and unlink from symbol table... ArgumentList.clear(); - delete SymTab; // Remove the function from the on-the-side GC table. clearGC(); diff --git a/llvm/lib/IR/Value.cpp b/llvm/lib/IR/Value.cpp index a1dfb37bf90..451cb09ea9f 100644 --- a/llvm/lib/IR/Value.cpp +++ b/llvm/lib/IR/Value.cpp @@ -143,16 +143,16 @@ static bool getSymTab(Value *V, ValueSymbolTable *&ST) { if (Instruction *I = dyn_cast<Instruction>(V)) { if (BasicBlock *P = I->getParent()) if (Function *PP = P->getParent()) - ST = &PP->getValueSymbolTable(); + ST = PP->getValueSymbolTable(); } else if (BasicBlock *BB = dyn_cast<BasicBlock>(V)) { if (Function *P = BB->getParent()) - ST = &P->getValueSymbolTable(); + ST = P->getValueSymbolTable(); } else if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) { if (Module *P = GV->getParent()) ST = &P->getValueSymbolTable(); } else if (Argument *A = dyn_cast<Argument>(V)) { if (Function *P = A->getParent()) - ST = &P->getValueSymbolTable(); + ST = P->getValueSymbolTable(); } else { assert(isa<Constant>(V) && "Unknown value type!"); return true; // no name is setable for this. |