From faf6bae55523f12c32b0e21b3c39445459c50f71 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 14 Apr 2025 10:08:33 -0700 Subject: Missing hasCalls for Newxxx --- .../main/java/com/seaofnodes/simple/codegen/ListScheduler.java | 3 +++ .../src/main/java/com/seaofnodes/simple/codegen/RegAlloc.java | 9 ++------- 2 files changed, 5 insertions(+), 7 deletions(-) (limited to 'chapter21/src') 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; -- cgit v1.2.3