[Mesa-dev] [PATCH] gallivm: Use vector selects on LLVM 3.4+.

Jose Fonseca jfonseca at vmware.com
Thu Mar 31 22:42:14 UTC 2016


This is an old patch I had around.

Vector selects seem to work well from LLVM 3.4.  Using them might
improve code quality, as it might make constant propagation pass more
effective.

Tested lp_test_*
---
 src/gallium/auxiliary/gallivm/lp_bld_logic.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c b/src/gallium/auxiliary/gallivm/lp_bld_logic.c
index 19d30d0..b3694ea 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c
@@ -314,11 +314,13 @@ lp_build_select(struct lp_build_context *bld,
       mask = LLVMBuildTrunc(builder, mask, LLVMInt1TypeInContext(lc), "");
       res = LLVMBuildSelect(builder, mask, a, b, "");
    }
-   else if (0) {
+   else if (HAVE_LLVM >= 0x0304) {
       /* Generate a vector select.
        *
-       * XXX: Using vector selects would avoid emitting intrinsics, but they aren't
-       * properly supported yet.
+       * Using vector selects would avoid emitting intrinsics, but they weren't
+       * properly supported yet for a long time.
+       *
+       * LLVM 3.4 appears to reliably support it.
        *
        * LLVM 3.1 supports it, but it yields buggy code (e.g. lp_blend_test).
        *
-- 
2.5.0



More information about the mesa-dev mailing list