mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Make this pass simply invoke SymbolTable::strip().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
119b342b20
commit
3f0635e012
@ -27,39 +27,10 @@
|
|||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
static bool StripSymbolTable(SymbolTable &SymTab) {
|
|
||||||
bool RemovedSymbol = false;
|
|
||||||
|
|
||||||
for (SymbolTable::iterator I = SymTab.begin(); I != SymTab.end();) {
|
|
||||||
// Removing items from the plane can cause the plane itself to get deleted.
|
|
||||||
// If this happens, make sure we incremented our plane iterator already!
|
|
||||||
std::map<const std::string, Value *> &Plane = (I++)->second;
|
|
||||||
|
|
||||||
SymbolTable::type_iterator B = Plane.begin(), Bend = Plane.end();
|
|
||||||
while (B != Bend) { // Found nonempty type plane!
|
|
||||||
Value *V = B->second;
|
|
||||||
|
|
||||||
if (isa<Constant>(V) || isa<Type>(V)) {
|
|
||||||
SymTab.type_remove(B++);
|
|
||||||
RemovedSymbol = true;
|
|
||||||
} else {
|
|
||||||
++B;
|
|
||||||
if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()){
|
|
||||||
// Set name to "", removing from symbol table!
|
|
||||||
V->setName("", &SymTab);
|
|
||||||
RemovedSymbol = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return RemovedSymbol;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct SymbolStripping : public FunctionPass {
|
struct SymbolStripping : public FunctionPass {
|
||||||
virtual bool runOnFunction(Function &F) {
|
virtual bool runOnFunction(Function &F) {
|
||||||
return StripSymbolTable(F.getSymbolTable());
|
return F.getSymbolTable().strip();
|
||||||
}
|
}
|
||||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||||
AU.setPreservesAll();
|
AU.setPreservesAll();
|
||||||
@ -69,7 +40,7 @@ namespace {
|
|||||||
|
|
||||||
struct FullSymbolStripping : public SymbolStripping {
|
struct FullSymbolStripping : public SymbolStripping {
|
||||||
virtual bool doInitialization(Module &M) {
|
virtual bool doInitialization(Module &M) {
|
||||||
return StripSymbolTable(M.getSymbolTable());
|
return M.getSymbolTable().strip();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
RegisterOpt<FullSymbolStripping> Y("mstrip",
|
RegisterOpt<FullSymbolStripping> Y("mstrip",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user