summaryrefslogtreecommitdiff
path: root/tools/opt
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-10-22 00:44:10 +0000
committerChris Lattner <sabre@nondot.org>2009-10-22 00:44:10 +0000
commitd331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91 (patch)
tree982c458f2926c94030e51202b990a9d421d59d42 /tools/opt
parent8000c6c535c5a1d8515299072b51fd1baa8b632f (diff)
downloadllvm-d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91.tar.gz
llvm-d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91.tar.bz2
llvm-d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91.tar.xz
Add some command line options for twiddling the default data layout
used by opt when a module doesn't specify one. Patch from Kenneth Uildriks! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84814 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/opt')
-rw-r--r--tools/opt/opt.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index 5bf39e5b29..8674a7da0d 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -127,6 +127,15 @@ QuietA("quiet", cl::desc("Alias for -q"), cl::aliasopt(Quiet));
static cl::opt<bool>
AnalyzeOnly("analyze", cl::desc("Only perform analysis, no optimization"));
+static cl::opt<std::string>
+DefaultDataLayout("default-data-layout",
+ cl::desc("data layout string to use if not specified by module"),
+ cl::value_desc("layout-string"), cl::init(""));
+
+static cl::opt<bool>
+NoDefaultDataLayout("no-default-data-layout",
+ cl::desc("no data layout assumptions unless module specifies data layout"));
+
// ---------- Define Printers for module and function passes ------------
namespace {
@@ -388,12 +397,21 @@ int main(int argc, char **argv) {
PassManager Passes;
// Add an appropriate TargetData instance for this module...
- Passes.add(new TargetData(M.get()));
+ TargetData *TD = 0;
+ const std::string &ModuleDataLayout = M.get()->getDataLayout();
+ if (!ModuleDataLayout.empty())
+ TD = new TargetData(ModuleDataLayout);
+ else if (!NoDefaultDataLayout)
+ TD = new TargetData(DefaultDataLayout);
+
+ if (TD)
+ Passes.add(TD);
FunctionPassManager *FPasses = NULL;
if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
FPasses = new FunctionPassManager(new ExistingModuleProvider(M.get()));
- FPasses->add(new TargetData(M.get()));
+ if (TD)
+ FPasses->add(new TargetData(*TD));
}
// If the -strip-debug command line option was specified, add it. If