[Mesa-dev] [PATCH] gallivm: Use vector selects on LLVM 3.4+.
Jose Fonseca
jfonseca at vmware.com
Thu Mar 31 23:12:34 UTC 2016
On 01/04/16 00:04, Roland Scheidegger wrote:
> Am 01.04.2016 um 00:42 schrieb Jose Fonseca:
>> 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).
>> *
>>
>
> Wouldn't they already work with llvm 3.3 (the minimum required
> nowadays)? I think we just didn't really test after 3.1. I'm fine though
> with requiring 3.4.
I wrote this along time ago. I though I tested all earlier versions,
but I just tested 3.3 and it does seem to work alright.
LLVM 3.3 is the minimum so we could just enable this unconditionally.
> (If anything I'd be more worried about the lowering code doing awful
> things, that is when sse41 isn't available - earlier llvm versions had
> tendencies to lower things to scalars when things weren't directly
> doable with vector operations...).
> Hopefully it works on non-x86 backends too but we can't test this, so
> I'd say we just wait for the bug reports ;-).
Yes. I'll leave the other code path until the dust settles.
> Reviewed-by: Roland Scheidegger <sroland at vmware.com>
More information about the mesa-dev
mailing list