summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-04-18 11:46:28 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-04-18 11:46:28 -0700
commita45c3e356508e15c8e3fc69be4b8c19f54af0389 (patch)
tree93240eb7ed91b4c8a26ae9a5475e066e17a77ed0
parent1adb48a63e59b8b774c357646ebb9cd4039c7f7c (diff)
downloadtxr-a45c3e356508e15c8e3fc69be4b8c19f54af0389.tar.gz
txr-a45c3e356508e15c8e3fc69be4b8c19f54af0389.tar.bz2
txr-a45c3e356508e15c8e3fc69be4b8c19f54af0389.zip
compiler: simplify live-info defined set semantics.
* stdlib/optimize.tl (basic-blocks local-liveness): Just store the mask of defined registers into each live-info. Do not propagate the defined mask from the next instruction backwards. The way the defined mask is used in calc-liveness, this makes no difference, and is simpler and faster.
-rw-r--r--stdlib/optimize.tl10
1 files changed, 4 insertions, 6 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl
index 095350d3..5919e8cb 100644
--- a/stdlib/optimize.tl
+++ b/stdlib/optimize.tl
@@ -180,7 +180,7 @@
(set li.def1 def1)
(new live-info
used (logand li.used (lognot dmask))
- defined (logior li.defined dmask)))
+ defined dmask))
(t (prog1
(copy li)
(set li.def0 def0)
@@ -190,8 +190,7 @@
(let* ((rn (regnums refs))
(rmask (mask . rn)))
(new live-info
- used (logior li.used rmask)
- defined (logand li.defined (lognot rmask)))))
+ used (logior li.used rmask))))
(def-ref (li insn def . refs)
(set li.def0 def
[bb.li-hash insn] li)
@@ -202,10 +201,9 @@
(cond
(dn (new live-info
used (logior (logand li.used (lognot dmask)) rmask)
- defined (logior (logand li.defined (lognot rmask)) dmask)))
+ defined dmask))
(t (new live-info
- used (logior li.used rmask)
- defined (logand li.defined (lognot rmask)))))))
+ used (logior li.used rmask))))))
(liveness (insns)
(if (null insns)
(new live-info used 0)