diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index eb44f14..e07139b 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -920,7 +920,7 @@
         case sem::BuiltinType::kAtomicCompareExchangeWeak: {
             // Emit the builtin return type unique to this overload. This does not
             // exist in the AST, so it will not be generated in Generate().
-            if (!EmitStructType(&helpers_, builtin->ReturnType()->As<sem::Struct>())) {
+            if (!EmitStructTypeOnce(&helpers_, builtin->ReturnType()->As<sem::Struct>())) {
                 return false;
             }
 
@@ -2822,6 +2822,14 @@
     return true;
 }
 
+bool GeneratorImpl::EmitStructTypeOnce(TextBuffer* buffer, const sem::Struct* str) {
+    auto it = emitted_structs_.emplace(str);
+    if (!it.second) {
+        return true;
+    }
+    return EmitStructType(buffer, str);
+}
+
 bool GeneratorImpl::EmitStructMembers(TextBuffer* b, const sem::Struct* str, bool emit_offsets) {
     ScopedIndent si(b);
     for (auto* mem : str->Members()) {
diff --git a/src/tint/writer/glsl/generator_impl.h b/src/tint/writer/glsl/generator_impl.h
index bcf84b0..819c79b 100644
--- a/src/tint/writer/glsl/generator_impl.h
+++ b/src/tint/writer/glsl/generator_impl.h
@@ -411,6 +411,12 @@
     /// @param ty the struct to generate
     /// @returns true if the struct is emitted
     bool EmitStructType(TextBuffer* buffer, const sem::Struct* ty);
+    /// Handles generating a structure declaration only the first time called. Subsequent calls are
+    /// a no-op and return true.
+    /// @param buffer the text buffer that the type declaration will be written to
+    /// @param ty the struct to generate
+    /// @returns true if the struct is emitted
+    bool EmitStructTypeOnce(TextBuffer* buffer, const sem::Struct* ty);
     /// Handles generating the members of a structure
     /// @param buffer the text buffer that the struct members will be written to
     /// @param ty the struct to generate
@@ -503,6 +509,7 @@
     std::unordered_map<const sem::Vector*, std::string> dynamic_vector_write_;
     std::unordered_map<const sem::Vector*, std::string> int_dot_funcs_;
     std::unordered_map<const sem::Type*, std::string> float_modulo_funcs_;
+    std::unordered_set<const sem::Struct*> emitted_structs_;
     bool requires_oes_sample_variables_ = false;
     bool requires_default_precision_qualifier_ = false;
     Version version_;
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 137c466..19af4fa 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -1767,7 +1767,7 @@
         case sem::BuiltinType::kAtomicCompareExchangeWeak: {
             // Emit the builtin return type unique to this overload. This does not
             // exist in the AST, so it will not be generated in Generate().
-            if (!EmitStructType(&helpers_, builtin->ReturnType()->As<sem::Struct>())) {
+            if (!EmitStructTypeOnce(&helpers_, builtin->ReturnType()->As<sem::Struct>())) {
                 return false;
             }
 
@@ -3921,6 +3921,14 @@
     return true;
 }
 
+bool GeneratorImpl::EmitStructTypeOnce(TextBuffer* buffer, const sem::Struct* str) {
+    auto it = emitted_structs_.emplace(str);
+    if (!it.second) {
+        return true;
+    }
+    return EmitStructType(buffer, str);
+}
+
 bool GeneratorImpl::EmitUnaryOp(std::ostream& out, const ast::UnaryOpExpression* expr) {
     switch (expr->op) {
         case ast::UnaryOp::kIndirection:
diff --git a/src/tint/writer/hlsl/generator_impl.h b/src/tint/writer/hlsl/generator_impl.h
index c58d004..af7e4c9 100644
--- a/src/tint/writer/hlsl/generator_impl.h
+++ b/src/tint/writer/hlsl/generator_impl.h
@@ -411,6 +411,12 @@
     /// @param ty the struct to generate
     /// @returns true if the struct is emitted
     bool EmitStructType(TextBuffer* buffer, const sem::Struct* ty);
+    /// Handles generating a structure declaration only the first time called. Subsequent calls are
+    /// a no-op and return true.
+    /// @param buffer the text buffer that the type declaration will be written to
+    /// @param ty the struct to generate
+    /// @returns true if the struct is emitted
+    bool EmitStructTypeOnce(TextBuffer* buffer, const sem::Struct* ty);
     /// Handles a unary op expression
     /// @param out the output of the expression stream
     /// @param expr the expression to emit
@@ -530,6 +536,7 @@
     std::unordered_map<const sem::Matrix*, std::string> dynamic_matrix_vector_write_;
     std::unordered_map<const sem::Matrix*, std::string> dynamic_matrix_scalar_write_;
     std::unordered_map<const sem::Type*, std::string> value_or_one_if_zero_;
+    std::unordered_set<const sem::Struct*> emitted_structs_;
 };
 
 }  // namespace tint::writer::hlsl
diff --git a/src/tint/writer/msl/generator_impl.cc b/src/tint/writer/msl/generator_impl.cc
index cd984b2..3228e86 100644
--- a/src/tint/writer/msl/generator_impl.cc
+++ b/src/tint/writer/msl/generator_impl.cc
@@ -826,46 +826,66 @@
             return call("atomic_exchange_explicit", true);
 
         case sem::BuiltinType::kAtomicCompareExchangeWeak: {
-            // Emit the builtin return type unique to this overload. This does not
-            // exist in the AST, so it will not be generated in Generate().
-            if (!EmitStructType(&helpers_, builtin->ReturnType()->As<sem::Struct>())) {
-                return false;
-            }
-
             auto* ptr_ty = TypeOf(expr->args[0])->UnwrapRef()->As<sem::Pointer>();
             auto sc = ptr_ty->StorageClass();
+            auto* str = builtin->ReturnType()->As<sem::Struct>();
 
-            auto func = utils::GetOrCreate(atomicCompareExchangeWeak_, sc, [&]() -> std::string {
-                auto name = UniqueIdentifier("atomicCompareExchangeWeak");
-                auto& buf = helpers_;
-
-                line(&buf) << "template <typename A, typename T>";
-                {
-                    auto f = line(&buf);
-                    auto str_name = StructName(builtin->ReturnType()->As<sem::Struct>());
-                    f << str_name << " " << name << "(";
-                    if (!EmitStorageClass(f, sc)) {
+            auto func = utils::GetOrCreate(
+                atomicCompareExchangeWeak_, ACEWKeyType{{sc, str}}, [&]() -> std::string {
+                    // Emit the builtin return type unique to this overload. This does not
+                    // exist in the AST, so it will not be generated in Generate().
+                    if (!EmitStructTypeOnce(&helpers_, builtin->ReturnType()->As<sem::Struct>())) {
                         return "";
                     }
-                    f << " A* atomic, T compare, T value) {";
-                }
 
-                buf.IncrementIndent();
-                TINT_DEFER({
-                    buf.DecrementIndent();
-                    line(&buf) << "}";
-                    line(&buf);
+                    auto name = UniqueIdentifier("atomicCompareExchangeWeak");
+                    auto& buf = helpers_;
+                    auto* atomic_ty = builtin->Parameters()[0]->Type();
+                    auto* arg_ty = builtin->Parameters()[1]->Type();
+
+                    {
+                        auto f = line(&buf);
+                        auto str_name = StructName(builtin->ReturnType()->As<sem::Struct>());
+                        f << str_name << " " << name << "(";
+                        if (!EmitTypeAndName(f, atomic_ty, "atomic")) {
+                            return "";
+                        }
+                        f << ", ";
+                        if (!EmitTypeAndName(f, arg_ty, "compare")) {
+                            return "";
+                        }
+                        f << ", ";
+                        if (!EmitTypeAndName(f, arg_ty, "value")) {
+                            return "";
+                        }
+                        f << ") {";
+                    }
+
+                    buf.IncrementIndent();
+                    TINT_DEFER({
+                        buf.DecrementIndent();
+                        line(&buf) << "}";
+                        line(&buf);
+                    });
+
+                    {
+                        auto f = line(&buf);
+                        if (!EmitTypeAndName(f, arg_ty, "old_value")) {
+                            return "";
+                        }
+                        f << " = compare;";
+                    }
+                    line(&buf) << "bool exchanged = "
+                                  "atomic_compare_exchange_weak_explicit(atomic, "
+                                  "&old_value, value, memory_order_relaxed, "
+                                  "memory_order_relaxed);";
+                    line(&buf) << "return {old_value, exchanged};";
+                    return name;
                 });
 
-                line(&buf) << "T old_value = compare;";
-                line(&buf) << "bool exchanged = "
-                              "atomic_compare_exchange_weak_explicit(atomic, "
-                              "&old_value, value, memory_order_relaxed, "
-                              "memory_order_relaxed);";
-                line(&buf) << "return {old_value, exchanged};";
-                return name;
-            });
-
+            if (func.empty()) {
+                return false;
+            }
             return call(func, false);
         }
 
@@ -2765,6 +2785,14 @@
     return true;
 }
 
+bool GeneratorImpl::EmitStructTypeOnce(TextBuffer* buffer, const sem::Struct* str) {
+    auto it = emitted_structs_.emplace(str);
+    if (!it.second) {
+        return true;
+    }
+    return EmitStructType(buffer, str);
+}
+
 bool GeneratorImpl::EmitUnaryOp(std::ostream& out, const ast::UnaryOpExpression* expr) {
     // Handle `-e` when `e` is signed, so that we ensure that if `e` is the
     // largest negative value, it returns `e`.
diff --git a/src/tint/writer/msl/generator_impl.h b/src/tint/writer/msl/generator_impl.h
index 21dee28..be98a86 100644
--- a/src/tint/writer/msl/generator_impl.h
+++ b/src/tint/writer/msl/generator_impl.h
@@ -16,6 +16,7 @@
 #define SRC_TINT_WRITER_MSL_GENERATOR_IMPL_H_
 
 #include <string>
+#include <tuple>
 #include <unordered_map>
 #include <unordered_set>
 #include <vector>
@@ -332,6 +333,12 @@
     /// @param str the struct to generate
     /// @returns true if the struct is emitted
     bool EmitStructType(TextBuffer* buffer, const sem::Struct* str);
+    /// Handles generating a structure declaration only the first time called. Subsequent calls are
+    /// a no-op and return true.
+    /// @param buffer the text buffer that the type declaration will be written to
+    /// @param ty the struct to generate
+    /// @returns true if the struct is emitted
+    bool EmitStructTypeOnce(TextBuffer* buffer, const sem::Struct* ty);
     /// Handles a unary op expression
     /// @param out the output of the expression stream
     /// @param expr the expression to emit
@@ -400,13 +407,13 @@
     /// type.
     SizeAndAlign MslPackedTypeSizeAndAlign(const sem::Type* ty);
 
-    using StorageClassToString = std::unordered_map<ast::StorageClass, std::string>;
-
     std::function<bool()> emit_continuing_;
 
     /// Name of atomicCompareExchangeWeak() helper for the given pointer storage
-    /// class.
-    StorageClassToString atomicCompareExchangeWeak_;
+    /// class and struct return type
+    using ACEWKeyType =
+        utils::UnorderedKeyWrapper<std::tuple<ast::StorageClass, const sem::Struct*>>;
+    std::unordered_map<ACEWKeyType, std::string> atomicCompareExchangeWeak_;
 
     /// Unique name of the 'TINT_INVARIANT' preprocessor define. Non-empty only if
     /// an invariant attribute has been generated.
@@ -423,6 +430,7 @@
     std::unordered_map<const sem::Builtin*, std::string> builtins_;
     std::unordered_map<const sem::Type*, std::string> unary_minus_funcs_;
     std::unordered_map<uint32_t, std::string> int_dot_funcs_;
+    std::unordered_set<const sem::Struct*> emitted_structs_;
 };
 
 }  // namespace tint::writer::msl
diff --git a/test/tint/bug/tint/1573.wgsl.expected.msl b/test/tint/bug/tint/1573.wgsl.expected.msl
index c284e1a..0aef172 100644
--- a/test/tint/bug/tint/1573.wgsl.expected.msl
+++ b/test/tint/bug/tint/1573.wgsl.expected.msl
@@ -6,9 +6,8 @@
   uint old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/bug/tint/1574.wgsl b/test/tint/bug/tint/1574.wgsl
new file mode 100644
index 0000000..3a52312
--- /dev/null
+++ b/test/tint/bug/tint/1574.wgsl
@@ -0,0 +1,39 @@
+@group(0) @binding(0)
+var<storage, read_write> a_u32 : atomic<u32>;
+
+@group(0) @binding(1)
+var<storage, read_write> a_i32 : atomic<i32>;
+
+var<workgroup> b_u32 : atomic<u32>;
+
+var<workgroup> b_i32 : atomic<i32>;
+
+
+@stage(compute) @workgroup_size(16)
+fn main() {
+  {
+    var value = 42u;
+    let r1 = atomicCompareExchangeWeak(&a_u32, 0u, value);
+    let r2 = atomicCompareExchangeWeak(&a_u32, 0u, value);
+    let r3 = atomicCompareExchangeWeak(&a_u32, 0u, value);
+  }
+  {
+    var value = 42;
+    let r1 = atomicCompareExchangeWeak(&a_i32, 0, value);
+    let r2 = atomicCompareExchangeWeak(&a_i32, 0, value);
+    let r3 = atomicCompareExchangeWeak(&a_i32, 0, value);
+  }
+  {
+    var value = 42u;
+    let r1 = atomicCompareExchangeWeak(&b_u32, 0u, value);
+    let r2 = atomicCompareExchangeWeak(&b_u32, 0u, value);
+    let r3 = atomicCompareExchangeWeak(&b_u32, 0u, value);
+  }
+  {
+    var value = 42;
+    let r1 = atomicCompareExchangeWeak(&b_i32, 0, value);
+    let r2 = atomicCompareExchangeWeak(&b_i32, 0, value);
+    let r3 = atomicCompareExchangeWeak(&b_i32, 0, value);
+  }
+
+}
diff --git a/test/tint/bug/tint/1574.wgsl.expected.glsl b/test/tint/bug/tint/1574.wgsl.expected.glsl
new file mode 100644
index 0000000..bf711e7
--- /dev/null
+++ b/test/tint/bug/tint/1574.wgsl.expected.glsl
@@ -0,0 +1,102 @@
+#version 310 es
+
+struct atomic_compare_exchange_resultu32 {
+  uint old_value;
+  bool exchanged;
+};
+
+struct atomic_compare_exchange_resulti32 {
+  int old_value;
+  bool exchanged;
+};
+
+
+struct a_u32_block {
+  uint inner;
+};
+
+layout(binding = 0, std430) buffer a_u32_block_1 {
+  uint inner;
+} a_u32;
+struct a_i32_block {
+  int inner;
+};
+
+layout(binding = 1, std430) buffer a_i32_block_1 {
+  int inner;
+} a_i32;
+shared uint b_u32;
+shared int b_i32;
+void tint_symbol(uint local_invocation_index) {
+  if ((local_invocation_index < 1u)) {
+    atomicExchange(b_u32, 0u);
+    atomicExchange(b_i32, 0);
+  }
+  barrier();
+  {
+    uint value = 42u;
+    atomic_compare_exchange_resultu32 atomic_compare_result;
+    atomic_compare_result.old_value = atomicCompSwap(a_u32.inner, 0u, value);
+    atomic_compare_result.exchanged = atomic_compare_result.old_value == 0u;
+    atomic_compare_exchange_resultu32 r1 = atomic_compare_result;
+    atomic_compare_exchange_resultu32 atomic_compare_result_1;
+    atomic_compare_result_1.old_value = atomicCompSwap(a_u32.inner, 0u, value);
+    atomic_compare_result_1.exchanged = atomic_compare_result_1.old_value == 0u;
+    atomic_compare_exchange_resultu32 r2 = atomic_compare_result_1;
+    atomic_compare_exchange_resultu32 atomic_compare_result_2;
+    atomic_compare_result_2.old_value = atomicCompSwap(a_u32.inner, 0u, value);
+    atomic_compare_result_2.exchanged = atomic_compare_result_2.old_value == 0u;
+    atomic_compare_exchange_resultu32 r3 = atomic_compare_result_2;
+  }
+  {
+    int value = 42;
+    atomic_compare_exchange_resulti32 atomic_compare_result_3;
+    atomic_compare_result_3.old_value = atomicCompSwap(a_i32.inner, 0, value);
+    atomic_compare_result_3.exchanged = atomic_compare_result_3.old_value == 0;
+    atomic_compare_exchange_resulti32 r1 = atomic_compare_result_3;
+    atomic_compare_exchange_resulti32 atomic_compare_result_4;
+    atomic_compare_result_4.old_value = atomicCompSwap(a_i32.inner, 0, value);
+    atomic_compare_result_4.exchanged = atomic_compare_result_4.old_value == 0;
+    atomic_compare_exchange_resulti32 r2 = atomic_compare_result_4;
+    atomic_compare_exchange_resulti32 atomic_compare_result_5;
+    atomic_compare_result_5.old_value = atomicCompSwap(a_i32.inner, 0, value);
+    atomic_compare_result_5.exchanged = atomic_compare_result_5.old_value == 0;
+    atomic_compare_exchange_resulti32 r3 = atomic_compare_result_5;
+  }
+  {
+    uint value = 42u;
+    atomic_compare_exchange_resultu32 atomic_compare_result_6;
+    atomic_compare_result_6.old_value = atomicCompSwap(b_u32, 0u, value);
+    atomic_compare_result_6.exchanged = atomic_compare_result_6.old_value == 0u;
+    atomic_compare_exchange_resultu32 r1 = atomic_compare_result_6;
+    atomic_compare_exchange_resultu32 atomic_compare_result_7;
+    atomic_compare_result_7.old_value = atomicCompSwap(b_u32, 0u, value);
+    atomic_compare_result_7.exchanged = atomic_compare_result_7.old_value == 0u;
+    atomic_compare_exchange_resultu32 r2 = atomic_compare_result_7;
+    atomic_compare_exchange_resultu32 atomic_compare_result_8;
+    atomic_compare_result_8.old_value = atomicCompSwap(b_u32, 0u, value);
+    atomic_compare_result_8.exchanged = atomic_compare_result_8.old_value == 0u;
+    atomic_compare_exchange_resultu32 r3 = atomic_compare_result_8;
+  }
+  {
+    int value = 42;
+    atomic_compare_exchange_resulti32 atomic_compare_result_9;
+    atomic_compare_result_9.old_value = atomicCompSwap(b_i32, 0, value);
+    atomic_compare_result_9.exchanged = atomic_compare_result_9.old_value == 0;
+    atomic_compare_exchange_resulti32 r1 = atomic_compare_result_9;
+    atomic_compare_exchange_resulti32 atomic_compare_result_10;
+    atomic_compare_result_10.old_value = atomicCompSwap(b_i32, 0, value);
+    atomic_compare_result_10.exchanged = atomic_compare_result_10.old_value == 0;
+    atomic_compare_exchange_resulti32 r2 = atomic_compare_result_10;
+    atomic_compare_exchange_resulti32 atomic_compare_result_11;
+    atomic_compare_result_11.old_value = atomicCompSwap(b_i32, 0, value);
+    atomic_compare_result_11.exchanged = atomic_compare_result_11.old_value == 0;
+    atomic_compare_exchange_resulti32 r3 = atomic_compare_result_11;
+  }
+}
+
+layout(local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  tint_symbol(gl_LocalInvocationIndex);
+  return;
+}
diff --git a/test/tint/bug/tint/1574.wgsl.expected.hlsl b/test/tint/bug/tint/1574.wgsl.expected.hlsl
new file mode 100644
index 0000000..aad4961
--- /dev/null
+++ b/test/tint/bug/tint/1574.wgsl.expected.hlsl
@@ -0,0 +1,105 @@
+struct atomic_compare_exchange_resultu32 {
+  uint old_value;
+  bool exchanged;
+};
+struct atomic_compare_exchange_resulti32 {
+  int old_value;
+  bool exchanged;
+};
+RWByteAddressBuffer a_u32 : register(u0, space0);
+RWByteAddressBuffer a_i32 : register(u1, space0);
+groupshared uint b_u32;
+groupshared int b_i32;
+
+struct tint_symbol_1 {
+  uint local_invocation_index : SV_GroupIndex;
+};
+struct atomic_compare_exchange_weak_ret_type {
+  uint old_value;
+  bool exchanged;
+};
+
+atomic_compare_exchange_weak_ret_type tint_atomicCompareExchangeWeak(RWByteAddressBuffer buffer, uint offset, uint compare, uint value) {
+  atomic_compare_exchange_weak_ret_type result=(atomic_compare_exchange_weak_ret_type)0;
+  buffer.InterlockedCompareExchange(offset, compare, value, result.old_value);
+  result.exchanged = result.old_value == compare;
+  return result;
+}
+
+
+struct atomic_compare_exchange_weak_ret_type_1 {
+  int old_value;
+  bool exchanged;
+};
+
+atomic_compare_exchange_weak_ret_type_1 tint_atomicCompareExchangeWeak_1(RWByteAddressBuffer buffer, uint offset, int compare, int value) {
+  atomic_compare_exchange_weak_ret_type_1 result=(atomic_compare_exchange_weak_ret_type_1)0;
+  buffer.InterlockedCompareExchange(offset, compare, value, result.old_value);
+  result.exchanged = result.old_value == compare;
+  return result;
+}
+
+
+void main_inner(uint local_invocation_index) {
+  if ((local_invocation_index < 1u)) {
+    uint atomic_result = 0u;
+    InterlockedExchange(b_u32, 0u, atomic_result);
+    int atomic_result_1 = 0;
+    InterlockedExchange(b_i32, 0, atomic_result_1);
+  }
+  GroupMemoryBarrierWithGroupSync();
+  {
+    uint value = 42u;
+    const atomic_compare_exchange_weak_ret_type r1 = tint_atomicCompareExchangeWeak(a_u32, 0u, 0u, value);
+    const atomic_compare_exchange_weak_ret_type r2 = tint_atomicCompareExchangeWeak(a_u32, 0u, 0u, value);
+    const atomic_compare_exchange_weak_ret_type r3 = tint_atomicCompareExchangeWeak(a_u32, 0u, 0u, value);
+  }
+  {
+    int value = 42;
+    const atomic_compare_exchange_weak_ret_type_1 r1 = tint_atomicCompareExchangeWeak_1(a_i32, 0u, 0, value);
+    const atomic_compare_exchange_weak_ret_type_1 r2 = tint_atomicCompareExchangeWeak_1(a_i32, 0u, 0, value);
+    const atomic_compare_exchange_weak_ret_type_1 r3 = tint_atomicCompareExchangeWeak_1(a_i32, 0u, 0, value);
+  }
+  {
+    uint value = 42u;
+    atomic_compare_exchange_resultu32 atomic_result_2 = (atomic_compare_exchange_resultu32)0;
+    uint atomic_compare_value = 0u;
+    InterlockedCompareExchange(b_u32, atomic_compare_value, value, atomic_result_2.old_value);
+    atomic_result_2.exchanged = atomic_result_2.old_value == atomic_compare_value;
+    const atomic_compare_exchange_resultu32 r1 = atomic_result_2;
+    atomic_compare_exchange_resultu32 atomic_result_3 = (atomic_compare_exchange_resultu32)0;
+    uint atomic_compare_value_1 = 0u;
+    InterlockedCompareExchange(b_u32, atomic_compare_value_1, value, atomic_result_3.old_value);
+    atomic_result_3.exchanged = atomic_result_3.old_value == atomic_compare_value_1;
+    const atomic_compare_exchange_resultu32 r2 = atomic_result_3;
+    atomic_compare_exchange_resultu32 atomic_result_4 = (atomic_compare_exchange_resultu32)0;
+    uint atomic_compare_value_2 = 0u;
+    InterlockedCompareExchange(b_u32, atomic_compare_value_2, value, atomic_result_4.old_value);
+    atomic_result_4.exchanged = atomic_result_4.old_value == atomic_compare_value_2;
+    const atomic_compare_exchange_resultu32 r3 = atomic_result_4;
+  }
+  {
+    int value = 42;
+    atomic_compare_exchange_resulti32 atomic_result_5 = (atomic_compare_exchange_resulti32)0;
+    int atomic_compare_value_3 = 0;
+    InterlockedCompareExchange(b_i32, atomic_compare_value_3, value, atomic_result_5.old_value);
+    atomic_result_5.exchanged = atomic_result_5.old_value == atomic_compare_value_3;
+    const atomic_compare_exchange_resulti32 r1 = atomic_result_5;
+    atomic_compare_exchange_resulti32 atomic_result_6 = (atomic_compare_exchange_resulti32)0;
+    int atomic_compare_value_4 = 0;
+    InterlockedCompareExchange(b_i32, atomic_compare_value_4, value, atomic_result_6.old_value);
+    atomic_result_6.exchanged = atomic_result_6.old_value == atomic_compare_value_4;
+    const atomic_compare_exchange_resulti32 r2 = atomic_result_6;
+    atomic_compare_exchange_resulti32 atomic_result_7 = (atomic_compare_exchange_resulti32)0;
+    int atomic_compare_value_5 = 0;
+    InterlockedCompareExchange(b_i32, atomic_compare_value_5, value, atomic_result_7.old_value);
+    atomic_result_7.exchanged = atomic_result_7.old_value == atomic_compare_value_5;
+    const atomic_compare_exchange_resulti32 r3 = atomic_result_7;
+  }
+}
+
+[numthreads(16, 1, 1)]
+void main(tint_symbol_1 tint_symbol) {
+  main_inner(tint_symbol.local_invocation_index);
+  return;
+}
diff --git a/test/tint/bug/tint/1574.wgsl.expected.msl b/test/tint/bug/tint/1574.wgsl.expected.msl
new file mode 100644
index 0000000..80ab0b6
--- /dev/null
+++ b/test/tint/bug/tint/1574.wgsl.expected.msl
@@ -0,0 +1,75 @@
+#include <metal_stdlib>
+
+using namespace metal;
+
+struct atomic_compare_exchange_resultu32 {
+  uint old_value;
+  bool exchanged;
+};
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
+  bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
+  return {old_value, exchanged};
+}
+
+struct atomic_compare_exchange_resulti32 {
+  int old_value;
+  bool exchanged;
+};
+atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_2(device atomic_int* atomic, int compare, int value) {
+  int old_value = compare;
+  bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
+  return {old_value, exchanged};
+}
+
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_3(threadgroup atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
+  bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
+  return {old_value, exchanged};
+}
+
+atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_4(threadgroup atomic_int* atomic, int compare, int value) {
+  int old_value = compare;
+  bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
+  return {old_value, exchanged};
+}
+
+void tint_symbol_inner(uint local_invocation_index, threadgroup atomic_uint* const tint_symbol_1, threadgroup atomic_int* const tint_symbol_2, device atomic_uint* const tint_symbol_3, device atomic_int* const tint_symbol_4) {
+  if ((local_invocation_index < 1u)) {
+    atomic_store_explicit(tint_symbol_1, 0u, memory_order_relaxed);
+    atomic_store_explicit(tint_symbol_2, 0, memory_order_relaxed);
+  }
+  threadgroup_barrier(mem_flags::mem_threadgroup);
+  {
+    uint value = 42u;
+    atomic_compare_exchange_resultu32 const r1 = atomicCompareExchangeWeak_1(tint_symbol_3, 0u, value);
+    atomic_compare_exchange_resultu32 const r2 = atomicCompareExchangeWeak_1(tint_symbol_3, 0u, value);
+    atomic_compare_exchange_resultu32 const r3 = atomicCompareExchangeWeak_1(tint_symbol_3, 0u, value);
+  }
+  {
+    int value = 42;
+    atomic_compare_exchange_resulti32 const r1 = atomicCompareExchangeWeak_2(tint_symbol_4, 0, value);
+    atomic_compare_exchange_resulti32 const r2 = atomicCompareExchangeWeak_2(tint_symbol_4, 0, value);
+    atomic_compare_exchange_resulti32 const r3 = atomicCompareExchangeWeak_2(tint_symbol_4, 0, value);
+  }
+  {
+    uint value = 42u;
+    atomic_compare_exchange_resultu32 const r1 = atomicCompareExchangeWeak_3(tint_symbol_1, 0u, value);
+    atomic_compare_exchange_resultu32 const r2 = atomicCompareExchangeWeak_3(tint_symbol_1, 0u, value);
+    atomic_compare_exchange_resultu32 const r3 = atomicCompareExchangeWeak_3(tint_symbol_1, 0u, value);
+  }
+  {
+    int value = 42;
+    atomic_compare_exchange_resulti32 const r1 = atomicCompareExchangeWeak_4(tint_symbol_2, 0, value);
+    atomic_compare_exchange_resulti32 const r2 = atomicCompareExchangeWeak_4(tint_symbol_2, 0, value);
+    atomic_compare_exchange_resulti32 const r3 = atomicCompareExchangeWeak_4(tint_symbol_2, 0, value);
+  }
+}
+
+kernel void tint_symbol(device atomic_uint* tint_symbol_7 [[buffer(0)]], device atomic_int* tint_symbol_8 [[buffer(1)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
+  threadgroup atomic_uint tint_symbol_5;
+  threadgroup atomic_int tint_symbol_6;
+  tint_symbol_inner(local_invocation_index, &(tint_symbol_5), &(tint_symbol_6), tint_symbol_7, tint_symbol_8);
+  return;
+}
+
diff --git a/test/tint/bug/tint/1574.wgsl.expected.spvasm b/test/tint/bug/tint/1574.wgsl.expected.spvasm
new file mode 100644
index 0000000..be3e7f0
--- /dev/null
+++ b/test/tint/bug/tint/1574.wgsl.expected.spvasm
@@ -0,0 +1,158 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 118
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main" %local_invocation_index_1
+               OpExecutionMode %main LocalSize 16 1 1
+               OpName %local_invocation_index_1 "local_invocation_index_1"
+               OpName %a_u32_block "a_u32_block"
+               OpMemberName %a_u32_block 0 "inner"
+               OpName %a_u32 "a_u32"
+               OpName %a_i32_block "a_i32_block"
+               OpMemberName %a_i32_block 0 "inner"
+               OpName %a_i32 "a_i32"
+               OpName %b_u32 "b_u32"
+               OpName %b_i32 "b_i32"
+               OpName %main_inner "main_inner"
+               OpName %local_invocation_index "local_invocation_index"
+               OpName %value "value"
+               OpName %__atomic_compare_exchange_resultu32 "__atomic_compare_exchange_resultu32"
+               OpMemberName %__atomic_compare_exchange_resultu32 0 "old_value"
+               OpMemberName %__atomic_compare_exchange_resultu32 1 "exchanged"
+               OpName %value_0 "value"
+               OpName %__atomic_compare_exchange_resulti32 "__atomic_compare_exchange_resulti32"
+               OpMemberName %__atomic_compare_exchange_resulti32 0 "old_value"
+               OpMemberName %__atomic_compare_exchange_resulti32 1 "exchanged"
+               OpName %value_1 "value"
+               OpName %value_2 "value"
+               OpName %main "main"
+               OpDecorate %local_invocation_index_1 BuiltIn LocalInvocationIndex
+               OpDecorate %a_u32_block Block
+               OpMemberDecorate %a_u32_block 0 Offset 0
+               OpDecorate %a_u32 DescriptorSet 0
+               OpDecorate %a_u32 Binding 0
+               OpDecorate %a_i32_block Block
+               OpMemberDecorate %a_i32_block 0 Offset 0
+               OpDecorate %a_i32 DescriptorSet 0
+               OpDecorate %a_i32 Binding 1
+               OpMemberDecorate %__atomic_compare_exchange_resultu32 0 Offset 0
+               OpMemberDecorate %__atomic_compare_exchange_resultu32 1 Offset 4
+               OpMemberDecorate %__atomic_compare_exchange_resulti32 0 Offset 0
+               OpMemberDecorate %__atomic_compare_exchange_resulti32 1 Offset 4
+       %uint = OpTypeInt 32 0
+%_ptr_Input_uint = OpTypePointer Input %uint
+%local_invocation_index_1 = OpVariable %_ptr_Input_uint Input
+%a_u32_block = OpTypeStruct %uint
+%_ptr_StorageBuffer_a_u32_block = OpTypePointer StorageBuffer %a_u32_block
+      %a_u32 = OpVariable %_ptr_StorageBuffer_a_u32_block StorageBuffer
+        %int = OpTypeInt 32 1
+%a_i32_block = OpTypeStruct %int
+%_ptr_StorageBuffer_a_i32_block = OpTypePointer StorageBuffer %a_i32_block
+      %a_i32 = OpVariable %_ptr_StorageBuffer_a_i32_block StorageBuffer
+%_ptr_Workgroup_uint = OpTypePointer Workgroup %uint
+      %b_u32 = OpVariable %_ptr_Workgroup_uint Workgroup
+%_ptr_Workgroup_int = OpTypePointer Workgroup %int
+      %b_i32 = OpVariable %_ptr_Workgroup_int Workgroup
+       %void = OpTypeVoid
+         %15 = OpTypeFunction %void %uint
+     %uint_1 = OpConstant %uint 1
+       %bool = OpTypeBool
+     %uint_2 = OpConstant %uint 2
+     %uint_0 = OpConstant %uint 0
+         %29 = OpConstantNull %uint
+         %32 = OpConstantNull %int
+   %uint_264 = OpConstant %uint 264
+    %uint_42 = OpConstant %uint 42
+%_ptr_Function_uint = OpTypePointer Function %uint
+%__atomic_compare_exchange_resultu32 = OpTypeStruct %uint %bool
+%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
+     %int_42 = OpConstant %int 42
+%_ptr_Function_int = OpTypePointer Function %int
+%__atomic_compare_exchange_resulti32 = OpTypeStruct %int %bool
+%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
+        %113 = OpTypeFunction %void
+ %main_inner = OpFunction %void None %15
+%local_invocation_index = OpFunctionParameter %uint
+         %19 = OpLabel
+      %value = OpVariable %_ptr_Function_uint Function %29
+    %value_0 = OpVariable %_ptr_Function_int Function %32
+    %value_1 = OpVariable %_ptr_Function_uint Function %29
+    %value_2 = OpVariable %_ptr_Function_int Function %32
+         %21 = OpULessThan %bool %local_invocation_index %uint_1
+               OpSelectionMerge %23 None
+               OpBranchConditional %21 %24 %23
+         %24 = OpLabel
+               OpAtomicStore %b_u32 %uint_2 %uint_0 %29
+               OpAtomicStore %b_i32 %uint_2 %uint_0 %32
+               OpBranch %23
+         %23 = OpLabel
+               OpControlBarrier %uint_2 %uint_2 %uint_264
+               OpStore %value %uint_42
+         %42 = OpAccessChain %_ptr_StorageBuffer_uint %a_u32 %uint_0
+         %43 = OpLoad %uint %value
+         %44 = OpAtomicCompareExchange %uint %42 %uint_1 %uint_0 %uint_0 %43 %29
+         %45 = OpIEqual %bool %44 %43
+         %38 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %44 %45
+         %48 = OpAccessChain %_ptr_StorageBuffer_uint %a_u32 %uint_0
+         %49 = OpLoad %uint %value
+         %50 = OpAtomicCompareExchange %uint %48 %uint_1 %uint_0 %uint_0 %49 %29
+         %51 = OpIEqual %bool %50 %49
+         %46 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %50 %51
+         %54 = OpAccessChain %_ptr_StorageBuffer_uint %a_u32 %uint_0
+         %55 = OpLoad %uint %value
+         %56 = OpAtomicCompareExchange %uint %54 %uint_1 %uint_0 %uint_0 %55 %29
+         %57 = OpIEqual %bool %56 %55
+         %52 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %56 %57
+               OpStore %value_0 %int_42
+         %65 = OpAccessChain %_ptr_StorageBuffer_int %a_i32 %uint_0
+         %66 = OpLoad %int %value_0
+         %67 = OpAtomicCompareExchange %int %65 %uint_1 %uint_0 %uint_0 %66 %32
+         %68 = OpIEqual %bool %67 %66
+         %61 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %67 %68
+         %71 = OpAccessChain %_ptr_StorageBuffer_int %a_i32 %uint_0
+         %72 = OpLoad %int %value_0
+         %73 = OpAtomicCompareExchange %int %71 %uint_1 %uint_0 %uint_0 %72 %32
+         %74 = OpIEqual %bool %73 %72
+         %69 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %73 %74
+         %77 = OpAccessChain %_ptr_StorageBuffer_int %a_i32 %uint_0
+         %78 = OpLoad %int %value_0
+         %79 = OpAtomicCompareExchange %int %77 %uint_1 %uint_0 %uint_0 %78 %32
+         %80 = OpIEqual %bool %79 %78
+         %75 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %79 %80
+               OpStore %value_1 %uint_42
+         %84 = OpLoad %uint %value_1
+         %85 = OpAtomicCompareExchange %uint %b_u32 %uint_2 %uint_0 %uint_0 %84 %29
+         %86 = OpIEqual %bool %85 %84
+         %82 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %85 %86
+         %89 = OpLoad %uint %value_1
+         %90 = OpAtomicCompareExchange %uint %b_u32 %uint_2 %uint_0 %uint_0 %89 %29
+         %91 = OpIEqual %bool %90 %89
+         %87 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %90 %91
+         %94 = OpLoad %uint %value_1
+         %95 = OpAtomicCompareExchange %uint %b_u32 %uint_2 %uint_0 %uint_0 %94 %29
+         %96 = OpIEqual %bool %95 %94
+         %92 = OpCompositeConstruct %__atomic_compare_exchange_resultu32 %95 %96
+               OpStore %value_2 %int_42
+        %100 = OpLoad %int %value_2
+        %101 = OpAtomicCompareExchange %int %b_i32 %uint_2 %uint_0 %uint_0 %100 %32
+        %102 = OpIEqual %bool %101 %100
+         %98 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %101 %102
+        %105 = OpLoad %int %value_2
+        %106 = OpAtomicCompareExchange %int %b_i32 %uint_2 %uint_0 %uint_0 %105 %32
+        %107 = OpIEqual %bool %106 %105
+        %103 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %106 %107
+        %110 = OpLoad %int %value_2
+        %111 = OpAtomicCompareExchange %int %b_i32 %uint_2 %uint_0 %uint_0 %110 %32
+        %112 = OpIEqual %bool %111 %110
+        %108 = OpCompositeConstruct %__atomic_compare_exchange_resulti32 %111 %112
+               OpReturn
+               OpFunctionEnd
+       %main = OpFunction %void None %113
+        %115 = OpLabel
+        %117 = OpLoad %uint %local_invocation_index_1
+        %116 = OpFunctionCall %void %main_inner %117
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/bug/tint/1574.wgsl.expected.wgsl b/test/tint/bug/tint/1574.wgsl.expected.wgsl
new file mode 100644
index 0000000..97dbbee
--- /dev/null
+++ b/test/tint/bug/tint/1574.wgsl.expected.wgsl
@@ -0,0 +1,35 @@
+@group(0) @binding(0) var<storage, read_write> a_u32 : atomic<u32>;
+
+@group(0) @binding(1) var<storage, read_write> a_i32 : atomic<i32>;
+
+var<workgroup> b_u32 : atomic<u32>;
+
+var<workgroup> b_i32 : atomic<i32>;
+
+@stage(compute) @workgroup_size(16)
+fn main() {
+  {
+    var value = 42u;
+    let r1 = atomicCompareExchangeWeak(&(a_u32), 0u, value);
+    let r2 = atomicCompareExchangeWeak(&(a_u32), 0u, value);
+    let r3 = atomicCompareExchangeWeak(&(a_u32), 0u, value);
+  }
+  {
+    var value = 42;
+    let r1 = atomicCompareExchangeWeak(&(a_i32), 0, value);
+    let r2 = atomicCompareExchangeWeak(&(a_i32), 0, value);
+    let r3 = atomicCompareExchangeWeak(&(a_i32), 0, value);
+  }
+  {
+    var value = 42u;
+    let r1 = atomicCompareExchangeWeak(&(b_u32), 0u, value);
+    let r2 = atomicCompareExchangeWeak(&(b_u32), 0u, value);
+    let r3 = atomicCompareExchangeWeak(&(b_u32), 0u, value);
+  }
+  {
+    var value = 42;
+    let r1 = atomicCompareExchangeWeak(&(b_i32), 0, value);
+    let r2 = atomicCompareExchangeWeak(&(b_i32), 0, value);
+    let r3 = atomicCompareExchangeWeak(&(b_i32), 0, value);
+  }
+}
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl
index 6cab275..9f0ca2d 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl
@@ -6,9 +6,8 @@
   int old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(device A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(device atomic_int* atomic, int compare, int value) {
+  int old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl
index 94166ca..9437613 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl
@@ -6,9 +6,8 @@
   uint old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.msl
index 57f5ce3..effc141 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/83580d.wgsl.expected.msl
@@ -6,9 +6,8 @@
   uint old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(threadgroup A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(threadgroup atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.msl b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.msl
index 0d754bc..2843d71 100644
--- a/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atomicCompareExchangeWeak/e88938.wgsl.expected.msl
@@ -6,9 +6,8 @@
   int old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(threadgroup A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(threadgroup atomic_int* atomic, int compare, int value) {
+  int old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl
index 11d8177..d2b6691 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/1bd40a.wgsl.expected.msl
@@ -6,9 +6,8 @@
   int old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(device A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(device atomic_int* atomic, int compare, int value) {
+  int old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl
index 545803b..f4fda56 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/63d8e6.wgsl.expected.msl
@@ -6,9 +6,8 @@
   uint old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(device atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.msl
index 6e181e3..811dd26 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/83580d.wgsl.expected.msl
@@ -6,9 +6,8 @@
   uint old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(threadgroup A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resultu32 atomicCompareExchangeWeak_1(threadgroup atomic_uint* atomic, uint compare, uint value) {
+  uint old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
diff --git a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.msl b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.msl
index 38f9dc5..de5d73f 100644
--- a/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atomicCompareExchangeWeak/e88938.wgsl.expected.msl
@@ -6,9 +6,8 @@
   int old_value;
   bool exchanged;
 };
-template <typename A, typename T>
-atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(threadgroup A* atomic, T compare, T value) {
-  T old_value = compare;
+atomic_compare_exchange_resulti32 atomicCompareExchangeWeak_1(threadgroup atomic_int* atomic, int compare, int value) {
+  int old_value = compare;
   bool exchanged = atomic_compare_exchange_weak_explicit(atomic, &old_value, value, memory_order_relaxed, memory_order_relaxed);
   return {old_value, exchanged};
 }
