diff options
| author | Cliff Click <cliffc@acm.org> | 2025-04-01 15:05:31 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-04-01 15:05:31 -0700 |
| commit | f6a047a93971574f64a779cf59dc41ff52cdfe27 (patch) | |
| tree | aa1d318ac7093d922c90def57c7d7aeca3570102 /chapter21 | |
| parent | f691d2de7217b04844da51c2c6ecc0fd9137c7d6 (diff) | |
| download | Simple-f6a047a93971574f64a779cf59dc41ff52cdfe27.tar.gz Simple-f6a047a93971574f64a779cf59dc41ff52cdfe27.zip | |
More infinite loop encodings
Diffstat (limited to 'chapter21')
3 files changed, 3 insertions, 1 deletions
diff --git a/chapter21/src/main/java/com/seaofnodes/simple/codegen/GlobalCodeMotion.java b/chapter21/src/main/java/com/seaofnodes/simple/codegen/GlobalCodeMotion.java index 11c2b061..40bb626d 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/codegen/GlobalCodeMotion.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/codegen/GlobalCodeMotion.java @@ -226,6 +226,7 @@ public abstract class GlobalCodeMotion { // Least loop depth first, then largest idepth private static boolean better( CFGNode lca, CFGNode best ) { return lca.loopDepth() < best.loopDepth() || + lca instanceof NeverNode || (lca.idepth() > best.idepth() || best instanceof IfNode); } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/NeverNode.java b/chapter21/src/main/java/com/seaofnodes/simple/node/NeverNode.java index 26198500..1dcad1db 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/node/NeverNode.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/node/NeverNode.java @@ -9,7 +9,7 @@ import java.util.BitSet; // "Never true" for infinite loop exits public class NeverNode extends IfNode { - public NeverNode(Node ctrl) { super(ctrl,Parser.ZERO); } + public NeverNode(Node ctrl) { super(ctrl,null); } @Override public String label() { return "Never"; } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java b/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java index 9fcb1472..d9b0ec36 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/print/ASMPrinter.java @@ -114,6 +114,7 @@ public abstract class ASMPrinter { if( postAlloc && n instanceof CalleeSaveNode ) return iadr; if( postEncode && n instanceof ProjNode ) return iadr; if( n instanceof MemMergeNode ) return iadr; + if( n.getClass() == ConstantNode.class ) return iadr; // Default placeholders final int dopz = code._mach.defaultOpSize(); final int encWidth = dopz*2; |
