[Mesa-dev] [PATCH] gallivm: don't use integer min/max sse intrinsics with llvm >= 3.9

Jose Fonseca jfonseca at vmware.com
Mon Jun 20 09:21:01 UTC 2016


On 19/06/16 03:06, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> Apparently, these are deprecated. There's some AutoUpgrade feature which
> is supposed to promote these to cmp/select, which apparently doesn't work
> with jit code. It is possible it's not actually even meant to work (see
> the bug filed against llvm which couldn't provide an answer neither)
> but in any case this is meant to be only temporary unless the intrinsics
> are really illegal. So, just use the fallback code (which should be cmp/select,
> we're actually doing cmp/sext/trunc/select, but in any case llvm 3.9 manages
> to optimize this back to pmin/pmax in the end).
>
> This addresses https://llvm.org/bugs/show_bug.cgi?id=28176
>
> CC: <mesa-stable at lists.freedesktop.org>
> ---
>   src/gallium/auxiliary/gallivm/lp_bld_arit.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> index 114c766..c4e35a2 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> @@ -142,7 +142,8 @@ lp_build_min_simple(struct lp_build_context *bld,
>            intrinsic = "llvm.ppc.altivec.vminfp";
>            intr_size = 128;
>         }
> -   } else if (util_cpu_caps.has_sse2 && type.length >= 2) {
> +   } else if (HAVE_LLVM < 0x0309 &&
> +              util_cpu_caps.has_sse2 && type.length >= 2) {
>         intr_size = 128;
>         if ((type.width == 8 || type.width == 16) &&
>             (type.width * type.length <= 64) &&
> @@ -345,7 +346,8 @@ lp_build_max_simple(struct lp_build_context *bld,
>            intrinsic = "llvm.ppc.altivec.vmaxfp";
>            intr_size = 128;
>         }
> -   } else if (util_cpu_caps.has_sse2 && type.length >= 2) {
> +   } else if (HAVE_LLVM < 0x0309 &&
> +              util_cpu_caps.has_sse2 && type.length >= 2) {
>         intr_size = 128;
>         if ((type.width == 8 || type.width == 16) &&
>             (type.width * type.length <= 64) &&
>

Thanks for looking into this.

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

There are other intrinsics in lp_build_min_simple , and from the sound 
of it it sounds they'll all go away.

Jose


More information about the mesa-dev mailing list