diff options
-rw-r--r-- | share/txr/stdlib/optimize.tl | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl index 31702cb4..83abaa1e 100644 --- a/share/txr/stdlib/optimize.tl +++ b/share/txr/stdlib/optimize.tl @@ -318,6 +318,15 @@ (ifq @reg @creg @(and @jjlabel @(not @jlabel))) . @nil) ^(ifq ,reg ,creg ,jjlabel)) + ((@(require @jlabel (equal creg '(t 0))) + (if @reg + @(and @jjlabel @(not @jlabel))) . @jrest) + (let ((xbl (if jrest + bb.(cut-block [bb.hash jlabel] jrest jinsns) + bb.(next-block [bb.hash jlabel])))) + (if xbl + ^(ifq ,reg ,creg ,xbl.label) + insn))) ((@jlabel (jmp @(and @jjlabel @(not @jlabel))) . @nil) ^(ifq ,reg ,creg ,jjlabel)) |