mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-22 09:40:40 +02:00
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: 0f45d4dc2b ("ac: add ac_build_readlane without optimization barrier")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3535>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3535>
This commit is contained in:
parent
8a135ff6e5
commit
a31bcf2be6
1 changed files with 9 additions and 6 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue