diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2023-04-18 11:46:28 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2023-04-18 11:46:28 -0700 |
commit | 7392351a8f54ecfcfcd81736f2c6e81854e057c7 (patch) | |
tree | 93240eb7ed91b4c8a26ae9a5475e066e17a77ed0 | |
parent | 533331cecacf84464eea5dc5c856309027fe7297 (diff) | |
download | txr-7392351a8f54ecfcfcd81736f2c6e81854e057c7.tar.gz txr-7392351a8f54ecfcfcd81736f2c6e81854e057c7.tar.bz2 txr-7392351a8f54ecfcfcd81736f2c6e81854e057c7.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.tl | 10 |
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) |