GLSL: implement atomics.

Bug: tint:1314

Change-Id: Ic7a88761752d2db3374be043c94f02fd20684c03
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/69560
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index 32b4d94..824fdda 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -607,162 +607,102 @@
 bool GeneratorImpl::EmitWorkgroupAtomicCall(std::ostream& out,
                                             const ast::CallExpression* expr,
                                             const sem::Intrinsic* intrinsic) {
-  std::string result = UniqueIdentifier("atomic_result");
-
-  if (!intrinsic->ReturnType()->Is<sem::Void>()) {
-    auto pre = line();
-    if (!EmitTypeAndName(pre, intrinsic->ReturnType(), ast::StorageClass::kNone,
-                         ast::Access::kUndefined, result)) {
-      return false;
-    }
-    pre << " = ";
-    if (!EmitZeroValue(pre, intrinsic->ReturnType())) {
-      return false;
-    }
-    pre << ";";
-  }
-
   auto call = [&](const char* name) {
-    auto pre = line();
-    pre << name;
-
+    out << name;
     {
-      ScopedParen sp(pre);
+      ScopedParen sp(out);
       for (size_t i = 0; i < expr->args.size(); i++) {
         auto* arg = expr->args[i];
         if (i > 0) {
-          pre << ", ";
+          out << ", ";
         }
-        if (!EmitExpression(pre, arg)) {
+        if (!EmitExpression(out, arg)) {
           return false;
         }
       }
-
-      pre << ", " << result;
     }
-
-    pre << ";";
-
-    out << result;
     return true;
   };
 
   switch (intrinsic->Type()) {
     case sem::IntrinsicType::kAtomicLoad: {
-      // GLSL does not have an InterlockedLoad, so we emulate it with
-      // InterlockedOr using 0 as the OR value
-      auto pre = line();
-      pre << "InterlockedOr";
-      {
-        ScopedParen sp(pre);
-        if (!EmitExpression(pre, expr->args[0])) {
-          return false;
-        }
-        pre << ", 0, " << result;
-      }
-      pre << ";";
-
-      out << result;
-      return true;
-    }
-    case sem::IntrinsicType::kAtomicStore: {
-      // GLSL does not have an InterlockedStore, so we emulate it with
-      // InterlockedExchange and discard the returned value
-      {  // T result = 0;
-        auto pre = line();
-        auto* value_ty = intrinsic->Parameters()[1]->Type();
-        if (!EmitTypeAndName(pre, value_ty, ast::StorageClass::kNone,
-                             ast::Access::kUndefined, result)) {
-          return false;
-        }
-        pre << " = ";
-        if (!EmitZeroValue(pre, value_ty)) {
-          return false;
-        }
-        pre << ";";
-      }
-
-      out << "InterlockedExchange";
+      // GLSL does not have an atomicLoad, so we emulate it with
+      // atomicOr using 0 as the OR value
+      out << "atomicOr";
       {
         ScopedParen sp(out);
         if (!EmitExpression(out, expr->args[0])) {
           return false;
         }
-        out << ", ";
-        if (!EmitExpression(out, expr->args[1])) {
-          return false;
+        out << ", 0";
+        if (intrinsic->ReturnType()->Is<sem::U32>()) {
+          out << "u";
         }
-        out << ", " << result;
       }
       return true;
     }
     case sem::IntrinsicType::kAtomicCompareExchangeWeak: {
-      auto* dest = expr->args[0];
-      auto* compare_value = expr->args[1];
-      auto* value = expr->args[2];
-
-      std::string compare = UniqueIdentifier("atomic_compare_value");
-
-      {  // T compare_value = <compare_value>;
-        auto pre = line();
-        if (!EmitTypeAndName(pre, TypeOf(compare_value),
-                             ast::StorageClass::kNone, ast::Access::kUndefined,
-                             compare)) {
-          return false;
-        }
-        pre << " = ";
-        if (!EmitExpression(pre, compare_value)) {
-          return false;
-        }
-        pre << ";";
-      }
-
-      {  // InterlockedCompareExchange(dst, compare, value, result.x);
-        auto pre = line();
-        pre << "InterlockedCompareExchange";
-        {
-          ScopedParen sp(pre);
-          if (!EmitExpression(pre, dest)) {
-            return false;
-          }
-          pre << ", " << compare << ", ";
-          if (!EmitExpression(pre, value)) {
-            return false;
-          }
-          pre << ", " << result << ".x";
-        }
-        pre << ";";
-      }
-
-      {  // result.y = result.x == compare;
-        line() << result << ".y = " << result << ".x == " << compare << ";";
-      }
-
-      out << result;
-      return true;
+      return CallIntrinsicHelper(
+          out, expr, intrinsic,
+          [&](TextBuffer* b, const std::vector<std::string>& params) {
+            {
+              auto pre = line(b);
+              if (!EmitTypeAndName(pre, intrinsic->ReturnType(),
+                                   ast::StorageClass::kNone,
+                                   ast::Access::kUndefined, "result")) {
+                return false;
+              }
+              pre << ";";
+            }
+            {
+              auto pre = line(b);
+              pre << "result.x = atomicCompSwap";
+              {
+                ScopedParen sp(pre);
+                pre << params[0];
+                pre << ", " << params[1];
+                pre << ", " << params[2];
+              }
+              pre << ";";
+            }
+            {
+              auto pre = line(b);
+              pre << "result.y = result.x == " << params[2] << " ? ";
+              if (TypeOf(expr->args[2])->Is<sem::U32>()) {
+                pre << "1u : 0u;";
+              } else {
+                pre << "1 : 0;";
+              }
+            }
+            line(b) << "return result;";
+            return true;
+          });
     }
 
     case sem::IntrinsicType::kAtomicAdd:
     case sem::IntrinsicType::kAtomicSub:
-      return call("InterlockedAdd");
+      return call("atomicAdd");
 
     case sem::IntrinsicType::kAtomicMax:
-      return call("InterlockedMax");
+      return call("atomicMax");
 
     case sem::IntrinsicType::kAtomicMin:
-      return call("InterlockedMin");
+      return call("atomicMin");
 
     case sem::IntrinsicType::kAtomicAnd:
-      return call("InterlockedAnd");
+      return call("atomicAnd");
 
     case sem::IntrinsicType::kAtomicOr:
-      return call("InterlockedOr");
+      return call("atomicOr");
 
     case sem::IntrinsicType::kAtomicXor:
-      return call("InterlockedXor");
+      return call("atomicXor");
 
     case sem::IntrinsicType::kAtomicExchange:
-      return call("InterlockedExchange");
+    case sem::IntrinsicType::kAtomicStore:
+      // GLSL does not have an atomicStore, so we emulate it with
+      // atomicExchange.
+      return call("atomicExchange");
 
     default:
       break;
@@ -1160,9 +1100,9 @@
   // TODO(crbug.com/tint/661): Combine sequential barriers to a single
   // instruction.
   if (intrinsic->Type() == sem::IntrinsicType::kWorkgroupBarrier) {
-    out << "GroupMemoryBarrierWithGroupSync()";
+    out << "memoryBarrierShared()";
   } else if (intrinsic->Type() == sem::IntrinsicType::kStorageBarrier) {
-    out << "DeviceMemoryBarrierWithGroupSync()";
+    out << "memoryBarrierBuffer()";
   } else {
     TINT_UNREACHABLE(Writer, diagnostics_)
         << "unexpected barrier intrinsic type " << sem::str(intrinsic->Type());
@@ -1765,7 +1705,7 @@
   auto* decl = var->Declaration();
   auto out = line();
 
-  out << "groupshared ";
+  out << "shared ";
 
   auto name = builder_.Symbols().NameFor(decl->symbol);
   auto* type = var->Type()->UnwrapRef();
diff --git a/src/writer/glsl/generator_impl_workgroup_var_test.cc b/src/writer/glsl/generator_impl_workgroup_var_test.cc
index 40bc9c9..42d5d53 100644
--- a/src/writer/glsl/generator_impl_workgroup_var_test.cc
+++ b/src/writer/glsl/generator_impl_workgroup_var_test.cc
@@ -36,7 +36,7 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
-  EXPECT_THAT(gen.result(), HasSubstr("groupshared float wg;\n"));
+  EXPECT_THAT(gen.result(), HasSubstr("shared float wg;\n"));
 }
 
 TEST_F(GlslGeneratorImplTest_WorkgroupVar, Aliased) {
@@ -52,7 +52,7 @@
   GeneratorImpl& gen = Build();
 
   ASSERT_TRUE(gen.Generate()) << gen.error();
-  EXPECT_THAT(gen.result(), HasSubstr("groupshared float wg;\n"));
+  EXPECT_THAT(gen.result(), HasSubstr("shared float wg;\n"));
 }
 
 }  // namespace
diff --git a/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl b/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
index a21368d..30c6e8f 100644
--- a/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
+++ b/test/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
@@ -33,6 +33,8 @@
   ivec2 g = s.arr[idx].g;
   ivec2 h = s.arr[idx].h;
   mat2x3 i = s.arr[idx].i;
+  mat3x2 j = s.arr[idx].j;
+  ivec4 k[4] = s.arr[idx].k;
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
index c1acee0..517ad2e 100644
--- a/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/read/workgroup.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -15,7 +13,7 @@
 layout (binding = 1) buffer Result_1 {
   int tint_symbol;
 } result;
-groupshared S s;
+shared S s;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -28,7 +26,7 @@
       s.data[i] = 0;
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   result.tint_symbol = s.data[ubo.dynamic_idx];
 }
 
@@ -44,9 +42,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:16: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
index c561688..e28fc0b 100644
--- a/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
+++ b/test/bug/fxc/dyn_array_idx/write/workgroup.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -15,7 +13,7 @@
 layout (binding = 1) buffer Result_1 {
   int tint_symbol;
 } result;
-groupshared S s;
+shared S s;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -28,7 +26,7 @@
       s.data[i] = 0;
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   s.data[ubo.dynamic_idx] = 1;
   result.tint_symbol = s.data[3];
 }
@@ -45,9 +43,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:16: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/bug/tint/1113.wgsl.expected.glsl b/test/bug/tint/1113.wgsl.expected.glsl
index 0aeef4e..07877d9 100644
--- a/test/bug/tint/1113.wgsl.expected.glsl
+++ b/test/bug/tint/1113.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -64,14 +62,10 @@
 void doIgnore() {
   uint g42 = uniforms.numTriangles;
   uint kj6 = dbg.value1;
-  uint atomic_result = 0u;
-  InterlockedOr(counters.values[0], 0, atomic_result);
-  uint b53 = atomic_result;
+  uint b53 = atomicOr(counters.values[0], 0u);
   uint rwg = indices.values[0];
   float rb5 = positions.values[0];
-  int atomic_result_1 = 0;
-  InterlockedOr(LUT.values[0], 0, atomic_result_1);
-  int g55 = atomic_result_1;
+  int g55 = atomicOr(LUT.values[0], 0);
 }
 
 struct tint_symbol_1 {
@@ -93,9 +87,7 @@
   vec3 center = (((p0 + p1) + p2) / 3.0f);
   vec3 voxelPos = toVoxelPos(center);
   uint voxelIndex = toIndex1D(uniforms.gridSize, voxelPos);
-  uint atomic_result_2 = 0u;
-  InterlockedAdd(counters.values[voxelIndex], 1u, atomic_result_2);
-  uint acefg = atomic_result_2;
+  uint acefg = atomicAdd(counters.values[voxelIndex], 1u);
   if ((triangleIndex == 0u)) {
     dbg.value0 = uniforms.gridSize;
     dbg.value_f32_0 = center.x;
@@ -123,13 +115,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:66: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:66: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -172,14 +157,10 @@
 void doIgnore() {
   uint g42 = uniforms.numTriangles;
   uint kj6 = dbg.value1;
-  uint atomic_result = 0u;
-  InterlockedOr(counters.values[0], 0, atomic_result);
-  uint b53 = atomic_result;
+  uint b53 = atomicOr(counters.values[0], 0u);
   uint rwg = indices.values[0];
   float rb5 = positions.values[0];
-  int atomic_result_1 = 0;
-  InterlockedOr(LUT.values[0], 0, atomic_result_1);
-  int g55 = atomic_result_1;
+  int g55 = atomicOr(LUT.values[0], 0);
 }
 
 struct tint_symbol_1 {
@@ -196,17 +177,12 @@
   if ((voxelIndex >= maxVoxels)) {
     return;
   }
-  uint atomic_result_2 = 0u;
-  InterlockedOr(counters.values[voxelIndex], 0, atomic_result_2);
-  uint numTriangles = atomic_result_2;
+  uint numTriangles = atomicOr(counters.values[voxelIndex], 0u);
   int offset = -1;
   if ((numTriangles > 0u)) {
-    uint atomic_result_3 = 0u;
-    InterlockedAdd(dbg.offsetCounter, numTriangles, atomic_result_3);
-    offset = int(atomic_result_3);
+    offset = int(atomicAdd(dbg.offsetCounter, numTriangles));
   }
-  int atomic_result_4 = 0;
-  InterlockedExchange(LUT.values[voxelIndex], offset, atomic_result_4);
+  atomicExchange(LUT.values[voxelIndex], offset);
 }
 
 struct tint_symbol_5 {
@@ -225,13 +201,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:44: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:44: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -296,14 +265,10 @@
 void doIgnore() {
   uint g42 = uniforms.numTriangles;
   uint kj6 = dbg.value1;
-  uint atomic_result = 0u;
-  InterlockedOr(counters.values[0], 0, atomic_result);
-  uint b53 = atomic_result;
+  uint b53 = atomicOr(counters.values[0], 0u);
   uint rwg = indices.values[0];
   float rb5 = positions.values[0];
-  int atomic_result_1 = 0;
-  InterlockedOr(LUT.values[0], 0, atomic_result_1);
-  int g55 = atomic_result_1;
+  int g55 = atomicOr(LUT.values[0], 0);
 }
 
 struct tint_symbol_1 {
@@ -331,9 +296,7 @@
   vec3 center = (((p0 + p1) + p2) / 3.0f);
   vec3 voxelPos = toVoxelPos(center);
   uint voxelIndex = toIndex1D(uniforms.gridSize, voxelPos);
-  int atomic_result_2 = 0;
-  InterlockedAdd(LUT.values[voxelIndex], 1, atomic_result_2);
-  int triangleOffset = atomic_result_2;
+  int triangleOffset = atomicAdd(LUT.values[voxelIndex], 1);
 }
 
 layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in;
@@ -348,10 +311,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:66: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:66: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/bug/tint/1121.wgsl.expected.glsl b/test/bug/tint/1121.wgsl.expected.glsl
index 5dd520f..1dad2db 100644
--- a/test/bug/tint/1121.wgsl.expected.glsl
+++ b/test/bug/tint/1121.wgsl.expected.glsl
@@ -111,9 +111,7 @@
             if ((tint_tmp)) {
               continue;
             }
-            uint atomic_result = 0u;
-            InterlockedAdd(tileLightId.data[tileId].count, 1u, atomic_result);
-            uint offset = atomic_result;
+            uint offset = atomicAdd(tileLightId.data[tileId].count, 1u);
             if ((offset >= config.numTileLightSlot)) {
               continue;
             }
diff --git a/test/bug/tint/914.wgsl.expected.glsl b/test/bug/tint/914.wgsl.expected.glsl
index 026388e..951dea5 100644
--- a/test/bug/tint/914.wgsl.expected.glsl
+++ b/test/bug/tint/914.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -56,11 +54,9 @@
 
 const uint RowPerThread = 4u;
 const uint ColPerThread = 4u;
-const uint TileAOuter = 64u;
-const uint TileBOuter = 64u;
 const uint TileInner = 64u;
-groupshared float mm_Asub[64][64];
-groupshared float mm_Bsub[64][64];
+shared float mm_Asub[64][64];
+shared float mm_Bsub[64][64];
 
 struct tint_symbol_2 {
   uvec3 local_id;
@@ -77,7 +73,7 @@
       mm_Bsub[i][i_1] = 0.0f;
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   uint tileRow = (local_id.y * RowPerThread);
   uint tileCol = (local_id.x * ColPerThread);
   uint globalRow = (global_id.y * RowPerThread);
@@ -119,7 +115,7 @@
           }
         }
       }
-      GroupMemoryBarrierWithGroupSync();
+      memoryBarrierShared();
       {
         for(uint k = 0u; (k < TileInner); k = (k + 1u)) {
           {
@@ -140,7 +136,7 @@
           }
         }
       }
-      GroupMemoryBarrierWithGroupSync();
+      memoryBarrierShared();
     }
   }
   {
@@ -169,9 +165,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:60: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/bug/tint/926.wgsl.expected.glsl b/test/bug/tint/926.wgsl.expected.glsl
index e1fb812..c54318d 100644
--- a/test/bug/tint/926.wgsl.expected.glsl
+++ b/test/bug/tint/926.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -14,9 +12,7 @@
 };
 
 void computeMain_inner(uvec3 global_id) {
-  uint atomic_result = 0u;
-  InterlockedAdd(drawOut.vertexCount, cubeVerts, atomic_result);
-  uint firstVertex = atomic_result;
+  uint firstVertex = atomicAdd(drawOut.vertexCount, cubeVerts);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -31,10 +27,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:16: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:16: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/bug/tint/942.wgsl.expected.glsl b/test/bug/tint/942.wgsl.expected.glsl
index a011f7e..464422e 100644
--- a/test/bug/tint/942.wgsl.expected.glsl
+++ b/test/bug/tint/942.wgsl.expected.glsl
@@ -15,7 +15,7 @@
 layout (binding = 3) uniform Flip_1 {
   uint value;
 } flip;
-groupshared vec3 tile[4][256];
+shared vec3 tile[4][256];
 
 struct tint_symbol_2 {
   uvec3 LocalInvocationID;
@@ -31,7 +31,7 @@
       tile[i_1][i_2] = vec3(0.0f, 0.0f, 0.0f);
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   uint filterOffset = ((params.filterDim - 1u) / 2u);
   ivec2 dims = textureSize(inputTex0);
   ivec2 baseIndex = (ivec2(((WorkGroupID.xy * uvec2(params.blockDim, 4u)) + (LocalInvocationID.xy * uvec2(4u, 1u)))) - ivec2(int(filterOffset), 0));
@@ -48,7 +48,7 @@
       }
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   {
     for(uint r = 0u; (r < 4u); r = (r + 1u)) {
       {
@@ -97,8 +97,11 @@
 
 
 Error parsing GLSL shader:
-ERROR: 0:16: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
+ERROR: 0:34: 'inputTex0' : undeclared identifier 
+ERROR: 0:34: 'textureSize' : no matching overloaded function found 
+ERROR: 0:34: '=' :  cannot convert from ' const float' to ' temp highp 2-component vector of int'
+ERROR: 0:34: '' : compilation terminated 
+ERROR: 4 compilation errors.  No code generated.
 
 
 
diff --git a/test/bug/tint/943.spvasm.expected.glsl b/test/bug/tint/943.spvasm.expected.glsl
index 1ae6844..f04b212 100644
--- a/test/bug/tint/943.spvasm.expected.glsl
+++ b/test/bug/tint/943.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -19,8 +17,8 @@
 } x_54;
 uvec3 tint_symbol = uvec3(0u, 0u, 0u);
 uvec3 tint_symbol_1 = uvec3(0u, 0u, 0u);
-groupshared float mm_Asub[64][64];
-groupshared float mm_Bsub[64][1];
+shared float mm_Asub[64][64];
+shared float mm_Bsub[64][1];
 layout (binding = 1) buffer ssbA_1 {
   float A[];
 } x_165;
@@ -258,7 +256,7 @@
           }
         }
       }
-      GroupMemoryBarrierWithGroupSync();
+      memoryBarrierShared();
       k = 0;
       {
         for(; (k < 64); k = (k + 1)) {
@@ -290,7 +288,7 @@
           }
         }
       }
-      GroupMemoryBarrierWithGroupSync();
+      memoryBarrierShared();
     }
   }
   innerRow_4 = 0;
@@ -374,7 +372,7 @@
       mm_Asub[i][i_1] = 0.0f;
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   tint_symbol = tint_symbol_3;
   tint_symbol_1 = tint_symbol_4;
   main_1();
@@ -394,9 +392,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:20: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/bug/tint/993.wgsl.expected.glsl b/test/bug/tint/993.wgsl.expected.glsl
index 685ccde..e0485c5 100644
--- a/test/bug/tint/993.wgsl.expected.glsl
+++ b/test/bug/tint/993.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -17,9 +15,7 @@
 } s;
 
 int runTest() {
-  int atomic_result = 0;
-  InterlockedOr(s.data[(0u + uint(constants.zero))], 0, atomic_result);
-  return atomic_result;
+  return atomicOr(s.data[(0u + uint(constants.zero))], 0);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -32,10 +28,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:19: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:19: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
index cc143ec..55ffa25 100644
--- a/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/794055.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicAdd_794055() {
-  int atomic_result = 0;
-  InterlockedAdd(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAdd(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicAdd_794055();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
index 139df57..f2dd43a 100644
--- a/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/8a199a.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicAdd_8a199a() {
-  uint atomic_result = 0u;
-  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicAdd_8a199a() {
-  uint atomic_result = 0u;
-  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
index e157ee3..a324c7a 100644
--- a/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/d32fe4.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicAdd_d32fe4() {
-  int atomic_result = 0;
-  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAdd(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicAdd_d32fe4() {
-  int atomic_result = 0;
-  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAdd(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
index 1c43164..9a3d9a1 100644
--- a/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAdd/d5db1d.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicAdd_d5db1d() {
-  uint atomic_result = 0u;
-  InterlockedAdd(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAdd(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicAdd_d5db1d();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
index 813e521..a4c446d 100644
--- a/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/152966.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicAnd_152966() {
-  int atomic_result = 0;
-  InterlockedAnd(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAnd(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicAnd_152966() {
-  int atomic_result = 0;
-  InterlockedAnd(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAnd(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
index 05f66bb..8ab60de 100644
--- a/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/34edd3.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicAnd_34edd3() {
-  uint atomic_result = 0u;
-  InterlockedAnd(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAnd(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicAnd_34edd3();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
index 10635fb..af28d89 100644
--- a/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/45a819.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicAnd_45a819() {
-  int atomic_result = 0;
-  InterlockedAnd(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAnd(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicAnd_45a819();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
index 50f0b04..c7c9601 100644
--- a/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicAnd/85a8d9.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicAnd_85a8d9() {
-  uint atomic_result = 0u;
-  InterlockedAnd(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAnd(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicAnd_85a8d9() {
-  uint atomic_result = 0u;
-  InterlockedAnd(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAnd(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAnd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
index f15fa37..93d6d9e 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/12871c.wgsl.expected.glsl
@@ -1,19 +1,21 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
+ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
+  ivec2 result;
+  result.x = atomicCompSwap(param_0, param_1, param_2);
+  result.y = result.x == param_2 ? 1 : 0;
+  return result;
+}
+
+
 
 layout (binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
 
 void atomicCompareExchangeWeak_12871c() {
-  ivec2 atomic_result = ivec2(0, 0);
-  int atomic_compare_value = 1;
-  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1, atomic_result.x);
-  atomic_result.y = atomic_result.x == atomic_compare_value;
-  ivec2 res = atomic_result;
+  ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
 }
 
 void fragment_main() {
@@ -25,27 +27,24 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
+ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
+  ivec2 result;
+  result.x = atomicCompSwap(param_0, param_1, param_2);
+  result.y = result.x == param_2 ? 1 : 0;
+  return result;
+}
+
+
 
 layout (binding = 0) buffer SB_RW_1 {
   int arg_0;
 } sb_rw;
 
 void atomicCompareExchangeWeak_12871c() {
-  ivec2 atomic_result = ivec2(0, 0);
-  int atomic_compare_value = 1;
-  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1, atomic_result.x);
-  atomic_result.y = atomic_result.x == atomic_compare_value;
-  ivec2 res = atomic_result;
+  ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -58,10 +57,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
index f1cde24..72a7f09 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/6673da.wgsl.expected.glsl
@@ -1,19 +1,21 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
+uvec2 tint_atomicCompareExchangeWeak(inout uint param_0, uint param_1, uint param_2) {
+  uvec2 result;
+  result.x = atomicCompSwap(param_0, param_1, param_2);
+  result.y = result.x == param_2 ? 1u : 0u;
+  return result;
+}
+
+
 
 layout (binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
 
 void atomicCompareExchangeWeak_6673da() {
-  uvec2 atomic_result = uvec2(0u, 0u);
-  uint atomic_compare_value = 1u;
-  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1u, atomic_result.x);
-  atomic_result.y = atomic_result.x == atomic_compare_value;
-  uvec2 res = atomic_result;
+  uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
 }
 
 void fragment_main() {
@@ -25,27 +27,24 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
+uvec2 tint_atomicCompareExchangeWeak(inout uint param_0, uint param_1, uint param_2) {
+  uvec2 result;
+  result.x = atomicCompSwap(param_0, param_1, param_2);
+  result.y = result.x == param_2 ? 1u : 0u;
+  return result;
+}
+
+
 
 layout (binding = 0) buffer SB_RW_1 {
   uint arg_0;
 } sb_rw;
 
 void atomicCompareExchangeWeak_6673da() {
-  uvec2 atomic_result = uvec2(0u, 0u);
-  uint atomic_compare_value = 1u;
-  InterlockedCompareExchange(sb_rw.arg_0, atomic_compare_value, 1u, atomic_result.x);
-  atomic_result.y = atomic_result.x == atomic_compare_value;
-  uvec2 res = atomic_result;
+  uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -58,10 +57,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:12: 'InterlockedCompareExchange' : no matching overloaded function found 
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
index 9760452..aaaf177 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/89ea3b.wgsl.expected.glsl
@@ -1,16 +1,18 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
+  ivec2 result;
+  result.x = atomicCompSwap(param_0, param_1, param_2);
+  result.y = result.x == param_2 ? 1 : 0;
+  return result;
+}
+
+
+shared int arg_0;
 
 void atomicCompareExchangeWeak_89ea3b() {
-  ivec2 atomic_result = ivec2(0, 0);
-  int atomic_compare_value = 1;
-  InterlockedCompareExchange(arg_0, atomic_compare_value, 1, atomic_result.x);
-  atomic_result.y = atomic_result.x == atomic_compare_value;
-  ivec2 res = atomic_result;
+  ivec2 res = tint_atomicCompareExchangeWeak(arg_0, 1, 1);
 }
 
 struct tint_symbol_1 {
@@ -19,10 +21,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicCompareExchangeWeak_89ea3b();
 }
 
@@ -38,9 +39,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
index be102ee..03b6857 100644
--- a/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicCompareExchangeWeak/b2ab2c.wgsl.expected.glsl
@@ -1,16 +1,18 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+uvec2 tint_atomicCompareExchangeWeak(inout uint param_0, uint param_1, uint param_2) {
+  uvec2 result;
+  result.x = atomicCompSwap(param_0, param_1, param_2);
+  result.y = result.x == param_2 ? 1u : 0u;
+  return result;
+}
+
+
+shared uint arg_0;
 
 void atomicCompareExchangeWeak_b2ab2c() {
-  uvec2 atomic_result = uvec2(0u, 0u);
-  uint atomic_compare_value = 1u;
-  InterlockedCompareExchange(arg_0, atomic_compare_value, 1u, atomic_result.x);
-  atomic_result.y = atomic_result.x == atomic_compare_value;
-  uvec2 res = atomic_result;
+  uvec2 res = tint_atomicCompareExchangeWeak(arg_0, 1u, 1u);
 }
 
 struct tint_symbol_1 {
@@ -19,10 +21,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicCompareExchangeWeak_b2ab2c();
 }
 
@@ -38,9 +39,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
index 8b09423..c97fd12 100644
--- a/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/0a5dca.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicExchange_0a5dca() {
-  uint atomic_result = 0u;
-  InterlockedExchange(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicExchange(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicExchange_0a5dca();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
index 7e1913c..a4f0b7f 100644
--- a/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/d59712.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicExchange_d59712() {
-  uint atomic_result = 0u;
-  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicExchange(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicExchange_d59712() {
-  uint atomic_result = 0u;
-  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicExchange(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
index d847eaf..52ae007 100644
--- a/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/e114ba.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicExchange_e114ba() {
-  int atomic_result = 0;
-  InterlockedExchange(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicExchange(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicExchange_e114ba();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
index f777a17..bc0e46e 100644
--- a/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicExchange/f2e22f.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicExchange_f2e22f() {
-  int atomic_result = 0;
-  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicExchange(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicExchange_f2e22f() {
-  int atomic_result = 0;
-  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicExchange(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
index 2f8cb3d..68355ce 100644
--- a/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/0806ad.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicLoad_0806ad() {
-  int atomic_result = 0;
-  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
-  int res = atomic_result;
+  int res = atomicOr(sb_rw.arg_0, 0);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicLoad_0806ad() {
-  int atomic_result = 0;
-  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
-  int res = atomic_result;
+  int res = atomicOr(sb_rw.arg_0, 0);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
index e0c94f0..de8c6c6 100644
--- a/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/361bf1.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicLoad_361bf1() {
-  uint atomic_result = 0u;
-  InterlockedOr(arg_0, 0, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicOr(arg_0, 0u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicLoad_361bf1();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
index 74351a3..3f9ee82 100644
--- a/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/afcc03.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicLoad_afcc03() {
-  int atomic_result = 0;
-  InterlockedOr(arg_0, 0, atomic_result);
-  int res = atomic_result;
+  int res = atomicOr(arg_0, 0);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicLoad_afcc03();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
index 7fc0623..373dafa 100644
--- a/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicLoad/fe6cc3.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicLoad_fe6cc3() {
-  uint atomic_result = 0u;
-  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicOr(sb_rw.arg_0, 0u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicLoad_fe6cc3() {
-  uint atomic_result = 0u;
-  InterlockedOr(sb_rw.arg_0, 0, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicOr(sb_rw.arg_0, 0u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
index 4a35e2c..e95789e 100644
--- a/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/51b9be.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicMax_51b9be() {
-  uint atomic_result = 0u;
-  InterlockedMax(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicMax(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicMax_51b9be() {
-  uint atomic_result = 0u;
-  InterlockedMax(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicMax(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
index 5c77b71..f5392cf 100644
--- a/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/92aa72.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicMax_92aa72() {
-  int atomic_result = 0;
-  InterlockedMax(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicMax(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicMax_92aa72() {
-  int atomic_result = 0;
-  InterlockedMax(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicMax(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMax' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
index 526868b..8a4aadd 100644
--- a/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/a89cc3.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicMax_a89cc3() {
-  int atomic_result = 0;
-  InterlockedMax(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicMax(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicMax_a89cc3();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
index e34d9e9..085ee2e 100644
--- a/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMax/beccfc.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicMax_beccfc() {
-  uint atomic_result = 0u;
-  InterlockedMax(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicMax(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicMax_beccfc();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
index cf4724c..a3e2d3b 100644
--- a/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/278235.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicMin_278235() {
-  int atomic_result = 0;
-  InterlockedMin(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicMin(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicMin_278235();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
index ade2280..10e70a6 100644
--- a/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/69d383.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicMin_69d383() {
-  uint atomic_result = 0u;
-  InterlockedMin(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicMin(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicMin_69d383();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
index da27730..0897032 100644
--- a/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/8e38dc.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicMin_8e38dc() {
-  int atomic_result = 0;
-  InterlockedMin(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicMin(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicMin_8e38dc() {
-  int atomic_result = 0;
-  InterlockedMin(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicMin(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
index 719cf8e..85e42dd 100644
--- a/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicMin/c67a74.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicMin_c67a74() {
-  uint atomic_result = 0u;
-  InterlockedMin(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicMin(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicMin_c67a74() {
-  uint atomic_result = 0u;
-  InterlockedMin(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicMin(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedMin' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
index 6638375..9fd6dfb 100644
--- a/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/5e3d61.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicOr_5e3d61() {
-  uint atomic_result = 0u;
-  InterlockedOr(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicOr(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicOr_5e3d61();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
index 85663d2..aafb344 100644
--- a/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/5e95d4.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicOr_5e95d4() {
-  uint atomic_result = 0u;
-  InterlockedOr(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicOr(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicOr_5e95d4() {
-  uint atomic_result = 0u;
-  InterlockedOr(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicOr(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
index 9996d05..b5f1e99 100644
--- a/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/8d96a0.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicOr_8d96a0() {
-  int atomic_result = 0;
-  InterlockedOr(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicOr(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicOr_8d96a0() {
-  int atomic_result = 0;
-  InterlockedOr(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicOr(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedOr' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
index 239746d..1bd396d 100644
--- a/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicOr/d09248.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicOr_d09248() {
-  int atomic_result = 0;
-  InterlockedOr(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicOr(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicOr_d09248();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
index 29aec50..1539167 100644
--- a/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/726882.wgsl.expected.glsl
@@ -1,13 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicStore_726882() {
-  uint atomic_result = 0u;
-  InterlockedExchange(arg_0, 1u, atomic_result);
+  atomicExchange(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -16,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicStore_726882();
 }
 
@@ -35,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
index cd08ad3..d338acc 100644
--- a/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/8bea94.wgsl.expected.glsl
@@ -1,13 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicStore_8bea94() {
-  int atomic_result = 0;
-  InterlockedExchange(arg_0, 1, atomic_result);
+  atomicExchange(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -16,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicStore_8bea94();
 }
 
@@ -35,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
index 1f768b3..e81b356 100644
--- a/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/cdc29e.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,8 +7,7 @@
 } sb_rw;
 
 void atomicStore_cdc29e() {
-  uint atomic_result = 0u;
-  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
+  atomicExchange(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -22,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -38,8 +28,7 @@
 } sb_rw;
 
 void atomicStore_cdc29e() {
-  uint atomic_result = 0u;
-  InterlockedExchange(sb_rw.arg_0, 1u, atomic_result);
+  atomicExchange(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -52,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
index 6df74dc..eba2fdb 100644
--- a/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicStore/d1e9a6.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,8 +7,7 @@
 } sb_rw;
 
 void atomicStore_d1e9a6() {
-  int atomic_result = 0;
-  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
+  atomicExchange(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -22,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -38,8 +28,7 @@
 } sb_rw;
 
 void atomicStore_d1e9a6() {
-  int atomic_result = 0;
-  InterlockedExchange(sb_rw.arg_0, 1, atomic_result);
+  atomicExchange(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -52,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedExchange' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
index 1da7814..f9984be 100644
--- a/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/051100.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicSub_051100() {
-  int atomic_result = 0;
-  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAdd(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicSub_051100() {
-  int atomic_result = 0;
-  InterlockedAdd(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAdd(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
index 58896e8..b0bddda 100644
--- a/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/0d26c2.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicSub_0d26c2() {
-  uint atomic_result = 0u;
-  InterlockedAdd(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAdd(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicSub_0d26c2();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
index 13a73bc..0f5901c 100644
--- a/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/15bfc9.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicSub_15bfc9() {
-  uint atomic_result = 0u;
-  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicSub_15bfc9() {
-  uint atomic_result = 0u;
-  InterlockedAdd(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicAdd(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedAdd' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
index 83ef6a0..9c70e99 100644
--- a/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicSub/77883a.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicSub_77883a() {
-  int atomic_result = 0;
-  InterlockedAdd(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicAdd(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicSub_77883a();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
index 9e9f4ca..feabaaf 100644
--- a/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/54510e.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicXor_54510e() {
-  uint atomic_result = 0u;
-  InterlockedXor(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicXor(sb_rw.arg_0, 1u);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicXor_54510e() {
-  uint atomic_result = 0u;
-  InterlockedXor(sb_rw.arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicXor(sb_rw.arg_0, 1u);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
index 62485ed..9917356 100644
--- a/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/75dc95.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int arg_0;
+shared int arg_0;
 
 void atomicXor_75dc95() {
-  int atomic_result = 0;
-  InterlockedXor(arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicXor(arg_0, 1);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    int atomic_result_1 = 0;
-    InterlockedExchange(arg_0, 0, atomic_result_1);
+    atomicExchange(arg_0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicXor_75dc95();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
index 0a43b25..6e8d361 100644
--- a/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/c1b78c.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -9,9 +7,7 @@
 } sb_rw;
 
 void atomicXor_c1b78c() {
-  int atomic_result = 0;
-  InterlockedXor(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicXor(sb_rw.arg_0, 1);
 }
 
 void fragment_main() {
@@ -23,13 +19,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
@@ -39,9 +28,7 @@
 } sb_rw;
 
 void atomicXor_c1b78c() {
-  int atomic_result = 0;
-  InterlockedXor(sb_rw.arg_0, 1, atomic_result);
-  int res = atomic_result;
+  int res = atomicXor(sb_rw.arg_0, 1);
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -54,10 +41,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:11: 'InterlockedXor' : no matching overloaded function found 
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
index a68b9b6..bcc49d9 100644
--- a/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
+++ b/test/intrinsics/gen/atomicXor/c8e6be.wgsl.expected.glsl
@@ -1,14 +1,10 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared uint arg_0;
+shared uint arg_0;
 
 void atomicXor_c8e6be() {
-  uint atomic_result = 0u;
-  InterlockedXor(arg_0, 1u, atomic_result);
-  uint res = atomic_result;
+  uint res = atomicXor(arg_0, 1u);
 }
 
 struct tint_symbol_1 {
@@ -17,10 +13,9 @@
 
 void compute_main_inner(uint local_invocation_index) {
   {
-    uint atomic_result_1 = 0u;
-    InterlockedExchange(arg_0, 0u, atomic_result_1);
+    atomicExchange(arg_0, 0u);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   atomicXor_c8e6be();
 }
 
@@ -36,9 +31,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
index 2d34b7e..289b86f 100644
--- a/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
+++ b/test/intrinsics/gen/storageBarrier/d87211.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void storageBarrier_d87211() {
-  DeviceMemoryBarrierWithGroupSync();
+  memoryBarrierBuffer();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -17,10 +15,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:5: 'DeviceMemoryBarrierWithGroupSync' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
index d923b6d..c099196 100644
--- a/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
+++ b/test/intrinsics/gen/workgroupBarrier/a17f7f.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void workgroupBarrier_a17f7f() {
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -17,10 +15,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:5: 'GroupMemoryBarrierWithGroupSync' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/let/global/global.wgsl.expected.glsl b/test/let/global/global.wgsl.expected.glsl
index daeec49..188a6da 100644
--- a/test/let/global/global.wgsl.expected.glsl
+++ b/test/let/global/global.wgsl.expected.glsl
@@ -4,17 +4,6 @@
 struct MyStruct {
   float f1;
 };
-
-const int v1 = 1;
-const uint v2 = 1u;
-const float v3 = 1.0f;
-const ivec3 v4 = ivec3(1, 1, 1);
-const uvec3 v5 = uvec3(1u, 1u, 1u);
-const vec3 v6 = vec3(1.0f, 1.0f, 1.0f);
-const mat3 v7 = mat3(vec3(1.0f, 1.0f, 1.0f), vec3(1.0f, 1.0f, 1.0f), vec3(1.0f, 1.0f, 1.0f));
-const MyStruct v8 = MyStruct(0.0f);
-const float v9[10] = float[10](0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-
 struct tint_symbol_1 {
   vec4 value;
 };
diff --git a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
index c27e6cd..9fbac12 100644
--- a/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
+++ b/test/ptr_ref/load/local/ptr_workgroup.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int i;
+shared int i;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -13,7 +11,7 @@
   {
     i = 0;
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   i = 123;
   int use = (i + 1);
 }
@@ -30,9 +28,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/types/module_scope_let.wgsl.expected.glsl b/test/types/module_scope_let.wgsl.expected.glsl
index bd84301..166c6c7 100644
--- a/test/types/module_scope_let.wgsl.expected.glsl
+++ b/test/types/module_scope_let.wgsl.expected.glsl
@@ -5,17 +5,6 @@
   float a;
 };
 
-const bool bool_let = false;
-const int i32_let = 0;
-const uint u32_let = 0u;
-const float f32_let = 0.0f;
-const ivec2 v2i32_let = ivec2(0, 0);
-const uvec3 v3u32_let = uvec3(0u, 0u, 0u);
-const vec4 v4f32_let = vec4(0.0f, 0.0f, 0.0f, 0.0f);
-const mat3x4 m3x4_let = mat3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-const float arr_let[4] = float[4](0.0f, 0.0f, 0.0f, 0.0f);
-const S struct_let = S(0.0f);
-
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void tint_symbol() {
   return;
diff --git a/test/var/initialization/workgroup/array.wgsl.expected.glsl b/test/var/initialization/workgroup/array.wgsl.expected.glsl
index 803d29b..c53f318 100644
--- a/test/var/initialization/workgroup/array.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/array.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int v[3];
+shared int v[3];
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -16,7 +14,7 @@
       v[i] = 0;
     }
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -31,9 +29,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/var/initialization/workgroup/matrix.wgsl.expected.glsl b/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
index 427c0d3..8ea3faa 100644
--- a/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/matrix.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared mat2x3 v;
+shared mat2x3 v;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -13,7 +11,7 @@
   {
     v = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -28,9 +26,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/var/initialization/workgroup/scalar.wgsl.expected.glsl b/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
index 398d676..51471ca 100644
--- a/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/scalar.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int v;
+shared int v;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -13,7 +11,7 @@
   {
     v = 0;
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -28,9 +26,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/var/initialization/workgroup/struct.wgsl.expected.glsl b/test/var/initialization/workgroup/struct.wgsl.expected.glsl
index f7cd58a..bb6cf92 100644
--- a/test/var/initialization/workgroup/struct.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -8,7 +6,7 @@
   float b;
 };
 
-groupshared S v;
+shared S v;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -19,7 +17,7 @@
     S tint_symbol_3 = S(0, 0.0f);
     v = tint_symbol_3;
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -34,9 +32,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:9: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/var/initialization/workgroup/vector.wgsl.expected.glsl b/test/var/initialization/workgroup/vector.wgsl.expected.glsl
index 6662b52..af1722c 100644
--- a/test/var/initialization/workgroup/vector.wgsl.expected.glsl
+++ b/test/var/initialization/workgroup/vector.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared ivec3 v;
+shared ivec3 v;
 
 struct tint_symbol_2 {
   uint local_invocation_index;
@@ -13,7 +11,7 @@
   {
     v = ivec3(0, 0, 0);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -28,9 +26,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/var/uses/many_workgroup_vars.wgsl.expected.glsl b/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
index 479388b..42cbfeb 100644
--- a/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
+++ b/test/var/uses/many_workgroup_vars.wgsl.expected.glsl
@@ -1,108 +1,106 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared mat2 m00;
-groupshared mat2 m01;
-groupshared mat2 m02;
-groupshared mat2 m03;
-groupshared mat2 m04;
-groupshared mat2 m05;
-groupshared mat2 m06;
-groupshared mat2 m07;
-groupshared mat2 m08;
-groupshared mat2 m09;
-groupshared mat2 m10;
-groupshared mat2 m11;
-groupshared mat2 m12;
-groupshared mat2 m13;
-groupshared mat2 m14;
-groupshared mat2 m15;
-groupshared mat2 m16;
-groupshared mat2 m17;
-groupshared mat2 m18;
-groupshared mat2 m19;
-groupshared mat2 m20;
-groupshared mat2 m21;
-groupshared mat2 m22;
-groupshared mat2 m23;
-groupshared mat2 m24;
-groupshared mat2 m25;
-groupshared mat2 m26;
-groupshared mat2 m27;
-groupshared mat2 m28;
-groupshared mat2 m29;
-groupshared mat2 m30;
-groupshared mat2 m31;
-groupshared mat2 m32;
-groupshared mat2 m33;
-groupshared mat2 m34;
-groupshared mat2 m35;
-groupshared mat2 m36;
-groupshared mat2 m37;
-groupshared mat2 m38;
-groupshared mat2 m39;
-groupshared mat2 m40;
-groupshared mat2 m41;
-groupshared mat2 m42;
-groupshared mat2 m43;
-groupshared mat2 m44;
-groupshared mat2 m45;
-groupshared mat2 m46;
-groupshared mat2 m47;
-groupshared mat2 m48;
-groupshared mat2 m49;
-groupshared mat2 m50;
-groupshared mat2 m51;
-groupshared mat2 m52;
-groupshared mat2 m53;
-groupshared mat2 m54;
-groupshared mat2 m55;
-groupshared mat2 m56;
-groupshared mat2 m57;
-groupshared mat2 m58;
-groupshared mat2 m59;
-groupshared mat2 m60;
-groupshared mat2 m61;
-groupshared mat2 m62;
-groupshared mat2 m63;
-groupshared mat2 m64;
-groupshared mat2 m65;
-groupshared mat2 m66;
-groupshared mat2 m67;
-groupshared mat2 m68;
-groupshared mat2 m69;
-groupshared mat2 m70;
-groupshared mat2 m71;
-groupshared mat2 m72;
-groupshared mat2 m73;
-groupshared mat2 m74;
-groupshared mat2 m75;
-groupshared mat2 m76;
-groupshared mat2 m77;
-groupshared mat2 m78;
-groupshared mat2 m79;
-groupshared mat2 m80;
-groupshared mat2 m81;
-groupshared mat2 m82;
-groupshared mat2 m83;
-groupshared mat2 m84;
-groupshared mat2 m85;
-groupshared mat2 m86;
-groupshared mat2 m87;
-groupshared mat2 m88;
-groupshared mat2 m89;
-groupshared mat2 m90;
-groupshared mat2 m91;
-groupshared mat2 m92;
-groupshared mat2 m93;
-groupshared mat2 m94;
-groupshared mat2 m95;
-groupshared mat2 m96;
-groupshared mat2 m97;
-groupshared mat2 m98;
-groupshared mat2 m99;
+shared mat2 m00;
+shared mat2 m01;
+shared mat2 m02;
+shared mat2 m03;
+shared mat2 m04;
+shared mat2 m05;
+shared mat2 m06;
+shared mat2 m07;
+shared mat2 m08;
+shared mat2 m09;
+shared mat2 m10;
+shared mat2 m11;
+shared mat2 m12;
+shared mat2 m13;
+shared mat2 m14;
+shared mat2 m15;
+shared mat2 m16;
+shared mat2 m17;
+shared mat2 m18;
+shared mat2 m19;
+shared mat2 m20;
+shared mat2 m21;
+shared mat2 m22;
+shared mat2 m23;
+shared mat2 m24;
+shared mat2 m25;
+shared mat2 m26;
+shared mat2 m27;
+shared mat2 m28;
+shared mat2 m29;
+shared mat2 m30;
+shared mat2 m31;
+shared mat2 m32;
+shared mat2 m33;
+shared mat2 m34;
+shared mat2 m35;
+shared mat2 m36;
+shared mat2 m37;
+shared mat2 m38;
+shared mat2 m39;
+shared mat2 m40;
+shared mat2 m41;
+shared mat2 m42;
+shared mat2 m43;
+shared mat2 m44;
+shared mat2 m45;
+shared mat2 m46;
+shared mat2 m47;
+shared mat2 m48;
+shared mat2 m49;
+shared mat2 m50;
+shared mat2 m51;
+shared mat2 m52;
+shared mat2 m53;
+shared mat2 m54;
+shared mat2 m55;
+shared mat2 m56;
+shared mat2 m57;
+shared mat2 m58;
+shared mat2 m59;
+shared mat2 m60;
+shared mat2 m61;
+shared mat2 m62;
+shared mat2 m63;
+shared mat2 m64;
+shared mat2 m65;
+shared mat2 m66;
+shared mat2 m67;
+shared mat2 m68;
+shared mat2 m69;
+shared mat2 m70;
+shared mat2 m71;
+shared mat2 m72;
+shared mat2 m73;
+shared mat2 m74;
+shared mat2 m75;
+shared mat2 m76;
+shared mat2 m77;
+shared mat2 m78;
+shared mat2 m79;
+shared mat2 m80;
+shared mat2 m81;
+shared mat2 m82;
+shared mat2 m83;
+shared mat2 m84;
+shared mat2 m85;
+shared mat2 m86;
+shared mat2 m87;
+shared mat2 m88;
+shared mat2 m89;
+shared mat2 m90;
+shared mat2 m91;
+shared mat2 m92;
+shared mat2 m93;
+shared mat2 m94;
+shared mat2 m95;
+shared mat2 m96;
+shared mat2 m97;
+shared mat2 m98;
+shared mat2 m99;
 
 struct tint_symbol_2 {
   uint idx;
@@ -211,7 +209,7 @@
     m98 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
     m99 = mat2(0.0f, 0.0f, 0.0f, 0.0f);
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   m00[0][0] = 1.0f;
   m01[0][0] = 1.0f;
   m02[0][0] = 1.0f;
@@ -326,9 +324,3 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
diff --git a/test/var/uses/workgroup.wgsl.expected.glsl b/test/var/uses/workgroup.wgsl.expected.glsl
index 8b19e03..b577200 100644
--- a/test/var/uses/workgroup.wgsl.expected.glsl
+++ b/test/var/uses/workgroup.wgsl.expected.glsl
@@ -1,9 +1,7 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
-groupshared int a;
+shared int a;
 
 void uses_a() {
   a = (a + 1);
@@ -17,7 +15,7 @@
   {
     a = 0;
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   a = 42;
   uses_a();
 }
@@ -41,16 +39,10 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
-groupshared int b;
+shared int b;
 
 void uses_b() {
   b = (b * 2);
@@ -67,7 +59,7 @@
   {
     b = 0;
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   b = 7;
   uses_b();
 }
@@ -88,17 +80,11 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;
 
-groupshared int a;
-groupshared int b;
+shared int a;
+shared int b;
 
 void uses_a() {
   a = (a + 1);
@@ -138,7 +124,7 @@
     a = 0;
     b = 0;
   }
-  GroupMemoryBarrierWithGroupSync();
+  memoryBarrierShared();
   outer();
   no_uses();
 }
@@ -155,12 +141,6 @@
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:4: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 1 compilation errors.  No code generated.
-
-
-
 #version 310 es
 precision mediump float;