radv/ac: use shared umsb helper.
authorDave Airlie <airlied@redhat.com>
Thu, 16 Feb 2017 03:54:01 +0000 (03:54 +0000)
committerDave Airlie <airlied@redhat.com>
Thu, 16 Feb 2017 22:57:16 +0000 (22:57 +0000)
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/common/ac_nir_to_llvm.c

index d3c02ceb4a4c91c0e19d093264a55558a99906f5..b3dc63c602d99592b3008bdac2a4f60cd91ce16a 100644 (file)
@@ -936,23 +936,7 @@ static LLVMValueRef emit_ifind_msb(struct nir_to_llvm_context *ctx,
 static LLVMValueRef emit_ufind_msb(struct nir_to_llvm_context *ctx,
                                   LLVMValueRef src0)
 {
-       LLVMValueRef args[2] = {
-               src0,
-               ctx->i32one,
-       };
-       LLVMValueRef msb = ac_emit_llvm_intrinsic(&ctx->ac, "llvm.ctlz.i32",
-                                              ctx->i32, args, ARRAY_SIZE(args),
-                                              AC_FUNC_ATTR_READNONE);
-
-       /* The HW returns the last bit index from MSB, but NIR wants
-        * the index from LSB. Invert it by doing "31 - msb". */
-       msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),
-                          msb, "");
-
-       return LLVMBuildSelect(ctx->builder,
-                              LLVMBuildICmp(ctx->builder, LLVMIntEQ, src0,
-                                            ctx->i32zero, ""),
-                              LLVMConstInt(ctx->i32, -1, true), msb, "");
+       return ac_emit_umsb(&ctx->ac, src0, ctx->i32);
 }
 
 static LLVMValueRef emit_minmax_int(struct nir_to_llvm_context *ctx,