aa
MProjNode.java
Go to the documentation of this file.
1
package
com.cliffc.aa.node;
2
3
import
com
.
cliffc
.
aa
.
Env
;
4
import
com
.
cliffc
.
aa
.
GVNGCM
;
5
import
com
.
cliffc
.
aa
.
type
.*;
6
7
import
static
com
.
cliffc
.
aa
.
AA
.
MEM_IDX
;
8
9
// Proj memory
10
public
class
MProjNode
extends
ProjNode
{
11
12
public
MProjNode
(
CallNode
call,
Node
def ) { super(MEM_IDX,call,def); }
13
public
MProjNode
(
Node
head ) { super(head, MEM_IDX); }
14
public
MProjNode
(
Node
head,
int
idx ) { super(head,idx); }
15
@Override
public
String
xstr
() {
return
"MProj"
+
_idx
; }
16
@Override
public
boolean
is_mem
() {
return
true
; }
17
18
@Override
public
Node
ideal_reduce
() {
19
Node
x = super.
ideal_reduce
();
20
if
( x!=
null
)
return
x;
21
// TODO: Turn back on, as a local flow property
22
//if( in(0) instanceof CallEpiNode ) {
23
// Node precall = in(0).is_pure_call(); // See if memory can bypass pure calls (most primitives)
24
// if( precall != null && _val == precall._val )
25
// return precall;
26
//}
27
return
null
;
28
}
29
30
@Override
public
Type
value
(
GVNGCM
.
Mode
opt_mode) {
31
Type
c =
val
(0);
32
if
( c instanceof
TypeTuple
) {
33
TypeTuple
ct = (
TypeTuple
)c;
34
if
(
_idx
< ct.
_ts
.length ) {
35
Type
t = ct.
at
(
_idx
);
36
// Break forward dead-alias cycles in recursive functions by inspecting
37
// dead-ness in DefMem.
38
if
(
in
(0) instanceof
CallNode
&& !opt_mode._CG)
39
t = t.
join
(
in
(1).
_val
);
40
return
t;
41
}
42
}
43
return
c.
oob
();
44
}
45
46
//@Override public TV2 new_tvar( String alloc_site) { return TV2.make_mem(this,alloc_site); }
47
48
@Override
public
void
add_flow_use_extra
(
Node
chg) {
49
if
( chg instanceof
CallNode
) {
// If the Call changes value
50
Env
.
GVN
.
add_flow
(chg.
in
(MEM_IDX));
// The called memory changes liveness
51
Env
.
GVN
.
add_flow
(((
CallNode
)chg).fdx());
// The called function changes liveness
52
}
53
}
54
55
@Override
BitsAlias
escapees
() {
return
in
(0).
escapees
(); }
56
@Override
public
TypeMem
all_live
() {
return
TypeMem
.
ALLMEM
; }
57
// Only called here if alive, and input is more-than-basic-alive
58
@Override
public
TypeMem
live_use
(
GVNGCM
.
Mode
opt_mode,
Node
def ) {
59
return
opt_mode._CG && def==
Env
.
DEFMEM
?
TypeMem
.
DEAD
:
_live
;
60
}
61
}
com.cliffc.aa.node.Node.escapees
BitsAlias escapees()
Definition:
Node.java:859
com.cliffc.aa.type.TypeMem.DEAD
static final TypeMem DEAD
Definition:
TypeMem.java:226
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.type.Type.join
Type join(Type t)
Definition:
Type.java:619
com.cliffc.aa.node.Node._live
TypeMem _live
Definition:
Node.java:89
com.cliffc
com.cliffc.aa.node.Node
Definition:
Node.java:16
com.cliffc.aa.node.MProjNode.all_live
TypeMem all_live()
Definition:
MProjNode.java:56
com.cliffc.aa.type.Type
an implementation of language AA
Definition:
Type.java:94
com.cliffc.aa.node.MProjNode.MProjNode
MProjNode(CallNode call, Node def)
Definition:
MProjNode.java:12
com.cliffc.aa.AA.MEM_IDX
static final int MEM_IDX
Definition:
AA.java:14
com.cliffc.aa.type.BitsAlias
Definition:
BitsAlias.java:8
com.cliffc.aa.type.TypeTuple
Definition:
TypeTuple.java:11
com.cliffc.aa.node.MProjNode.MProjNode
MProjNode(Node head, int idx)
Definition:
MProjNode.java:14
com.cliffc.aa.type.TypeMem.ALLMEM
static final TypeMem ALLMEM
Definition:
TypeMem.java:228
com.cliffc.aa.node.Node._val
Type _val
Definition:
Node.java:88
com.cliffc.aa.node.CallNode
Definition:
CallNode.java:86
com.cliffc.aa.node.MProjNode
Definition:
MProjNode.java:10
com.cliffc.aa.node.Node.ideal_reduce
Node ideal_reduce()
Definition:
Node.java:441
com.cliffc.aa.node.MProjNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition:
MProjNode.java:58
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition:
Env.java:13
com.cliffc.aa.node.MProjNode.value
Type value(GVNGCM.Mode opt_mode)
Definition:
MProjNode.java:30
com.cliffc.aa.node.ProjNode._idx
int _idx
Definition:
ProjNode.java:12
com.cliffc.aa.node.Node.in
Node in(int i)
Definition:
Node.java:126
com.cliffc.aa.GVNGCM
Definition:
GVNGCM.java:12
com.cliffc.aa.node.ProjNode
Definition:
ProjNode.java:11
com.cliffc.aa.node.MProjNode.escapees
BitsAlias escapees()
Definition:
MProjNode.java:55
com.cliffc.aa.AA
an implementation of language AA
Definition:
AA.java:9
com.cliffc.aa.node.Node.val
Type val(int idx)
Definition:
Node.java:470
com.cliffc.aa
Definition:
AA.java:1
com.cliffc.aa.node.MProjNode.MProjNode
MProjNode(Node head)
Definition:
MProjNode.java:13
com.cliffc.aa.type.TypeTuple.at
Type at(int idx)
Definition:
TypeTuple.java:182
com.cliffc.aa.node.MProjNode.ideal_reduce
Node ideal_reduce()
Definition:
MProjNode.java:18
com.cliffc.aa.type.Type.oob
Type oob()
Definition:
Type.java:635
com.cliffc.aa.type.TypeTuple._ts
Type[] _ts
Definition:
TypeTuple.java:13
com.cliffc.aa.GVNGCM.add_flow
public< N extends Node > N add_flow(N n)
Definition:
GVNGCM.java:50
com.cliffc.aa.node.MProjNode.xstr
String xstr()
Definition:
MProjNode.java:15
com.cliffc.aa.node.MProjNode.is_mem
boolean is_mem()
Definition:
MProjNode.java:16
com
com.cliffc.aa.Env.DEFMEM
static DefMemNode DEFMEM
Definition:
Env.java:19
com.cliffc.aa.Env
Definition:
Env.java:12
com.cliffc.aa.type
Definition:
Bits.java:1
com.cliffc.aa.node.MProjNode.add_flow_use_extra
void add_flow_use_extra(Node chg)
Definition:
MProjNode.java:48
com.cliffc.aa.GVNGCM.Mode
Definition:
GVNGCM.java:14
src
main
java
com
cliffc
aa
node
MProjNode.java
Generated by
1.8.18