---
 src/amd/common/ac_llvm_build.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index 08c488775e..0764d8c7f9 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -1984,6 +1984,20 @@ LLVMValueRef ac_find_lsb(struct ac_llvm_context *ctx,
                         LLVMTypeRef dst_type,
                         LLVMValueRef src0)
 {
+       unsigned src0_bitsize = ac_get_elem_bits(ctx, LLVMTypeOf(src0));
+       const char *intrin_name;
+       LLVMTypeRef type;
+       LLVMValueRef zero;
+       if (src0_bitsize == 64) {
+               intrin_name = "llvm.cttz.i64";
+               type = ctx->i64;
+               zero = ctx->i64_0;
+       } else {
+               intrin_name = "llvm.cttz.i32";
+               type = ctx->i32;
+               zero = ctx->i32_0;
+       }
+
        LLVMValueRef params[2] = {
                src0,
 
@@ -1999,15 +2013,19 @@ LLVMValueRef ac_find_lsb(struct ac_llvm_context *ctx,
                LLVMConstInt(ctx->i1, 1, false),
        };
 
-       LLVMValueRef lsb = ac_build_intrinsic(ctx, "llvm.cttz.i32", ctx->i32,
+       LLVMValueRef lsb = ac_build_intrinsic(ctx, intrin_name, type,
                                              params, 2,
                                              AC_FUNC_ATTR_READNONE);
 
+       if (src0_bitsize == 64) {
+               lsb = ac_unpack_64_2x32_split_x(ctx, lsb);
+       }
+
        /* TODO: We need an intrinsic to skip this conditional. */
        /* Check for zero: */
        return LLVMBuildSelect(ctx->builder, LLVMBuildICmp(ctx->builder,
                                                           LLVMIntEQ, src0,
-                                                          ctx->i32_0, ""),
+                                                          zero, ""),
                               LLVMConstInt(ctx->i32, -1, 0), lsb, "");
 }
 
-- 
2.14.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to