From 89e094a72f05cbd4d3c5c40f89de13593b7f8e05 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 26 Jan 2021 20:06:15 -0800 Subject: optimizer: thread ifq instructions also. * share/txr/stdlib/optimize.tl (basic-blocks thread-jumps): If an (ifq RX RY label-X) instruction branches to an (ifq RX RY label-Y) instruction, replace it with that instruction. Moreover, if (if RX RY label-X) jumps to a (jmp label-Y) instruction, also replace it with (if RX RY label-Y). --- share/txr/stdlib/optimize.tl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl index 5cd05095..9cb6ab85 100644 --- a/share/txr/stdlib/optimize.tl +++ b/share/txr/stdlib/optimize.tl @@ -60,6 +60,15 @@ ((@(op eq jlabel) (jmp @(require @jjlabel (neq jjlabel 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) + ^((ifq ,reg ,creg ,jjlabel) ,*rest)) + ((@(op eq jlabel) (jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil) + ^((ifq ,reg ,creg ,jjlabel) ,*rest)) + (@jelse insns)))) (@else insns))) code)))) -- cgit v1.2.3