OSDN Git Service

ac: fix ac_build_umsb() for 16-bit integer type
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 26 Mar 2019 10:34:46 +0000 (11:34 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 1 Apr 2019 07:51:56 +0000 (09:51 +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 20c722e..fe280b3 100644 (file)
@@ -1970,7 +1970,12 @@ ac_build_umsb(struct ac_llvm_context *ctx,
        /* 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, highest_bit, msb, "");
-       msb = LLVMBuildTruncOrBitCast(ctx->builder, msb, ctx->i32, "");
+
+       if (bitsize == 64) {
+               msb = LLVMBuildTrunc(ctx->builder, msb, ctx->i32, "");
+       } else if (bitsize == 16) {
+               msb = LLVMBuildSExt(ctx->builder, msb, ctx->i32, "");
+       }
 
        /* check for zero */
        return LLVMBuildSelect(ctx->builder,