diff options
author | Jose Fonseca <jfonseca@vmware.com> | 2016-04-03 22:52:53 +0100 |
---|---|---|
committer | Jose Fonseca <jfonseca@vmware.com> | 2016-04-04 00:06:09 +0100 |
commit | 7ad49daca61a638f5029fedacd98357943c67ea8 (patch) | |
tree | 708db1f0e1874cfce8928ad668f99a4c7a09139c /src/gallium/auxiliary/gallivm/lp_bld_arit.c | |
parent | 7af12a8dc6c96b8b0da802b3b25fbd6a197b2d62 (diff) | |
download | external_mesa3d-7ad49daca61a638f5029fedacd98357943c67ea8.zip external_mesa3d-7ad49daca61a638f5029fedacd98357943c67ea8.tar.gz external_mesa3d-7ad49daca61a638f5029fedacd98357943c67ea8.tar.bz2 |
gallivm: Introduce lp_format_intrinsic.
For adding .v4f32 like suffixes to intrinsics, taking special care for
scalar case, which was being often neglected.
This fixes invalid IR when doing mipmap filtering on SSE2 (the only
case where we'd use intrinsics with scalars.)
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Diffstat (limited to 'src/gallium/auxiliary/gallivm/lp_bld_arit.c')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_arit.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c index 587c83a..0c43617 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c @@ -1493,7 +1493,7 @@ lp_build_abs(struct lp_build_context *bld, if(type.floating) { char intrinsic[32]; - util_snprintf(intrinsic, sizeof intrinsic, "llvm.fabs.v%uf%u", type.length, type.width); + lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.fabs", vec_type); return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a); } @@ -1880,9 +1880,7 @@ lp_build_round_arch(struct lp_build_context *bld, break; } - util_snprintf(intrinsic, sizeof intrinsic, "%s.v%uf%u", - intrinsic_root, type.length, type.width); - + lp_format_intrinsic(intrinsic, sizeof intrinsic, intrinsic_root, bld->vec_type); return lp_build_intrinsic_unary(builder, intrinsic, bld->vec_type, a); } else /* (util_cpu_caps.has_altivec) */ @@ -2026,7 +2024,7 @@ lp_build_floor(struct lp_build_context *bld, if (type.width != 32) { char intrinsic[32]; - util_snprintf(intrinsic, sizeof intrinsic, "llvm.floor.v%uf%u", type.length, type.width); + lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.floor", vec_type); return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a); } @@ -2101,7 +2099,7 @@ lp_build_ceil(struct lp_build_context *bld, if (type.width != 32) { char intrinsic[32]; - util_snprintf(intrinsic, sizeof intrinsic, "llvm.ceil.v%uf%u", type.length, type.width); + lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.ceil", vec_type); return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a); } @@ -2438,15 +2436,8 @@ lp_build_sqrt(struct lp_build_context *bld, assert(lp_check_value(type, a)); - /* TODO: optimize the constant case */ - assert(type.floating); - if (type.length == 1) { - util_snprintf(intrinsic, sizeof intrinsic, "llvm.sqrt.f%u", type.width); - } - else { - util_snprintf(intrinsic, sizeof intrinsic, "llvm.sqrt.v%uf%u", type.length, type.width); - } + lp_format_intrinsic(intrinsic, sizeof intrinsic, "llvm.sqrt", vec_type); return lp_build_intrinsic_unary(builder, intrinsic, vec_type, a); } |