diff options
author | ameerj <52414509+ameerj@users.noreply.github.com> | 2022-03-22 23:34:31 +0100 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2022-03-23 22:57:22 +0100 |
commit | 67159e3be76cf468288ae492ea22fc43a77a9d1e (patch) | |
tree | 1430335870a66823463f56f86cd98de6f8d5c6d8 /src/shader_recompiler/frontend | |
parent | shader_recompiler/dead_code_elimination: Add DeadBranchElimination pass (diff) | |
download | yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.tar yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.tar.gz yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.tar.bz2 yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.tar.lz yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.tar.xz yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.tar.zst yuzu-67159e3be76cf468288ae492ea22fc43a77a9d1e.zip |
Diffstat (limited to 'src/shader_recompiler/frontend')
-rw-r--r-- | src/shader_recompiler/frontend/ir/microinstruction.cpp | 5 | ||||
-rw-r--r-- | src/shader_recompiler/frontend/ir/value.h | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/microinstruction.cpp b/src/shader_recompiler/frontend/ir/microinstruction.cpp index 631446cf7..4a2564f47 100644 --- a/src/shader_recompiler/frontend/ir/microinstruction.cpp +++ b/src/shader_recompiler/frontend/ir/microinstruction.cpp @@ -326,6 +326,11 @@ void Inst::AddPhiOperand(Block* predecessor, const Value& value) { phi_args.emplace_back(predecessor, value); } +void Inst::ErasePhiOperand(size_t index) { + const auto operand_it{phi_args.begin() + static_cast<ptrdiff_t>(index)}; + phi_args.erase(operand_it); +} + void Inst::OrderPhiArgs() { if (op != Opcode::Phi) { throw LogicError("{} is not a Phi instruction", op); diff --git a/src/shader_recompiler/frontend/ir/value.h b/src/shader_recompiler/frontend/ir/value.h index 947579852..14f6e55bc 100644 --- a/src/shader_recompiler/frontend/ir/value.h +++ b/src/shader_recompiler/frontend/ir/value.h @@ -179,9 +179,13 @@ public: /// Get a pointer to the block of a phi argument. [[nodiscard]] Block* PhiBlock(size_t index) const; + /// Add phi operand to a phi instruction. void AddPhiOperand(Block* predecessor, const Value& value); + // Erase the phi operand at the given index. + void ErasePhiOperand(size_t index); + /// Orders the Phi arguments from farthest away to nearest. void OrderPhiArgs(); |