Module: Mesa Branch: master Commit: a31bcf2be6eeb74797ee1c989f866e3365c670e1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a31bcf2be6eeb74797ee1c989f866e3365c670e1
Author: Samuel Pitoiset <[email protected]> Date: Thu Jan 23 12:27:07 2020 +0100 ac/llvm: fix missing casts in ac_build_readlane() Because ac_build_optimization_barrier() overwrites the original src_type, we have to keep track of it before emitting that barrier. Otherwise, wrong conversions are expected for pointers or small bitsizes. By doing this, we no longer need to do the cast dance in ac_build_readlane_no_opt_barrier(), it was just necessary for ac_build_optimization_barrier(). This fixes a bunch of crashes with subgroups related tests when RADV_DEBUG=checkir is enabled, and it also fixes a compiler crash with The Surge 2. Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2395 Fixes: 0f45d4dc2b1 ("ac: add ac_build_readlane without optimization barrier") Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3535> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3535> --- src/amd/llvm/ac_llvm_build.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/amd/llvm/ac_llvm_build.c b/src/amd/llvm/ac_llvm_build.c index 33cec6b878d..8d706944a45 100644 --- a/src/amd/llvm/ac_llvm_build.c +++ b/src/amd/llvm/ac_llvm_build.c @@ -3623,8 +3623,6 @@ _ac_build_readlane(struct ac_llvm_context *ctx, LLVMValueRef src, LLVMValueRef l LLVMValueRef ac_build_readlane_no_opt_barrier(struct ac_llvm_context *ctx, LLVMValueRef src, LLVMValueRef lane) { - LLVMTypeRef src_type = LLVMTypeOf(src); - src = ac_to_integer(ctx, src); unsigned bits = LLVMGetIntTypeWidth(LLVMTypeOf(src)); LLVMValueRef ret; @@ -3645,17 +3643,22 @@ LLVMValueRef ac_build_readlane_no_opt_barrier(struct ac_llvm_context *ctx, ret = _ac_build_readlane(ctx, src, lane); } - if (LLVMGetTypeKind(src_type) == LLVMPointerTypeKind) - return LLVMBuildIntToPtr(ctx->builder, ret, src_type, ""); - return LLVMBuildBitCast(ctx->builder, ret, src_type, ""); + return ret; } LLVMValueRef ac_build_readlane(struct ac_llvm_context *ctx, LLVMValueRef src, LLVMValueRef lane) { + LLVMTypeRef src_type = LLVMTypeOf(src); + src = ac_to_integer(ctx, src); + LLVMValueRef ret; + ac_build_optimization_barrier(ctx, &src); - return ac_build_readlane_no_opt_barrier(ctx, src, lane); + ret = ac_build_readlane_no_opt_barrier(ctx, src, lane); + if (LLVMGetTypeKind(src_type) == LLVMPointerTypeKind) + return LLVMBuildIntToPtr(ctx->builder, ret, src_type, ""); + return LLVMBuildBitCast(ctx->builder, ret, src_type, ""); } LLVMValueRef _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
