|
|
@@ -150,6 +150,12 @@ lp_jit_screen_init(struct llvmpipe_screen *screen) |
|
|
|
|
|
|
|
util_cpu_detect(); |
|
|
|
|
|
|
|
#if 0 |
|
|
|
/* For simulating less capable machines */ |
|
|
|
util_cpu_caps.has_sse3 = 0; |
|
|
|
util_cpu_caps.has_sse4_1 = 0; |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef LLVM_NATIVE_ARCH |
|
|
|
LLVMLinkInJIT(); |
|
|
|
LLVMInitializeNativeTarget(); |
|
|
@@ -171,8 +177,15 @@ lp_jit_screen_init(struct llvmpipe_screen *screen) |
|
|
|
LLVMAddTargetData(screen->target, screen->pass); |
|
|
|
/* These are the passes currently listed in llvm-c/Transforms/Scalar.h, |
|
|
|
* but there are more on SVN. */ |
|
|
|
/* TODO: Add more passes */ |
|
|
|
LLVMAddConstantPropagationPass(screen->pass); |
|
|
|
LLVMAddInstructionCombiningPass(screen->pass); |
|
|
|
if(util_cpu_caps.has_sse4_1) { |
|
|
|
/* FIXME: There is a bug in this pass, whereby the combination of fptosi |
|
|
|
* and sitofp (necessary for trunc/floor/ceil/round implementation) |
|
|
|
* somehow becomes invalid code. |
|
|
|
*/ |
|
|
|
LLVMAddInstructionCombiningPass(screen->pass); |
|
|
|
} |
|
|
|
LLVMAddPromoteMemoryToRegisterPass(screen->pass); |
|
|
|
LLVMAddGVNPass(screen->pass); |
|
|
|
LLVMAddCFGSimplificationPass(screen->pass); |