[Mesa-dev] [PATCH v2 4/7] ac: make ballot and umsb capable of 64bit inputs
Marek Olšák
maraeo at gmail.com
Tue Mar 20 14:25:29 UTC 2018
On Fri, Mar 16, 2018 at 5:50 AM, Daniel Schürmann <
daniel.schuermann at campus.tu-berlin.de> wrote:
> Signed-off-by: Daniel Schürmann <daniel.schuermann at campus.tu-berlin.de>
> ---
> src/amd/common/ac_llvm_build.c | 33 ++++++++++++++++++++++++---------
> 1 file changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build
> .c
> index 1ae2b9dd17..67d15d5cb3 100644
> --- a/src/amd/common/ac_llvm_build.c
> +++ b/src/amd/common/ac_llvm_build.c
> @@ -407,8 +407,7 @@ ac_build_ballot(struct ac_llvm_context *ctx,
> */
> ac_build_optimization_barrier(ctx, &args[0]);
>
> - if (LLVMTypeOf(args[0]) != ctx->i32)
> - args[0] = LLVMBuildBitCast(ctx->builder, args[0],
> ctx->i32, "");
> + args[0] = ac_to_integer(ctx, args[0]);
>
> return ac_build_intrinsic(ctx,
> "llvm.amdgcn.icmp.i32",
> @@ -1267,23 +1266,39 @@ ac_build_umsb(struct ac_llvm_context *ctx,
> LLVMValueRef arg,
> LLVMTypeRef dst_type)
> {
> - LLVMValueRef args[2] = {
> + const char *intrin_name;
> + LLVMTypeRef type;
> + LLVMValueRef highest_bit;
> + LLVMValueRef zero;
>
add an empty line after declarations
> + if (ac_get_elem_bits(ctx, LLVMTypeOf(arg)) == 64) {
> + intrin_name = "llvm.ctlz.i64";
> + type = ctx->i64;
> + highest_bit = LLVMConstInt(ctx->i64, 63, false);
> + zero = ctx->i64_0;
> + } else {
> + intrin_name = "llvm.ctlz.i32";
> + type = ctx->i32;
> + highest_bit = LLVMConstInt(ctx->i32, 31, false);
> + zero = ctx->i32_0;
> + }
> +
> + LLVMValueRef params[2] = {
> arg,
> ctx->i1true,
> };
> - LLVMValueRef msb = ac_build_intrinsic(ctx, "llvm.ctlz.i32",
> - dst_type, args,
> ARRAY_SIZE(args),
> +
> + LLVMValueRef msb = ac_build_intrinsic(ctx, intrin_name, type,
> + params, 2,
> AC_FUNC_ATTR_READNONE);
>
> /* The HW returns the last bit index from MSB, but TGSI/NIR wants
> * the index from LSB. Invert it by doing "31 - msb". */
> - msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),
> - msb, "");
> + msb = LLVMBuildSub(ctx->builder, highest_bit, msb, "");
> + msb = LLVMBuildTruncOrBitCast(ctx->builder, msb, ctx->i32, "");
>
> /* check for zero */
> return LLVMBuildSelect(ctx->builder,
> - LLVMBuildICmp(ctx->builder, LLVMIntEQ, arg,
> - LLVMConstInt(ctx->i32, 0, 0),
> ""),
> + LLVMBuildICmp(ctx->builder, LLVMIntEQ, arg,
> zero, ""),
> LLVMConstInt(ctx->i32, -1, true), msb, "");
> }
>
> --
> 2.14.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180320/a48d140f/attachment.html>
More information about the mesa-dev
mailing list