[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; }