aa
TestLive.java
Go to the documentation of this file.
1
package
com.cliffc.aa;
2
3
import
com
.
cliffc
.
aa
.
node
.*;
4
import
com
.
cliffc
.
aa
.
type
.*;
5
import
org.junit.
Test
;
6
7
import
static
com
.
cliffc
.
aa
.
AA
.
REZ_IDX
;
8
import
static
com
.
cliffc
.
aa
.
type
.
TypeFld
.
Access
;
9
import
static
org.junit.Assert.assertEquals;
10
import
static
org.junit.Assert.assertTrue;
11
12
public
class
TestLive
{
13
@Test
public
void
testBasic
() {
14
GVNGCM
gvn =
new
GVNGCM
();
15
gvn.
_opt_mode
=
GVNGCM
.
Mode
.
PesiNoCG
;
16
17
// Liveness is a backwards flow. Scope always demands all return results.
18
ScopeNode
scope =
new
ScopeNode
(
null
,
false
);
19
20
Node
fullmem =
new
ConNode<>
(
TypeMem
.
FULL
);
21
fullmem.
_val
=
TypeMem
.
FULL
;
22
scope.
set_mem
(fullmem);
23
24
// Return the number '5' - should be alive with no special memory.
25
Node
rez =
new
ConNode<>
(
TypeInt
.
con
(5));
26
rez.
_val
=
TypeInt
.
con
(5);
27
scope.
set_rez
(rez);
28
29
// Check liveness base case
30
scope.
xliv
(gvn.
_opt_mode
);
31
assertEquals(
TypeMem
.
ANYMEM
,scope.
_live
);
32
33
// Check liveness recursive back one step
34
rez.
xliv
(
GVNGCM
.
Mode
.
PesiCG
);
35
assertEquals(
TypeMem
.
ESCAPE
,rez.
_live
);
36
}
37
38
@SuppressWarnings(
"unchecked"
)
39
@Test
public
void
testNewObj
() {
40
Env
env =
Env
.
top_scope
();
41
GVNGCM
gvn =
Env
.
GVN
;
42
Node
.
_INIT0_CNT
= 1;
// No prims
43
// Always memory for the NewObj
44
Node
mmm =
new
ConNode<>
(
TypeMem
.
ANYMEM
).
keep
();
45
mmm.
_val
=
TypeMem
.
ANYMEM
;
46
47
// Fields
48
Type
ti5 =
TypeInt
.
con
(5);
49
ConNode
fdx =
new
ConNode
(ti5);
50
fdx.
_val
= ti5;
51
Type
ti9 =
TypeInt
.
con
(9);
52
ConNode<Type>
fdy =
new
ConNode<>
(ti9);
53
fdy.
_val
= ti9;
54
55
// New object, fields x,y holding ints
56
NewObjNode
nnn =
new
NewObjNode
(
false
,
TypeMemPtr
.
DISPLAY
,
Node
.
con
(
Type
.
NIL
));
57
nnn.
create_active
(
"x"
,fdx,
Access
.
Final
);
58
nnn.
create_active
(
"y"
,fdy,
Access
.
Final
);
59
nnn._val =
Type
.
ANY
;
60
nnn.
no_more_fields
();
61
nnn.xval();
62
nnn._live =
TypeMem
.
LIVE_BOT
;
63
64
// Proj, OProj
65
Node
mem =
new
MrgProjNode
(nnn,mmm);
66
mem.
xval
();
67
Node
ptr =
new
ProjNode
(REZ_IDX, nnn);
68
ptr.
xval
();
69
70
// Use the object for scope exit
71
ScopeNode
scope =
new
ScopeNode
(
null
,
false
);
72
scope.
set_mem
(mem);
73
scope.
set_rez
(ptr);
74
scope.
_val
=
Type
.
ALL
;
75
76
// Check 'live' is stable on creation, except for mem & scope
77
// which are 'turning around' liveness.
78
// Value was computed in a forwards flow.
79
for
(
Node
n :
new
Node
[]{mmm,fdx,fdy,nnn,mem,ptr,scope} ) {
80
if
( n != mem && n != scope )
81
assertTrue(n.live(gvn.
_opt_mode
).isa(n._live));
82
assertEquals(n._val,n.value(gvn.
_opt_mode
));
83
}
84
85
// Check liveness base case
86
scope.
xliv
(
GVNGCM
.
Mode
.
PesiNoCG
);
87
// Since simple forwards-flow, the default memory is known UNUSED.
88
// However, we got provided at least one object.
89
TypeMem
expected_live = ((
TypeMem
) mem.
_val
).
flatten_fields
();
90
assertEquals(scope.
_live
,expected_live);
91
92
// Check liveness recursive back one step
93
ptr.
xliv
(
GVNGCM
.
Mode
.
PesiNoCG
);
94
assertEquals(
TypeMem
.
ESCAPE
,ptr.
_live
);
// Ptr is all_type, conservative so all memory alive
95
mem.
xliv
(
GVNGCM
.
Mode
.
PesiNoCG
);
96
assertEquals(mem.
_live
,expected_live);
// Object demands of OProj, but OProj passes along request to NewObj
97
nnn.xliv(
GVNGCM
.
Mode
.
PesiNoCG
);
98
assertEquals(expected_live,nnn._live);
// NewObj supplies object, needs what its input needs
99
mmm.
xliv
(
GVNGCM
.
Mode
.
PesiNoCG
);
100
assertEquals(
TypeMem
.
ALIVE
,mmm.
_live
);
// Since ptr is scalar, all memory is alive
101
fdx.
xliv
(
GVNGCM
.
Mode
.
PesiNoCG
);
102
assertEquals(
TypeMem
.
ESCAPE
,fdx.
_live
);
// Since ptr is scalar, all memory is alive
103
104
}
105
}
com.cliffc.aa.type.TypeFld.Access.Final
Final
Definition:
TypeFld.java:112
com.cliffc.aa.TestLive.testNewObj
void testNewObj()
Definition:
TestLive.java:39
com.cliffc.aa.node.NewObjNode.no_more_fields
void no_more_fields()
Definition:
NewObjNode.java:48
com.cliffc.aa.type.TypeMem
Memory type; the state of all of memory; memory edges order memory ops.
Definition:
TypeMem.java:53
com.cliffc.aa.GVNGCM.Mode.PesiCG
PesiCG
Definition:
GVNGCM.java:18
com.cliffc.aa.node.Node._live
TypeMem _live
Definition:
Node.java:89
com.cliffc
com.cliffc.aa.Env.top_scope
static Env top_scope()
Definition:
Env.java:72
com.cliffc.aa.type.TypeFld
Definition:
TypeFld.java:12
com.cliffc.aa.node.ScopeNode
Definition:
ScopeNode.java:17
com.cliffc.aa.type.TypeMem.LIVE_BOT
static final TypeMem LIVE_BOT
Definition:
TypeMem.java:226
com.cliffc.aa.node.Node
Definition:
Node.java:16
com.cliffc.aa.type.TypeInt
Definition:
TypeInt.java:9
com.cliffc.aa.type.TypeMem.ESCAPE
static final TypeMem ESCAPE
Definition:
TypeMem.java:227
com.cliffc.aa.type.Type
an implementation of language AA
Definition:
Type.java:94
com.cliffc.aa.node.Node.keep
public< N extends Node > N keep()
Definition:
Node.java:228
com.cliffc.aa.type.TypeInt.con
static TypeInt con(long con)
Definition:
TypeInt.java:37
com.cliffc.aa.node.Node._val
Type _val
Definition:
Node.java:88
com.cliffc.aa.type.Type.ANY
static final Type ANY
Definition:
Type.java:325
com.cliffc.aa.node.ConNode
Definition:
ConNode.java:9
Test
com.cliffc.aa.type.TypeMem.ANYMEM
static final TypeMem ANYMEM
Definition:
TypeMem.java:228
com.cliffc.aa.GVNGCM.Mode.PesiNoCG
PesiNoCG
Definition:
GVNGCM.java:16
com.cliffc.aa.type.TypeMem.flatten_fields
TypeMem flatten_fields()
Definition:
TypeMem.java:522
com.cliffc.aa.type.Type.ALL
static final Type ALL
Definition:
Type.java:324
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition:
Env.java:13
com.cliffc.aa.type.TypeMemPtr.DISPLAY
static final TypeStruct DISPLAY
Definition:
TypeMemPtr.java:78
com.cliffc.aa.type.TypeMem.FULL
static final TypeMem FULL
Definition:
TypeMem.java:222
com.cliffc.aa.AA.REZ_IDX
static final int REZ_IDX
Definition:
AA.java:16
com.cliffc.aa.type.TypeMem.ALIVE
static final TypeMem ALIVE
Definition:
TypeMem.java:226
com.cliffc.aa.GVNGCM
Definition:
GVNGCM.java:12
com.cliffc.aa.node.Node._INIT0_CNT
static int _INIT0_CNT
Definition:
Node.java:58
com.cliffc.aa.node.ProjNode
Definition:
ProjNode.java:11
com.cliffc.aa.node.NewObjNode
Definition:
NewObjNode.java:20
com.cliffc.aa.type.Type.NIL
static final Type NIL
Definition:
Type.java:332
com.cliffc.aa.node.Node.con
static Node con(Type t)
Definition:
Node.java:670
com.cliffc.aa.AA
an implementation of language AA
Definition:
AA.java:9
com.cliffc.aa
Definition:
AA.java:1
com.cliffc.aa.node.ScopeNode.set_rez
void set_rez(Node n)
Definition:
ScopeNode.java:51
com.cliffc.aa.node.MrgProjNode
Definition:
MrgProjNode.java:10
com.cliffc.aa.TestLive
Definition:
TestLive.java:12
com.cliffc.aa.node.NewObjNode.create_active
void create_active(String name, Node val, Access mutable)
Definition:
NewObjNode.java:57
com.cliffc.aa.node.Node.xval
Type xval()
Definition:
Node.java:460
com.cliffc.aa.GVNGCM._opt_mode
Mode _opt_mode
Definition:
GVNGCM.java:22
com.cliffc.aa.type.TypeFld.Access
Definition:
TypeFld.java:109
com
com.cliffc.aa.Env
Definition:
Env.java:12
com.cliffc.aa.node.ScopeNode.set_mem
Node set_mem(Node n)
Definition:
ScopeNode.java:54
com.cliffc.aa.type
Definition:
Bits.java:1
com.cliffc.aa.type.TypeMemPtr
Definition:
TypeMemPtr.java:14
com.cliffc.aa.node
Definition:
AssertNode.java:1
com.cliffc.aa.GVNGCM.Mode
Definition:
GVNGCM.java:14
com.cliffc.aa.node.Node.xliv
Node xliv(GVNGCM.Mode opt_mode)
Definition:
Node.java:500
com.cliffc.aa.TestLive.testBasic
void testBasic()
Definition:
TestLive.java:13
src
test
java
com
cliffc
aa
TestLive.java
Generated by
1.8.18