diff options
Diffstat (limited to 'chapter21/src')
| -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; |
