Add Phi support

This commit is contained in:
ReinUsesLisp 2021-02-12 21:08:46 -03:00
parent 1f7b70730d
commit c374bfd9fd
2 changed files with 12 additions and 0 deletions

View file

@ -232,6 +232,12 @@ public:
// Flow // 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. /// Declare a structured loop.
Id OpLoopMerge(Id merge_block, Id continue_target, spv::LoopControlMask loop_control, Id OpLoopMerge(Id merge_block, Id continue_target, spv::LoopControlMask loop_control,
std::span<const Id> literals = {}); std::span<const Id> literals = {});

View file

@ -12,6 +12,12 @@
namespace Sirit { 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, Id Module::OpLoopMerge(Id merge_block, Id continue_target, spv::LoopControlMask loop_control,
std::span<const Id> literals) { std::span<const Id> literals) {
code->Reserve(4 + literals.size()); code->Reserve(4 + literals.size());