diff options
author | Chris Lattner <sabre@nondot.org> | 2002-07-30 19:48:44 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-07-30 19:48:44 +0000 |
commit | 47cc3669ff9483b28e7d660f9561d614ff9057e9 (patch) | |
tree | 9c6ccd817ae0639e07b63db3ae01b4f08f6d242c /llvm/lib | |
parent | 386ebdd66aef9ede15236b9b7576de3abef52702 (diff) | |
download | bcm5719-llvm-47cc3669ff9483b28e7d660f9561d614ff9057e9.tar.gz bcm5719-llvm-47cc3669ff9483b28e7d660f9561d614ff9057e9.zip |
* Indent class into anonymous namespace, filling up the diff with garbage
* Internalize global variables with initializers
* Add new stat to track global variable internalization
* Only count functions that were not internal before in internalized function
count
llvm-svn: 3163
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/IPO/Internalize.cpp | 73 |
1 files changed, 43 insertions, 30 deletions
diff --git a/llvm/lib/Transforms/IPO/Internalize.cpp b/llvm/lib/Transforms/IPO/Internalize.cpp index 7ea7a6fff84..f0b0b1b0b7b 100644 --- a/llvm/lib/Transforms/IPO/Internalize.cpp +++ b/llvm/lib/Transforms/IPO/Internalize.cpp @@ -1,45 +1,58 @@ //===-- Internalize.cpp - Mark functions internal -------------------------===// // // This pass loops over all of the functions in the input module, looking for a -// main function. If a main function is found, all other functions are marked -// as internal. +// main function. If a main function is found, all other functions and all +// global variables with initializers are marked as internal. // //===----------------------------------------------------------------------===// #include "llvm/Transforms/IPO.h" #include "llvm/Pass.h" #include "llvm/Module.h" -#include "llvm/Function.h" #include "Support/StatisticReporter.h" -static Statistic<> NumChanged("internalize\t- Number of functions internal'd"); - namespace { -class InternalizePass : public Pass { - virtual bool run(Module &M) { - bool FoundMain = false; // Look for a function named main... - for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) - if (I->getName() == "main" && !I->isExternal()) { - FoundMain = true; - break; - } - - if (!FoundMain) return false; // No main found, must be a library... - - bool Changed = false; - - // Found a main function, mark all functions not named main as internal. - for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) - if (I->getName() != "main" && // Leave the main function external - !I->isExternal()) { // Function must be defined here - I->setInternalLinkage(true); - Changed = true; - ++NumChanged; - } - - return Changed; - } -}; + Statistic<> NumFunctions("internalize\t- Number of functions internalized"); + Statistic<> NumGlobals ("internalize\t- Number of global vars internalized"); + + + class InternalizePass : public Pass { + virtual bool run(Module &M) { + bool FoundMain = false; // Look for a function named main... + for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) + if (I->getName() == "main" && !I->isExternal() && + I->hasExternalLinkage()) { + FoundMain = true; + break; + } + + if (!FoundMain) return false; // No main found, must be a library... + + bool Changed = false; + + // Found a main function, mark all functions not named main as internal. + for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) + if (I->getName() != "main" && // Leave the main function external + !I->isExternal() && // Function must be defined here + !I->hasInternalLinkage()) { // Can't already have internal linkage + I->setInternalLinkage(true); + Changed = true; + ++NumFunctions; + DEBUG(std::cerr << "Internalizing func " << I->getName() << "\n"); + } + + // Mark all global variables with initializers as internal as well... + for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I) + if (I->hasInitializer() && I->hasExternalLinkage()) { + I->setInternalLinkage(true); + Changed = true; + ++NumGlobals; + DEBUG(std::cerr << "Internalizing gvar " << I->getName() << "\n"); + } + + return Changed; + } + }; RegisterOpt<InternalizePass> X("internalize", "Internalize Functions"); } // end anonymous namespace |