diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 83d8b9a442..35b751ad6f 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -418,10 +418,13 @@ static LLVMValueRef emit_bitfield_extract(struct ac_llvm_context *ctx, const LLVMValueRef srcs[3]) { LLVMValueRef result; - LLVMValueRef icond = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], LLVMConstInt(ctx->i32, 32, false), ""); + LLVMValueRef zero = LLVMConstInt(ctx->i32, 0, false); + 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, icond, srcs[0], result, ""); + result = LLVMBuildSelect(ctx->builder, icond1, srcs[0], result, ""); + result = LLVMBuildSelect(ctx->builder, icond2, zero, result, ""); return result; }