mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Add an option to this pass. If it is set, we are allowed to internalize
all but main. If it's not set, we can still internalize, but only if an explicit symbol list is provided. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23783 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f9c6105a78
commit
a27ea769eb
@ -41,12 +41,16 @@ namespace {
|
|||||||
|
|
||||||
class InternalizePass : public ModulePass {
|
class InternalizePass : public ModulePass {
|
||||||
std::set<std::string> ExternalNames;
|
std::set<std::string> ExternalNames;
|
||||||
|
bool DontInternalize;
|
||||||
public:
|
public:
|
||||||
InternalizePass() {
|
InternalizePass(bool InternalizeEverything = true) : DontInternalize(false){
|
||||||
if (!APIFile.empty()) // If a filename is specified, use it
|
if (!APIFile.empty()) // If a filename is specified, use it
|
||||||
LoadFile(APIFile.c_str());
|
LoadFile(APIFile.c_str());
|
||||||
else // Else, if a list is specified, use it.
|
else if (!APIList.empty()) // Else, if a list is specified, use it.
|
||||||
ExternalNames.insert(APIList.begin(), APIList.end());
|
ExternalNames.insert(APIList.begin(), APIList.end());
|
||||||
|
else if (!InternalizeEverything)
|
||||||
|
// Finally, if we're allowed to, internalize all but main.
|
||||||
|
DontInternalize = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadFile(const char *Filename) {
|
void LoadFile(const char *Filename) {
|
||||||
@ -66,6 +70,8 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual bool runOnModule(Module &M) {
|
virtual bool runOnModule(Module &M) {
|
||||||
|
if (DontInternalize) return false;
|
||||||
|
|
||||||
// If no list or file of symbols was specified, check to see if there is a
|
// If no list or file of symbols was specified, check to see if there is a
|
||||||
// "main" symbol defined in the module. If so, use it, otherwise do not
|
// "main" symbol defined in the module. If so, use it, otherwise do not
|
||||||
// internalize the module, it must be a library or something.
|
// internalize the module, it must be a library or something.
|
||||||
@ -117,6 +123,6 @@ namespace {
|
|||||||
RegisterOpt<InternalizePass> X("internalize", "Internalize Global Symbols");
|
RegisterOpt<InternalizePass> X("internalize", "Internalize Global Symbols");
|
||||||
} // end anonymous namespace
|
} // end anonymous namespace
|
||||||
|
|
||||||
ModulePass *llvm::createInternalizePass() {
|
ModulePass *llvm::createInternalizePass(bool InternalizeEverything) {
|
||||||
return new InternalizePass();
|
return new InternalizePass(InternalizeEverything);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user