summaryrefslogtreecommitdiff
path: root/chapter05/src/test/java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2023-10-28 16:18:02 -0700
committerDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2023-11-01 18:56:50 +0000
commit2c7e86d4350ed115922e80e6bfc1aef30a881f75 (patch)
tree9e9eb49cf4530402d32130e392171fe755cb73ba /chapter05/src/test/java
parentef8db9b6acaf372824961df6d1008965cc9553be (diff)
downloadSimple-2c7e86d4350ed115922e80e6bfc1aef30a881f75.tar.gz
Simple-2c7e86d4350ed115922e80e6bfc1aef30a881f75.zip
Parser gather Returns in the Stop
Return returns a tuple of control & result GraphViz works with multi-Scopes and Scopes do not double-print uid. Proj also does not print uid in golden test results, because every time we add a new early node, the final results change node id so fail golden test.
Diffstat (limited to 'chapter05/src/test/java')
-rw-r--r--chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java95
1 files changed, 52 insertions, 43 deletions
diff --git a/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java b/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java
index 496b3ff5..e59d1dbd 100644
--- a/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java
+++ b/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java
@@ -23,8 +23,8 @@ else {
return a;
#showGraph;
""");
- ReturnNode ret = parser.parse();
- assertEquals("return Phi(Region16,(arg4+2),(arg4-3));", ret.toString());
+ StopNode ret = parser.parse();
+ assertEquals("return Phi(Region17,(arg+2),(arg-3));", ret.toString());
}
@Test
@@ -38,22 +38,29 @@ if (arg == 1) {
}
return c;
""", TypeInteger.BOT);
- ReturnNode ret = parser.parse();
- assertEquals("return Phi(Region15,4,3);", ret.toString());
+ StopNode ret = parser.parse();
+ assertEquals("return Phi(Region16,4,3);", ret.toString());
+ }
+
+ @Test
+ public void testChapter5Return2() {
+ Parser parser = new Parser("if( arg==1 ) return 3; else return 4; #showGraph;", TypeInteger.BOT);
+ StopNode stop = parser.parse();
+ assertEquals("Stop[ return 3; return 4; ]", stop.toString());
}
@Test
public void testChapter5IfMergeB() {
Parser parser = new Parser("int a=arg+1; int b=0; if( arg==1 ) b=a; else b=a+1; return a+b; #showGraph;");
- ReturnNode ret = parser.parse();
- assertEquals("return ((arg4+1)+Phi(Region19,(arg4+1),(arg4+2)));", ret.toString());
+ StopNode ret = parser.parse();
+ assertEquals("return ((arg+1)+Phi(Region20,(arg+1),(arg+2)));", ret.toString());
}
@Test
public void testChapter5IfMerge2() {
Parser parser = new Parser("int a=arg+1; int b=arg+2; if( arg==1 ) b=b+a; else a=b+1; return a+b; #showGraph;");
- ReturnNode ret = parser.parse();
- assertEquals("return (Phi(Region30,(arg4+1),(arg4+3))+Phi(Region30,((arg4*2)+3),(arg4+2)));", ret.toString());
+ StopNode ret = parser.parse();
+ assertEquals("return (Phi(Region31,(arg+1),(arg+3))+Phi(Region31,((arg*2)+3),(arg+2)));", ret.toString());
}
@Test
@@ -79,49 +86,50 @@ return c;
@Test
public void testChapter4Peephole() {
Parser parser = new Parser("return 1+arg+2; #showGraph;");
- ReturnNode ret = parser.parse();
- assertEquals("return (arg4+3);", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return (arg+3);", ret.print());
}
@Test
public void testChapter4Peephole2() {
Parser parser = new Parser("return (1+arg)+2;");
- ReturnNode ret = parser.parse();
- assertEquals("return (arg4+3);", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return (arg+3);", ret.print());
}
@Test
public void testChapter4Add0() {
Parser parser = new Parser("return 0+arg;");
- ReturnNode ret = parser.parse();
- assertEquals("return arg4;", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return arg;", ret.print());
}
@Test
public void testChapter4AddAddMul() {
Parser parser = new Parser("return arg+0+arg;");
- ReturnNode ret = parser.parse();
- assertEquals("return (arg4*2);", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return (arg*2);", ret.print());
}
@Test
public void testChapter4Peephole3() {
Parser parser = new Parser("return 1+arg+2+arg+3; #showGraph;");
- ReturnNode ret = parser.parse();
- assertEquals("return ((arg4*2)+6);", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return ((arg*2)+6);", ret.print());
}
@Test
public void testChapter4Mul1() {
Parser parser = new Parser("return 1*arg;");
- ReturnNode ret = parser.parse();
- assertEquals("return arg4;", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return arg;", ret.print());
}
@Test
public void testChapter4VarArg() {
Parser parser = new Parser("return arg; #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode stop = parser.parse();
+ ReturnNode ret = stop.ret();
assertTrue(ret.in(0) instanceof ProjNode);
assertTrue(ret.in(1) instanceof ProjNode);
}
@@ -129,70 +137,70 @@ return c;
@Test
public void testChapter4ConstantArg() {
Parser parser = new Parser("return arg; #showGraph;", TypeInteger.constant(2));
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 2;", ret.print());
}
@Test
public void testChapter4CompEq() {
Parser parser = new Parser("return 3==3; #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 1;", ret.print());
}
@Test
public void testChapter4CompEq2() {
Parser parser = new Parser("return 3==4; #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 0;", ret.print());
}
@Test
public void testChapter4CompNEq() {
Parser parser = new Parser("return 3!=3; #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 0;", ret.print());
}
@Test
public void testChapter4CompNEq2() {
Parser parser = new Parser("return 3!=4; #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 1;", ret.print());
}
@Test
public void testChapter4Bug1() {
Parser parser = new Parser("int a=arg+1; int b=a; b=1; return a+2; #showGraph;");
- ReturnNode ret = parser.parse();
- assertEquals("return (arg4+3);", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return (arg+3);", ret.print());
}
@Test
public void testChapter4Bug2() {
Parser parser = new Parser("int a=arg+1; a=a; return a; #showGraph;");
- ReturnNode ret = parser.parse();
- assertEquals("return (arg4+1);", ret.print());
+ StopNode ret = parser.parse();
+ assertEquals("return (arg+1);", ret.print());
}
@Test
public void testVarDecl() {
Parser parser = new Parser("int a=1; return a;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 1;", ret.print());
}
@Test
public void testVarAdd() {
Parser parser = new Parser("int a=1; int b=2; return a+b;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 3;", ret.print());
}
@Test
public void testVarScope() {
Parser parser = new Parser("int a=1; int b=2; int c=0; { int b=3; c=a+b; } return c;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 4;", ret.print());
}
@@ -200,7 +208,7 @@ return c;
public void testVarScopeNoPeephole() {
Node._disablePeephole = true;
Parser parser = new Parser("int a=1; int b=2; int c=0; { int b=3; c=a+b; #showGraph; } return c; #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
Node._disablePeephole = false;
assertEquals("return (1+3);", ret.print());
}
@@ -208,7 +216,7 @@ return c;
@Test
public void testVarDist() {
Parser parser = new Parser("int x0=1; int y0=2; int x1=3; int y1=4; return (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1); #showGraph;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 8;", ret.print());
}
@@ -226,7 +234,7 @@ return c;
public void testChapter2ParseGrammar() {
Node._disablePeephole = true; // disable peephole so we can observe full graph
Parser parser = new Parser("return 1+2*3+-5;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return (1+((2*3)+(-5)));", ret.print());
GraphVisualizer gv = new GraphVisualizer();
System.out.println(gv.generateDotOutput(parser));
@@ -236,42 +244,42 @@ return c;
@Test
public void testChapter2AddPeephole() {
Parser parser = new Parser("return 1+2;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 3;", ret.print());
}
@Test
public void testChapter2SubPeephole() {
Parser parser = new Parser("return 1-2;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return -1;", ret.print());
}
@Test
public void testChapter2MulPeephole() {
Parser parser = new Parser("return 2*3;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 6;", ret.print());
}
@Test
public void testChapter2DivPeephole() {
Parser parser = new Parser("return 6/3;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 2;", ret.print());
}
@Test
public void testChapter2MinusPeephole() {
Parser parser = new Parser("return 6/-3;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return -2;", ret.print());
}
@Test
public void testChapter2Example() {
Parser parser = new Parser("return 1+2*3+-5;");
- ReturnNode ret = parser.parse();
+ StopNode ret = parser.parse();
assertEquals("return 2;", ret.print());
GraphVisualizer gv = new GraphVisualizer();
System.out.println(gv.generateDotOutput(parser));
@@ -280,8 +288,9 @@ return c;
@Test
public void testSimpleProgram() {
Parser parser = new Parser("return 1;");
- ReturnNode ret = parser.parse();
+ StopNode stop = parser.parse();
StartNode start = Parser.START;
+ ReturnNode ret = (ReturnNode)stop.in(0);
assertTrue(ret.ctrl() instanceof ProjNode);
Node expr = ret.expr();