radeonsi: use new atomic LLVM helpers
authorMarek Olšák <marek.olsak@amd.com>
Fri, 26 Apr 2019 20:16:58 +0000 (16:16 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 2 May 2019 01:16:13 +0000 (21:16 -0400)
This depends on "ac,ac/nir: use a better sync scope for shared atomics"

src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c

index eb90bfb10ff594adb863f16facb5b6a4af04ee64..5e540fc509821463ee27c2a0cc7b8703f5b4f63b 100644 (file)
@@ -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, "");