intel/compiler: Move atomic op translation into emit_*_atomic()

There's no need to pass both the intrinsic and an opcode computed from
that same intrinsic.  Just do it in the functions themselves.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Rohan Garg <rohan.garg@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20604>
This commit is contained in:
Kenneth Graunke
2022-12-25 00:40:37 -08:00
committed by Marge Bot
parent 5ff3d4a8a2
commit 8d2dc52a14
2 changed files with 30 additions and 18 deletions

View File

@@ -360,17 +360,17 @@ public:
void nir_emit_tes_intrinsic(const brw::fs_builder &bld, void nir_emit_tes_intrinsic(const brw::fs_builder &bld,
nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_ssbo_atomic(const brw::fs_builder &bld, void nir_emit_ssbo_atomic(const brw::fs_builder &bld,
int op, nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_ssbo_atomic_float(const brw::fs_builder &bld, void nir_emit_ssbo_atomic_float(const brw::fs_builder &bld,
int op, nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_shared_atomic(const brw::fs_builder &bld, void nir_emit_shared_atomic(const brw::fs_builder &bld,
int op, nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_shared_atomic_float(const brw::fs_builder &bld, void nir_emit_shared_atomic_float(const brw::fs_builder &bld,
int op, nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_global_atomic(const brw::fs_builder &bld, void nir_emit_global_atomic(const brw::fs_builder &bld,
int op, nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_global_atomic_float(const brw::fs_builder &bld, void nir_emit_global_atomic_float(const brw::fs_builder &bld,
int op, nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_texture(const brw::fs_builder &bld, void nir_emit_texture(const brw::fs_builder &bld,
nir_tex_instr *instr); nir_tex_instr *instr);
void nir_emit_jump(const brw::fs_builder &bld, void nir_emit_jump(const brw::fs_builder &bld,

View File

@@ -3779,12 +3779,12 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
case nir_intrinsic_shared_atomic_xor: case nir_intrinsic_shared_atomic_xor:
case nir_intrinsic_shared_atomic_exchange: case nir_intrinsic_shared_atomic_exchange:
case nir_intrinsic_shared_atomic_comp_swap: case nir_intrinsic_shared_atomic_comp_swap:
nir_emit_shared_atomic(bld, brw_aop_for_nir_intrinsic(instr), instr); nir_emit_shared_atomic(bld, instr);
break; break;
case nir_intrinsic_shared_atomic_fmin: case nir_intrinsic_shared_atomic_fmin:
case nir_intrinsic_shared_atomic_fmax: case nir_intrinsic_shared_atomic_fmax:
case nir_intrinsic_shared_atomic_fcomp_swap: case nir_intrinsic_shared_atomic_fcomp_swap:
nir_emit_shared_atomic_float(bld, brw_aop_for_nir_intrinsic(instr), instr); nir_emit_shared_atomic_float(bld, instr);
break; break;
case nir_intrinsic_load_shared: { case nir_intrinsic_load_shared: {
@@ -4879,13 +4879,13 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
case nir_intrinsic_global_atomic_xor: case nir_intrinsic_global_atomic_xor:
case nir_intrinsic_global_atomic_exchange: case nir_intrinsic_global_atomic_exchange:
case nir_intrinsic_global_atomic_comp_swap: case nir_intrinsic_global_atomic_comp_swap:
nir_emit_global_atomic(bld, brw_aop_for_nir_intrinsic(instr), instr); nir_emit_global_atomic(bld, instr);
break; break;
case nir_intrinsic_global_atomic_fadd: case nir_intrinsic_global_atomic_fadd:
case nir_intrinsic_global_atomic_fmin: case nir_intrinsic_global_atomic_fmin:
case nir_intrinsic_global_atomic_fmax: case nir_intrinsic_global_atomic_fmax:
case nir_intrinsic_global_atomic_fcomp_swap: case nir_intrinsic_global_atomic_fcomp_swap:
nir_emit_global_atomic_float(bld, brw_aop_for_nir_intrinsic(instr), instr); nir_emit_global_atomic_float(bld, instr);
break; break;
case nir_intrinsic_load_global_const_block_intel: { case nir_intrinsic_load_global_const_block_intel: {
@@ -5053,13 +5053,13 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
case nir_intrinsic_ssbo_atomic_xor: case nir_intrinsic_ssbo_atomic_xor:
case nir_intrinsic_ssbo_atomic_exchange: case nir_intrinsic_ssbo_atomic_exchange:
case nir_intrinsic_ssbo_atomic_comp_swap: case nir_intrinsic_ssbo_atomic_comp_swap:
nir_emit_ssbo_atomic(bld, brw_aop_for_nir_intrinsic(instr), instr); nir_emit_ssbo_atomic(bld, instr);
break; break;
case nir_intrinsic_ssbo_atomic_fadd: case nir_intrinsic_ssbo_atomic_fadd:
case nir_intrinsic_ssbo_atomic_fmin: case nir_intrinsic_ssbo_atomic_fmin:
case nir_intrinsic_ssbo_atomic_fmax: case nir_intrinsic_ssbo_atomic_fmax:
case nir_intrinsic_ssbo_atomic_fcomp_swap: case nir_intrinsic_ssbo_atomic_fcomp_swap:
nir_emit_ssbo_atomic_float(bld, brw_aop_for_nir_intrinsic(instr), instr); nir_emit_ssbo_atomic_float(bld, instr);
break; break;
case nir_intrinsic_get_ssbo_size: { case nir_intrinsic_get_ssbo_size: {
@@ -5956,8 +5956,10 @@ expand_to_32bit(const fs_builder &bld, const fs_reg &src)
void void
fs_visitor::nir_emit_ssbo_atomic(const fs_builder &bld, fs_visitor::nir_emit_ssbo_atomic(const fs_builder &bld,
int op, nir_intrinsic_instr *instr) nir_intrinsic_instr *instr)
{ {
int op = brw_aop_for_nir_intrinsic(instr);
/* The BTI untyped atomic messages only support 32-bit atomics. If you /* The BTI untyped atomic messages only support 32-bit atomics. If you
* just look at the big table of messages in the Vol 7 of the SKL PRM, they * just look at the big table of messages in the Vol 7 of the SKL PRM, they
* appear to exist. However, if you look at Vol 2a, there are no message * appear to exist. However, if you look at Vol 2a, there are no message
@@ -6018,8 +6020,10 @@ fs_visitor::nir_emit_ssbo_atomic(const fs_builder &bld,
void void
fs_visitor::nir_emit_ssbo_atomic_float(const fs_builder &bld, fs_visitor::nir_emit_ssbo_atomic_float(const fs_builder &bld,
int op, nir_intrinsic_instr *instr) nir_intrinsic_instr *instr)
{ {
int op = brw_aop_for_nir_intrinsic(instr);
fs_reg dest; fs_reg dest;
if (nir_intrinsic_infos[instr->intrinsic].has_dest) if (nir_intrinsic_infos[instr->intrinsic].has_dest)
dest = get_nir_dest(instr->dest); dest = get_nir_dest(instr->dest);
@@ -6067,8 +6071,10 @@ fs_visitor::nir_emit_ssbo_atomic_float(const fs_builder &bld,
void void
fs_visitor::nir_emit_shared_atomic(const fs_builder &bld, fs_visitor::nir_emit_shared_atomic(const fs_builder &bld,
int op, nir_intrinsic_instr *instr) nir_intrinsic_instr *instr)
{ {
int op = brw_aop_for_nir_intrinsic(instr);
fs_reg dest; fs_reg dest;
if (nir_intrinsic_infos[instr->intrinsic].has_dest) if (nir_intrinsic_infos[instr->intrinsic].has_dest)
dest = get_nir_dest(instr->dest); dest = get_nir_dest(instr->dest);
@@ -6130,8 +6136,10 @@ fs_visitor::nir_emit_shared_atomic(const fs_builder &bld,
void void
fs_visitor::nir_emit_shared_atomic_float(const fs_builder &bld, fs_visitor::nir_emit_shared_atomic_float(const fs_builder &bld,
int op, nir_intrinsic_instr *instr) nir_intrinsic_instr *instr)
{ {
int op = brw_aop_for_nir_intrinsic(instr);
fs_reg dest; fs_reg dest;
if (nir_intrinsic_infos[instr->intrinsic].has_dest) if (nir_intrinsic_infos[instr->intrinsic].has_dest)
dest = get_nir_dest(instr->dest); dest = get_nir_dest(instr->dest);
@@ -6192,8 +6200,10 @@ fs_visitor::nir_emit_shared_atomic_float(const fs_builder &bld,
void void
fs_visitor::nir_emit_global_atomic(const fs_builder &bld, fs_visitor::nir_emit_global_atomic(const fs_builder &bld,
int op, nir_intrinsic_instr *instr) nir_intrinsic_instr *instr)
{ {
int op = brw_aop_for_nir_intrinsic(instr);
fs_reg dest; fs_reg dest;
if (nir_intrinsic_infos[instr->intrinsic].has_dest) if (nir_intrinsic_infos[instr->intrinsic].has_dest)
dest = get_nir_dest(instr->dest); dest = get_nir_dest(instr->dest);
@@ -6244,8 +6254,10 @@ fs_visitor::nir_emit_global_atomic(const fs_builder &bld,
void void
fs_visitor::nir_emit_global_atomic_float(const fs_builder &bld, fs_visitor::nir_emit_global_atomic_float(const fs_builder &bld,
int op, nir_intrinsic_instr *instr) nir_intrinsic_instr *instr)
{ {
int op = brw_aop_for_nir_intrinsic(instr);
assert(nir_intrinsic_infos[instr->intrinsic].has_dest); assert(nir_intrinsic_infos[instr->intrinsic].has_dest);
fs_reg dest = get_nir_dest(instr->dest); fs_reg dest = get_nir_dest(instr->dest);