diff options
author | Chris Lattner <sabre@nondot.org> | 2009-10-22 00:44:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-10-22 00:44:10 +0000 |
commit | d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91 (patch) | |
tree | 982c458f2926c94030e51202b990a9d421d59d42 /tools | |
parent | 8000c6c535c5a1d8515299072b51fd1baa8b632f (diff) | |
download | external_llvm-d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91.zip external_llvm-d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91.tar.gz external_llvm-d331cb3fdea8b450f9c2d981e6b59ee6f9cdbd91.tar.bz2 |
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')
-rw-r--r-- | tools/opt/opt.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index 5bf39e5..8674a7d 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 |