summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-04-17 16:40:35 -0300
committerGravatar ameerj2021-07-22 21:51:28 -0400
commit50f8007172ce143a632270510f96093c82018952 (patch)
tree6ffa823c458ef26f717a18c4e5216c2048272ac3 /src/shader_recompiler/ir_opt/ssa_rewrite_pass.cpp
parentshader: Fix memory barriers (diff)
downloadyuzu-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.cpp4
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;