aboutsummaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend/ir/microinstruction.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-02-14 01:24:32 -0300
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-22 21:51:22 -0400
commit8af9297f0972d0aaa8306369c5d04926b886a89e (patch)
tree43bb3f50d694b615d2ae821eef84e417166d4890 /src/shader_recompiler/frontend/ir/microinstruction.cpp
parent9170200a11715d131645d1ffb92e86e6ef0d7e88 (diff)
shader: Misc fixes
Diffstat (limited to 'src/shader_recompiler/frontend/ir/microinstruction.cpp')
-rw-r--r--src/shader_recompiler/frontend/ir/microinstruction.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/shader_recompiler/frontend/ir/microinstruction.cpp b/src/shader_recompiler/frontend/ir/microinstruction.cpp
index b4ae371bd1..9279b96928 100644
--- a/src/shader_recompiler/frontend/ir/microinstruction.cpp
+++ b/src/shader_recompiler/frontend/ir/microinstruction.cpp
@@ -143,19 +143,21 @@ Value Inst::Arg(size_t index) const {
}
void Inst::SetArg(size_t index, Value value) {
- if (op == Opcode::Phi) {
- throw LogicError("Setting argument on a phi instruction");
- }
- if (index >= NumArgsOf(op)) {
+ if (index >= NumArgs()) {
throw InvalidArgument("Out of bounds argument index {} in opcode {}", index, op);
}
- if (!args[index].IsImmediate()) {
- UndoUse(args[index]);
+ const IR::Value arg{Arg(index)};
+ if (!arg.IsImmediate()) {
+ UndoUse(arg);
}
if (!value.IsImmediate()) {
Use(value);
}
- args[index] = value;
+ if (op == Opcode::Phi) {
+ phi_args[index].second = value;
+ } else {
+ args[index] = value;
+ }
}
Block* Inst::PhiBlock(size_t index) const {