writer/wgsl: Emit atomic types

Bug: tint:892
Change-Id: Ie483167bcf669e5f2d6b5489a915584fc3678183
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54649
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 8b01b28..94d7b3a 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -20,6 +20,7 @@
 #include "src/ast/access.h"
 #include "src/ast/alias.h"
 #include "src/ast/array.h"
+#include "src/ast/atomic.h"
 #include "src/ast/bool.h"
 #include "src/ast/bool_literal.h"
 #include "src/ast/call_statement.h"
@@ -409,6 +410,12 @@
       return false;
     }
     out_ << ">";
+  } else if (auto* atomic = ty->As<ast::Atomic>()) {
+    out_ << "atomic<";
+    if (!EmitType(atomic->type())) {
+      return false;
+    }
+    out_ << ">";
   } else if (auto* sampler = ty->As<ast::Sampler>()) {
     out_ << "sampler";
 
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.hlsl b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.hlsl
index 83c0306..1722f96 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicAdd_794055() {
+  var res : i32 = atomicAdd(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_794055();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.spvasm
index ef25b4f..03bf81e 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicAdd_794055() {
+  var res : i32 = atomicAdd(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_794055();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl
index d42e421..de545c8 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicAdd_794055() {
+  var res : i32 = atomicAdd(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_794055();
+}
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.msl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.msl
index 28d463e..86b5492 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAdd_8a199a() {
+  var res : u32 = atomicAdd(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAdd_8a199a();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_8a199a();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.spvasm
index 1013691..0aef1b3 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAdd_8a199a() {
+  var res : u32 = atomicAdd(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAdd_8a199a();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_8a199a();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
index 28d463e..cd7a8e1 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAdd_8a199a() {
+  var res : u32 = atomicAdd(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAdd_8a199a();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_8a199a();
+}
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.msl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.msl
index 6088b5a..85b0ee5 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAdd_d32fe4() {
+  var res : i32 = atomicAdd(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAdd_d32fe4();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_d32fe4();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.spvasm
index 17354c3..9240e6e 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAdd_d32fe4() {
+  var res : i32 = atomicAdd(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAdd_d32fe4();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_d32fe4();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
index 6088b5a..acdcce6 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAdd_d32fe4() {
+  var res : i32 = atomicAdd(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAdd_d32fe4();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_d32fe4();
+}
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.hlsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.hlsl
index 83c0306..388aa97 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicAdd_d5db1d() {
+  var res : u32 = atomicAdd(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_d5db1d();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.spvasm
index 9fdcd87..e5ca410 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicAdd_d5db1d() {
+  var res : u32 = atomicAdd(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_d5db1d();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl
index caa65d2..af92a41 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicAdd_d5db1d() {
+  var res : u32 = atomicAdd(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicAdd_d5db1d();
+}
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.msl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.msl
index 6088b5a..efcd326 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAnd_152966() {
+  var res : i32 = atomicAnd(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAnd_152966();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_152966();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.spvasm
index 17354c3..ab01640 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAnd_152966() {
+  var res : i32 = atomicAnd(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAnd_152966();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_152966();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
index 6088b5a..0f3e864 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAnd_152966() {
+  var res : i32 = atomicAnd(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAnd_152966();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_152966();
+}
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.hlsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.hlsl
index 83c0306..b51ffc0 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicAnd_34edd3() {
+  var res : u32 = atomicAnd(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_34edd3();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.spvasm
index 9fdcd87..d123701 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicAnd_34edd3() {
+  var res : u32 = atomicAnd(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_34edd3();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl
index caa65d2..ca4cbc2 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicAnd_34edd3() {
+  var res : u32 = atomicAnd(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_34edd3();
+}
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.hlsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.hlsl
index 83c0306..a393010 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicAnd_45a819() {
+  var res : i32 = atomicAnd(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_45a819();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.spvasm
index ef25b4f..e163a7f 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicAnd_45a819() {
+  var res : i32 = atomicAnd(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_45a819();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl
index d42e421..3b32d40 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicAnd_45a819() {
+  var res : i32 = atomicAnd(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_45a819();
+}
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.msl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.msl
index 28d463e..31f25e8 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAnd_85a8d9() {
+  var res : u32 = atomicAnd(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAnd_85a8d9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_85a8d9();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.spvasm b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.spvasm
index 1013691..db21696 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAnd_85a8d9() {
+  var res : u32 = atomicAnd(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAnd_85a8d9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_85a8d9();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
index 28d463e..cc39030 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicAnd_85a8d9() {
+  var res : u32 = atomicAnd(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicAnd_85a8d9();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicAnd_85a8d9();
+}
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.msl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.msl
index 6088b5a..7135dea 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicCompareExchangeWeak_12871c() {
+  var res : vec2<i32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1, 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicCompareExchangeWeak_12871c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_12871c();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.spvasm b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.spvasm
index 17354c3..420060e 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicCompareExchangeWeak_12871c() {
+  var res : vec2<i32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1, 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicCompareExchangeWeak_12871c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_12871c();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
index 6088b5a..335c537 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicCompareExchangeWeak_12871c() {
+  var res : vec2<i32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1, 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicCompareExchangeWeak_12871c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_12871c();
+}
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.msl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.msl
index 28d463e..a6c99ce 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicCompareExchangeWeak_6673da() {
+  var res : vec2<u32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1u, 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicCompareExchangeWeak_6673da();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_6673da();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.spvasm b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.spvasm
index 1013691..d0a4f3a 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicCompareExchangeWeak_6673da() {
+  var res : vec2<u32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1u, 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicCompareExchangeWeak_6673da();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_6673da();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
index 28d463e..84518cb 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicCompareExchangeWeak_6673da() {
+  var res : vec2<u32> = atomicCompareExchangeWeak(&(sb_rw.arg_0), 1u, 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicCompareExchangeWeak_6673da();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_6673da();
+}
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.hlsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.hlsl
index 83c0306..2b6a58e 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicCompareExchangeWeak_89ea3b() {
+  var res : vec2<i32> = atomicCompareExchangeWeak(&(arg_0), 1, 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_89ea3b();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.spvasm b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.spvasm
index ef25b4f..04788e8 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicCompareExchangeWeak_89ea3b() {
+  var res : vec2<i32> = atomicCompareExchangeWeak(&(arg_0), 1, 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_89ea3b();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl
index d42e421..18ccb30 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicCompareExchangeWeak_89ea3b() {
+  var res : vec2<i32> = atomicCompareExchangeWeak(&(arg_0), 1, 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_89ea3b();
+}
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.hlsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.hlsl
index 83c0306..8d82315 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicCompareExchangeWeak_b2ab2c() {
+  var res : vec2<u32> = atomicCompareExchangeWeak(&(arg_0), 1u, 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_b2ab2c();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.spvasm b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.spvasm
index 9fdcd87..819ff50 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicCompareExchangeWeak_b2ab2c() {
+  var res : vec2<u32> = atomicCompareExchangeWeak(&(arg_0), 1u, 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_b2ab2c();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl
index caa65d2..7e5b4b6 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicCompareExchangeWeak_b2ab2c() {
+  var res : vec2<u32> = atomicCompareExchangeWeak(&(arg_0), 1u, 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicCompareExchangeWeak_b2ab2c();
+}
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.hlsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.hlsl
index 83c0306..8fd62b5 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicExchange_0a5dca() {
+  var res : u32 = atomicExchange(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_0a5dca();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.spvasm b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.spvasm
index 9fdcd87..828611f 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicExchange_0a5dca() {
+  var res : u32 = atomicExchange(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_0a5dca();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl
index caa65d2..70c1945 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicExchange_0a5dca() {
+  var res : u32 = atomicExchange(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_0a5dca();
+}
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.msl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.msl
index 28d463e..d3d01f5 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicExchange_d59712() {
+  var res : u32 = atomicExchange(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicExchange_d59712();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_d59712();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.spvasm b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.spvasm
index 1013691..f320864 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicExchange_d59712() {
+  var res : u32 = atomicExchange(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicExchange_d59712();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_d59712();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
index 28d463e..1ba5f7f 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicExchange_d59712() {
+  var res : u32 = atomicExchange(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicExchange_d59712();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_d59712();
+}
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.hlsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.hlsl
index 83c0306..4b1ab2c 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicExchange_e114ba() {
+  var res : i32 = atomicExchange(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_e114ba();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.spvasm b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.spvasm
index ef25b4f..5107f95 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicExchange_e114ba() {
+  var res : i32 = atomicExchange(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_e114ba();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl
index d42e421..9d89550 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicExchange_e114ba() {
+  var res : i32 = atomicExchange(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_e114ba();
+}
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.msl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.msl
index 6088b5a..be0f897 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicExchange_f2e22f() {
+  var res : i32 = atomicExchange(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicExchange_f2e22f();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_f2e22f();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.spvasm b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.spvasm
index 17354c3..2819c29 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicExchange_f2e22f() {
+  var res : i32 = atomicExchange(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicExchange_f2e22f();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_f2e22f();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
index 6088b5a..4e08fa5 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicExchange_f2e22f() {
+  var res : i32 = atomicExchange(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicExchange_f2e22f();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicExchange_f2e22f();
+}
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.msl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.msl
index 6088b5a..39eff93 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicLoad_0806ad() {
+  var res : i32 = atomicLoad(&(sb_rw.arg_0));
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicLoad_0806ad();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_0806ad();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.spvasm b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.spvasm
index 17354c3..acf39ec 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicLoad_0806ad() {
+  var res : i32 = atomicLoad(&(sb_rw.arg_0));
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicLoad_0806ad();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_0806ad();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
index 6088b5a..a5b58d8 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicLoad_0806ad() {
+  var res : i32 = atomicLoad(&(sb_rw.arg_0));
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicLoad_0806ad();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_0806ad();
+}
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.hlsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.hlsl
index 83c0306..eb5a482 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicLoad_361bf1() {
+  var res : u32 = atomicLoad(&(arg_0));
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_361bf1();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.spvasm b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.spvasm
index 9fdcd87..f524442 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicLoad_361bf1() {
+  var res : u32 = atomicLoad(&(arg_0));
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_361bf1();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl
index caa65d2..bb0694e 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicLoad_361bf1() {
+  var res : u32 = atomicLoad(&(arg_0));
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_361bf1();
+}
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.hlsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.hlsl
index 83c0306..c43459a 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicLoad_afcc03() {
+  var res : i32 = atomicLoad(&(arg_0));
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_afcc03();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.spvasm b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.spvasm
index ef25b4f..b41da50 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicLoad_afcc03() {
+  var res : i32 = atomicLoad(&(arg_0));
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_afcc03();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl
index d42e421..c4b5861 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicLoad_afcc03() {
+  var res : i32 = atomicLoad(&(arg_0));
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_afcc03();
+}
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.msl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.msl
index 28d463e..2c1eeff 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicLoad_fe6cc3() {
+  var res : u32 = atomicLoad(&(sb_rw.arg_0));
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicLoad_fe6cc3();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_fe6cc3();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.spvasm b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.spvasm
index 1013691..623a8ad 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicLoad_fe6cc3() {
+  var res : u32 = atomicLoad(&(sb_rw.arg_0));
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicLoad_fe6cc3();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_fe6cc3();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
index 28d463e..8a7ee5a 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicLoad_fe6cc3() {
+  var res : u32 = atomicLoad(&(sb_rw.arg_0));
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicLoad_fe6cc3();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicLoad_fe6cc3();
+}
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.msl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.msl
index 28d463e..9a9fb1d 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMax_51b9be() {
+  var res : u32 = atomicMax(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMax_51b9be();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_51b9be();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.spvasm
index 1013691..c5f1a78 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMax_51b9be() {
+  var res : u32 = atomicMax(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMax_51b9be();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_51b9be();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
index 28d463e..4904f1f 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMax_51b9be() {
+  var res : u32 = atomicMax(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMax_51b9be();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_51b9be();
+}
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.msl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.msl
index 6088b5a..a2997a1 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMax_92aa72() {
+  var res : i32 = atomicMax(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMax_92aa72();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_92aa72();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.spvasm
index 17354c3..f1c5712 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMax_92aa72() {
+  var res : i32 = atomicMax(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMax_92aa72();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_92aa72();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
index 6088b5a..71f3f39 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMax_92aa72() {
+  var res : i32 = atomicMax(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMax_92aa72();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_92aa72();
+}
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.hlsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.hlsl
index 83c0306..deabbd0 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicMax_a89cc3() {
+  var res : i32 = atomicMax(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_a89cc3();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.spvasm
index ef25b4f..ac85199 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicMax_a89cc3() {
+  var res : i32 = atomicMax(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_a89cc3();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl
index d42e421..a94ade3 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicMax_a89cc3() {
+  var res : i32 = atomicMax(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_a89cc3();
+}
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.hlsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.hlsl
index 83c0306..d07cc1a 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicMax_beccfc() {
+  var res : u32 = atomicMax(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_beccfc();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.spvasm
index 9fdcd87..031d7ef 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicMax_beccfc() {
+  var res : u32 = atomicMax(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_beccfc();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl
index caa65d2..148a0d5 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicMax_beccfc() {
+  var res : u32 = atomicMax(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicMax_beccfc();
+}
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.hlsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.hlsl
index 83c0306..1279197 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicMin_278235() {
+  var res : i32 = atomicMin(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_278235();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.spvasm
index ef25b4f..4e939fd 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicMin_278235() {
+  var res : i32 = atomicMin(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_278235();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl
index d42e421..ff99e71 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicMin_278235() {
+  var res : i32 = atomicMin(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_278235();
+}
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.hlsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.hlsl
index 83c0306..b697f7f 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicMin_69d383() {
+  var res : u32 = atomicMin(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_69d383();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.spvasm
index 9fdcd87..dfce4dd 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicMin_69d383() {
+  var res : u32 = atomicMin(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_69d383();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl
index caa65d2..c2190ea 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicMin_69d383() {
+  var res : u32 = atomicMin(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_69d383();
+}
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.msl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.msl
index 6088b5a..dc15ddd 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMin_8e38dc() {
+  var res : i32 = atomicMin(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMin_8e38dc();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_8e38dc();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.spvasm
index 17354c3..40fc25c 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMin_8e38dc() {
+  var res : i32 = atomicMin(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMin_8e38dc();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_8e38dc();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
index 6088b5a..8630c15 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMin_8e38dc() {
+  var res : i32 = atomicMin(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMin_8e38dc();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_8e38dc();
+}
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.msl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.msl
index 28d463e..1b28fe8 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMin_c67a74() {
+  var res : u32 = atomicMin(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMin_c67a74();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_c67a74();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.spvasm b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.spvasm
index 1013691..cafcb6e 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMin_c67a74() {
+  var res : u32 = atomicMin(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMin_c67a74();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_c67a74();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
index 28d463e..d2b5c50 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicMin_c67a74() {
+  var res : u32 = atomicMin(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicMin_c67a74();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicMin_c67a74();
+}
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.hlsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.hlsl
index 83c0306..52aa94e 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicOr_5e3d61() {
+  var res : u32 = atomicOr(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_5e3d61();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.spvasm b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.spvasm
index 9fdcd87..1a6828a 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicOr_5e3d61() {
+  var res : u32 = atomicOr(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_5e3d61();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl
index caa65d2..14cb642 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicOr_5e3d61() {
+  var res : u32 = atomicOr(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_5e3d61();
+}
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.msl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.msl
index 28d463e..e8ae23b 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicOr_5e95d4() {
+  var res : u32 = atomicOr(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicOr_5e95d4();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_5e95d4();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.spvasm b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.spvasm
index 1013691..c95c957 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicOr_5e95d4() {
+  var res : u32 = atomicOr(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicOr_5e95d4();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_5e95d4();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
index 28d463e..9d389df 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicOr_5e95d4() {
+  var res : u32 = atomicOr(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicOr_5e95d4();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_5e95d4();
+}
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.msl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.msl
index 6088b5a..22c839d 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicOr_8d96a0() {
+  var res : i32 = atomicOr(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicOr_8d96a0();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_8d96a0();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.spvasm b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.spvasm
index 17354c3..febe758 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicOr_8d96a0() {
+  var res : i32 = atomicOr(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicOr_8d96a0();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_8d96a0();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
index 6088b5a..b44f12f 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicOr_8d96a0() {
+  var res : i32 = atomicOr(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicOr_8d96a0();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_8d96a0();
+}
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.hlsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.hlsl
index 83c0306..4ebdc78 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicOr_d09248() {
+  var res : i32 = atomicOr(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_d09248();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.spvasm b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.spvasm
index ef25b4f..2022c38 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicOr_d09248() {
+  var res : i32 = atomicOr(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_d09248();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl
index d42e421..55565c6 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicOr_d09248() {
+  var res : i32 = atomicOr(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicOr_d09248();
+}
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.hlsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.hlsl
index 83c0306..3e2cdaa 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicStore_726882() {
+  atomicStore(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_726882();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.spvasm b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.spvasm
index 9fdcd87..67d3a77 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicStore_726882() {
+  atomicStore(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_726882();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl
index caa65d2..69c8e45 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicStore_726882() {
+  atomicStore(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_726882();
+}
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.hlsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.hlsl
index 83c0306..40616cc 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicStore_8bea94() {
+  atomicStore(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_8bea94();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.spvasm b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.spvasm
index ef25b4f..a97e60e 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicStore_8bea94() {
+  atomicStore(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_8bea94();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl
index d42e421..f0403d0 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicStore_8bea94() {
+  atomicStore(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_8bea94();
+}
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.msl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.msl
index 28d463e..cefa61e 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicStore_cdc29e() {
+  atomicStore(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicStore_cdc29e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_cdc29e();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.spvasm b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.spvasm
index 1013691..2fdd3d2 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicStore_cdc29e() {
+  atomicStore(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicStore_cdc29e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_cdc29e();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
index 28d463e..9668772 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicStore_cdc29e() {
+  atomicStore(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicStore_cdc29e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_cdc29e();
+}
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.msl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.msl
index 6088b5a..98cae7a 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicStore_d1e9a6() {
+  atomicStore(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicStore_d1e9a6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_d1e9a6();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.spvasm b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.spvasm
index 17354c3..21df960 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicStore_d1e9a6() {
+  atomicStore(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicStore_d1e9a6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_d1e9a6();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
index 6088b5a..d7c9899 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicStore_d1e9a6() {
+  atomicStore(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicStore_d1e9a6();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicStore_d1e9a6();
+}
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.msl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.msl
index 28d463e..9bccb9b 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicXor_54510e() {
+  var res : u32 = atomicXor(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicXor_54510e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_54510e();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__u32
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.spvasm b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.spvasm
index 1013691..7b2d9ec 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicXor_54510e() {
+  var res : u32 = atomicXor(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicXor_54510e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_54510e();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
index 28d463e..f7be690 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+  arg_0 : atomic<u32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicXor_54510e() {
+  var res : u32 = atomicXor(&(sb_rw.arg_0), 1u);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicXor_54510e();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_54510e();
+}
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.hlsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.hlsl
index 83c0306..83797cf 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicXor_75dc95() {
+  var res : i32 = atomicXor(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_75dc95();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.spvasm b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.spvasm
index ef25b4f..1e57cee 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<i32>;
+
+fn atomicXor_75dc95() {
+  var res : i32 = atomicXor(&(arg_0), 1);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_75dc95();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl
index d42e421..854a2d0 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<i32>;
 
+fn atomicXor_75dc95() {
+  var res : i32 = atomicXor(&(arg_0), 1);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_75dc95();
+}
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.msl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.msl
index 6088b5a..bd565c8 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.msl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.msl
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicXor_c1b78c() {
+  var res : i32 = atomicXor(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicXor_c1b78c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_c1b78c();
+}
+
 Failed to generate: error: unknown type in EmitType: __atomic__i32
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.spvasm b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.spvasm
index 17354c3..3e68a72 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.spvasm
@@ -3,5 +3,23 @@
 
 [[block]]
 struct SB_RW {
-  arg_0 : 
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicXor_c1b78c() {
+  var res : i32 = atomicXor(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicXor_c1b78c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_c1b78c();
+}
+
 Failed to generate: unable to convert type: __atomic__i32
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
index 6088b5a..4a0baf4 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.wgsl
@@ -1,7 +1,20 @@
-SKIP: FAILED
-
-
 [[block]]
 struct SB_RW {
-  arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__i32
+  arg_0 : atomic<i32>;
+};
+
+[[group(0), binding(0)]] var<storage, read_write> sb_rw : SB_RW;
+
+fn atomicXor_c1b78c() {
+  var res : i32 = atomicXor(&(sb_rw.arg_0), 1);
+}
+
+[[stage(fragment)]]
+fn fragment_main() {
+  atomicXor_c1b78c();
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_c1b78c();
+}
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.hlsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.hlsl
index 83c0306..423045a 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.hlsl
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicXor_c8e6be() {
+  var res : u32 = atomicXor(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_c8e6be();
+}
+
 Failed to generate: error: unknown type in EmitType
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.spvasm b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.spvasm
index 9fdcd87..d4a0179 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.spvasm
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.spvasm
@@ -1,5 +1,15 @@
 SKIP: FAILED
 
 
-var<workgroup> arg_0 : 
+var<workgroup> arg_0 : atomic<u32>;
+
+fn atomicXor_c8e6be() {
+  var res : u32 = atomicXor(&(arg_0), 1u);
+}
+
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_c8e6be();
+}
+
 Failed to generate: unable to convert type: __atomic__u32
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl
index caa65d2..909fa8b 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.wgsl
@@ -1,5 +1,10 @@
-SKIP: FAILED
+var<workgroup> arg_0 : atomic<u32>;
 
+fn atomicXor_c8e6be() {
+  var res : u32 = atomicXor(&(arg_0), 1u);
+}
 
-var<workgroup> arg_0 : 
-Failed to generate: error: unknown type in EmitType: __atomic__u32
+[[stage(compute)]]
+fn compute_main() {
+  atomicXor_c8e6be();
+}