summaryrefslogtreecommitdiff
path: root/chapter21/src/main/java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2025-04-14 10:08:33 -0700
committerCliff Click <cliffc@acm.org>2025-04-14 10:08:33 -0700
commitfaf6bae55523f12c32b0e21b3c39445459c50f71 (patch)
tree1a1c8fd2403206e232b6056172feff52c1d59a79 /chapter21/src/main/java
parent40a6f7b90e9e5d42bdacabb1c9e93fab5d27f63d (diff)
downloadSimple-faf6bae55523f12c32b0e21b3c39445459c50f71.tar.gz
Simple-faf6bae55523f12c32b0e21b3c39445459c50f71.zip
Missing hasCalls for Newxxx
Diffstat (limited to 'chapter21/src/main/java')
-rw-r--r--chapter21/src/main/java/com/seaofnodes/simple/codegen/ListScheduler.java3
-rw-r--r--chapter21/src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java9
2 files changed, 5 insertions, 7 deletions
diff --git a/chapter21/src/main/java/com/seaofnodes/simple/codegen/ListScheduler.java b/chapter21/src/main/java/com/seaofnodes/simple/codegen/ListScheduler.java
index 1796ef7c..de4fadc4 100644
--- a/chapter21/src/main/java/com/seaofnodes/simple/codegen/ListScheduler.java
+++ b/chapter21/src/main/java/com/seaofnodes/simple/codegen/ListScheduler.java
@@ -48,6 +48,9 @@ public abstract class ListScheduler {
computeSingleRDef(bb,use);
else
computeSingleRDef(bb,n);
+
+ if( n instanceof NewNode || n instanceof CallNode )
+ bb.fun()._hasCalls = true;
return this;
}
diff --git a/chapter21/src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java b/chapter21/src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java
index 0f480a33..642befa5 100644
--- a/chapter21/src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java
+++ b/chapter21/src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java
@@ -172,14 +172,9 @@ public class RegAlloc {
public void regAlloc() {
// Insert callee-save registers
- FunNode lastFun=null;
- for( CFGNode bb : _code._cfg ) {
+ for( CFGNode bb : _code._cfg )
if( bb instanceof FunNode fun )
- insertCalleeSave(lastFun=fun);
- // Leaf routine, or not?
- // X86 requires 16b RSP aligned if NOT leaf
- if( bb instanceof CallNode ) lastFun._hasCalls = true;
- }
+ insertCalleeSave(fun);
// Top driver: repeated rounds of coloring and splitting.
byte round=0;