From 0d1e40728d668085257b78657b381e1f13d77d52 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 5 Mar 2005 19:51:50 +0000 Subject: [PATCH] remove all of the various setName implementations, consolidating them into Value::setName, which is no longer virtual. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20464 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Argument.h | 3 --- include/llvm/BasicBlock.h | 3 --- include/llvm/Constant.h | 3 --- include/llvm/Function.h | 3 --- include/llvm/GlobalVariable.h | 3 --- include/llvm/Instruction.h | 3 --- include/llvm/Value.h | 4 +--- lib/VMCore/BasicBlock.cpp | 9 --------- lib/VMCore/Constants.cpp | 4 ---- lib/VMCore/Function.cpp | 17 ----------------- lib/VMCore/Globals.cpp | 8 -------- lib/VMCore/Instruction.cpp | 9 --------- lib/VMCore/Value.cpp | 31 ++++++++++++++++++++++++++++--- 13 files changed, 29 insertions(+), 71 deletions(-) diff --git a/include/llvm/Argument.h b/include/llvm/Argument.h index 51e53b17bd1..3c38cdea037 100644 --- a/include/llvm/Argument.h +++ b/include/llvm/Argument.h @@ -39,9 +39,6 @@ public: /// Argument(const Type *Ty, const std::string &Name = "", Function *F = 0); - /// setName - Specialize setName to handle symbol table majik. - virtual void setName(const std::string &name); - inline const Function *getParent() const { return Parent; } inline Function *getParent() { return Parent; } diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h index b48693f0dcd..ad509bb2cc5 100644 --- a/include/llvm/BasicBlock.h +++ b/include/llvm/BasicBlock.h @@ -76,9 +76,6 @@ public: BasicBlock *InsertBefore = 0); ~BasicBlock(); - // Specialize setName to take care of symbol table majik - virtual void setName(const std::string &name); - /// getParent - Return the enclosing method, or null if none /// const Function *getParent() const { return InstList.getParent(); } diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h index 112cb4d2abc..43a736e49c5 100644 --- a/include/llvm/Constant.h +++ b/include/llvm/Constant.h @@ -26,9 +26,6 @@ protected: void destroyConstantImpl(); public: - // setName - Specialize setName to handle symbol table majik. - virtual void setName(const std::string &name); - /// Static constructor to get a '0' constant of arbitrary type... /// static Constant *getNullValue(const Type *Ty); diff --git a/include/llvm/Function.h b/include/llvm/Function.h index 112958002c9..05ac47ddd67 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -85,9 +85,6 @@ public: const std::string &N = "", Module *M = 0); ~Function(); - // Specialize setName to handle symbol table majik. - virtual void setName(const std::string &name); - const Type *getReturnType() const; // Return the type of the ret val const FunctionType *getFunctionType() const; // Return the FunctionType for me diff --git a/include/llvm/GlobalVariable.h b/include/llvm/GlobalVariable.h index 9f73911872d..1faa095d051 100644 --- a/include/llvm/GlobalVariable.h +++ b/include/llvm/GlobalVariable.h @@ -51,9 +51,6 @@ public: Constant *Initializer = 0, const std::string &Name = "", Module *Parent = 0); - // Specialize setName to handle symbol table majik. - virtual void setName(const std::string &name); - /// isExternal - Is this global variable lacking an initializer? If so, the /// global variable is defined in some other translation unit, and is thus /// externally defined here. diff --git a/include/llvm/Instruction.h b/include/llvm/Instruction.h index ae8d5caf08a..da0767d47f4 100644 --- a/include/llvm/Instruction.h +++ b/include/llvm/Instruction.h @@ -54,9 +54,6 @@ public: assert(Parent == 0 && "Instruction still linked in the program!"); } - // Specialize setName to handle symbol table majik. - virtual void setName(const std::string &name); - /// mayWriteToMemory - Return true if this instruction may modify memory. /// virtual bool mayWriteToMemory() const { return false; } diff --git a/include/llvm/Value.h b/include/llvm/Value.h index f59e9461282..164c7ee811c 100644 --- a/include/llvm/Value.h +++ b/include/llvm/Value.h @@ -75,9 +75,7 @@ public: inline bool hasName() const { return !Name.empty(); } inline const std::string &getName() const { return Name; } - virtual void setName(const std::string &name) { - Name = name; - } + void setName(const std::string &name); /// replaceAllUsesWith - Go through the uses list for this definition and make /// each use point to "V" instead of "this". After this completes, 'this's diff --git a/lib/VMCore/BasicBlock.cpp b/lib/VMCore/BasicBlock.cpp index 232a4e3391b..49bd8cf7be8 100644 --- a/lib/VMCore/BasicBlock.cpp +++ b/lib/VMCore/BasicBlock.cpp @@ -16,7 +16,6 @@ #include "llvm/Instructions.h" #include "llvm/Type.h" #include "llvm/Support/CFG.h" -#include "llvm/SymbolTable.h" #include "llvm/Support/LeakDetector.h" #include "SymbolTableListTraitsImpl.h" #include @@ -95,14 +94,6 @@ void BasicBlock::setParent(Function *parent) { LeakDetector::removeGarbageObject(this); } -// Specialize setName to take care of symbol table majik -void BasicBlock::setName(const std::string &name) { - Function *P; - if ((P = getParent()) && hasName()) P->getSymbolTable().remove(this); - Value::setName(name); - if (P && hasName()) P->getSymbolTable().insert(this); -} - void BasicBlock::removeFromParent() { getParent()->getBasicBlockList().remove(this); } diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 99a15eae704..dfba3508e0e 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -31,10 +31,6 @@ ConstantBool *ConstantBool::False = new ConstantBool(false); // Constant Class //===----------------------------------------------------------------------===// -void Constant::setName(const std::string &Name) { - // Constants can't take names. -} - void Constant::destroyConstantImpl() { // When a Constant is destroyed, there may be lingering // references to the constant by other constants in the constant pool. These diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 7cced301e63..df8d1f904f3 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -62,15 +62,6 @@ Argument::Argument(const Type *Ty, const std::string &Name, Function *Par) Par->getArgumentList().push_back(this); } - -// Specialize setName to take care of symbol table majik -void Argument::setName(const std::string &name) { - Function *P; - if ((P = getParent()) && hasName()) P->getSymbolTable().remove(this); - Value::setName(name); - if (P && hasName()) P->getSymbolTable().insert(this); -} - void Argument::setParent(Function *parent) { if (getParent()) LeakDetector::addGarbageObject(this); @@ -118,14 +109,6 @@ Function::~Function() { delete SymTab; } -// Specialize setName to take care of symbol table majik -void Function::setName(const std::string &name) { - Module *P; - if ((P = getParent()) && hasName()) P->getSymbolTable().remove(this); - Value::setName(name); - if (P && hasName()) P->getSymbolTable().insert(this); -} - void Function::setParent(Module *parent) { if (getParent()) LeakDetector::addGarbageObject(this); diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index efa588bd561..c0264ae3c11 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -99,14 +99,6 @@ void GlobalVariable::setParent(Module *parent) { LeakDetector::removeGarbageObject(this); } -// Specialize setName to take care of symbol table majik -void GlobalVariable::setName(const std::string &name) { - Module *P; - if ((P = getParent()) && hasName()) P->getSymbolTable().remove(this); - Value::setName(name); - if (P && hasName()) P->getSymbolTable().insert(this); -} - void GlobalVariable::removeFromParent() { getParent()->getGlobalList().remove(this); } diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp index eeba47b52e9..4ccbd74dfdd 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -57,15 +57,6 @@ void Instruction::setParent(BasicBlock *P) { Parent = P; } -// Specialize setName to take care of symbol table majik -void Instruction::setName(const std::string &name) { - BasicBlock *P = 0; Function *PP = 0; - if ((P = getParent()) && (PP = P->getParent()) && hasName()) - PP->getSymbolTable().remove(this); - Value::setName(name); - if (PP && hasName()) PP->getSymbolTable().insert(this); -} - void Instruction::removeFromParent() { getParent()->getInstList().remove(this); } diff --git a/lib/VMCore/Value.cpp b/lib/VMCore/Value.cpp index b3b133f7798..cdde96b455b 100644 --- a/lib/VMCore/Value.cpp +++ b/lib/VMCore/Value.cpp @@ -11,11 +11,11 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Constant.h" +#include "llvm/DerivedTypes.h" #include "llvm/InstrTypes.h" +#include "llvm/Module.h" #include "llvm/SymbolTable.h" -#include "llvm/DerivedTypes.h" -#include "llvm/Constant.h" -#include "llvm/GlobalValue.h" #include "llvm/Support/LeakDetector.h" #include #include @@ -93,6 +93,31 @@ unsigned Value::getNumUses() const { } +void Value::setName(const std::string &name) { + if (Name == name) return; // Name is already set. + + SymbolTable *ST = 0; + + if (Instruction *I = dyn_cast(this)) { + if (BasicBlock *P = I->getParent()) + if (Function *PP = P->getParent()) + ST = &PP->getSymbolTable(); + } else if (BasicBlock *BB = dyn_cast(this)) { + if (Function *P = BB->getParent()) ST = &P->getSymbolTable(); + } else if (GlobalValue *GV = dyn_cast(this)) { + if (Module *P = GV->getParent()) ST = &P->getSymbolTable(); + } else if (Argument *A = dyn_cast(this)) { + if (Function *P = A->getParent()) ST = &P->getSymbolTable(); + } else { + assert(isa(this) && "Unknown value type!"); + return; // no name is setable for this. + } + + if (ST && hasName()) ST->remove(this); + Name = name; + if (ST && hasName()) ST->insert(this); +} + // uncheckedReplaceAllUsesWith - This is exactly the same as replaceAllUsesWith, // except that it doesn't have all of the asserts. The asserts fail because we // are half-way done resolving types, which causes some types to exist as two -- 2.34.1