DAG->DAG instruction selection for ia64! "hello world" works, not much else.

use -enable-ia64-dag-isel to turn this on

TODO: delete lowering stuff from the pattern isel
    : get operations on predicate bits working
    : get other bits of pseudocode going
    : use sampo's mulh/mull-using divide-by-constant magic
    : *so* many patterns ("extr", "tbit" and "dep" will be fun :)
    : add FP
    : add a JIT!
    : get it working 100%

in short: this'll be happier in a couple of weeks, but it's here now so
the tester can make me feel guilty sooner.

OTHER: there are a couple of fixes to the pattern isel, in particular
making the linker happy with big blobs of fun like pypy.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24058 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duraid Madina
2005-10-28 17:46:35 +00:00
parent e50caac6b0
commit f2db9b88da
11 changed files with 1226 additions and 41 deletions
+9 -2
View File
@@ -37,6 +37,9 @@ namespace {
cl::desc("Disable the IA64 asm printer, for use "
"when profiling the code generator."));
cl::opt<bool> EnableDAGIsel("enable-ia64-dag-isel", cl::Hidden,
cl::desc("Enable the IA64 DAG->DAG isel"));
// Register the target.
RegisterTarget<IA64TargetMachine> X("ia64", " IA-64 (Itanium)");
}
@@ -97,8 +100,12 @@ bool IA64TargetMachine::addPassesToEmitFile(PassManager &PM,
// Make sure that no unreachable blocks are instruction selected.
PM.add(createUnreachableBlockEliminationPass());
PM.add(createIA64PatternInstructionSelector(*this));
// Add an instruction selector
if(EnableDAGIsel)
PM.add(createIA64DAGToDAGInstructionSelector(*this));
else
PM.add(createIA64PatternInstructionSelector(*this));
/* XXX not yet. ;)
// Run optional SSA-based machine code optimizations next...
if (!NoSSAPeephole)