diff options
| author | 2021-04-17 16:40:35 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:28 -0400 | |
| commit | 50f8007172ce143a632270510f96093c82018952 (patch) | |
| tree | 6ffa823c458ef26f717a18c4e5216c2048272ac3 /src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp | |
| parent | shader: Fix memory barriers (diff) | |
| download | yuzu-50f8007172ce143a632270510f96093c82018952.tar.gz yuzu-50f8007172ce143a632270510f96093c82018952.tar.xz yuzu-50f8007172ce143a632270510f96093c82018952.zip | |
shader: Fix Phi node types
Diffstat (limited to 'src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp')
| -rw-r--r-- | src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp b/src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp index 346fcc377..ddd679e39 100644 --- a/src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp +++ b/src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp | |||
| @@ -176,6 +176,8 @@ public: | |||
| 176 | } else if (!sealed_blocks.contains(block)) { | 176 | } else if (!sealed_blocks.contains(block)) { |
| 177 | // Incomplete CFG | 177 | // Incomplete CFG |
| 178 | IR::Inst* phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)}; | 178 | IR::Inst* phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)}; |
| 179 | phi->SetFlags(IR::TypeOf(UndefOpcode(variable))); | ||
| 180 | |||
| 179 | incomplete_phis[block].insert_or_assign(variable, phi); | 181 | incomplete_phis[block].insert_or_assign(variable, phi); |
| 180 | stack.back().result = IR::Value{&*phi}; | 182 | stack.back().result = IR::Value{&*phi}; |
| 181 | } else if (const std::span imm_preds{block->ImmediatePredecessors()}; | 183 | } else if (const std::span imm_preds{block->ImmediatePredecessors()}; |
| @@ -187,6 +189,8 @@ public: | |||
| 187 | } else { | 189 | } else { |
| 188 | // Break potential cycles with operandless phi | 190 | // Break potential cycles with operandless phi |
| 189 | IR::Inst* const phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)}; | 191 | IR::Inst* const phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)}; |
| 192 | phi->SetFlags(IR::TypeOf(UndefOpcode(variable))); | ||
| 193 | |||
| 190 | WriteVariable(variable, block, IR::Value{phi}); | 194 | WriteVariable(variable, block, IR::Value{phi}); |
| 191 | 195 | ||
| 192 | stack.back().phi = phi; | 196 | stack.back().phi = phi; |