If we've specified a triple on the command line then go ahead
authorEric Christopher <echristo@gmail.com>
Sun, 14 Apr 2013 23:32:40 +0000 (23:32 +0000)
committerEric Christopher <echristo@gmail.com>
Sun, 14 Apr 2013 23:32:40 +0000 (23:32 +0000)
and use that as the default triple for the module and target
data layout.

llvm-svn: 179497

llvm/tools/opt/opt.cpp

index e385d7f..e3aa77d 100644 (file)
@@ -36,6 +36,7 @@
 #include "llvm/Support/PassNameParser.h"
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/PrettyStackTrace.h"
+#include "llvm/Support/raw_ostream.h"
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/SystemUtils.h"
@@ -529,9 +530,8 @@ static TargetMachine* GetTargetMachine(Triple TheTriple) {
   const Target *TheTarget = TargetRegistry::lookupTarget(MArch, TheTriple,
                                                          Error);
   // Some modules don't specify a triple, and this is okay.
-  if (!TheTarget) {
+  if (!TheTarget)
     return 0;
-  }
 
   // Package up features to be passed to target/subtarget
   std::string FeaturesStr;
@@ -598,9 +598,12 @@ int main(int argc, char **argv) {
   }
 
   // If we are supposed to override the target triple, do so now.
-  if (!TargetTriple.empty())
+  const DataLayout *TD;
+  if (!TargetTriple.empty()) {
     M->setTargetTriple(Triple::normalize(TargetTriple));
-
+    TD = GetTargetMachine(Triple(TargetTriple))->getDataLayout();
+  }
+  
   // Figure out what stream we are supposed to write to...
   OwningPtr<tool_output_file> Out;
   if (NoOutput) {
@@ -641,16 +644,16 @@ int main(int argc, char **argv) {
     TLI->disableAllFunctions();
   Passes.add(TLI);
 
-  // Add an appropriate DataLayout instance for this module.
-  DataLayout *TD = 0;
-  const std::string &ModuleDataLayout = M.get()->getDataLayout();
-  if (!ModuleDataLayout.empty())
-    TD = new DataLayout(ModuleDataLayout);
-  else if (!DefaultDataLayout.empty())
-    TD = new DataLayout(DefaultDataLayout);
-
+  // If we don't have a data layout by now go ahead and set it if we can.
+  if (!TD) {
+    const std::string &ModuleDataLayout = M.get()->getDataLayout();
+    if (!ModuleDataLayout.empty())
+      TD = new DataLayout(ModuleDataLayout);
+    else if (!DefaultDataLayout.empty())
+      TD = new DataLayout(DefaultDataLayout);
+  }
   if (TD)
-    Passes.add(TD);
+    Passes.add(new DataLayout(*TD));
 
   Triple ModuleTriple(M->getTargetTriple());
   TargetMachine *Machine = 0;