aboutsummaryrefslogtreecommitdiff
path: root/tools/opt/opt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/opt/opt.cpp')
-rw-r--r--tools/opt/opt.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index ebddd18c80..6de7529ec4 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -25,18 +25,23 @@
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
#include "llvm/Transforms/Instrumentation/TraceValues.h"
#include "llvm/Transforms/Instrumentation/ProfilePaths.h"
+#include "llvm/Target/TargetData.h"
#include "Support/CommandLine.h"
#include "Support/Signals.h"
#include <fstream>
#include <memory>
+// FIXME: This should be parameterizable eventually for different target
+// types...
+static TargetData TD("opt target");
+
// Opts enum - All of the transformations we can do...
enum Opts {
// Basic optimizations
dce, die, constprop, gcse, inlining, constmerge, strip, mstrip, mergereturn,
// Miscellaneous Transformations
- raiseallocs, funcresolve, cleangcc, lowerrefs,
+ raiseallocs, lowerallocs, funcresolve, cleangcc, lowerrefs,
// Printing and verifying...
print, printm, verify,
@@ -59,6 +64,10 @@ static Pass *createPrintModulePass() {
return new PrintModulePass(&cerr);
}
+static Pass *createLowerAllocationsPassNT() {
+ return createLowerAllocationsPass(TD);
+}
+
// OptTable - Correlate enum Opts to Pass constructors...
//
struct {
@@ -93,9 +102,10 @@ struct {
{ printm , createPrintModulePass },
{ verify , createVerifierPass },
- { raiseallocs, createRaiseAllocationsPass },
- { cleangcc , createCleanupGCCOutputPass },
- { funcresolve, createFunctionResolvingPass },
+ { raiseallocs, createRaiseAllocationsPass },
+ { lowerallocs, createLowerAllocationsPassNT },
+ { cleangcc , createCleanupGCCOutputPass },
+ { funcresolve, createFunctionResolvingPass },
{ internalize, createInternalizePass },
{ globaldce , createGlobalDCEPass },
@@ -139,6 +149,7 @@ cl::EnumList<enum Opts> OptimizationList(cl::NoFlags,
clEnumVal(poolalloc , "Pool allocate disjoint datastructures"),
clEnumVal(raiseallocs, "Raise allocations from calls to instructions"),
+ clEnumVal(lowerallocs, "Lower allocations from instructions to calls (TD)"),
clEnumVal(cleangcc , "Cleanup GCC Output"),
clEnumVal(funcresolve, "Resolve calls to foo(...) to foo(<concrete types>)"),
clEnumVal(raise , "Raise to Higher Level"),