diff options
| author | 2021-05-18 02:04:22 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:32 -0400 | |
| commit | 9bb3e008c9f4bbdd35c095b506c3a3312d17e383 (patch) | |
| tree | 320cc594970b6ef658d8bed88ceabded0f84caea /src/shader_recompiler/frontend/ir | |
| parent | glasm: Implement InstanceId and VertexId (diff) | |
| download | yuzu-9bb3e008c9f4bbdd35c095b506c3a3312d17e383.tar.gz yuzu-9bb3e008c9f4bbdd35c095b506c3a3312d17e383.tar.xz yuzu-9bb3e008c9f4bbdd35c095b506c3a3312d17e383.zip | |
shader: Read branch conditions from an instruction
Fixes the identity removal pass.
Diffstat (limited to 'src/shader_recompiler/frontend/ir')
4 files changed, 13 insertions, 5 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index 94bdbe39c..e9fd41237 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp | |||
| @@ -61,8 +61,12 @@ F64 IREmitter::Imm64(f64 value) const { | |||
| 61 | return F64{Value{value}}; | 61 | return F64{Value{value}}; |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | void IREmitter::DummyReference(const Value& value) { | 64 | U1 IREmitter::ConditionRef(const U1& value) { |
| 65 | Inst(Opcode::DummyReference, value); | 65 | return Inst<U1>(Opcode::ConditionRef, value); |
| 66 | } | ||
| 67 | |||
| 68 | void IREmitter::Reference(const Value& value) { | ||
| 69 | Inst(Opcode::Reference, value); | ||
| 66 | } | 70 | } |
| 67 | 71 | ||
| 68 | void IREmitter::PhiMove(IR::Inst& phi, const Value& value) { | 72 | void IREmitter::PhiMove(IR::Inst& phi, const Value& value) { |
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h index 4ae69b788..bb3500c54 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.h +++ b/src/shader_recompiler/frontend/ir/ir_emitter.h | |||
| @@ -32,7 +32,9 @@ public: | |||
| 32 | [[nodiscard]] U64 Imm64(s64 value) const; | 32 | [[nodiscard]] U64 Imm64(s64 value) const; |
| 33 | [[nodiscard]] F64 Imm64(f64 value) const; | 33 | [[nodiscard]] F64 Imm64(f64 value) const; |
| 34 | 34 | ||
| 35 | void DummyReference(const Value& value); | 35 | U1 ConditionRef(const U1& value); |
| 36 | void Reference(const Value& value); | ||
| 37 | |||
| 36 | void PhiMove(IR::Inst& phi, const Value& value); | 38 | void PhiMove(IR::Inst& phi, const Value& value); |
| 37 | 39 | ||
| 38 | void Prologue(); | 40 | void Prologue(); |
diff --git a/src/shader_recompiler/frontend/ir/microinstruction.cpp b/src/shader_recompiler/frontend/ir/microinstruction.cpp index 267aebc61..3dfa5a880 100644 --- a/src/shader_recompiler/frontend/ir/microinstruction.cpp +++ b/src/shader_recompiler/frontend/ir/microinstruction.cpp | |||
| @@ -56,7 +56,8 @@ Inst::~Inst() { | |||
| 56 | 56 | ||
| 57 | bool Inst::MayHaveSideEffects() const noexcept { | 57 | bool Inst::MayHaveSideEffects() const noexcept { |
| 58 | switch (op) { | 58 | switch (op) { |
| 59 | case Opcode::DummyReference: | 59 | case Opcode::ConditionRef: |
| 60 | case Opcode::Reference: | ||
| 60 | case Opcode::PhiMove: | 61 | case Opcode::PhiMove: |
| 61 | case Opcode::Prologue: | 62 | case Opcode::Prologue: |
| 62 | case Opcode::Epilogue: | 63 | case Opcode::Epilogue: |
diff --git a/src/shader_recompiler/frontend/ir/opcodes.inc b/src/shader_recompiler/frontend/ir/opcodes.inc index 6196b867d..8a8d0d759 100644 --- a/src/shader_recompiler/frontend/ir/opcodes.inc +++ b/src/shader_recompiler/frontend/ir/opcodes.inc | |||
| @@ -6,7 +6,8 @@ | |||
| 6 | OPCODE(Phi, Opaque, ) | 6 | OPCODE(Phi, Opaque, ) |
| 7 | OPCODE(Identity, Opaque, Opaque, ) | 7 | OPCODE(Identity, Opaque, Opaque, ) |
| 8 | OPCODE(Void, Void, ) | 8 | OPCODE(Void, Void, ) |
| 9 | OPCODE(DummyReference, Void, Opaque, ) | 9 | OPCODE(ConditionRef, U1, U1, ) |
| 10 | OPCODE(Reference, Void, Opaque, ) | ||
| 10 | OPCODE(PhiMove, Void, Opaque, Opaque, ) | 11 | OPCODE(PhiMove, Void, Opaque, Opaque, ) |
| 11 | 12 | ||
| 12 | // Special operations | 13 | // Special operations |