ac/llvm: fix pointer type for global atomics
authorRhys Perry <pendingchaos02@gmail.com>
Wed, 27 Nov 2019 16:49:33 +0000 (16:49 +0000)
committerRhys Perry <pendingchaos02@gmail.com>
Mon, 2 Dec 2019 10:48:18 +0000 (10:48 +0000)
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/llvm/ac_nir_to_llvm.c

index db3ed1436b744bdccc91d97082633c314e4c0b10..ddf9f09fe0cf670185f8ffdd1bd8b64e4aeb27e6 100644 (file)
@@ -3022,6 +3022,12 @@ static LLVMValueRef visit_var_atomic(struct ac_nir_context *ctx,
 
        const char *sync_scope = LLVM_VERSION_MAJOR >= 9 ? "workgroup-one-as" : "workgroup";
 
+       nir_deref_instr *deref = nir_instr_as_deref(instr->src[0].ssa->parent_instr);
+       if (deref->mode == nir_var_mem_global) {
+               LLVMTypeRef ptr_type = LLVMPointerType(LLVMTypeOf(src), LLVMGetPointerAddressSpace(LLVMTypeOf(ptr)));
+               ptr = LLVMBuildBitCast(ctx->ac.builder, ptr, ptr_type , "");
+       }
+
        if (instr->intrinsic == nir_intrinsic_shared_atomic_comp_swap ||
            instr->intrinsic == nir_intrinsic_deref_atomic_comp_swap) {
                LLVMValueRef src1 = get_src(ctx, instr->src[src_idx + 1]);