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
commitb0b7a05c76fac4dc072e394731a7e5f153c775a8 (patch)
treeb99f4eb06a0a7f89b81209882c2dbc07adab32bf
parentc3174f915dbcd5cd90659279671b9a3005b840ea (diff)
downloadtxr-b0b7a05c76fac4dc072e394731a7e5f153c775a8.tar.gz
txr-b0b7a05c76fac4dc072e394731a7e5f153c775a8.tar.bz2
txr-b0b7a05c76fac4dc072e394731a7e5f153c775a8.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