[msl] Refactor barrier polyfills

These three functions were almost identical.

Change-Id: I3e41900186313523610d3e89b60b65368c699176
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186566
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/msl/writer/raise/builtin_polyfill.cc b/src/tint/lang/msl/writer/raise/builtin_polyfill.cc
index 9788113..5887c3e 100644
--- a/src/tint/lang/msl/writer/raise/builtin_polyfill.cc
+++ b/src/tint/lang/msl/writer/raise/builtin_polyfill.cc
@@ -76,13 +76,13 @@
             core::ir::Value* replacement = nullptr;
             switch (builtin->Func()) {
                 case core::BuiltinFn::kStorageBarrier:
-                    replacement = StorageBarrier(builtin);
+                    replacement = ThreadgroupBarrier(builtin, BarrierType::kDevice);
                     break;
                 case core::BuiltinFn::kWorkgroupBarrier:
-                    replacement = WorkgroupBarrier(builtin);
+                    replacement = ThreadgroupBarrier(builtin, BarrierType::kThreadGroup);
                     break;
                 case core::BuiltinFn::kTextureBarrier:
-                    replacement = TextureBarrier(builtin);
+                    replacement = ThreadgroupBarrier(builtin, BarrierType::kTexture);
                     break;
                 default:
                     break;
@@ -98,39 +98,13 @@
         }
     }
 
-    /// Handle a `workgroupBarrier()` builtin.
+    /// Replace a barrier builtin with the `threadgroupBarrier()` intrinsic.
     /// @param builtin the builtin call instruction
+    /// @param type the barrier type
     /// @returns the replacement value
-    core::ir::Value* WorkgroupBarrier(core::ir::CoreBuiltinCall* builtin) {
+    core::ir::Value* ThreadgroupBarrier(core::ir::CoreBuiltinCall* builtin, BarrierType type) {
         // Replace the builtin call with a call to the msl.threadgroup_barrier intrinsic.
-        auto args = Vector<core::ir::Value*, 4>{b.Constant(u32(BarrierType::kThreadGroup))};
-
-        auto* call = b.Call<msl::ir::BuiltinCall>(
-            builtin->Result(0)->Type(), msl::BuiltinFn::kThreadgroupBarrier, std::move(args));
-        call->InsertBefore(builtin);
-        return call->Result(0);
-    }
-
-    /// Handle a `storageBarrier()` builtin.
-    /// @param builtin the builtin call instruction
-    /// @returns the replacement value
-    core::ir::Value* StorageBarrier(core::ir::CoreBuiltinCall* builtin) {
-        // Replace the builtin call with a call to the msl.threadgroup_barrier intrinsic.
-        auto args = Vector<core::ir::Value*, 4>{b.Constant(u32(BarrierType::kDevice))};
-
-        auto* call = b.Call<msl::ir::BuiltinCall>(
-            builtin->Result(0)->Type(), msl::BuiltinFn::kThreadgroupBarrier, std::move(args));
-        call->InsertBefore(builtin);
-        return call->Result(0);
-    }
-
-    /// Handle a `textureBarrier()` builtin.
-    /// @param builtin the builtin call instruction
-    /// @returns the replacement value
-    core::ir::Value* TextureBarrier(core::ir::CoreBuiltinCall* builtin) {
-        // Replace the builtin call with a call to the msl.threadgroup_barrier intrinsic.
-        auto args = Vector<core::ir::Value*, 4>{b.Constant(u32(BarrierType::kTexture))};
-
+        auto args = Vector<core::ir::Value*, 1>{b.Constant(u32(type))};
         auto* call = b.Call<msl::ir::BuiltinCall>(
             builtin->Result(0)->Type(), msl::BuiltinFn::kThreadgroupBarrier, std::move(args));
         call->InsertBefore(builtin);