From cf1ecfc1cb104ce29174c748e7a8567cd93ac8bb Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 25 Mar 2021 07:26:09 -0700 Subject: compiler: new jump skid optimization case. ifq tN t0 label0 ifq tN t0 label1 ... ... label0: --> ... if tN label2 label1: label1: ... ... * share/txr/stdlib/optimize.tl (basic-blocks thread-jumps-block): Implement case. There are there are 56 "hits" for this in the standard library. --- 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 31702cb4..83abaa1e 100644 --- a/share/txr/stdlib/optimize.tl +++ b/share/txr/stdlib/optimize.tl @@ -318,6 +318,15 @@ (ifq @reg @creg @(and @jjlabel @(not @jlabel))) . @nil) ^(ifq ,reg ,creg ,jjlabel)) + ((@(require @jlabel (equal creg '(t 0))) + (if @reg + @(and @jjlabel @(not @jlabel))) . @jrest) + (let ((xbl (if jrest + bb.(cut-block [bb.hash jlabel] jrest jinsns) + bb.(next-block [bb.hash jlabel])))) + (if xbl + ^(ifq ,reg ,creg ,xbl.label) + insn))) ((@jlabel (jmp @(and @jjlabel @(not @jlabel))) . @nil) ^(ifq ,reg ,creg ,jjlabel)) -- cgit v1.2.3