Browse Source

structured_control_flow: Skip reordering nested demote branches.

Nested demote branches add complexity with combining the condition if it has not been initialized yet. Skip them for the time being.
nce_cpp
ameerj 4 years ago
parent
commit
8485bb3dcb
  1. 11
      src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp

11
src/shader_recompiler/frontend/maxwell/structured_control_flow.cpp

@ -872,10 +872,21 @@ private:
std::vector<IR::Block*> demote_blocks;
std::vector<IR::U1> demote_conds;
u32 num_epilogues{};
u32 branch_depth{};
for (const IR::AbstractSyntaxNode& node : syntax_list) {
if (node.type == Type::If) {
++branch_depth;
}
if (node.type == Type::EndIf) {
--branch_depth;
}
if (node.type != Type::Block) {
continue;
}
if (branch_depth > 1) {
// Skip reordering nested demote branches.
continue;
}
for (const IR::Inst& inst : node.data.block->Instructions()) {
const IR::Opcode op{inst.GetOpcode()};
if (op == IR::Opcode::DemoteToHelperInvocation) {

Loading…
Cancel
Save