ac/nir: remove the bitfield_extract workaround for LLVM 8
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 19 Dec 2018 16:52:54 +0000 (17:52 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 20 Dec 2018 08:40:16 +0000 (09:40 +0100)
This workaround has been introduced by 3d41757788a and it
is no longer needed since LLVM r346422.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_nir_to_llvm.c

index 225c930d8961cf945af81e02c2cec849dae08c85..81b76f65b8247958e65ccd638ac76e2081b53c4f 100644 (file)
@@ -429,16 +429,22 @@ static LLVMValueRef emit_bitfield_extract(struct ac_llvm_context *ctx,
 {
        LLVMValueRef result;
 
-       /* FIXME: LLVM 7+ returns incorrect result when count is 0.
-        * https://bugs.freedesktop.org/show_bug.cgi?id=107276
-        */
-       LLVMValueRef zero = ctx->i32_0;
-       LLVMValueRef icond1 = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], LLVMConstInt(ctx->i32, 32, false), "");
-       LLVMValueRef icond2 = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], zero, "");
+       if (HAVE_LLVM >= 0x0800) {
+               LLVMValueRef icond = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], LLVMConstInt(ctx->i32, 32, false), "");
+               result = ac_build_bfe(ctx, srcs[0], srcs[1], srcs[2], is_signed);
+               result = LLVMBuildSelect(ctx->builder, icond, srcs[0], result, "");
+       } else {
+               /* FIXME: LLVM 7+ returns incorrect result when count is 0.
+                * https://bugs.freedesktop.org/show_bug.cgi?id=107276
+                */
+               LLVMValueRef zero = ctx->i32_0;
+               LLVMValueRef icond1 = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], LLVMConstInt(ctx->i32, 32, false), "");
+               LLVMValueRef icond2 = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], zero, "");
 
-       result = ac_build_bfe(ctx, srcs[0], srcs[1], srcs[2], is_signed);
-       result = LLVMBuildSelect(ctx->builder, icond1, srcs[0], result, "");
-       result = LLVMBuildSelect(ctx->builder, icond2, zero, result, "");
+               result = ac_build_bfe(ctx, srcs[0], srcs[1], srcs[2], is_signed);
+               result = LLVMBuildSelect(ctx->builder, icond1, srcs[0], result, "");
+               result = LLVMBuildSelect(ctx->builder, icond2, zero, result, "");
+       }
 
        return result;
 }