mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
ac/llvm: Remove global access ops handling
They have been lowered in nir v2: Keep the _amd versions v3: Fix if's with removed ops Signed-off-by: Mike Lothian <mike@fireburn.co.uk> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29280>
This commit is contained in:
parent
d2e80e57a3
commit
3be436830e
1 changed files with 10 additions and 22 deletions
|
|
@ -1976,26 +1976,20 @@ static LLVMValueRef get_global_address(struct ac_nir_context *ctx,
|
||||||
nir_intrinsic_instr *instr,
|
nir_intrinsic_instr *instr,
|
||||||
LLVMTypeRef type)
|
LLVMTypeRef type)
|
||||||
{
|
{
|
||||||
bool is_store = instr->intrinsic == nir_intrinsic_store_global ||
|
bool is_store = instr->intrinsic == nir_intrinsic_store_global_amd;
|
||||||
instr->intrinsic == nir_intrinsic_store_global_amd;
|
|
||||||
LLVMValueRef addr = get_src(ctx, instr->src[is_store ? 1 : 0]);
|
LLVMValueRef addr = get_src(ctx, instr->src[is_store ? 1 : 0]);
|
||||||
|
|
||||||
LLVMTypeRef ptr_type = LLVMPointerType(type, AC_ADDR_SPACE_GLOBAL);
|
LLVMTypeRef ptr_type = LLVMPointerType(type, AC_ADDR_SPACE_GLOBAL);
|
||||||
|
|
||||||
if (nir_intrinsic_has_base(instr)) {
|
uint32_t base = nir_intrinsic_base(instr);
|
||||||
/* _amd variants */
|
unsigned num_src = nir_intrinsic_infos[instr->intrinsic].num_srcs;
|
||||||
uint32_t base = nir_intrinsic_base(instr);
|
LLVMValueRef offset = get_src(ctx, instr->src[num_src - 1]);
|
||||||
unsigned num_src = nir_intrinsic_infos[instr->intrinsic].num_srcs;
|
offset = LLVMBuildAdd(ctx->ac.builder, offset, LLVMConstInt(ctx->ac.i32, base, false), "");
|
||||||
LLVMValueRef offset = get_src(ctx, instr->src[num_src - 1]);
|
|
||||||
offset = LLVMBuildAdd(ctx->ac.builder, offset, LLVMConstInt(ctx->ac.i32, base, false), "");
|
|
||||||
|
|
||||||
LLVMTypeRef i8_ptr_type = LLVMPointerType(ctx->ac.i8, AC_ADDR_SPACE_GLOBAL);
|
LLVMTypeRef i8_ptr_type = LLVMPointerType(ctx->ac.i8, AC_ADDR_SPACE_GLOBAL);
|
||||||
addr = LLVMBuildIntToPtr(ctx->ac.builder, addr, i8_ptr_type, "");
|
addr = LLVMBuildIntToPtr(ctx->ac.builder, addr, i8_ptr_type, "");
|
||||||
addr = LLVMBuildGEP2(ctx->ac.builder, ctx->ac.i8, addr, &offset, 1, "");
|
addr = LLVMBuildGEP2(ctx->ac.builder, ctx->ac.i8, addr, &offset, 1, "");
|
||||||
return LLVMBuildPointerCast(ctx->ac.builder, addr, ptr_type, "");
|
return LLVMBuildPointerCast(ctx->ac.builder, addr, ptr_type, "");
|
||||||
} else {
|
|
||||||
return LLVMBuildIntToPtr(ctx->ac.builder, addr, ptr_type, "");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static LLVMValueRef visit_load_global(struct ac_nir_context *ctx,
|
static LLVMValueRef visit_load_global(struct ac_nir_context *ctx,
|
||||||
|
|
@ -2064,8 +2058,7 @@ static LLVMValueRef visit_global_atomic(struct ac_nir_context *ctx,
|
||||||
|
|
||||||
LLVMValueRef addr = get_global_address(ctx, instr, data_type);
|
LLVMValueRef addr = get_global_address(ctx, instr, data_type);
|
||||||
|
|
||||||
if (instr->intrinsic == nir_intrinsic_global_atomic_swap ||
|
if (instr->intrinsic == nir_intrinsic_global_atomic_swap_amd) {
|
||||||
instr->intrinsic == nir_intrinsic_global_atomic_swap_amd) {
|
|
||||||
LLVMValueRef data1 = get_src(ctx, instr->src[2]);
|
LLVMValueRef data1 = get_src(ctx, instr->src[2]);
|
||||||
result = ac_build_atomic_cmp_xchg(&ctx->ac, addr, data, data1, sync_scope);
|
result = ac_build_atomic_cmp_xchg(&ctx->ac, addr, data, data1, sync_scope);
|
||||||
result = LLVMBuildExtractValue(ctx->ac.builder, result, 0, "");
|
result = LLVMBuildExtractValue(ctx->ac.builder, result, 0, "");
|
||||||
|
|
@ -3141,17 +3134,12 @@ static bool visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
||||||
case nir_intrinsic_load_ssbo:
|
case nir_intrinsic_load_ssbo:
|
||||||
result = visit_load_buffer(ctx, instr);
|
result = visit_load_buffer(ctx, instr);
|
||||||
break;
|
break;
|
||||||
case nir_intrinsic_load_global_constant:
|
|
||||||
case nir_intrinsic_load_global:
|
|
||||||
case nir_intrinsic_load_global_amd:
|
case nir_intrinsic_load_global_amd:
|
||||||
result = visit_load_global(ctx, instr);
|
result = visit_load_global(ctx, instr);
|
||||||
break;
|
break;
|
||||||
case nir_intrinsic_store_global:
|
|
||||||
case nir_intrinsic_store_global_amd:
|
case nir_intrinsic_store_global_amd:
|
||||||
visit_store_global(ctx, instr);
|
visit_store_global(ctx, instr);
|
||||||
break;
|
break;
|
||||||
case nir_intrinsic_global_atomic:
|
|
||||||
case nir_intrinsic_global_atomic_swap:
|
|
||||||
case nir_intrinsic_global_atomic_amd:
|
case nir_intrinsic_global_atomic_amd:
|
||||||
case nir_intrinsic_global_atomic_swap_amd:
|
case nir_intrinsic_global_atomic_swap_amd:
|
||||||
result = visit_global_atomic(ctx, instr);
|
result = visit_global_atomic(ctx, instr);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue