summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-02-27 12:17:46 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-02-27 12:17:46 -0800
commit5e8fa7f8d40eed6218ae39886181eff0140059b3 (patch)
treeb99f4eb06a0a7f89b81209882c2dbc07adab32bf
parent02975faedaa056f324d896243311886f14f871e5 (diff)
downloadtxr-5e8fa7f8d40eed6218ae39886181eff0140059b3.tar.gz
txr-5e8fa7f8d40eed6218ae39886181eff0140059b3.tar.bz2
txr-5e8fa7f8d40eed6218ae39886181eff0140059b3.zip
compiler: optimize useless if to jmp.
* share/txr/stdlib/optimize.tl (basic-blocks thread-jumps-block): This is a complementary optimization to the one which matches (if (d @reg) @jlabel). An if instruction conditional on the nil register (t 0) is always taken, and can be rewritten to a jmp. This can promote elimination of dead code.
-rw-r--r--share/txr/stdlib/optimize.tl2
1 files changed, 2 insertions, 0 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 259a64ae..81536c32 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -258,6 +258,8 @@
(set insn ninsn
ninsn (match-case insn
((if (d @reg) @jlabel) nil)
+ ((if (t 0) @jlabel)
+ ^(jmp ,jlabel))
((jmp @jlabel)
(let ((jinsns [bb.hash jlabel].insns))
(match-case jinsns