summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-02-05 22:06:27 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-02-05 22:06:27 -0800
commit79b3a51396f069b8775a0f71849b821cb9627b29 (patch)
tree957e118338e1a660c4509800cfac6a6ae2e91278
parenta9870a810fda3bd415f4250188f0af17e53fe759 (diff)
downloadtxr-79b3a51396f069b8775a0f71849b821cb9627b29.tar.gz
txr-79b3a51396f069b8775a0f71849b821cb9627b29.tar.bz2
txr-79b3a51396f069b8775a0f71849b821cb9627b29.zip
compiler: take advantage of new scoping in optimizer.
* share/txr/stdlib/optimize.tl (basic-blocks peephole): Get rid of @(op ...) and @(require ...) operators in favor of direct backreferencing.
-rw-r--r--share/txr/stdlib/optimize.tl28
1 files changed, 14 insertions, 14 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 4b446baf..4f69d424 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -61,8 +61,8 @@
(((jmp @jlabel) . @rest)
(let ((jinsns [bb.hash jlabel]))
(match-case jinsns
- ((@(op eq jlabel)
- (jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil)
+ ((@jlabel
+ (jmp @(and @jjlabel @(not @jlabel))) . @nil)
^((jmp ,jjlabel) ,*rest))
(@jelse insns))))
(((if @reg @jlabel0)
@@ -75,30 +75,30 @@
(((if @reg @jlabel) . @rest)
(let ((jinsns [bb.hash jlabel]))
(match-case jinsns
- ((@(op eq jlabel)
- (if @(op eq reg)
- @(require @jjlabel (neq jjlabel jlabel))) . @nil)
+ ((@jlabel
+ (if @reg
+ @(and @jjlabel @(not @jlabel))) . @nil)
^((if ,reg ,jjlabel) ,*rest))
- ((@(op eq jlabel)
- (jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil)
+ ((@jlabel
+ (jmp @(and @jjlabel @(not @jlabel))) . @nil)
^((if ,reg ,jjlabel) ,*rest))
(@jelse insns))))
(((ifq @reg @creg @jlabel) . @rest)
(let ((jinsns [bb.hash jlabel]))
(match-case jinsns
- ((@(op eq jlabel)
- (ifq @(op eq reg) @(op eq creg)
- @(require @jjlabel (neq jjlabel jlabel))) . @nil)
+ ((@jlabel
+ (ifq @reg @creg
+ @(and @jjlabel @(not @jlabel))) . @nil)
^((ifq ,reg ,creg ,jjlabel) ,*rest))
- ((@(op eq jlabel)
- (jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil)
+ ((@jlabel
+ (jmp @(and @jjlabel @(not @jlabel))) . @nil)
^((ifq ,reg ,creg ,jjlabel) ,*rest))
(@jelse insns))))
(((close @reg @nargs @jlabel . @cargs) . @rest)
(let ((jinsns [bb.hash jlabel]))
(match-case jinsns
- ((@(op eq jlabel)
- (jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil)
+ ((@jlabel
+ (jmp @(and @jjlabel @(not @jlabel))) . @nil)
^((close ,reg ,nargs ,jjlabel ,*cargs) ,*rest))
(@jelse insns))))
;; wasteful moves