[ir] Add Function::AppendParam() helper

Use it from the ZeroInitializeWorkgroupMemory transform.

Change-Id: I98a72b9fca0e986cd092b13d92e71634f3e59d4e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186922
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/core/ir/function.cc b/src/tint/lang/core/ir/function.cc
index 5b669c2..1138fbf 100644
--- a/src/tint/lang/core/ir/function.cc
+++ b/src/tint/lang/core/ir/function.cc
@@ -87,6 +87,11 @@
     }
 }
 
+void Function::AppendParam(FunctionParam* param) {
+    params_.Push(param);
+    param->SetFunction(this);
+}
+
 void Function::Destroy() {
     Base::Destroy();
     block_->Destroy();
diff --git a/src/tint/lang/core/ir/function.h b/src/tint/lang/core/ir/function.h
index 5cf533f..f7c7ebd 100644
--- a/src/tint/lang/core/ir/function.h
+++ b/src/tint/lang/core/ir/function.h
@@ -146,6 +146,10 @@
     /// @param params the function parameters
     void SetParams(std::initializer_list<FunctionParam*> params);
 
+    /// Appends a new function parameter.
+    /// @param param the function parameter to append
+    void AppendParam(FunctionParam* param);
+
     /// @returns the function parameters
     const VectorRef<FunctionParam*> Params() { return params_; }
 
diff --git a/src/tint/lang/core/ir/function_test.cc b/src/tint/lang/core/ir/function_test.cc
index 27f332e..65a61ba 100644
--- a/src/tint/lang/core/ir/function_test.cc
+++ b/src/tint/lang/core/ir/function_test.cc
@@ -160,6 +160,11 @@
     EXPECT_EQ(param1->Function(), f);
     EXPECT_EQ(param2->Function(), nullptr);
     EXPECT_EQ(param3->Function(), f);
+
+    f->AppendParam(param2);
+    EXPECT_EQ(param1->Function(), f);
+    EXPECT_EQ(param2->Function(), f);
+    EXPECT_EQ(param3->Function(), f);
 }
 
 }  // namespace
diff --git a/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc b/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc
index eeef8b2..8390ff6 100644
--- a/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc
+++ b/src/tint/lang/core/ir/transform/zero_init_workgroup_memory.cc
@@ -292,11 +292,9 @@
         }
 
         // No local invocation index was found, so add one to the parameter list and use that.
-        Vector<FunctionParam*, 4> params = func->Params();
         auto* param = b.FunctionParam("tint_local_index", ty.u32());
+        func->AppendParam(param);
         param->SetBuiltin(BuiltinValue::kLocalInvocationIndex);
-        params.Push(param);
-        func->SetParams(params);
         return param;
     }