From efcb916e35df0890d8ef67870d807134d3abc147 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 3 Nov 2008 21:02:34 -0600 Subject: [PATCH] Handle a jump to a jump by cloning the block, in the same way we optimize jumps to returns --- basis/compiler/cfg/linearization/linearization.factor | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/basis/compiler/cfg/linearization/linearization.factor b/basis/compiler/cfg/linearization/linearization.factor index d8f5d35ed4..d397c9d448 100644 --- a/basis/compiler/cfg/linearization/linearization.factor +++ b/basis/compiler/cfg/linearization/linearization.factor @@ -20,16 +20,17 @@ M: insn linearize-insn , drop ; #! don't need to branch. [ number>> ] bi@ 1- = ; inline -: branch-to-return? ( successor -- ? ) - #! A branch to a block containing just a return is cloned. +: branch-to-branch? ( successor -- ? ) + #! A branch to a block containing just a jump return is cloned. instructions>> dup length 2 = [ - [ first ##epilogue? ] [ second ##return? ] bi and + [ first ##epilogue? ] + [ second [ ##return? ] [ ##jump? ] bi or ] bi and ] [ drop f ] if ; : emit-branch ( basic-block successor -- ) { { [ 2dup useless-branch? ] [ 2drop ] } - { [ dup branch-to-return? ] [ nip linearize-insns ] } + { [ dup branch-to-branch? ] [ nip linearize-insns ] } [ nip number>> _branch ] } cond ;