Add support for optimization passes that use a TargetMachine object.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Mon, 16 Sep 2002 16:09:43 +0000 (16:09 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Mon, 16 Sep 2002 16:09:43 +0000 (16:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3752 91177308-0d34-0410-b5e6-96231b3b80d8

tools/opt/Makefile
tools/opt/opt.cpp

index c696d4070e4c43bbd7c92be3b18f4ff28072436f..aea04ac544c1ef8d0bacd6cae04314a4bcd3f26c 100644 (file)
@@ -1,8 +1,10 @@
 LEVEL = ../..
 TOOLNAME = opt
 
-USEDLIBS = bcreader bcwriter instrument profpaths scalaropts \
-           ipo ipa.a datastructure.a transforms target.a analysis \
+USEDLIBS = bcreader bcwriter instrument profpaths \
+          sparc.a target.a mapping.a regalloc.a sched.a select.a preselect \
+          livevar.a sparc.a scalaropts \
+          ipo ipa.a datastructure.a transforms target.a analysis \
            transformutils vmcore support
 TOOLLINKOPTS = -ldl
 
index faaf6e2eb20bad0787d495be18b8feb0189c5d6d..078d64d05194e6a3db0cb6cec142bde21261aa6d 100644 (file)
@@ -12,7 +12,8 @@
 #include "llvm/Bytecode/WriteBytecodePass.h"
 #include "llvm/Assembly/PrintModulePass.h"
 #include "llvm/Analysis/Verifier.h"
-#include "llvm/Target/TargetData.h"
+#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/Sparc.h"
 #include "llvm/Support/PassNameParser.h"
 #include "Support/Signals.h"
 #include <fstream>
@@ -60,10 +61,15 @@ int main(int argc, char **argv) {
   cl::ParseCommandLineOptions(argc, argv,
                              " llvm .bc -> .bc modular optimizer\n");
 
-  // FIXME: This should be parameterizable eventually for different target
-  // types...
+  // FIXME: The choice of target should be controllable on the command line.
   TargetData TD("opt target");
 
+  // Allocate a full target machine description only if necessary...
+  // FIXME: The choice of target should be controllable on the command line.
+  std::auto_ptr<TargetMachine> target;
+
+  TargetMachine* TM = NULL;
+
   // Load the input module...
   std::auto_ptr<Module> M(ParseBytecodeFile(InputFilename));
   if (M.get() == 0) {
@@ -105,8 +111,13 @@ int main(int argc, char **argv) {
     if (Opt->getNormalCtor())
       Passes.add(Opt->getNormalCtor()());
     else if (Opt->getDataCtor())
-      Passes.add(Opt->getDataCtor()(TD));  // Pass dummy target data...
-    else
+      Passes.add(Opt->getDataCtor()(TD));    // Provide dummy target data...
+    else if (Opt->getTargetCtor()) {
+      if (target.get() == NULL)
+        target.reset(allocateSparcTargetMachine()); // FIXME: target option
+      assert(target.get() && "Could not allocate target machine!");
+      Passes.add(Opt->getTargetCtor()(*target.get()));
+    } else
       cerr << argv[0] << ": cannot create pass: " << Opt->getPassName() << "\n";
 
     if (PrintEachXForm)