diff options
author | Logan Chien <loganchien@google.com> | 2013-04-24 15:15:17 +0800 |
---|---|---|
committer | Logan Chien <loganchien@google.com> | 2013-04-24 15:15:17 +0800 |
commit | be92b24777040e6e46211efbdae0d832a6b9d9e8 (patch) | |
tree | 130a8e3a373993215817d3c9f850bbcaa36eb8fb | |
parent | 4767a6882fbf846b1d1e76256444fbfba5e348a8 (diff) | |
download | llvm-be92b24777040e6e46211efbdae0d832a6b9d9e8.tar.gz |
Add -disable-global-ctor-const-promotion flag.
Add a flag to disable the promotion of the global constant
with constructors.
Change-Id: Ib21dc56edaea5a0eae76e9643cc0338bd187391f
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index 1522aa408b6..36d70f5e9c2 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -28,6 +28,7 @@ #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetLibraryInfo.h" #include "llvm/Support/CallSite.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/GetElementPtrTypeIterator.h" @@ -58,6 +59,12 @@ STATISTIC(NumAliasesResolved, "Number of global aliases resolved"); STATISTIC(NumAliasesRemoved, "Number of global aliases eliminated"); STATISTIC(NumCXXDtorsRemoved, "Number of global C++ destructors removed"); +static cl::opt<bool> DisableGlobalCtorConstPromotion( + "disable-global-ctor-const-promotion", + cl::desc("Disable constant promotion of global constants with constructors."), + cl::init(false), + cl::Hidden); + namespace { struct GlobalStatus; struct GlobalOpt : public ModulePass { @@ -2703,10 +2710,11 @@ static bool EvaluateStaticConstructor(Function *F, const TargetData *TD, Eval.getMutatedMemory().begin(), E = Eval.getMutatedMemory().end(); I != E; ++I) CommitValueTo(I->second, I->first); - for (SmallPtrSet<GlobalVariable*, 8>::const_iterator I = - Eval.getInvariants().begin(), E = Eval.getInvariants().end(); - I != E; ++I) - (*I)->setConstant(true); + if (!DisableGlobalCtorConstPromotion) + for (SmallPtrSet<GlobalVariable*, 8>::const_iterator I = + Eval.getInvariants().begin(), E = Eval.getInvariants().end(); + I != E; ++I) + (*I)->setConstant(true); } return EvalSuccess; |