aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/sirit/sirit.h6
-rw-r--r--src/instructions/flow.cpp6
2 files changed, 12 insertions, 0 deletions
diff --git a/include/sirit/sirit.h b/include/sirit/sirit.h
index 781f84a..0a204d7 100644
--- a/include/sirit/sirit.h
+++ b/include/sirit/sirit.h
@@ -232,6 +232,12 @@ public:
// Flow
+ /**
+ * The SSA phi function.
+ * @param operands An immutable span of variable, parent block pairs
+ */
+ Id OpPhi(Id result_type, std::span<const Id> operands);
+
/// Declare a structured loop.
Id OpLoopMerge(Id merge_block, Id continue_target, spv::LoopControlMask loop_control,
std::span<const Id> literals = {});
diff --git a/src/instructions/flow.cpp b/src/instructions/flow.cpp
index e40800c..85700d2 100644
--- a/src/instructions/flow.cpp
+++ b/src/instructions/flow.cpp
@@ -12,6 +12,12 @@
namespace Sirit {
+Id Module::OpPhi(Id result_type, std::span<const Id> operands) {
+ assert(operands.size() % 2 == 0);
+ code->Reserve(3 + operands.size());
+ return *code << OpId{spv::Op::OpPhi, result_type} << operands << EndOp{};
+}
+
Id Module::OpLoopMerge(Id merge_block, Id continue_target, spv::LoopControlMask loop_control,
std::span<const Id> literals) {
code->Reserve(4 + literals.size());