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



util_cpu_detect(); 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 #ifdef LLVM_NATIVE_ARCH
LLVMLinkInJIT(); LLVMLinkInJIT();
LLVMInitializeNativeTarget(); LLVMInitializeNativeTarget();
LLVMAddTargetData(screen->target, screen->pass); LLVMAddTargetData(screen->target, screen->pass);
/* These are the passes currently listed in llvm-c/Transforms/Scalar.h, /* These are the passes currently listed in llvm-c/Transforms/Scalar.h,
* but there are more on SVN. */ * but there are more on SVN. */
/* TODO: Add more passes */
LLVMAddConstantPropagationPass(screen->pass); 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); LLVMAddPromoteMemoryToRegisterPass(screen->pass);
LLVMAddGVNPass(screen->pass); LLVMAddGVNPass(screen->pass);
LLVMAddCFGSimplificationPass(screen->pass); LLVMAddCFGSimplificationPass(screen->pass);

Loading…
Cancel
Save