aa
DefMemNode.java
Go to the documentation of this file.
1 package com.cliffc.aa.node;
2 
3 import com.cliffc.aa.GVNGCM;
4 import com.cliffc.aa.type.*;
5 
6 import static com.cliffc.aa.Env.GVN;
7 
8 public class DefMemNode extends Node {
9  public DefMemNode( Node ctrl) { super(OP_DEFMEM,ctrl); }
10  @Override public TypeMem value(GVNGCM.Mode opt_mode) {
11  if( opt_mode._CG ) return TypeMem.ANYMEM;
12  if( _defs._len <= 1 ) return TypeMem.ALLMEM;
13  TypeObj[] tos = new TypeObj[_defs._len];
14  for( int i=1; i<_defs._len; i++ ) {
15  Node n = in(i);
16  if( n==null ) continue;
17  if( n instanceof MrgProjNode ) { // NewNode still alive
18  NewNode nnn = n.in(0) instanceof NewNode ? (NewNode) n.in(0) : null;
19  tos[i] = (nnn != null && nnn._val != Type.ANY && nnn._live != TypeMem.DEAD) ? nnn._crushed : TypeObj.UNUSED;
20  } else if( n instanceof ConTypeNode ) {
21  tos[i] = ((TypeMemPtr)n._val)._obj;
22  } else { // Collapsed NewNode
23  Type tn = n._val;
24  if( tn instanceof TypeMem ) tn = ((TypeMem)tn).at(i);
25  tos[i] = tn instanceof TypeObj ? (TypeObj)tn : tn.oob(TypeObj.ISUSED);
26  }
27  }
28  return TypeMem.make0(tos);
29  }
30  @Override public TypeMem all_live() { return TypeMem.ALLMEM; }
31  @Override public TypeMem live_use(GVNGCM.Mode opt_mode, Node def ) {
32  if( opt_mode._CG ) return TypeMem.DEAD; // Have a Call-Graph, do not need DefMem
33  if( def==in(0) ) return TypeMem.ALIVE; // Control
34  return _live;
35  }
36 
37  //@Override public TV2 new_tvar(String alloc_site) { return TV2.make("Mem",this,alloc_site); }
38  //
39  //@Override public boolean unify( boolean test ) {
40  // // Self should always should be a TMem
41  // TV2 tvar = tvar();
42  // assert tvar.isa("Mem");
43  // // Structural unification on all objects
44  // boolean progress=false;
45  // for( int i=1; i<_defs._len; i++ ) {
46  // Node n = in(i);
47  // if( n==null ) continue;
48  // TV2 tv = (n instanceof MrgProjNode && !tvar(i).is_dead() ? n.in(0) : n).tvar();
49  // progress |= tvar.unify_at(i,tv,test);
50  // if( progress && test ) return true;
51  // }
52  // return progress;
53  //}
54 
55 
56  @Override public boolean equals(Object o) { return this==o; } // Only one
57 
58  // Make an MProj for a New, and 'hook' it into the default memory
60  MrgProjNode mrg = (MrgProjNode)GVN.xform(new MrgProjNode(nn,mem));
61  return make_mem(nn._alias,mrg);
62  }
63  public <N extends Node> N make_mem(int alias, N obj) {
64  TypeObj[] tos0 = TypeMem.MEM.alias2objs();
65  while( _defs._len < tos0.length )
66  add_def(Node.con(TypeMem.MEM.at(_defs._len)));
67  while( _defs._len <= alias ) this.add_def(null);
68  set_def(alias,obj);
69  // Lift default immediately; default mem used by the Parser to load-thru displays.
70  do_flow();
71  return obj;
72  }
73 }
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.node.Node._live
TypeMem _live
Definition: Node.java:89
com.cliffc
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.node.DefMemNode.make_mem
public< N extends Node > N make_mem(int alias, N obj)
Definition: DefMemNode.java:63
com.cliffc.aa.node.Node.do_flow
Node do_flow()
Definition: Node.java:592
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.node.DefMemNode.DefMemNode
DefMemNode(Node ctrl)
Definition: DefMemNode.java:9
com.cliffc.aa.node.DefMemNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: DefMemNode.java:31
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.type.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.node.Node.add_def
Node add_def(Node n)
Definition: Node.java:152
com.cliffc.aa.type.TypeMem.ANYMEM
static final TypeMem ANYMEM
Definition: TypeMem.java:228
com.cliffc.aa.type.TypeMem.make0
static TypeMem make0(TypeObj[] as)
Definition: TypeMem.java:170
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition: Env.java:13
com.cliffc.aa.type.TypeObj
Definition: TypeObj.java:15
com.cliffc.aa.node.DefMemNode.value
TypeMem value(GVNGCM.Mode opt_mode)
Definition: DefMemNode.java:10
com.cliffc.aa.node.Node.OP_DEFMEM
static final byte OP_DEFMEM
Definition: Node.java:23
com.cliffc.aa.node.DefMemNode.equals
boolean equals(Object o)
Definition: DefMemNode.java:56
com.cliffc.aa.node.DefMemNode.make_mem_proj
MrgProjNode make_mem_proj(NewNode nn, Node mem)
Definition: DefMemNode.java:59
com.cliffc.aa.type.TypeObj.UNUSED
static final TypeObj UNUSED
Definition: TypeObj.java:46
com.cliffc.aa.type.TypeObj.ISUSED
static final TypeObj ISUSED
Definition: TypeObj.java:45
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
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.DefMemNode
Definition: DefMemNode.java:8
com.cliffc.aa.type.TypeMem.alias2objs
TypeObj[] alias2objs()
Definition: TypeMem.java:148
com.cliffc.aa.node.Node.con
static Node con(Type t)
Definition: Node.java:670
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.ConTypeNode
Definition: ConTypeNode.java:18
com.cliffc.aa.node.NewNode
Definition: NewNode.java:17
com.cliffc.aa.node.MrgProjNode
Definition: MrgProjNode.java:10
com.cliffc.aa.node.NewNode._crushed
TypeObj _crushed
Definition: NewNode.java:31
com.cliffc.aa.node.Node.set_def
Node set_def(int idx, Node n)
Definition: Node.java:154
com.cliffc.aa.type.Type.oob
Type oob()
Definition: Type.java:635
com.cliffc.aa.node.NewNode._alias
int _alias
Definition: NewNode.java:20
com
com.cliffc.aa.type.TypeMem.MEM
static final TypeMem MEM
Definition: TypeMem.java:224
com.cliffc.aa.type.TypeMem.at
TypeObj at(int alias)
Definition: TypeMem.java:135
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition: Node.java:124
com.cliffc.aa.type.TypeMemPtr
Definition: TypeMemPtr.java:14
com.cliffc.aa.node.DefMemNode.all_live
TypeMem all_live()
Definition: DefMemNode.java:30
com.cliffc.aa.GVNGCM.Mode
Definition: GVNGCM.java:14