From: Marek Olšák Date: Fri, 26 Apr 2019 20:16:58 +0000 (-0400) Subject: radeonsi: use new atomic LLVM helpers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bfd3d504875a1f0c73ab1220c4a2a80c13a1703a;p=mesa.git radeonsi: use new atomic LLVM helpers This depends on "ac,ac/nir: use a better sync scope for shared atomics" --- diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c index eb90bfb10ff..5e540fc5098 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c @@ -783,6 +783,7 @@ static void atomic_emit_memory(struct si_shader_context *ctx, LLVMBuilderRef builder = ctx->ac.builder; const struct tgsi_full_instruction * inst = emit_data->inst; LLVMValueRef ptr, result, arg; + const char *sync_scope = HAVE_LLVM >= 0x0900 ? "workgroup-one-as" : "workgroup"; ptr = get_memory_ptr(ctx, inst, ctx->i32, 1); @@ -796,11 +797,8 @@ static void atomic_emit_memory(struct si_shader_context *ctx, new_data = ac_to_integer(&ctx->ac, new_data); - result = LLVMBuildAtomicCmpXchg(builder, ptr, arg, new_data, - LLVMAtomicOrderingSequentiallyConsistent, - LLVMAtomicOrderingSequentiallyConsistent, - false); - + result = ac_build_atomic_cmp_xchg(&ctx->ac, ptr, arg, new_data, + sync_scope); result = LLVMBuildExtractValue(builder, result, 0, ""); } else { LLVMAtomicRMWBinOp op; @@ -837,9 +835,7 @@ static void atomic_emit_memory(struct si_shader_context *ctx, unreachable("unknown atomic opcode"); } - result = LLVMBuildAtomicRMW(builder, op, ptr, arg, - LLVMAtomicOrderingSequentiallyConsistent, - false); + result = ac_build_atomic_rmw(&ctx->ac, op, ptr, arg, sync_scope); } emit_data->output[emit_data->chan] = LLVMBuildBitCast(builder, result, ctx->f32, "");