From ed4ddd978ac564b83d09cfe96f97c993442cc195 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 2 Mar 2021 07:36:13 -0800 Subject: compiler: new peephole cases: if over d reg. During peephole optimization, new cases can arise where a dreg is tested. * share/txr/stdlib/optimize.tl (basic-blocks peephole-block): Test for (if dreg ...) and (ifq dreg nil), eliminating the instruction or rewriting to jmp. Could be worth it to do another thread and dead code elimination. --- share/txr/stdlib/optimize.tl | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'share') diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl index 813264df..411af8d9 100644 --- a/share/txr/stdlib/optimize.tl +++ b/share/txr/stdlib/optimize.tl @@ -385,6 +385,12 @@ ^((if (t ,reg) ,xbl.label))) (t insns)))) (@jelse insns)))) + (@(require ((if @(as reg (d @dn)) @jlabel) . @nil) + (not (memqual reg bb.lt-dregs))) + nil) + (@(require ((ifq @(as reg (d @dn)) (t 0) @jlabel) . @nil) + (not (memqual reg bb.lt-dregs))) + ^((jmp ,jlabel))) (@else insns))) (defmeth basic-blocks peephole (bb) -- cgit v1.2.3