diff options
| author | Brian Paul <brianp@vmware.com> | 2010-07-22 16:07:18 -0600 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2010-07-22 16:09:03 -0600 | 
| commit | 815e79e72c1f4aa849c0ee6103621685b678bc9d (patch) | |
| tree | ea39890b7a0383d8927c9fac18f26138742b046f | |
| parent | ca3238f3fce89b4641833d1722d03c5d23b3e081 (diff) | |
draw: re-order optimization passes depending on LLVM version, 32/64-bit
This is a work-around for an apparent bug in LLVM seen with piglit's
glsl-vs-sqrt-zero test.
| -rw-r--r-- | src/gallium/auxiliary/draw/draw_llvm.c | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 1ee87697b4..19f96c37ab 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -238,9 +238,22 @@ draw_llvm_create(struct draw_context *draw)        /* These are the passes currently listed in llvm-c/Transforms/Scalar.h,         * but there are more on SVN. */        /* TODO: Add more passes */ +        LLVMAddCFGSimplificationPass(llvm->pass); -      LLVMAddPromoteMemoryToRegisterPass(llvm->pass); -      LLVMAddConstantPropagationPass(llvm->pass); + +      if (HAVE_LLVM >= 0x207 && sizeof(void*) == 4) { +         /* For LLVM >= 2.7 and 32-bit build, use this order of passes to +          * avoid generating bad code. +          * Test with piglit glsl-vs-sqrt-zero test. +          */ +         LLVMAddConstantPropagationPass(llvm->pass); +         LLVMAddPromoteMemoryToRegisterPass(llvm->pass); +      } +      else { +         LLVMAddPromoteMemoryToRegisterPass(llvm->pass); +         LLVMAddConstantPropagationPass(llvm->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) | 
