ac: add 8-bit and 64-bit support to ac_build_bitfield_reverse()
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 1 Apr 2019 14:18:10 +0000 (16:18 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 1 Apr 2019 16:53:57 +0000 (18:53 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/common/ac_llvm_build.c

index 8d749cc8eb09b42b68ae4d555f5db1b48ec26769..54e90288bda5d19b515682616df02698ea0a3ae6 100644 (file)
@@ -2585,6 +2585,13 @@ LLVMValueRef ac_build_bitfield_reverse(struct ac_llvm_context *ctx,
        bitsize = ac_get_elem_bits(ctx, LLVMTypeOf(src0));
 
        switch (bitsize) {
+       case 64:
+               result = ac_build_intrinsic(ctx, "llvm.bitreverse.i64", ctx->i64,
+                                           (LLVMValueRef []) { src0 }, 1,
+                                           AC_FUNC_ATTR_READNONE);
+
+               result = LLVMBuildTrunc(ctx->builder, result, ctx->i32, "");
+               break;
        case 32:
                result = ac_build_intrinsic(ctx, "llvm.bitreverse.i32", ctx->i32,
                                            (LLVMValueRef []) { src0 }, 1,
@@ -2595,6 +2602,13 @@ LLVMValueRef ac_build_bitfield_reverse(struct ac_llvm_context *ctx,
                                            (LLVMValueRef []) { src0 }, 1,
                                            AC_FUNC_ATTR_READNONE);
 
+               result = LLVMBuildZExt(ctx->builder, result, ctx->i32, "");
+               break;
+       case 8:
+               result = ac_build_intrinsic(ctx, "llvm.bitreverse.i8", ctx->i8,
+                                           (LLVMValueRef []) { src0 }, 1,
+                                           AC_FUNC_ATTR_READNONE);
+
                result = LLVMBuildZExt(ctx->builder, result, ctx->i32, "");
                break;
        default: