aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Chien <loganchien@google.com>2013-04-24 15:15:17 +0800
committerLogan Chien <loganchien@google.com>2013-04-24 15:15:17 +0800
commitbe92b24777040e6e46211efbdae0d832a6b9d9e8 (patch)
tree130a8e3a373993215817d3c9f850bbcaa36eb8fb
parent4767a6882fbf846b1d1e76256444fbfba5e348a8 (diff)
downloadllvm-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.cpp16
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;