diff options
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. |

