mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
shrink vmcore by moving symbol table stripping support out of VMCore into
the one IPO pass that uses it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33990 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -98,10 +98,6 @@ public:
|
|||||||
/// @{
|
/// @{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// This method will strip the symbol table of its names
|
|
||||||
/// @brief Strip the symbol table.
|
|
||||||
bool strip();
|
|
||||||
|
|
||||||
/// Inserts a type into the symbol table with the specified name. There can be
|
/// Inserts a type into the symbol table with the specified name. There can be
|
||||||
/// a many-to-one mapping between names and types. This method allows a type
|
/// a many-to-one mapping between names and types. This method allows a type
|
||||||
/// with an existing entry in the symbol table to get a new name.
|
/// with an existing entry in the symbol table to get a new name.
|
||||||
|
@@ -120,12 +120,6 @@ public:
|
|||||||
/// @}
|
/// @}
|
||||||
/// @name Mutators
|
/// @name Mutators
|
||||||
/// @{
|
/// @{
|
||||||
public:
|
|
||||||
|
|
||||||
/// This method will strip the symbol table of its names.
|
|
||||||
/// @brief Strip the symbol table.
|
|
||||||
bool strip();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// This method adds the provided value \p N to the symbol table. The Value
|
/// This method adds the provided value \p N to the symbol table. The Value
|
||||||
/// must have a name which is used to place the value in the symbol table.
|
/// must have a name which is used to place the value in the symbol table.
|
||||||
|
@@ -73,6 +73,27 @@ static void RemoveDeadConstant(Constant *C) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Strip the symbol table of its names.
|
||||||
|
//
|
||||||
|
static void StripSymtab(ValueSymbolTable &ST) {
|
||||||
|
for (ValueSymbolTable::iterator VI = ST.begin(), VE = ST.end(); VI != VE; ) {
|
||||||
|
Value *V = VI->second;
|
||||||
|
++VI;
|
||||||
|
if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) {
|
||||||
|
// Set name to "", removing from symbol table!
|
||||||
|
V->setName("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip the symbol table of its names.
|
||||||
|
static void StripTypeSymtab(TypeSymbolTable &ST) {
|
||||||
|
for (TypeSymbolTable::iterator TI = ST.begin(), E = ST.end(); TI != E; )
|
||||||
|
ST.remove(TI++);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool StripSymbols::runOnModule(Module &M) {
|
bool StripSymbols::runOnModule(Module &M) {
|
||||||
// If we're not just stripping debug info, strip all symbols from the
|
// If we're not just stripping debug info, strip all symbols from the
|
||||||
// functions and the names from any internal globals.
|
// functions and the names from any internal globals.
|
||||||
@@ -85,11 +106,11 @@ bool StripSymbols::runOnModule(Module &M) {
|
|||||||
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
|
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
|
||||||
if (I->hasInternalLinkage())
|
if (I->hasInternalLinkage())
|
||||||
I->setName(""); // Internal symbols can't participate in linkage
|
I->setName(""); // Internal symbols can't participate in linkage
|
||||||
I->getValueSymbolTable().strip();
|
StripSymtab(I->getValueSymbolTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove all names from types.
|
// Remove all names from types.
|
||||||
M.getTypeSymbolTable().strip();
|
StripTypeSymtab(M.getTypeSymbolTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strip debug info in the module if it exists. To do this, we remove
|
// Strip debug info in the module if it exists. To do this, we remove
|
||||||
|
@@ -111,17 +111,6 @@ void TypeSymbolTable::insert(const std::string& Name, const Type* T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strip the symbol table of its names.
|
|
||||||
bool TypeSymbolTable::strip() {
|
|
||||||
bool RemovedSymbol = false;
|
|
||||||
for (iterator TI = tmap.begin(); TI != tmap.end(); ) {
|
|
||||||
remove(TI++);
|
|
||||||
RemovedSymbol = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RemovedSymbol;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This function is called when one of the types in the type plane are refined
|
// This function is called when one of the types in the type plane are refined
|
||||||
void TypeSymbolTable::refineAbstractType(const DerivedType *OldType,
|
void TypeSymbolTable::refineAbstractType(const DerivedType *OldType,
|
||||||
const Type *NewType) {
|
const Type *NewType) {
|
||||||
|
@@ -59,22 +59,6 @@ Value *ValueSymbolTable::lookup(const std::string &Name) const {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strip the symbol table of its names.
|
|
||||||
//
|
|
||||||
bool ValueSymbolTable::strip() {
|
|
||||||
bool RemovedSymbol = false;
|
|
||||||
for (iterator VI = vmap.begin(), VE = vmap.end(); VI != VE; ) {
|
|
||||||
Value *V = VI->second;
|
|
||||||
++VI;
|
|
||||||
if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) {
|
|
||||||
// Set name to "", removing from symbol table!
|
|
||||||
V->setName("");
|
|
||||||
RemovedSymbol = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return RemovedSymbol;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert a value into the symbol table with the specified name...
|
// Insert a value into the symbol table with the specified name...
|
||||||
//
|
//
|
||||||
void ValueSymbolTable::insert(Value* V) {
|
void ValueSymbolTable::insert(Value* V) {
|
||||||
|
Reference in New Issue
Block a user