diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-03-25 07:26:09 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-03-25 07:26:09 -0700 |
commit | 4645e96f76034bc1ebbbf609dd85bdc7637f797d (patch) | |
tree | e3ec7d67d4c584e250192bd4093b39db7505507d | |
parent | 9bc89dcc1e9590a42a9d5bbd982321726f4f38f6 (diff) | |
download | txr-4645e96f76034bc1ebbbf609dd85bdc7637f797d.tar.gz txr-4645e96f76034bc1ebbbf609dd85bdc7637f797d.tar.bz2 txr-4645e96f76034bc1ebbbf609dd85bdc7637f797d.zip |
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.
-rw-r--r-- | share/txr/stdlib/optimize.tl | 9 |
1 files changed, 9 insertions, 0 deletions
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)) |