diff options
author | José Fonseca <[email protected]> | 2013-04-19 14:04:15 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2013-04-20 23:25:36 +0100 |
commit | 1e266c7ef01251ecf72347a2ba1d174b035cbe3b (patch) | |
tree | fdb521772c6fc645b48045a562757a9035a4ad3b /src/gallium/auxiliary/gallivm | |
parent | 26b39df08f480b3f1d71608ef3c2b56b8be94f3e (diff) |
gallivm: Emit vector selects.
They are supported on LLVM 3.1, at least on x86. (I haven't tested on PPC
though.)
Actually lp_build_linear_mip_levels() already has been emitting them for
some time.
This avoids intrinsics, which tend to be an obstacle for certain
optimization passes.
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_logic.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c b/src/gallium/auxiliary/gallivm/lp_bld_logic.c index f56b61bf248..cdb7e0ad544 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c @@ -458,20 +458,10 @@ 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 >= 0x301) { /* Generate a vector select. * - * XXX: Using vector selects would avoid emitting intrinsics, but they aren't - * properly supported yet. - * - * LLVM 3.0 includes experimental support provided the -promote-elements - * options is passed to LLVM's command line (e.g., via - * llvm::cl::ParseCommandLineOptions), but resulting code quality is much - * worse, probably because some optimization passes don't know how to - * handle vector selects. - * - * See also: - * - http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-October/043659.html + * Only supported on LLVM 3.1 onwards */ /* Convert the mask to a vector of booleans. |