summaryrefslogtreecommitdiff
path: root/chapter22/src/main/java/com
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2025-04-26 13:39:40 -0700
committerCliff Click <cliffc@acm.org>2025-04-26 13:39:40 -0700
commit033c08926a5d597058fff0e8fd605bcd238d36a0 (patch)
tree13c0ea350579ae07ee2886a8dc4fc1adbcba07e1 /chapter22/src/main/java/com
parent2fbd5e92114b10cb6e475d82a850f899efbf9f27 (diff)
downloadSimple-033c08926a5d597058fff0e8fd605bcd238d36a0.tar.gz
Simple-033c08926a5d597058fff0e8fd605bcd238d36a0.zip
A series of unrelated minor bugfixes
Diffstat (limited to 'chapter22/src/main/java/com')
-rw-r--r--chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java2
-rw-r--r--chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java1
-rw-r--r--chapter22/src/main/java/com/seaofnodes/simple/node/PhiNode.java3
-rw-r--r--chapter22/src/main/java/com/seaofnodes/simple/node/ReturnNode.java1
4 files changed, 3 insertions, 4 deletions
diff --git a/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java b/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java
index 86cbfe97..bf6d67b0 100644
--- a/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java
+++ b/chapter22/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java
@@ -300,8 +300,6 @@ public class CodeGen {
if( x instanceof MachNode mach )
mach.postSelect(this); // Post selection action
- // Updates forward edges only.
- n._outputs.clear();
return x;
}
diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java b/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java
index 47975833..e1d8aee5 100644
--- a/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java
+++ b/chapter22/src/main/java/com/seaofnodes/simple/node/CallEndNode.java
@@ -37,7 +37,6 @@ public class CallEndNode extends CFGNode implements MultiNode {
if( !(in(0) instanceof CallNode call) )
return TypeTuple.RET.dual();
Type ret = Type.BOTTOM;
- TypeMem mem = TypeMem.BOT;
if( addDep(call.fptr())._type instanceof TypeFunPtr tfp ) {
ret = tfp.ret();
// Here, if I can figure out I've found *all* callers, then I can meet
diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/PhiNode.java b/chapter22/src/main/java/com/seaofnodes/simple/node/PhiNode.java
index 0579ecd0..e6f9cae7 100644
--- a/chapter22/src/main/java/com/seaofnodes/simple/node/PhiNode.java
+++ b/chapter22/src/main/java/com/seaofnodes/simple/node/PhiNode.java
@@ -127,6 +127,9 @@ public class PhiNode extends Node {
addDep(out);
return false;
}
+ for( int j=1; j<in(1).nIns(); j++ )
+ if( op.in(j) instanceof ScopeNode || (op.in(j)==null && in(1).in(j)!=null) )
+ return false; // Lazy Phi input
}
return true;
}
diff --git a/chapter22/src/main/java/com/seaofnodes/simple/node/ReturnNode.java b/chapter22/src/main/java/com/seaofnodes/simple/node/ReturnNode.java
index 317f4ce8..b4173871 100644
--- a/chapter22/src/main/java/com/seaofnodes/simple/node/ReturnNode.java
+++ b/chapter22/src/main/java/com/seaofnodes/simple/node/ReturnNode.java
@@ -51,7 +51,6 @@ public class ReturnNode extends CFGNode {
@Override
public Type compute() {
if( inProgress () ) return TypeTuple.RET; // In progress
- if( _fun.isDead() ) return TypeTuple.RET.dual(); // Dead another way
return TypeTuple.make(ctrl()._type,mem()._type,expr()._type);
}