summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorMisha Brukman <brukman+llvm@gmail.com>2003-06-06 06:59:55 +0000
committerMisha Brukman <brukman+llvm@gmail.com>2003-06-06 06:59:55 +0000
commit0ccdecbdaaebbd424f8b8afad67309d8b69d4c93 (patch)
tree6a020d61257a6c9542eb6574ff12aae73aeb8cbf /llvm/lib
parenta2b55253c66c7eb98cec2300571856da8b53eb2b (diff)
downloadbcm5719-llvm-0ccdecbdaaebbd424f8b8afad67309d8b69d4c93.tar.gz
bcm5719-llvm-0ccdecbdaaebbd424f8b8afad67309d8b69d4c93.zip
::: HACK ALERT ::: HACK ALERT ::: HACK ALERT ::: HACK ALERT ::: HACK ALERT :::
The JIT is designed to code-generate a function at-a-time. That means that any pass can only make local changes to its function. Period. Because the Sparc PreSelection pass claims to be a BasicBlock pass while adding globals to the Module, it cannot be run with the other passes, because by this time, the globals have been output already by the JIT, and the addresses of any globals appearing AFTER this point are not recognized. However, the PreSelection pass is a requirement for correctness in the Sparc codegen path, so it MUST be run. ::: HACK ALERT ::: HACK ALERT ::: HACK ALERT ::: HACK ALERT ::: HACK ALERT ::: llvm-svn: 6650
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/ExecutionEngine/JIT/JIT.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/ExecutionEngine/JIT/JIT.cpp b/llvm/lib/ExecutionEngine/JIT/JIT.cpp
index 2e7236b5d50..fd41c4c1273 100644
--- a/llvm/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/llvm/lib/ExecutionEngine/JIT/JIT.cpp
@@ -11,6 +11,9 @@
#include "llvm/Module.h"
#include "Support/CommandLine.h"
+// FIXME: REMOVE THIS
+#include "llvm/PassManager.h"
+
namespace {
cl::opt<std::string>
Arch("march", cl::desc("Architecture: `x86' or `sparc'"), cl::Prefix,
@@ -27,7 +30,6 @@ namespace {
}
-
/// createJIT - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise it returns null.
///
@@ -65,6 +67,17 @@ VM::VM(Module *M, TargetMachine *tm) : ExecutionEngine(M), TM(*tm) {
MCE = createEmitter(*this);
setupPassManager();
+
+ // THIS GOES BEYOND UGLY HACKS
+ if (TM.getName() == "UltraSparc-Native") {
+ extern Pass *createPreSelectionPass(TargetMachine &TM);
+ PassManager PM;
+ // Specialize LLVM code for this target machine and then
+ // run basic dataflow optimizations on LLVM code.
+ PM.add(createPreSelectionPass(TM));
+ PM.run(*M);
+ }
+
emitGlobals();
}
OpenPOWER on IntegriCloud