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