nir: handle float atomics in copy propagation pass

Without this patch, copy propagation pass can optimize out
buffer loads out of compare & swap loop, which then leads
to infinite loop.

Triggered by a change to atomicCompSwap float test in piglit.

Fixes: 8424cd8fbd1 ("nir: Account for atomics in copy propagation.")
Suggested-by: Jason Ekstrand <jason@jlekstrand.net>
Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7538>
(cherry picked from commit 6e6dab479907fe79ed24e69be841dd3ec7bd479e)
diff --git a/.pick_status.json b/.pick_status.json
index 61e892c..633b570 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -544,7 +544,7 @@
         "description": "nir: handle float atomics in copy propagation pass",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "8424cd8fbd1671c4c13f57cfa34bf8145d0fffcf"
     },
diff --git a/src/compiler/nir/nir_opt_copy_prop_vars.c b/src/compiler/nir/nir_opt_copy_prop_vars.c
index dea6f7b..91c8277 100644
--- a/src/compiler/nir/nir_opt_copy_prop_vars.c
+++ b/src/compiler/nir/nir_opt_copy_prop_vars.c
@@ -218,15 +218,19 @@
             break;
 
          case nir_intrinsic_deref_atomic_add:
+         case nir_intrinsic_deref_atomic_fadd:
          case nir_intrinsic_deref_atomic_imin:
          case nir_intrinsic_deref_atomic_umin:
+         case nir_intrinsic_deref_atomic_fmin:
          case nir_intrinsic_deref_atomic_imax:
          case nir_intrinsic_deref_atomic_umax:
+         case nir_intrinsic_deref_atomic_fmax:
          case nir_intrinsic_deref_atomic_and:
          case nir_intrinsic_deref_atomic_or:
          case nir_intrinsic_deref_atomic_xor:
          case nir_intrinsic_deref_atomic_exchange:
          case nir_intrinsic_deref_atomic_comp_swap:
+         case nir_intrinsic_deref_atomic_fcomp_swap:
          case nir_intrinsic_store_deref:
          case nir_intrinsic_copy_deref:
          case nir_intrinsic_memcpy_deref: {
@@ -1118,15 +1122,19 @@
 
       case nir_intrinsic_memcpy_deref:
       case nir_intrinsic_deref_atomic_add:
+      case nir_intrinsic_deref_atomic_fadd:
       case nir_intrinsic_deref_atomic_imin:
       case nir_intrinsic_deref_atomic_umin:
+      case nir_intrinsic_deref_atomic_fmin:
       case nir_intrinsic_deref_atomic_imax:
       case nir_intrinsic_deref_atomic_umax:
+      case nir_intrinsic_deref_atomic_fmax:
       case nir_intrinsic_deref_atomic_and:
       case nir_intrinsic_deref_atomic_or:
       case nir_intrinsic_deref_atomic_xor:
       case nir_intrinsic_deref_atomic_exchange:
       case nir_intrinsic_deref_atomic_comp_swap:
+      case nir_intrinsic_deref_atomic_fcomp_swap:
          if (debug) dump_instr(instr);
 
          nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]);