nir: rename nir_op_fne to nir_op_fneu
[mesa.git] / src / amd / llvm / ac_nir_to_llvm.c
index ef6ab7cea92fcc19fcf01880c7496ab27a47b12c..37a483e3ba6bf4720eeb6ca0ff60bd77721adbcd 100644 (file)
@@ -771,7 +771,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr)
        case nir_op_feq32:
                result = emit_float_cmp(&ctx->ac, LLVMRealOEQ, src[0], src[1]);
                break;
-       case nir_op_fne32:
+       case nir_op_fneu32:
                result = emit_float_cmp(&ctx->ac, LLVMRealUNE, src[0], src[1]);
                break;
        case nir_op_flt32:
@@ -2418,6 +2418,9 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx,
                                LLVMValueRef offset = LLVMConstInt(ctx->ac.i32, i * stride / natural_stride, 0);
                                values[i] = LLVMBuildLoad(ctx->ac.builder,
                                                          ac_build_gep_ptr(&ctx->ac, address, offset), "");
+
+                               if (nir_intrinsic_access(instr) & (ACCESS_COHERENT | ACCESS_VOLATILE))
+                                       LLVMSetOrdering(values[i], LLVMAtomicOrderingMonotonic);
                        }
                        return ac_build_gather_values(&ctx->ac, values, instr->dest.ssa.num_components);
                } else {
@@ -2425,6 +2428,9 @@ static LLVMValueRef visit_load_var(struct ac_nir_context *ctx,
                                                                LLVMGetPointerAddressSpace(LLVMTypeOf(address)));
                        address = LLVMBuildBitCast(ctx->ac.builder, address, ptr_type , "");
                        LLVMValueRef val = LLVMBuildLoad(ctx->ac.builder, address, "");
+
+                       if (nir_intrinsic_access(instr) & (ACCESS_COHERENT | ACCESS_VOLATILE))
+                               LLVMSetOrdering(val, LLVMAtomicOrderingMonotonic);
                        return val;
                }
        }
@@ -2580,7 +2586,10 @@ visit_store_var(struct ac_nir_context *ctx,
 
                        val = LLVMBuildBitCast(ctx->ac.builder, val,
                                               LLVMGetElementType(LLVMTypeOf(address)), "");
-                       LLVMBuildStore(ctx->ac.builder, val, address);
+                       LLVMValueRef store = LLVMBuildStore(ctx->ac.builder, val, address);
+
+                       if (nir_intrinsic_access(instr) & (ACCESS_COHERENT | ACCESS_VOLATILE))
+                               LLVMSetOrdering(store, LLVMAtomicOrderingMonotonic);
                } else {
                        LLVMTypeRef val_type = LLVMTypeOf(val);
                        if (LLVMGetTypeKind(LLVMTypeOf(val)) == LLVMVectorTypeKind)
@@ -2600,7 +2609,10 @@ visit_store_var(struct ac_nir_context *ctx,
                                                                        chan);
                                src = LLVMBuildBitCast(ctx->ac.builder, src,
                                                       LLVMGetElementType(LLVMTypeOf(ptr)), "");
-                               LLVMBuildStore(ctx->ac.builder, src, ptr);
+                               LLVMValueRef store = LLVMBuildStore(ctx->ac.builder, src, ptr);
+
+                               if (nir_intrinsic_access(instr) & (ACCESS_COHERENT | ACCESS_VOLATILE))
+                                       LLVMSetOrdering(store, LLVMAtomicOrderingMonotonic);
                        }
                }
                break;
@@ -2803,18 +2815,17 @@ static LLVMValueRef visit_image_load(struct ac_nir_context *ctx,
        LLVMValueRef res;
 
        enum glsl_sampler_dim dim;
-       enum gl_access_qualifier access;
+       enum gl_access_qualifier access = nir_intrinsic_access(instr);
        bool is_array;
        if (bindless) {
                dim = nir_intrinsic_image_dim(instr);
-               access = nir_intrinsic_access(instr);
                is_array = nir_intrinsic_image_array(instr);
        } else {
                const nir_deref_instr *image_deref = get_image_deref(instr);
                const struct glsl_type *type = image_deref->type;
                const nir_variable *var = nir_deref_instr_get_variable(image_deref);
                dim = glsl_get_sampler_dim(type);
-               access = var->data.access;
+               access |= var->data.access;
                is_array = glsl_sampler_type_is_array(type);
        }
 
@@ -2876,19 +2887,18 @@ static void visit_image_store(struct ac_nir_context *ctx,
         }
 
        enum glsl_sampler_dim dim;
-       enum gl_access_qualifier access;
+       enum gl_access_qualifier access = nir_intrinsic_access(instr);
        bool is_array;
 
        if (bindless) {
                dim = nir_intrinsic_image_dim(instr);
-               access = nir_intrinsic_access(instr);
                is_array = nir_intrinsic_image_array(instr);
        } else {
                const nir_deref_instr *image_deref = get_image_deref(instr);
                const struct glsl_type *type = image_deref->type;
                const nir_variable *var = nir_deref_instr_get_variable(image_deref);
                dim = glsl_get_sampler_dim(type);
-               access = var->data.access;
+               access |= var->data.access;
                is_array = glsl_sampler_type_is_array(type);
        }
 
@@ -3134,6 +3144,7 @@ static LLVMValueRef visit_image_size(struct ac_nir_context *ctx,
                args.dmask = 0xf;
                args.resource = get_image_descriptor(ctx, instr, dynamic_index, AC_DESC_IMAGE, false);
                args.opcode = ac_image_get_resinfo;
+               assert(nir_src_as_uint(instr->src[1]) == 0);
                args.lod = ctx->ac.i32_0;
                args.attributes = AC_FUNC_ATTR_READNONE;