mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 22:28:18 +00:00
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
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
LEVEL = ../..
|
LEVEL = ../..
|
||||||
TOOLNAME = opt
|
TOOLNAME = opt
|
||||||
|
|
||||||
USEDLIBS = bcreader bcwriter instrument profpaths scalaropts \
|
USEDLIBS = bcreader bcwriter instrument profpaths \
|
||||||
ipo ipa.a datastructure.a transforms target.a analysis \
|
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
|
transformutils vmcore support
|
||||||
TOOLLINKOPTS = -ldl
|
TOOLLINKOPTS = -ldl
|
||||||
|
|
||||||
|
@@ -12,7 +12,8 @@
|
|||||||
#include "llvm/Bytecode/WriteBytecodePass.h"
|
#include "llvm/Bytecode/WriteBytecodePass.h"
|
||||||
#include "llvm/Assembly/PrintModulePass.h"
|
#include "llvm/Assembly/PrintModulePass.h"
|
||||||
#include "llvm/Analysis/Verifier.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 "llvm/Support/PassNameParser.h"
|
||||||
#include "Support/Signals.h"
|
#include "Support/Signals.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@@ -60,10 +61,15 @@ int main(int argc, char **argv) {
|
|||||||
cl::ParseCommandLineOptions(argc, argv,
|
cl::ParseCommandLineOptions(argc, argv,
|
||||||
" llvm .bc -> .bc modular optimizer\n");
|
" llvm .bc -> .bc modular optimizer\n");
|
||||||
|
|
||||||
// FIXME: This should be parameterizable eventually for different target
|
// FIXME: The choice of target should be controllable on the command line.
|
||||||
// types...
|
|
||||||
TargetData TD("opt target");
|
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...
|
// Load the input module...
|
||||||
std::auto_ptr<Module> M(ParseBytecodeFile(InputFilename));
|
std::auto_ptr<Module> M(ParseBytecodeFile(InputFilename));
|
||||||
if (M.get() == 0) {
|
if (M.get() == 0) {
|
||||||
@@ -105,8 +111,13 @@ int main(int argc, char **argv) {
|
|||||||
if (Opt->getNormalCtor())
|
if (Opt->getNormalCtor())
|
||||||
Passes.add(Opt->getNormalCtor()());
|
Passes.add(Opt->getNormalCtor()());
|
||||||
else if (Opt->getDataCtor())
|
else if (Opt->getDataCtor())
|
||||||
Passes.add(Opt->getDataCtor()(TD)); // Pass dummy target data...
|
Passes.add(Opt->getDataCtor()(TD)); // Provide dummy target data...
|
||||||
else
|
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";
|
cerr << argv[0] << ": cannot create pass: " << Opt->getPassName() << "\n";
|
||||||
|
|
||||||
if (PrintEachXForm)
|
if (PrintEachXForm)
|
||||||
|
Reference in New Issue
Block a user