Other than that, the patch is: Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Marek On Tue, Mar 20, 2018 at 10:25 AM, Marek Olšák <mar...@gmail.com> wrote: > On Fri, Mar 16, 2018 at 5:50 AM, Daniel Schürmann < > daniel.schuerm...@campus.tu-berlin.de> wrote: > >> Signed-off-by: Daniel Schürmann <daniel.schuerm...@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@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev >> > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev