diff options
| author | Cliff Click <cliffc@acm.org> | 2025-04-14 10:08:33 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-04-14 10:08:33 -0700 |
| commit | faf6bae55523f12c32b0e21b3c39445459c50f71 (patch) | |
| tree | 1a1c8fd2403206e232b6056172feff52c1d59a79 /chapter21/src/main/java | |
| parent | 40a6f7b90e9e5d42bdacabb1c9e93fab5d27f63d (diff) | |
| download | Simple-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.java | 3 | ||||
| -rw-r--r-- | chapter21/src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java | 9 |
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; |
