diff options
author | Roland Scheidegger <[email protected]> | 2016-12-21 04:52:16 +0100 |
---|---|---|
committer | Roland Scheidegger <[email protected]> | 2017-01-05 23:59:38 +0100 |
commit | db7e786a2552d808e512ba33fbc9b19d8bb37108 (patch) | |
tree | dee13e7ebefbe6e98096a3a58a33c738267be9ef /src/gallium/auxiliary | |
parent | a8eeb089c0e2e171ffaf8cba3cd0e5aea97b388f (diff) |
llvmpipe: (trivial) minimally simplify mask construction
simd instruction sets usually have comparisons for equal, not unequal.
So use a different comparison against the mask itself - which also means
we don't need a all-zero as well as a all-one (for the pxor) reg.
Also add code to avoid scalar expansion of i1 values which we definitely
shouldn't do. There's problems with this though with llvm select
interaction, so it's disabled (basically using llvm select instead of
intrinsics may still produce atrocious code, even in cases where we
figured it should not, albeit I think this could probably be fixed
with some better selection of optimization passes, but I have zero
idea there really).
Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_logic.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c b/src/gallium/auxiliary/gallivm/lp_bld_logic.c index 1a50e82c241..524917abe27 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c @@ -327,6 +327,8 @@ lp_build_select(struct lp_build_context *bld, * supported yet for a long time, and LLVM will generate poor code when * the mask is not the result of a comparison. * Also, llvm 3.7 may miscompile them (bug 94972). + * XXX: Even if the instruction was an SExt, this may still produce + * terrible code. Try piglit stencil-twoside. */ /* Convert the mask to a vector of booleans. |