diff options
Diffstat (limited to 'share')
-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 7a6b9dbb..a8a329de 100644 --- a/share/txr/stdlib/optimize.tl +++ b/share/txr/stdlib/optimize.tl @@ -65,6 +65,15 @@ (jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil) ^((jmp ,jjlabel) ,*rest)) (@jelse insns)))) + (((if @reg @jlabel0) + (jmp @jlabel1) . @rest) + (let ((jinsns [bb.hash jlabel1])) + (if-match (@(op eq jlabel1) + (if @(op eq reg) @nil) + (jmp @jlabel3) . @nil) + jinsns + ^(,(car insns) (jmp ,jlabel3) ,*rest) + insns))) (((if @reg @jlabel) . @rest) (let ((jinsns [bb.hash jlabel])) (match-case jinsns |