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