From 44a6c02cdac28a56dea287c3fdee9a2662543544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Tal=C4=8D=C3=ADk?= Date: Fri, 9 Apr 2021 23:11:32 +0200 Subject: [PATCH] spv-in: special-case a loop with true/false node == merge node beautify beautify #2 --- src/front/spv/flow.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/front/spv/flow.rs b/src/front/spv/flow.rs index 3a96b5405b..5dd0c3b7c7 100644 --- a/src/front/spv/flow.rs +++ b/src/front/spv/flow.rs @@ -338,13 +338,24 @@ impl FlowGraph { condition, true_id, false_id, - } => body.push(crate::Statement::If { - condition, - accept: self - .naga_traverse(self.block_to_node[&true_id], Some(merge_node_index))?, - reject: self - .naga_traverse(self.block_to_node[&false_id], Some(merge_node_index))?, - }), + } => { + let true_node_index = self.block_to_node[&true_id]; + let false_node_index = self.block_to_node[&false_id]; + + body.push(crate::Statement::If { + condition, + accept: if true_node_index == merge_node_index { + vec![crate::Statement::Break] + } else { + self.naga_traverse(true_node_index, Some(merge_node_index))? + }, + reject: if false_node_index == merge_node_index { + vec![crate::Statement::Break] + } else { + self.naga_traverse(false_node_index, Some(merge_node_index))? + }, + }); + } Terminator::Branch { target_id } => body.extend( self.naga_traverse(self.block_to_node[&target_id], Some(merge_node_index))?, ),