Since LLVM 7.0 has already been released: Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Marek On Tue, Sep 25, 2018 at 12:46 AM Timothy Arceri <tarc...@itsqueeze.com> wrote: > > On 25/9/18 10:35 am, Marek Olšák wrote: > > Do you know what's broken in LLVM? Or is it a problem with the ISA? > > I haven't actually dug any further. Adding Samuel to see if he remembers > more. > > However according to the original bug report this is a regression when > going from LLVM 6 to LLVM 7. I see the issue on both polaris and vega. > > > > > Marek > > > > On Fri, Sep 21, 2018 at 10:38 PM, Timothy Arceri <tarc...@itsqueeze.com> > > wrote: > >> This ports the fix from 3d41757788ac. Both LLVM 7 & 8 continue > >> to have this problem. > >> > >> It fixes rendering issues in some menu and loading screens of > >> Civ VI which can be seen in the trace from bug 104602. > >> > >> Note: This does not fix the black triangles on Vega for bug > >> 104602. > >> > >> Cc: mesa-sta...@lists.freedesktop.org > >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104602 > >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107276 > >> --- > >> .../drivers/radeonsi/si_shader_tgsi_alu.c | 41 ++++++++++++++----- > >> 1 file changed, 30 insertions(+), 11 deletions(-) > >> > >> diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > >> b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > >> index f54d025aec0..814362bc963 100644 > >> --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > >> +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c > >> @@ -494,18 +494,37 @@ static void emit_bfe(const struct > >> lp_build_tgsi_action *action, > >> struct lp_build_emit_data *emit_data) > >> { > >> struct si_shader_context *ctx = si_shader_context(bld_base); > >> - LLVMValueRef bfe_sm5; > >> - LLVMValueRef cond; > >> - > >> - bfe_sm5 = ac_build_bfe(&ctx->ac, emit_data->args[0], > >> - emit_data->args[1], emit_data->args[2], > >> - emit_data->info->opcode == > >> TGSI_OPCODE_IBFE); > >> > >> - /* Correct for GLSL semantics. */ > >> - cond = LLVMBuildICmp(ctx->ac.builder, LLVMIntUGE, > >> emit_data->args[2], > >> - LLVMConstInt(ctx->i32, 32, 0), ""); > >> - emit_data->output[emit_data->chan] = > >> - LLVMBuildSelect(ctx->ac.builder, cond, emit_data->args[0], > >> bfe_sm5, ""); > >> + if (HAVE_LLVM < 0x0700) { > >> + LLVMValueRef bfe_sm5 = > >> + ac_build_bfe(&ctx->ac, emit_data->args[0], > >> + emit_data->args[1], > >> emit_data->args[2], > >> + emit_data->info->opcode == > >> TGSI_OPCODE_IBFE); > >> + > >> + /* Correct for GLSL semantics. */ > >> + LLVMValueRef cond = LLVMBuildICmp(ctx->ac.builder, > >> LLVMIntUGE, emit_data->args[2], > >> + LLVMConstInt(ctx->i32, > >> 32, 0), ""); > >> + emit_data->output[emit_data->chan] = > >> + LLVMBuildSelect(ctx->ac.builder, cond, > >> emit_data->args[0], bfe_sm5, ""); > >> + } 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 bfe_sm5 = > >> + ac_build_bfe(&ctx->ac, emit_data->args[0], > >> + emit_data->args[1], > >> emit_data->args[2], > >> + emit_data->info->opcode == > >> TGSI_OPCODE_IBFE); > >> + > >> + /* Correct for GLSL semantics. */ > >> + LLVMValueRef cond = LLVMBuildICmp(ctx->ac.builder, > >> LLVMIntUGE, emit_data->args[2], > >> + LLVMConstInt(ctx->i32, > >> 32, 0), ""); > >> + LLVMValueRef cond2 = LLVMBuildICmp(ctx->ac.builder, > >> LLVMIntEQ, emit_data->args[2], > >> + zero, ""); > >> + bfe_sm5 = LLVMBuildSelect(ctx->ac.builder, cond, > >> emit_data->args[0], bfe_sm5, ""); > >> + emit_data->output[emit_data->chan] = > >> + LLVMBuildSelect(ctx->ac.builder, cond2, zero, > >> bfe_sm5, ""); > >> + } > >> } > >> > >> /* this is ffs in C */ > >> -- > >> 2.17.1 > >> > >> _______________________________________________ > >> mesa-stable mailing list > >> mesa-sta...@lists.freedesktop.org > >> https://lists.freedesktop.org/mailman/listinfo/mesa-stable _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev