diff options
| author | 2021-02-02 21:07:00 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:21 -0400 | |
| commit | 6c4cc0cd062fbbba5349da1108d3c23cb330ca8a (patch) | |
| tree | 544291931da8a85fafcea71964c77d9278ec7f29 /src/shader_recompiler/frontend/maxwell/termination_code.cpp | |
| parent | shader: Initial recompiler work (diff) | |
| download | yuzu-6c4cc0cd062fbbba5349da1108d3c23cb330ca8a.tar.gz yuzu-6c4cc0cd062fbbba5349da1108d3c23cb330ca8a.tar.xz yuzu-6c4cc0cd062fbbba5349da1108d3c23cb330ca8a.zip | |
shader: SSA and dominance
Diffstat (limited to 'src/shader_recompiler/frontend/maxwell/termination_code.cpp')
| -rw-r--r-- | src/shader_recompiler/frontend/maxwell/termination_code.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/termination_code.cpp b/src/shader_recompiler/frontend/maxwell/termination_code.cpp index a4ea5c5e3..ed5137f20 100644 --- a/src/shader_recompiler/frontend/maxwell/termination_code.cpp +++ b/src/shader_recompiler/frontend/maxwell/termination_code.cpp | |||
| @@ -47,12 +47,19 @@ static IR::U1 GetCond(IR::Condition cond, IR::IREmitter& ir) { | |||
| 47 | 47 | ||
| 48 | static void EmitBranch(const Flow::Block& flow_block, std::span<IR::Block* const> block_map, | 48 | static void EmitBranch(const Flow::Block& flow_block, std::span<IR::Block* const> block_map, |
| 49 | IR::IREmitter& ir) { | 49 | IR::IREmitter& ir) { |
| 50 | const auto add_immediate_predecessor = [&](Flow::BlockId label) { | ||
| 51 | block_map[label]->AddImmediatePredecessor(&ir.block); | ||
| 52 | }; | ||
| 50 | if (flow_block.cond == true) { | 53 | if (flow_block.cond == true) { |
| 54 | add_immediate_predecessor(flow_block.branch_true); | ||
| 51 | return ir.Branch(block_map[flow_block.branch_true]); | 55 | return ir.Branch(block_map[flow_block.branch_true]); |
| 52 | } | 56 | } |
| 53 | if (flow_block.cond == false) { | 57 | if (flow_block.cond == false) { |
| 58 | add_immediate_predecessor(flow_block.branch_false); | ||
| 54 | return ir.Branch(block_map[flow_block.branch_false]); | 59 | return ir.Branch(block_map[flow_block.branch_false]); |
| 55 | } | 60 | } |
| 61 | add_immediate_predecessor(flow_block.branch_true); | ||
| 62 | add_immediate_predecessor(flow_block.branch_false); | ||
| 56 | return ir.BranchConditional(GetCond(flow_block.cond, ir), block_map[flow_block.branch_true], | 63 | return ir.BranchConditional(GetCond(flow_block.cond, ir), block_map[flow_block.branch_true], |
| 57 | block_map[flow_block.branch_false]); | 64 | block_map[flow_block.branch_false]); |
| 58 | } | 65 | } |