From 17ba8a2b81e60cb6d4c521e1466146d142bb1b02 Mon Sep 17 00:00:00 2001 From: dibyendumajumdar Date: Sat, 9 Aug 2025 20:50:15 +0100 Subject: [PATCH] #54 If a cbr instruction follows a copy instruction created due to phi removal, then update the cbr instruction to use the replacement --- .../com/compilerprogramming/ezlang/compiler/ExitSSA.java | 7 +++++++ .../ezlang/compiler/TestSSATransform.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/optvm/src/main/java/com/compilerprogramming/ezlang/compiler/ExitSSA.java b/optvm/src/main/java/com/compilerprogramming/ezlang/compiler/ExitSSA.java index 0828f98..af66aff 100644 --- a/optvm/src/main/java/com/compilerprogramming/ezlang/compiler/ExitSSA.java +++ b/optvm/src/main/java/com/compilerprogramming/ezlang/compiler/ExitSSA.java @@ -245,6 +245,13 @@ private CopyItem isCycle(List copySet, Register src) { private void addMoveAtBBEnd(BasicBlock block, Register src, Register dest) { var inst = new Instruction.Move(new Operand.RegisterOperand(src), new Operand.RegisterOperand(dest)); insertAtEnd(block, inst); + // If the copy instruction is followed by a cbr which uses the old var + // then we need to update the cbr instruction + // This is not specified in the Briggs paper but t + var brInst = block.instructions.getLast(); + if (brInst instanceof Instruction.ConditionalBranch cbr) { + cbr.replaceUse(src,dest); + } } /* Insert a copy from constant src to dst at end of BB */ private void addMoveAtBBEnd(BasicBlock block, Operand.ConstantOperand src, Register dest) { diff --git a/optvm/src/test/java/com/compilerprogramming/ezlang/compiler/TestSSATransform.java b/optvm/src/test/java/com/compilerprogramming/ezlang/compiler/TestSSATransform.java index 02aeb01..8897512 100644 --- a/optvm/src/test/java/com/compilerprogramming/ezlang/compiler/TestSSATransform.java +++ b/optvm/src/test/java/com/compilerprogramming/ezlang/compiler/TestSSATransform.java @@ -3156,7 +3156,7 @@ func bug(N: Int) if %t2_0 goto L3 else goto L4 L3: p_5 = p_1 - if p_1 goto L5 else goto L6 + if p_5 goto L5 else goto L6 L5: %t3_0 = p_1+1 p_4 = %t3_0