summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-03-05 19:51:50 +0000
committerChris Lattner <sabre@nondot.org>2005-03-05 19:51:50 +0000
commit0d1e40728d668085257b78657b381e1f13d77d52 (patch)
tree00e51cc189ccb0faa187276ed1c6ca5f2d953b9e
parent7acff25f7f48ccbc8ca55032a59bfd4102ebed72 (diff)
downloadllvm-0d1e40728d668085257b78657b381e1f13d77d52.tar.gz
llvm-0d1e40728d668085257b78657b381e1f13d77d52.tar.bz2
llvm-0d1e40728d668085257b78657b381e1f13d77d52.tar.xz
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
-rw-r--r--include/llvm/Argument.h3
-rw-r--r--include/llvm/BasicBlock.h3
-rw-r--r--include/llvm/Constant.h3
-rw-r--r--include/llvm/Function.h3
-rw-r--r--include/llvm/GlobalVariable.h3
-rw-r--r--include/llvm/Instruction.h3
-rw-r--r--include/llvm/Value.h4
-rw-r--r--lib/VMCore/BasicBlock.cpp9
-rw-r--r--lib/VMCore/Constants.cpp4
-rw-r--r--lib/VMCore/Function.cpp17
-rw-r--r--lib/VMCore/Globals.cpp8
-rw-r--r--lib/VMCore/Instruction.cpp9
-rw-r--r--lib/VMCore/Value.cpp31
13 files changed, 29 insertions, 71 deletions
diff --git a/include/llvm/Argument.h b/include/llvm/Argument.h
index 51e53b17bd..3c38cdea03 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 b48693f0dc..ad509bb2cc 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 112cb4d2ab..43a736e49c 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 112958002c..05ac47ddd6 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 9f73911872..1faa095d05 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 ae8d5caf08..da0767d47f 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 f59e946128..164c7ee811 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 232a4e3391..49bd8cf7be 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 <algorithm>
@@ -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 99a15eae70..dfba3508e0 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 7cced301e6..df8d1f904f 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 efa588bd56..c0264ae3c1 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 eeba47b52e..4ccbd74dfd 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 b3b133f779..cdde96b455 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 <algorithm>
#include <iostream>
@@ -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<Instruction>(this)) {
+ if (BasicBlock *P = I->getParent())
+ if (Function *PP = P->getParent())
+ ST = &PP->getSymbolTable();
+ } else if (BasicBlock *BB = dyn_cast<BasicBlock>(this)) {
+ if (Function *P = BB->getParent()) ST = &P->getSymbolTable();
+ } else if (GlobalValue *GV = dyn_cast<GlobalValue>(this)) {
+ if (Module *P = GV->getParent()) ST = &P->getSymbolTable();
+ } else if (Argument *A = dyn_cast<Argument>(this)) {
+ if (Function *P = A->getParent()) ST = &P->getSymbolTable();
+ } else {
+ assert(isa<Constant>(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