fix cfg node labeling

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2025-03-03 17:39:00 +01:00
parent 0a77c3af86
commit ff2d630352
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
2 changed files with 4 additions and 5 deletions

View file

@ -159,7 +159,6 @@ impl<'a> MethodCFG<'a> {
last_labels.push(name.clone()); last_labels.push(name.clone());
} else { } else {
nodes_next_label.push(vec![]); nodes_next_label.push(vec![]);
last_labels.push(name.clone());
nodes.push(MethodCFGNode { nodes.push(MethodCFGNode {
code_block: &insns[start_last_block..i], code_block: &insns[start_last_block..i],
labels: last_labels, labels: last_labels,
@ -167,7 +166,7 @@ impl<'a> MethodCFG<'a> {
prev_nodes: vec![], prev_nodes: vec![],
}); });
start_last_block = i; start_last_block = i;
last_labels = vec![]; last_labels = vec![name.clone()];
} }
} }
Instruction::ReturnVoid {} Instruction::ReturnVoid {}

View file

@ -73,11 +73,11 @@ impl MethodCFG<'_> {
i += 1; i += 1;
} }
} }
let mut changed = true; let mut changed = true;
while changed { while changed {
let mut new_end_block_reg_tys = vec![]; // The first node is empty and depend on the function signature, it must not change
for node in &self.nodes { let mut new_end_block_reg_tys = vec![end_block_reg_tys[0].clone()];
for node in self.nodes.iter().skip(1) {
new_end_block_reg_tys.push(transform_reg_ty( new_end_block_reg_tys.push(transform_reg_ty(
&merge_input(node, nb_reg, &end_block_reg_tys), &merge_input(node, nb_reg, &end_block_reg_tys),
node, node,