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 | 55e41ba3d293699e47fdeb8996cc743b2018bde8 (patch) | |
tree | 0f5ce7dbc101b6dc49457af9f6b9a6d77fbf35ff /lib | |
parent | 5e1f7ec9276e4711f2b3bd2709c931d6674550f6 (diff) | |
download | external_llvm-55e41ba3d293699e47fdeb8996cc743b2018bde8.zip external_llvm-55e41ba3d293699e47fdeb8996cc743b2018bde8.tar.gz external_llvm-55e41ba3d293699e47fdeb8996cc743b2018bde8.tar.bz2 |
* 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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3163 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/IPO/Internalize.cpp | 73 |
1 files changed, 43 insertions, 30 deletions
diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp index 7ea7a6f..f0b0b1b 100644 --- a/lib/Transforms/IPO/Internalize.cpp +++ b/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 |