From 18fdfc4eed5466e0a7e16cac594804c82aa4442b Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Mon, 16 Sep 2002 16:09:43 +0000 Subject: [PATCH] Add support for optimization passes that use a TargetMachine object. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3752 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/opt/Makefile | 6 ++++-- tools/opt/opt.cpp | 21 ++++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/tools/opt/Makefile b/tools/opt/Makefile index c696d4070e4..aea04ac544c 100644 --- a/tools/opt/Makefile +++ b/tools/opt/Makefile @@ -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 diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index faaf6e2eb20..078d64d0519 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -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 @@ -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 target; + + TargetMachine* TM = NULL; + // Load the input module... std::auto_ptr 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)