Browse Source

llvmpipe: Workaround for bug in llvm 2.5.

The combination of fptosi
and sitofp (necessary for trunc/floor/ceil/round implementation)
somehow becomes invalid code.

Skip the instruction combining pass when SSE4.1 is not available.
tags/mesa_7_7_rc1
José Fonseca 16 years ago
parent
commit
baddcbc522
1 changed files with 14 additions and 1 deletions
  1. 14
    1
      src/gallium/drivers/llvmpipe/lp_jit.c

+ 14
- 1
src/gallium/drivers/llvmpipe/lp_jit.c View File

@@ -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);

Loading…
Cancel
Save