aa
com.cliffc.aa.node.StoreNode Class Reference
Inheritance diagram for com.cliffc.aa.node.StoreNode:
[legend]
Collaboration diagram for com.cliffc.aa.node.StoreNode:
[legend]

Public Member Functions

 StoreNode (Node mem, Node adr, Node val, Access fin, String fld, Parse bad)
 
Node add_def (Node n)
 
void add_flow_def_extra (Node chg)
 
void add_flow_extra (Type old)
 
void add_flow_use_extra (Node chg)
 
void add_reduce_extra ()
 
TypeMem all_live ()
 
Node copy (boolean copy_edges)
 
void del (int idx)
 
Node do_flow ()
 
Node do_grow ()
 
Node do_mono ()
 
Node do_reduce ()
 
String dump (int max)
 
String dump (int max, boolean prims, boolean plive)
 
String dumprpo (boolean prims, boolean plive)
 
boolean equals (Object o)
 
ErrMsg err (boolean fast)
 
Node find (int uid)
 
int find (TypeStruct ts)
 
Node get_mem_writer ()
 
int hashCode ()
 
Node ideal_grow ()
 
Node ideal_mono ()
 
Node ideal_reduce ()
 
Node in (int i)
 
Node init1 ()
 
Node insert (int idx, Node n)
 
void insert (Node nnn)
 
Node is_copy (int idx)
 
boolean is_dead ()
 
boolean is_forward_ref ()
 
boolean is_mem ()
 
boolean is_multi_head ()
 
boolean is_prim ()
 
Node kill ()
 
int len ()
 
TypeMem live (GVNGCM.Mode opt_mode)
 
TypeMem live_use (GVNGCM.Mode opt_mode, Node def)
 
boolean live_uses ()
 
final int more_flow (boolean lifting)
 
final boolean more_ideal (VBitSet bs)
 
TV2 new_tvar (String alloc_site)
 
byte op_prec ()
 
Node pop ()
 
Node remove (int idx)
 
void replace (Node old, Node nnn)
 
void set_dead ()
 
Node set_def (int idx, Node n)
 
Type sharptr (Node mem)
 
boolean should_con (Type t)
 
Node subsume (Node nnn)
 
String toString ()
 
TV2 tvar ()
 
TV2 tvar (int x)
 
void unelock ()
 
boolean unify (boolean test)
 
Type val (int idx)
 
Type value (GVNGCM.Mode opt_mode)
 
final void walk_initype (GVNGCM gvn, VBitSet bs)
 
void walk_opt (VBitSet visit)
 
void walkerr_def (HashSet< ErrMsg > errs, VBitSet bs)
 
Node xliv (GVNGCM.Mode opt_mode)
 
String xstr ()
 
Type xval ()
 

Static Public Member Functions

static Node con (Type t)
 
static void init0 ()
 
static void reset_to_init0 ()
 
static void roll_back_CNT ()
 
static boolean unify (Node n, Node rez, String fld, boolean test, String alloc_site)
 

Public Attributes

Ary< Node_defs
 
boolean _elock
 
byte _keep
 
TypeMem _live
 
int _uid
 
Ary< Node_uses
 
Type _val
 

Static Public Attributes

static int _INIT0_CNT
 
static final ConcurrentHashMap< Node, NodeVALS = new ConcurrentHashMap<>()
 

Package Functions

Node _elock ()
 
Node adr ()
 
boolean check_solo_mem_writer (Node memw)
 
BitsAlias escapees ()
 
boolean is_CFG ()
 
Node is_pure_call ()
 
public< N extends Node > N keep ()
 
public< N extends Node > N keep (int d)
 
Node mem ()
 
int newuid ()
 
Node rez ()
 
String str ()
 
public< N extends Node > N unhook ()
 
public< N extends Node > N unkeep ()
 
public< N extends Node > N unkeep (int d)
 
Node walk_dom_last (Predicate< Node > P)
 

Static Package Functions

 [static initializer]
 

Package Attributes

final String _fld
 
final byte _op
 
TV2 _tvar
 

Static Package Attributes

static final byte OP_CALL = 1
 
static final byte OP_CALLEPI = 2
 
static final byte OP_CAST = 3
 
static final byte OP_CON = 4
 
static final byte OP_CONTYPE = 5
 
static final byte OP_CPROJ = 6
 
static final byte OP_DEFMEM = 7
 
static final byte OP_ERR = 8
 
static final byte OP_FP2DISP =10
 
static final byte OP_FRESH = 9
 
static final byte OP_FUN =11
 
static final byte OP_FUNPTR =12
 
static final byte OP_IF =13
 
static final byte OP_JOIN =14
 
static final byte OP_LOAD =15
 
static final byte OP_LOOP =16
 
static final byte OP_MAX =36
 
static final byte OP_NAME =17
 
static final byte OP_NEWARY =19
 
static final byte OP_NEWOBJ =18
 
static final byte OP_NEWSTR =20
 
static final byte OP_PARM =21
 
static final byte OP_PHI =22
 
static final byte OP_PRIM =23
 
static final byte OP_PROJ =24
 
static final byte OP_REGION =25
 
static final byte OP_RET =26
 
static final byte OP_SCOPE =27
 
static final byte OP_SPLIT =28
 
static final byte OP_START =29
 
static final byte OP_STMEM =30
 
static final byte OP_STORE =31
 
static final byte OP_THRET =32
 
static final byte OP_THUNK =33
 
static final byte OP_TYPE =34
 
static final byte OP_UNR =35
 

Private Member Functions

 StoreNode (StoreNode st, Node mem, Node adr)
 
Node _do_reduce ()
 
void adderr (HashSet< ErrMsg > errs)
 
ErrMsg bad (String msg, boolean fast, TypeObj to)
 
boolean check_vals ()
 
SB dump (int d, SB sb, boolean plive)
 
SB dump (int d, SB sb, int max, VBitSet bs, boolean prims, boolean plive)
 
void dump (int d, SB sb, VBitSet bs, boolean plive)
 
boolean is_multi_tail ()
 
Node merge (Node x)
 
int more_flow (boolean lifting, int errs)
 
void postorder (Ary< Node > nodes, VBitSet bs)
 
Node unuse (Node old)
 

Static Private Member Functions

static void _header (FunNode fun, SB sb)
 

Private Attributes

final Parse _bad
 
final Access _fin
 

Static Private Attributes

static int CNT =1
 
static final VBitSet FLOW_VISIT = new VBitSet()
 
static final VBitSet LIVE = new VBitSet()
 
static final String[] STRS = new String[] { null, "Call", "CallEpi", "Cast", "Con", "ConType", "CProj", "DefMem", "Err", "Fresh", "FP2Disp", "Fun", "FunPtr", "If", "Join", "Load", "Loop", "Name", "NewObj", "NewAry", "NewStr", "Parm", "Phi", "Prim", "Proj", "Region", "Return", "Scope","Split", "Start", "StartMem", "Store", "Thret", "Thunk", "Type", "Unresolved" }
 

Detailed Description

Definition at line 14 of file StoreNode.java.

Constructor & Destructor Documentation

◆ StoreNode() [1/2]

com.cliffc.aa.node.StoreNode.StoreNode ( Node  mem,
Node  adr,
Node  val,
Access  fin,
String  fld,
Parse  bad 
)

Definition at line 18 of file StoreNode.java.

18  {
19  super(OP_STORE,null,mem,adr,val);
20  _fld = fld;
21  _fin = fin;
22  _bad = bad; // Tests can pass a null, but nobody else does
23  }

References com.cliffc.aa.node.StoreNode._bad, com.cliffc.aa.node.StoreNode._fin, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.node.StoreNode.bad(), com.cliffc.aa.node.StoreNode.mem(), com.cliffc.aa.node.Node.OP_STORE, and com.cliffc.aa.node.Node.val().

Referenced by com.cliffc.aa.node.StoreNode.equals(), and com.cliffc.aa.node.StoreNode.ideal_reduce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ StoreNode() [2/2]

com.cliffc.aa.node.StoreNode.StoreNode ( StoreNode  st,
Node  mem,
Node  adr 
)
private

Definition at line 24 of file StoreNode.java.

24 { this(mem,adr,st.rez(),st._fin,st._fld,st._bad); }

References com.cliffc.aa.node.StoreNode._bad, com.cliffc.aa.node.StoreNode._fin, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.node.StoreNode.mem(), and com.cliffc.aa.node.StoreNode.rez().

Here is the call graph for this function:

Member Function Documentation

◆ [static initializer]()

com.cliffc.aa.node.Node.[static initializer]
staticpackageinherited

◆ _do_reduce()

Node com.cliffc.aa.node.Node._do_reduce ( )
privateinherited

Definition at line 570 of file Node.java.

570  {
571  // Replace with a constant, if possible
572  if( should_con(_val) )
573  return con(_val);
574 
575  // Try CSE
576  if( !_elock ) { // Not in VALS
577  Node x = VALS.get(this); // Try VALS
578  if( x != null ) // Hit
579  return merge(x); // Graph replace with x
580  }
581 
582  // Try general ideal call
583  Node x = ideal_reduce(); // Try the general reduction
584  if( x != null )
585  return merge(x); // Graph replace with x
586 
587  return null; // No change
588  }

References com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.con(), com.cliffc.aa.node.Node.ideal_reduce(), com.cliffc.aa.node.Node.merge(), com.cliffc.aa.node.Node.should_con(), and com.cliffc.aa.node.Node.VALS.

Referenced by com.cliffc.aa.node.Node.do_reduce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _elock()

Node com.cliffc.aa.node.Node._elock ( )
packageinherited

Definition at line 137 of file Node.java.

137  { // No assert version, used for new nodes
138  assert check_vals(); // elock & VALs match
139  if( !_elock && VALS.get(this)==null ) { _elock = true; VALS.put(this,this); }
140  return this;
141  }

References com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node.check_vals(), and com.cliffc.aa.node.Node.VALS.

Here is the call graph for this function:

◆ _header()

static void com.cliffc.aa.node.Node._header ( FunNode  fun,
SB  sb 
)
staticprivateinherited

Definition at line 380 of file Node.java.

380  {
381  sb.p("============ ").p(fun==null?"null":fun.name()).p(" ============").nl();
382  }

References com.cliffc.aa.node.FunNode.name(), com.cliffc.aa.util.SB.nl(), and com.cliffc.aa.util.SB.p().

Referenced by com.cliffc.aa.node.Node.dumprpo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_def()

Node com.cliffc.aa.node.Node.add_def ( Node  n)
inherited

Definition at line 152 of file Node.java.

152 { unelock(); _defs.add(n); if( n!=null ) n._uses.add(this); return this; }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uses, and com.cliffc.aa.node.Node.unelock().

Referenced by com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.node.UnresolvedNode.add_def_unresolved(), com.cliffc.aa.node.NewObjNode.add_fun(), com.cliffc.aa.node.MemPrimNode.ReadPrimNode.as_fun(), com.cliffc.aa.node.MemPrimNode.WritePrimNode.as_fun(), com.cliffc.aa.node.PrimNode.as_fun(), com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< TypeAry >.as_fun(), com.cliffc.aa.node.TestNodeSmall.check(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.IntrinsicNode.convertTypeName(), com.cliffc.aa.node.IntrinsicNode.convertTypeNameStruct(), com.cliffc.aa.node.Node.copy(), com.cliffc.aa.node.ConTypeNode.def_fref(), com.cliffc.aa.Parse.do_exit(), com.cliffc.aa.Parse.func(), com.cliffc.aa.node.FunNode.FunNode(), com.cliffc.aa.node.AssertNode.ideal_grow(), com.cliffc.aa.node.LoadNode.ideal_grow(), com.cliffc.aa.node.UnresolvedNode.ideal_reduce(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.DefMemNode.make_mem(), com.cliffc.aa.Parse.merge_exits(), com.cliffc.aa.node.ScopeNode.ScopeNode(), com.cliffc.aa.node.CallEpiNode.set_is_copy(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.RegionNode.stacked_region(), com.cliffc.aa.node.RetNode.tail_recursive(), com.cliffc.aa.node.TestNode.test1monotonic_prim(), com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay(), com.cliffc.aa.node.CallEpiNode.wire0(), and com.cliffc.aa.node.CallEpiNode.wire1().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_flow_def_extra()

void com.cliffc.aa.node.Node.add_flow_def_extra ( Node  chg)
inherited

Reimplemented in com.cliffc.aa.node.CallNode, com.cliffc.aa.node.NewNode< T extends TypeObj< T >, com.cliffc.aa.node.RegionNode, com.cliffc.aa.node.MrgProjNode, and com.cliffc.aa.node.MemJoinNode.

Definition at line 515 of file Node.java.

515 { }

Referenced by com.cliffc.aa.node.ScopeNode.set_mem(), and com.cliffc.aa.node.Node.unuse().

Here is the caller graph for this function:

◆ add_flow_extra()

void com.cliffc.aa.node.StoreNode.add_flow_extra ( Type  old)

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 100 of file StoreNode.java.

100  {
101  Env.GVN.add_reduce(this); // Args can be more-alive
102  }

References com.cliffc.aa.GVNGCM.add_reduce(), and com.cliffc.aa.Env.GVN.

Here is the call graph for this function:

◆ add_flow_use_extra()

void com.cliffc.aa.node.Node.add_flow_use_extra ( Node  chg)
inherited

Reimplemented in com.cliffc.aa.node.CallNode, com.cliffc.aa.node.CallEpiNode, com.cliffc.aa.node.LoadNode, com.cliffc.aa.node.RegionNode, com.cliffc.aa.node.FunPtrNode, com.cliffc.aa.node.AssertNode, com.cliffc.aa.node.ParmNode, com.cliffc.aa.node.MProjNode, and com.cliffc.aa.node.CProjNode.

Definition at line 514 of file Node.java.

514 { }

Referenced by com.cliffc.aa.node.Node.do_reduce().

Here is the caller graph for this function:

◆ add_reduce_extra()

void com.cliffc.aa.node.StoreNode.add_reduce_extra ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 105 of file StoreNode.java.

105  {
106  for( Node use : _uses )
107  if( use instanceof LoadNode )
109  }

References com.cliffc.aa.node.Node._uses, com.cliffc.aa.GVNGCM.add_mono(), com.cliffc.aa.GVNGCM.add_reduce(), and com.cliffc.aa.Env.GVN.

Referenced by com.cliffc.aa.node.StoreNode.ideal_reduce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adderr()

void com.cliffc.aa.node.Node.adderr ( HashSet< ErrMsg errs)
privateinherited

Definition at line 789 of file Node.java.

789  {
790  ErrMsg msg = err(false);
791  if( msg==null ) return;
792  msg._order = errs.size();
793  errs.add(msg);
794  }

References com.cliffc.aa.node.Node.ErrMsg._order, and com.cliffc.aa.node.Node.err().

Referenced by com.cliffc.aa.node.Node.walkerr_def().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adr()

Node com.cliffc.aa.node.StoreNode.adr ( )
package

Definition at line 31 of file StoreNode.java.

31 { return in(2); }

References com.cliffc.aa.node.Node.in().

Referenced by com.cliffc.aa.node.StoreNode.bad(), com.cliffc.aa.node.StoreNode.err(), com.cliffc.aa.node.StoreNode.escapees(), com.cliffc.aa.node.LoadNode.find_previous_store(), com.cliffc.aa.node.StoreNode.ideal_grow(), com.cliffc.aa.node.LoadNode.ideal_mono(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.live_use(), com.cliffc.aa.node.StoreNode.StoreNode(), and com.cliffc.aa.node.StoreNode.value().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ all_live()

TypeMem com.cliffc.aa.node.StoreNode.all_live ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 131 of file StoreNode.java.

131 { return TypeMem.ALLMEM; }

References com.cliffc.aa.type.TypeMem.ALLMEM.

◆ bad()

ErrMsg com.cliffc.aa.node.StoreNode.bad ( String  msg,
boolean  fast,
TypeObj  to 
)
private

Definition at line 163 of file StoreNode.java.

163  {
164  if( fast ) return ErrMsg.FAST;
165  boolean is_closure = adr() instanceof ProjNode && adr().in(0) instanceof NewObjNode && ((NewObjNode)adr().in(0))._is_closure;
166  return ErrMsg.field(_bad,msg,_fld,is_closure,to);
167  }

References com.cliffc.aa.node.StoreNode._bad, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.node.Node.ErrMsg.FAST, com.cliffc.aa.node.Node.ErrMsg.field(), and com.cliffc.aa.node.Node.in().

Referenced by com.cliffc.aa.node.StoreNode.err(), and com.cliffc.aa.node.StoreNode.StoreNode().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_solo_mem_writer()

boolean com.cliffc.aa.node.Node.check_solo_mem_writer ( Node  memw)
packageinherited

Definition at line 845 of file Node.java.

845  {
846  if( is_prim() ) return true; // Several top-level memory primitives, including top scope & defmem blow this
847  boolean found=false;
848  for( Node use : _uses )
849  if( use == memw ) found=true; // Only memw mem-writer follows
850  else if( use.is_mem() ) return false; // Found a 2nd mem-writer
851  return found;
852  }

References com.cliffc.aa.node.Node._uses, and com.cliffc.aa.node.Node.is_prim().

Referenced by com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemSplitNode.check_split(), com.cliffc.aa.node.StoreNode.ideal_grow(), and com.cliffc.aa.node.MemJoinNode.ideal_mono().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_vals()

boolean com.cliffc.aa.node.Node.check_vals ( )
privateinherited

Definition at line 143 of file Node.java.

143  {
144  Node x = VALS.get(this), old=null;
145  if( x == this ) old=this; // Found in table quickly
146  // Hunt the hard way
147  else for( Node o : VALS.keySet() ) if( o._uid == _uid ) { old=o; break; }
148  return (old!=null) == _elock;
149  }

References com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._uid, and com.cliffc.aa.node.Node.VALS.

Referenced by com.cliffc.aa.node.Node._elock(), com.cliffc.aa.node.Node.do_reduce(), and com.cliffc.aa.node.Node.unelock().

Here is the caller graph for this function:

◆ con()

static Node com.cliffc.aa.node.Node.con ( Type  t)
staticinherited

Definition at line 670 of file Node.java.

670  {
671  assert t==t.simple_ptr();
672  Node con;
673  if( t instanceof TypeFunPtr && ((TypeFunPtr)t)._fidxs.abit()!=-1 )
674  con = new FunPtrNode(FunNode.find_fidx(((TypeFunPtr)t).fidx()).ret(),Env.ANY);
675  else
676  con = new ConNode<>(t);
677  Node con2 = VALS.get(con);
678  if( con2 != null ) { // Found a prior constant
679  con.kill(); // Kill the just-made one
680  con = con2;
681  con._live = TypeMem.LIVE_BOT; // Adding more liveness
682  } else { // New constant
683  con._val = t; // Typed
684  con._elock(); // Put in VALS, since if Con appears once, probably appears again in the same XFORM call
685  }
686  Env.GVN.add_flow(con); // Updated live flows
687  return con;
688  }

References com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._live, com.cliffc.aa.node.Node._val, com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.Env.ANY, com.cliffc.aa.node.FunNode.find_fidx(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.kill(), com.cliffc.aa.type.TypeMem.LIVE_BOT, com.cliffc.aa.node.FunNode.ret(), com.cliffc.aa.type.Type< T extends Type< T >.simple_ptr(), and com.cliffc.aa.node.Node.VALS.

Referenced by com.cliffc.aa.node.Node._do_reduce(), com.cliffc.aa.node.MemPrimNode.ReadPrimNode.as_fun(), com.cliffc.aa.node.MemPrimNode.WritePrimNode.as_fun(), com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< TypeAry >.as_fun(), com.cliffc.aa.Parse.con(), com.cliffc.aa.node.IntrinsicNode.convertTypeName(), com.cliffc.aa.node.IntrinsicNode.convertTypeNameStruct(), com.cliffc.aa.node.CallNode.copy(), com.cliffc.aa.node.ConNode< T extends Type >.equals(), com.cliffc.aa.node.FunPtrNode.forward_ref(), com.cliffc.aa.node.AssertNode.ideal_grow(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.Env.init(), com.cliffc.aa.node.NewNode< TypeStruct >.kill2(), com.cliffc.aa.node.DefMemNode.make_mem(), com.cliffc.aa.node.NewObjNode.promote_forward(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.TestNode.testMonotonic(), com.cliffc.aa.TestLive.testNewObj(), com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay(), com.cliffc.aa.Env.top_scope(), and com.cliffc.aa.node.Node.walk_opt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ copy()

Node com.cliffc.aa.node.Node.copy ( boolean  copy_edges)
inherited

Reimplemented in com.cliffc.aa.node.FunNode, com.cliffc.aa.node.MemSplitNode, com.cliffc.aa.node.CallNode, com.cliffc.aa.node.NewNode< T extends TypeObj< T >, and com.cliffc.aa.node.CastNode.

Definition at line 264 of file Node.java.

264  {
265  try {
266  Node n = (Node)clone();
267  n._uid = newuid(); // A new UID
268  n._defs = new Ary<>(new Node[1],0); // New empty defs
269  n._uses = new Ary<>(new Node[1],0); // New empty uses
270  n._tvar = n.new_tvar("copy_constructor");
271  n._keep = 0; // Not keeping, even if cloning a mid-keeper operation
272  n._elock=false; // Not in GVN
273  if( copy_edges )
274  for( Node def : _defs )
275  n.add_def(def);
276  Env.GVN.add_work_all(n);
277  return n;
278  } catch( CloneNotSupportedException cns ) { throw new RuntimeException(cns); }
279  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._tvar, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.add_def(), com.cliffc.aa.GVNGCM.add_work_all(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.new_tvar(), com.cliffc.aa.node.Node.newuid(), and com.cliffc.aa.node.Node.Node().

Referenced by com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.FunNode.split_callers(), and com.cliffc.aa.node.TestNode.test1monotonic_prim().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ del()

void com.cliffc.aa.node.Node.del ( int  idx)
inherited

Definition at line 169 of file Node.java.

169  {
170  unelock();
171  Node n = _defs.del(idx);
172  if( n != null ) n._uses.del(this);
173  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uses, and com.cliffc.aa.node.Node.unelock().

Referenced by com.cliffc.aa.node.FunNode.split_callers(), and com.cliffc.aa.node.CallEpiNode.unwire().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_flow()

Node com.cliffc.aa.node.Node.do_flow ( )
inherited

Definition at line 592 of file Node.java.

592  {
593  Node progress=null;
594  // Compute live bits. If progress, push the defs on the flow worklist.
595  // This is a reverse flow computation. Always assumed live if keep.
596  if( _keep==0 ) {
597  TypeMem oliv = _live;
598  TypeMem nliv = live(Env.GVN._opt_mode);
599  if( oliv != nliv ) { // Progress?
600  progress = this; // Progress!
601  assert nliv.isa(oliv); // Monotonically improving
602  _live = nliv; // Record progress
603  for( Node def : _defs ) // Put defs on worklist... liveness flows uphill
604  if( def != null ) Env.GVN.add_flow(def).add_flow_def_extra(this);
605  add_flow_extra(oliv);
606  }
607  }
608 
609  // Compute best value. If progress, push uses on the flow worklist.
610  // This is a forward flow computation.
611  Type oval = _val; // Get old type
612  Type nval = value(Env.GVN._opt_mode);// Get best type
613  if( nval!=oval ) {
614  progress = this; // Progress!
615  assert nval.isa(oval); // Monotonically improving
616  _val = nval;
617  // If becoming a constant, check for replacing with a ConNode
618  if( !oval.may_be_con() && nval.may_be_con() ) {
619  Env.GVN.add_reduce(this);
620  Env.GVN.add_flow_defs(this); // Since a constant, inputs are no longer live
621  }
622  // Put uses on worklist... values flows downhill
623  for( Node use : _uses )
624  Env.GVN.add_flow(use).add_flow_use_extra(this);
625  // Progressing on CFG can mean CFG paths go dead
626  if( is_CFG() ) for( Node use : _uses ) if( use.is_CFG() ) Env.GVN.add_reduce(use);
627  add_flow_extra(oval);
628  }
629  return progress;
630  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._live, com.cliffc.aa.GVNGCM._opt_mode, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.GVNGCM.add_flow_defs(), com.cliffc.aa.node.Node.add_flow_extra(), com.cliffc.aa.GVNGCM.add_reduce(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.is_CFG(), com.cliffc.aa.type.Type< T extends Type< T >.isa(), com.cliffc.aa.node.Node.live(), com.cliffc.aa.type.Type< T extends Type< T >.may_be_con(), and com.cliffc.aa.node.Node.value().

Referenced by com.cliffc.aa.node.DefMemNode.make_mem(), and com.cliffc.aa.GVNGCM.xreduce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_grow()

Node com.cliffc.aa.node.Node.do_grow ( )
inherited

Definition at line 639 of file Node.java.

639  {
640  Node nnn = ideal_grow();
641  if( nnn==null || nnn==this || is_dead() ) return nnn;
642  assert _keep<=1;
643  if( _keep==1 ) { _keep--; nnn._keep++; Env.GVN.add_dead(this); } // Doing an arbitrary replacement
644  return Env.GVN.add_flow(Env.GVN.add_reduce(nnn));
645  }

References com.cliffc.aa.node.Node._keep, com.cliffc.aa.GVNGCM.add_dead(), com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.GVNGCM.add_reduce(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.ideal_grow(), and com.cliffc.aa.node.Node.is_dead().

Referenced by com.cliffc.aa.node.Node.more_ideal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_mono()

Node com.cliffc.aa.node.Node.do_mono ( )
inherited

Definition at line 632 of file Node.java.

632  {
633  Node x= ideal_mono();
634  if( x==null ) return null;
635  assert x==this;
637  }

References com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.GVNGCM.add_mono(), com.cliffc.aa.GVNGCM.add_reduce(), com.cliffc.aa.Env.GVN, and com.cliffc.aa.node.Node.ideal_mono().

Referenced by com.cliffc.aa.node.Node.more_ideal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_reduce()

Node com.cliffc.aa.node.Node.do_reduce ( )
inherited

Definition at line 545 of file Node.java.

545  {
546  assert check_vals();
547  Node nnn = _do_reduce();
548  if( nnn!=null ) { // Something happened
549  if( nnn!=this ) { // Replacement
550  assert _keep<=1; // Can only replace if zero or one
551  Env.GVN.add_flow_uses(this); // Visit users
553  if( _keep==1 ) { _keep--; nnn._keep++; } // Move keep bits over
554  subsume(nnn); // Replace
555  for( Node use : nnn._uses ) {
556  use.add_reduce_extra();
557  use.add_flow_use_extra(nnn);
558  }
559  }
560  Env.GVN.add_reduce(nnn); // Rerun the replacement
561  return nnn._elock(); // After putting in VALS
562  }
563  // No progress; put in VALS and return
564  _elock();
565  return null;
566  }

References com.cliffc.aa.node.Node._do_reduce(), com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.add_flow_use_extra(), com.cliffc.aa.GVNGCM.add_flow_uses(), com.cliffc.aa.GVNGCM.add_reduce(), com.cliffc.aa.node.Node.add_reduce_extra(), com.cliffc.aa.node.Node.check_vals(), com.cliffc.aa.Env.GVN, and com.cliffc.aa.node.Node.subsume().

Referenced by com.cliffc.aa.node.Node.more_ideal(), com.cliffc.aa.GVNGCM.Build< N extends Node >.xform(), and com.cliffc.aa.GVNGCM.xreduce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dump() [1/5]

SB com.cliffc.aa.node.Node.dump ( int  d,
SB  sb,
boolean  plive 
)
privateinherited

Definition at line 290 of file Node.java.

290  {
291  String xs = String.format("%s%4d: %-7.7s ",plive ? _live : "",_uid,xstr());
292  sb.i(d).p(xs);
293  if( is_dead() ) return sb.p("DEAD");
294  for( Node n : _defs ) sb.p(n == null ? "____ " : String.format("%4d ",n._uid));
295  sb.p(" [[");
296  for( Node n : _uses ) sb.p(String.format("%4d ",n._uid));
297  sb.p("]] ");
298  sb.p(str()).s();
299  if( _val==null ) sb.p("----");
300  else _val.str(sb,new VBitSet(),null,true);
301 
302  return sb;
303  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._live, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.util.SB.i(), com.cliffc.aa.node.Node.is_dead(), com.cliffc.aa.util.SB.p(), com.cliffc.aa.util.SB.s(), com.cliffc.aa.type.Type< T extends Type< T >.str(), com.cliffc.aa.node.Node.str(), and com.cliffc.aa.node.Node.xstr().

Here is the call graph for this function:

◆ dump() [2/5]

SB com.cliffc.aa.node.Node.dump ( int  d,
SB  sb,
int  max,
VBitSet  bs,
boolean  prims,
boolean  plive 
)
privateinherited

Definition at line 310 of file Node.java.

310  {
311  if( bs.tset(_uid) ) return sb;
312  if( d < max ) { // Limit at depth
313  // Print parser scopes first (deepest)
314  for( Node n : _defs ) if( n instanceof ScopeNode ) n.dump(d+1,sb,max,bs,prims,plive);
315  // Print constants early
316  for( Node n : _defs ) if( n instanceof ConNode ) n.dump(d+1,sb,max,bs,prims,plive);
317  // Do not recursively print root Scope, nor Unresolved of primitives.
318  // These are too common, and uninteresting.
319  for( Node n : _defs ) if( n != null && (!prims && n.is_prim() && n._defs._len > 3) ) bs.set(n._uid);
320  // Recursively print most of the rest, just not the multi-node combos and
321  // Unresolve & FunPtrs.
322  for( Node n : _defs )
323  if( n != null && !n.is_multi_head() && !n.is_multi_tail() &&
324  !(n instanceof UnresolvedNode) && !(n instanceof FunPtrNode) )
325  n.dump(d+1,sb,max,bs,prims,plive);
326  // Print Unresolved and FunPtrs, which typically catch whole functions.
327  for( Node n : _defs )
328  if( (n instanceof UnresolvedNode) || (n instanceof FunPtrNode) )
329  n.dump(d+1,sb,max,bs,prims,plive);
330  // Print anything not yet printed, including multi-node combos
331  for( Node n : _defs ) if( n != null && !n.is_multi_head() ) n.dump(d+1,sb,max,bs,prims,plive);
332  for( Node n : _defs ) if( n != null ) n.dump(d+1,sb,max,bs,prims,plive);
333  }
334  // Print multi-node combos all-at-once, including all tails even if they
335  // exceed the depth limit by 1.
336  Node x = is_multi_tail() ? in(0) : this;
337  if( x != null && x.is_multi_head() ) {
338  int dx = d+(x==this?0:1);
339  // Print all tails paths, all at once - nothing recursively below the tail
340  for( Node n : x._uses )
341  if( n.is_multi_tail() )
342  for( Node m : n._defs )
343  if( dx<max) m.dump(dx+1,sb,max,bs,prims,plive);
344  if( x==this ) bs.clear(_uid); // Reset for self, so prints right now
345  x.dump(dx,sb,bs,plive); // Conditionally print head of combo
346  // Print all combo tails, if not already printed
347  if( x!=this ) bs.clear(_uid); // Reset for self, so prints in the mix below
348  for( Node n : x._uses ) if( n.is_multi_tail() ) n.dump(dx-1,sb,bs,plive);
349  return sb;
350  } else { // Neither combo head nor tail, just print
351  return dump(d,sb,plive).nl();
352  }
353  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.in(), com.cliffc.aa.node.Node.is_multi_head(), com.cliffc.aa.node.Node.is_multi_tail(), and com.cliffc.aa.util.VBitSet.tset().

Here is the call graph for this function:

◆ dump() [3/5]

void com.cliffc.aa.node.Node.dump ( int  d,
SB  sb,
VBitSet  bs,
boolean  plive 
)
privateinherited

Definition at line 305 of file Node.java.

305  {
306  if( bs.tset(_uid) ) return;
307  dump(d,sb,plive).nl();
308  }

References com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node.dump(), and com.cliffc.aa.util.VBitSet.tset().

Here is the call graph for this function:

◆ dump() [4/5]

String com.cliffc.aa.node.Node.dump ( int  max)
inherited

Definition at line 286 of file Node.java.

286 { return dump(max,is_prim(),false); }

References com.cliffc.aa.node.Node.dump(), and com.cliffc.aa.node.Node.is_prim().

Referenced by com.cliffc.aa.Parse.dump(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.dumprpo(), com.cliffc.aa.node.Node.more_flow(), and com.cliffc.aa.node.Node.toString().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dump() [5/5]

String com.cliffc.aa.node.Node.dump ( int  max,
boolean  prims,
boolean  plive 
)
inherited

Definition at line 288 of file Node.java.

288 { return dump(0, new SB(),max,new VBitSet(),prims,plive).toString(); }

References com.cliffc.aa.node.Node.dump().

Referenced by com.cliffc.aa.node.Node.dump().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dumprpo()

String com.cliffc.aa.node.Node.dumprpo ( boolean  prims,
boolean  plive 
)
inherited

Definition at line 358 of file Node.java.

358  {
359  Ary<Node> nodes = new Ary<>(new Node[1],0);
360  postorder(nodes,new VBitSet());
361  // Dump in reverse post order
362  SB sb = new SB();
363  Node prior = null;
364  for( int i=nodes._len-1; i>=0; i-- ) {
365  Node n = nodes.at(i);
366  if( !(n._uid <= Env.ALL_CTRL._uid || !n.is_prim() || prims) )
367  continue; // Visited, but do not print
368  // Add a nl after the last of a multi-tail sequence.
369  if( (prior != null && prior.is_multi_tail() && !n.is_multi_tail()) ||
370  // Add a nl before the start of a multi-head sequence.
371  n.is_multi_head() )
372  sb.nl();
373  if( n._op==OP_FUN ) _header((FunNode)n,sb);
374  n.dump(0,sb,plive).nl();
375  if( n._op==OP_RET && n.in(4) instanceof FunNode ) _header((FunNode)n.in(4),sb);
376  prior = n;
377  }
378  return sb.toString();
379  }

References com.cliffc.aa.node.Node._header(), com.cliffc.aa.util.Ary< E >._len, com.cliffc.aa.node.Node._op, com.cliffc.aa.node.Node._uid, com.cliffc.aa.Env.ALL_CTRL, com.cliffc.aa.util.Ary< E >.at(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.in(), com.cliffc.aa.node.Node.is_multi_head(), com.cliffc.aa.node.Node.is_multi_tail(), com.cliffc.aa.node.Node.is_prim(), com.cliffc.aa.util.SB.nl(), com.cliffc.aa.node.Node.OP_FUN, com.cliffc.aa.node.Node.OP_RET, com.cliffc.aa.node.Node.postorder(), and com.cliffc.aa.util.SB.toString().

Referenced by com.cliffc.aa.Parse.dumprpo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ equals()

boolean com.cliffc.aa.node.StoreNode.equals ( Object  o)

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 172 of file StoreNode.java.

172  {
173  if( this==o ) return true;
174  if( !(o instanceof StoreNode) || !super.equals(o) ) return false;
175  StoreNode st = (StoreNode)o;
176  return _fin==st._fin && Util.eq(_fld,st._fld);
177  }

References com.cliffc.aa.node.StoreNode._fin, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.util.Util.eq(), and com.cliffc.aa.node.StoreNode.StoreNode().

Here is the call graph for this function:

◆ err()

ErrMsg com.cliffc.aa.node.StoreNode.err ( boolean  fast)

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 142 of file StoreNode.java.

142  {
143  Type tadr = adr()._val;
144  if( tadr.must_nil() ) return fast ? ErrMsg.FAST : ErrMsg.niladr(_bad,"Struct might be nil when writing",_fld);
145  if( !(tadr instanceof TypeMemPtr) )
146  return bad("Unknown",fast,null); // Not a pointer nor memory, cannot store a field
147  TypeMemPtr ptr = (TypeMemPtr)tadr;
148  Type tmem = mem()._val;
149  if( tmem==Type.ALL ) return bad("Unknown",fast,null);
150  if( tmem==Type.ANY ) return null; // No error
151  TypeObj objs = tmem instanceof TypeMem
152  ? ((TypeMem)tmem).ld(ptr) // General load from memory
153  : ((TypeObj)tmem);
154  if( !(objs instanceof TypeStruct) ) return bad("No such",fast,objs);
155  TypeStruct ts = (TypeStruct)objs;
156  int idx = ts.fld_find(_fld);
157  if( idx==-1 ) return bad("No such",fast,objs);
158  Access access = ts.fld(idx)._access;
159  if( access!=Access.RW )
160  return bad("Cannot re-assign "+access,fast,ts);
161  return null;
162  }

References com.cliffc.aa.type.TypeFld._access, com.cliffc.aa.node.StoreNode._bad, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.type.Type< T extends Type< T >.ALL, com.cliffc.aa.type.Type< T extends Type< T >.ANY, com.cliffc.aa.node.StoreNode.bad(), com.cliffc.aa.node.Node.ErrMsg.FAST, com.cliffc.aa.type.TypeStruct.fld(), com.cliffc.aa.type.TypeStruct.fld_find(), com.cliffc.aa.type.TypeMem.ld(), com.cliffc.aa.node.StoreNode.mem(), com.cliffc.aa.type.Type< T extends Type< T >.must_nil(), com.cliffc.aa.node.Node.ErrMsg.niladr(), and com.cliffc.aa.type.TypeFld.Access.RW.

Referenced by com.cliffc.aa.node.LoadNode.find_previous_store().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ escapees()

BitsAlias com.cliffc.aa.node.StoreNode.escapees ( )
package

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 125 of file StoreNode.java.

125  {
126  Type adr = adr()._val;
127  if( !(adr instanceof TypeMemPtr) ) return adr.above_center() ? BitsAlias.EMPTY : BitsAlias.FULL;
128  return ((TypeMemPtr)adr)._aliases;
129  }

References com.cliffc.aa.node.Node._val, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.type.BitsAlias.EMPTY, and com.cliffc.aa.type.BitsAlias.FULL.

Referenced by com.cliffc.aa.node.StoreNode.ideal_grow().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ find() [1/2]

Node com.cliffc.aa.node.Node.find ( int  uid)
inherited

Definition at line 427 of file Node.java.

427 { return find(uid,new VBitSet()); }

References com.cliffc.aa.node.Node.find().

Referenced by com.cliffc.aa.node.FunNode.bad_mem_use(), and com.cliffc.aa.node.Node.find().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ find() [2/2]

int com.cliffc.aa.node.StoreNode.find ( TypeStruct  ts)

Definition at line 33 of file StoreNode.java.

33 { return ts.fld_find(_fld); }

References com.cliffc.aa.node.StoreNode._fld, and com.cliffc.aa.type.TypeStruct.fld_find().

Here is the call graph for this function:

◆ get_mem_writer()

Node com.cliffc.aa.node.Node.get_mem_writer ( )
inherited

Definition at line 840 of file Node.java.

840  {
841  for( Node use : _uses ) if( use.is_mem() ) return use;
842  return null;
843  }

References com.cliffc.aa.node.Node._uses.

Referenced by com.cliffc.aa.node.StoreNode.ideal_reduce().

Here is the caller graph for this function:

◆ hashCode()

int com.cliffc.aa.node.StoreNode.hashCode ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 168 of file StoreNode.java.

168 { return super.hashCode()+_fld.hashCode()+_fin.hashCode(); }

References com.cliffc.aa.node.StoreNode._fin, and com.cliffc.aa.node.StoreNode._fld.

◆ ideal_grow()

Node com.cliffc.aa.node.StoreNode.ideal_grow ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 76 of file StoreNode.java.

76  {
77  Node mem = mem();
78  Node adr = adr();
79  Type ta = adr._val;
80  TypeMemPtr tmp = ta instanceof TypeMemPtr ? (TypeMemPtr)ta : null;
81 
82  // If Store is of a memory-writer, and the aliases do not overlap, make parallel with a Join
83  if( tmp != null && (tmp._aliases!=BitsAlias.NIL.dual()) &&
84  mem.is_mem() && mem.check_solo_mem_writer(this) ) {
85  Node head2;
86  if( mem instanceof StoreNode ) head2=mem;
87  else if( mem instanceof MrgProjNode && ((MrgProjNode)mem).mem()!=this ) head2=mem;
88  else if( mem instanceof MProjNode && mem.in(0) instanceof CallEpiNode ) head2 = mem.in(0).in(0);
89  else head2 = null;
90  // Check no extra readers/writers at the split point
91  if( head2 != null && MemSplitNode.check_split(this,escapees()) ) {
92  MemSplitNode.insert_split(this, escapees(), this, mem, head2);
93  assert _uses._len==1 && _uses.at(0) instanceof MemJoinNode;
94  return _uses.at(0); // Return the mem join
95  }
96  }
97  return null;
98  }

References com.cliffc.aa.type.TypeMemPtr._aliases, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.node.Node.check_solo_mem_writer(), com.cliffc.aa.node.MemSplitNode.check_split(), com.cliffc.aa.type.Bits< B extends Bits< B >.dual(), com.cliffc.aa.node.StoreNode.escapees(), com.cliffc.aa.node.Node.in(), com.cliffc.aa.node.MemSplitNode.insert_split(), com.cliffc.aa.node.Node.is_mem(), com.cliffc.aa.node.MrgProjNode.mem(), com.cliffc.aa.node.StoreNode.mem(), and com.cliffc.aa.type.BitsAlias.NIL.

Here is the call graph for this function:

◆ ideal_mono()

Node com.cliffc.aa.node.StoreNode.ideal_mono ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 75 of file StoreNode.java.

75 { return null; }

◆ ideal_reduce()

Node com.cliffc.aa.node.StoreNode.ideal_reduce ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 35 of file StoreNode.java.

35  {
36  Node mem = mem();
37  Node adr = adr();
38  Type ta = adr._val;
39  TypeMemPtr tmp = ta instanceof TypeMemPtr ? (TypeMemPtr)ta : null;
40 
41  // Is this Store dead from below?
42  if( mem==this ) return null;
43  if( ta.above_center() ) return mem;
44  if( tmp!=null && _live.ld(tmp)==TypeObj.UNUSED ) return mem;
45 
46  // If Store is by a New and no other Stores, fold into the New.
47  NewObjNode nnn; int idx;
48  if( mem instanceof MrgProjNode && mem._keep==0 &&
49  mem.in(0) instanceof NewObjNode && (nnn=(NewObjNode)mem.in(0)) == adr.in(0) &&
50  !rez().is_forward_ref() &&
51  mem._uses._len==2 && // Use is by DefMem and self
52  (idx=nnn._ts.fld_find(_fld))!= -1 && nnn._ts.fld(idx)._access==Access.RW ) {
53  // Update the value, and perhaps the final field
54  nnn.update(idx,_fin,rez());
55  mem.xval();
56  Env.GVN.add_flow_uses(this);
57  add_reduce_extra(); // Folding in allows store followers to fold in
58  return mem; // Store is replaced by using the New directly.
59  }
60 
61  // If Store is of a MemJoin and it can enter the split region, do so.
62  // Requires no other memory *reader* (or writer), as the reader will
63  // now see the Store effects as part of the Join.
64  if( _keep<=1 && tmp != null && mem._keep==0 && mem instanceof MemJoinNode && mem._uses._len==1 ) {
65  Node memw = _uses._len==0 ? this : get_mem_writer(); // Zero or 1 mem-writer
66  // Check the address does not have a memory dependence on the Join.
67  // TODO: This is super conservative
68  if( adr instanceof FreshNode ) adr = ((FreshNode)adr).id();
69  if( memw != null && adr instanceof ProjNode && adr.in(0) instanceof NewNode )
70  return ((MemJoinNode)mem).add_alias_below_new(new StoreNode(this,mem,adr()),this);
71  }
72 
73  return null;
74  }

References com.cliffc.aa.node.StoreNode._fin, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._live, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.type.Type< T extends Type< T >.above_center(), com.cliffc.aa.GVNGCM.add_flow_uses(), com.cliffc.aa.node.StoreNode.add_reduce_extra(), com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.node.Node.get_mem_writer(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.in(), com.cliffc.aa.node.Node.is_forward_ref(), com.cliffc.aa.type.TypeMem.ld(), com.cliffc.aa.node.StoreNode.mem(), com.cliffc.aa.node.StoreNode.rez(), com.cliffc.aa.type.TypeFld.Access.RW, com.cliffc.aa.node.StoreNode.StoreNode(), com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.UNUSED, com.cliffc.aa.node.NewObjNode.update(), and com.cliffc.aa.node.Node.xval().

Here is the call graph for this function:

◆ in()

Node com.cliffc.aa.node.Node.in ( int  i)
inherited

Definition at line 126 of file Node.java.

126 { return _defs.at(i); }

References com.cliffc.aa.node.Node._defs.

Referenced by com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.node.UnresolvedNode.add_def_unresolved(), com.cliffc.aa.node.CallNode.add_flow_def_extra(), com.cliffc.aa.node.MProjNode.add_flow_use_extra(), com.cliffc.aa.node.ParmNode.add_flow_use_extra(), com.cliffc.aa.node.LoadNode.add_flow_use_extra(), com.cliffc.aa.node.CallEpiNode.add_flow_use_extra(), com.cliffc.aa.node.MemPrimNode.adr(), com.cliffc.aa.node.LoadNode.adr(), com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.node.AssertNode.arg(), com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< TypeAry >.as_fun(), com.cliffc.aa.node.StoreNode.bad(), com.cliffc.aa.node.LoadNode.bad(), com.cliffc.aa.node.CallEpiNode.call(), com.cliffc.aa.node.MemJoinNode.can_bypass(), com.cliffc.aa.node.FunNode.check_callers(), com.cliffc.aa.node.MemSplitNode.check_split(), com.cliffc.aa.node.CastNode.checked(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.RetNode.ctl(), com.cliffc.aa.node.CallNode.ctl(), com.cliffc.aa.node.ThretNode.ctrl(), com.cliffc.aa.node.ScopeNode.ctrl(), com.cliffc.aa.node.FunPtrNode.display(), com.cliffc.aa.node.CallNode.dsp(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.dumprpo(), com.cliffc.aa.node.ScopeNode.early_ctrl(), com.cliffc.aa.node.ScopeNode.early_mem(), com.cliffc.aa.node.ScopeNode.early_val(), com.cliffc.aa.node.ParmNode.err(), com.cliffc.aa.node.PhiNode.err(), com.cliffc.aa.node.MProjNode.escapees(), com.cliffc.aa.node.MrgProjNode.escapees(), com.cliffc.aa.node.IntrinsicNode.escapees(), com.cliffc.aa.node.FunNode.find_body(), com.cliffc.aa.node.LoadNode.find_previous_store(), com.cliffc.aa.node.MemJoinNode.find_sese_head(), com.cliffc.aa.node.NewNode< TypeStruct >.fld(), com.cliffc.aa.node.FP2DispNode.fptr2disp(), com.cliffc.aa.node.ParmNode.fun(), com.cliffc.aa.node.RetNode.fun(), com.cliffc.aa.node.FunNode.has_unknown_callers(), com.cliffc.aa.node.FreshNode.id(), com.cliffc.aa.node.AssertNode.ideal_grow(), com.cliffc.aa.node.StoreNode.ideal_grow(), com.cliffc.aa.node.LoadNode.ideal_grow(), com.cliffc.aa.node.CallNode.ideal_grow(), com.cliffc.aa.node.PrimNode.AndThen.ideal_grow(), com.cliffc.aa.node.PrimNode.OrElse.ideal_grow(), com.cliffc.aa.node.FunNode.ideal_inline(), com.cliffc.aa.node.CastNode.ideal_mono(), com.cliffc.aa.node.LoadNode.ideal_mono(), com.cliffc.aa.node.MemJoinNode.ideal_mono(), com.cliffc.aa.node.FP2DispNode.ideal_reduce(), com.cliffc.aa.node.IfNode.ideal_reduce(), com.cliffc.aa.node.RegionNode.ideal_reduce(), com.cliffc.aa.node.FreshNode.ideal_reduce(), com.cliffc.aa.node.CastNode.ideal_reduce(), com.cliffc.aa.node.ProjNode.ideal_reduce(), com.cliffc.aa.node.ErrNode.ideal_reduce(), com.cliffc.aa.node.MemJoinNode.ideal_reduce(), com.cliffc.aa.node.UnresolvedNode.ideal_reduce(), com.cliffc.aa.node.PhiNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.ParmNode.ideal_reduce(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.IntrinsicNode.ideal_reduce(), com.cliffc.aa.node.RetNode.ideal_reduce(), com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.FunNode.ideal_reduce(), com.cliffc.aa.node.PrimNode.ConvertStrStr.ideal_reduce(), com.cliffc.aa.node.MemPrimNode.idx(), com.cliffc.aa.node.MemSplitNode.insert_split(), com.cliffc.aa.node.ThunkNode.is_copy(), com.cliffc.aa.node.IfNode.is_copy(), com.cliffc.aa.node.RegionNode.is_copy(), com.cliffc.aa.node.RetNode.is_copy(), com.cliffc.aa.node.CallEpiNode.is_copy(), com.cliffc.aa.node.PrimNode.AndThen.is_copy(), com.cliffc.aa.node.PrimNode.OrElse.is_copy(), com.cliffc.aa.node.CallNode.is_copy(), com.cliffc.aa.node.FunNode.is_copy(), com.cliffc.aa.node.FunPtrNode.is_pure_call(), com.cliffc.aa.node.CallEpiNode.is_pure_call(), com.cliffc.aa.node.CallNode.least_cost(), com.cliffc.aa.node.ThunkNode.live_use(), com.cliffc.aa.node.DefMemNode.live_use(), com.cliffc.aa.node.CastNode.live_use(), com.cliffc.aa.node.MrgProjNode.live_use(), com.cliffc.aa.node.PhiNode.live_use(), com.cliffc.aa.node.CallEpiNode.live_use(), com.cliffc.aa.node.PrimNode.AndThen.live_use(), com.cliffc.aa.node.PrimNode.OrElse.live_use(), com.cliffc.aa.node.MemPrimNode.mem(), com.cliffc.aa.node.MrgProjNode.mem(), com.cliffc.aa.node.ThretNode.mem(), com.cliffc.aa.node.MemSplitNode.mem(), com.cliffc.aa.node.LoadNode.mem(), com.cliffc.aa.node.IntrinsicNode.mem(), com.cliffc.aa.node.RetNode.mem(), com.cliffc.aa.node.AssertNode.mem(), com.cliffc.aa.node.StoreNode.mem(), com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.node.CallNode.mem(), com.cliffc.aa.node.MemJoinNode.MemJoinNode(), com.cliffc.aa.node.FunPtrNode.merge_ref_def(), com.cliffc.aa.node.MemJoinNode.msp(), com.cliffc.aa.node.MrgProjNode.nnn(), com.cliffc.aa.node.FunNode.noinline(), com.cliffc.aa.node.ProjNode.op_prec(), com.cliffc.aa.node.IntrinsicNode.ptr(), com.cliffc.aa.node.ScopeNode.ptr(), com.cliffc.aa.Parse.remove_unknown_callers(), com.cliffc.aa.node.FunPtrNode.ret(), com.cliffc.aa.GVNGCM.retype_mem(), com.cliffc.aa.node.MemPrimNode.rez(), com.cliffc.aa.node.ThretNode.rez(), com.cliffc.aa.node.RetNode.rez(), com.cliffc.aa.node.StoreNode.rez(), com.cliffc.aa.node.ScopeNode.rez(), com.cliffc.aa.node.RetNode.rpc(), com.cliffc.aa.node.CallEpiNode.sane_wiring(), com.cliffc.aa.node.Node.should_con(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.FunNode.split_size(), com.cliffc.aa.node.RegionNode.stacked_region(), com.cliffc.aa.node.ScopeNode.stk(), com.cliffc.aa.node.TestNode.stx(), com.cliffc.aa.node.CallNode.swap_new(), com.cliffc.aa.node.RetNode.tail_recursive(), com.cliffc.aa.Parse.term(), com.cliffc.aa.node.TestNodeSmall.testCallNodeResolve(), com.cliffc.aa.node.TestNodeSmall.testCallNodeResolve2(), com.cliffc.aa.node.TestNode.testMonotonic(), com.cliffc.aa.node.TestNodeSmall.testUnresolvedAdd(), com.cliffc.aa.node.ThretNode.thunk(), com.cliffc.aa.node.Node.tvar(), com.cliffc.aa.node.ProjNode.unify(), com.cliffc.aa.node.FunNode.unwire(), com.cliffc.aa.node.CallEpiNode.unwire(), com.cliffc.aa.node.Node.val(), com.cliffc.aa.node.ParmNode.valid_args(), com.cliffc.aa.node.DefMemNode.value(), com.cliffc.aa.node.MProjNode.value(), com.cliffc.aa.node.CastNode.value(), com.cliffc.aa.node.IfNode.value(), com.cliffc.aa.node.PhiNode.value(), com.cliffc.aa.node.ParmNode.value(), com.cliffc.aa.node.MrgProjNode.value(), com.cliffc.aa.node.RegionNode.value(), com.cliffc.aa.node.FunPtrNode.value(), com.cliffc.aa.node.PrimNode.EQ_OOP.value(), com.cliffc.aa.node.PrimNode.NE_OOP.value(), com.cliffc.aa.node.FunNode.value(), com.cliffc.aa.node.LoopNode.walk_dom_last(), com.cliffc.aa.node.ThunkNode.walk_dom_last(), com.cliffc.aa.node.RegionNode.walk_dom_last(), com.cliffc.aa.node.Node.walk_dom_last(), com.cliffc.aa.node.CallEpiNode.wire0(), com.cliffc.aa.node.CallEpiNode.wired(), com.cliffc.aa.node.FunPtrNode.xfun(), com.cliffc.aa.node.CProjNode.xstr(), and com.cliffc.aa.node.UnresolvedNode.xstr().

Here is the caller graph for this function:

◆ init0()

static void com.cliffc.aa.node.Node.init0 ( )
staticinherited

Definition at line 70 of file Node.java.

70  {
71  assert LIVE.get(CNT-1) && !LIVE.get(CNT);
73  }

References com.cliffc.aa.node.Node._INIT0_CNT, com.cliffc.aa.node.Node.CNT, and com.cliffc.aa.node.Node.LIVE.

Referenced by com.cliffc.aa.Env.record_for_top_reset2().

Here is the caller graph for this function:

◆ init1()

Node com.cliffc.aa.node.Node.init1 ( )
inherited

Definition at line 708 of file Node.java.

708  {
709  Node x = VALS.get(this);
711  if( x!=null ) { // Hit in GVN table
712  merge(x);
713  kill(); // Kill just-init'd
714  return x; // Return old
715  }
716  _elock();
718  return Env.GVN.add_work_all(this);
719  }

References com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._live, com.cliffc.aa.GVNGCM._opt_mode, com.cliffc.aa.node.Node._val, com.cliffc.aa.GVNGCM.add_work_all(), com.cliffc.aa.type.TypeMem.DEAD, com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.kill(), com.cliffc.aa.node.Node.merge(), com.cliffc.aa.GVNGCM.Mode.Opto, com.cliffc.aa.node.Node.VALS, and com.cliffc.aa.node.Node.value().

Referenced by com.cliffc.aa.node.CallEpiNode.wire0().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ insert() [1/2]

Node com.cliffc.aa.node.Node.insert ( int  idx,
Node  n 
)
inherited

Definition at line 165 of file Node.java.

165 { unelock(); _defs.insert(idx,n); if( n!=null ) n._uses.add(this); return this; }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uses, and com.cliffc.aa.node.Node.unelock().

Referenced by com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.Parse.remove_unknown_callers(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.Node.subsume(), com.cliffc.aa.node.CallNode.swap_new(), and com.cliffc.aa.node.RetNode.tail_recursive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ insert() [2/2]

void com.cliffc.aa.node.Node.insert ( Node  nnn)
inherited

Definition at line 191 of file Node.java.

191  {
192  if( _uses._len>0 ) unelock(); // Hacking edges
193  while( _uses._len > 0 ) {
194  Node u = _uses.del(0); // Old use
195  u.replace(this,nnn); // was this now nnn
196  nnn._uses.add(u);
197  }
198  }

References com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.replace(), and com.cliffc.aa.node.Node.unelock().

Here is the call graph for this function:

◆ is_CFG()

◆ is_copy()

◆ is_dead()

◆ is_forward_ref()

boolean com.cliffc.aa.node.Node.is_forward_ref ( )
inherited

Reimplemented in com.cliffc.aa.node.FunNode, com.cliffc.aa.node.FunPtrNode, com.cliffc.aa.node.RetNode, and com.cliffc.aa.node.ConTypeNode.

Definition at line 830 of file Node.java.

830 { return false; }

Referenced by com.cliffc.aa.node.CallNode.err(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.Parse.inc(), com.cliffc.aa.node.NewObjNode.promote_forward(), com.cliffc.aa.Parse.stmt(), and com.cliffc.aa.node.Node.walkerr_def().

Here is the caller graph for this function:

◆ is_mem()

boolean com.cliffc.aa.node.StoreNode.is_mem ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 28 of file StoreNode.java.

28 { return true; }

◆ is_multi_head()

◆ is_multi_tail()

boolean com.cliffc.aa.node.Node.is_multi_tail ( )
privateinherited

Definition at line 355 of file Node.java.

355 { return _op==OP_PARM || _op==OP_PHI || _op==OP_PROJ || _op==OP_CPROJ; }

References com.cliffc.aa.node.Node._op, com.cliffc.aa.node.Node.OP_CPROJ, com.cliffc.aa.node.Node.OP_PARM, com.cliffc.aa.node.Node.OP_PHI, and com.cliffc.aa.node.Node.OP_PROJ.

Referenced by com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.dumprpo(), and com.cliffc.aa.node.Node.postorder().

Here is the caller graph for this function:

◆ is_prim()

◆ is_pure_call()

Node com.cliffc.aa.node.Node.is_pure_call ( )
packageinherited

Reimplemented in com.cliffc.aa.node.CallNode, com.cliffc.aa.node.CallEpiNode, com.cliffc.aa.node.FunPtrNode, com.cliffc.aa.node.UnresolvedNode, and com.cliffc.aa.node.FreshNode.

Definition at line 834 of file Node.java.

834 { return null; }

Referenced by com.cliffc.aa.node.FreshNode.is_pure_call(), and com.cliffc.aa.node.CallNode.is_pure_call().

Here is the caller graph for this function:

◆ keep() [1/2]

public<N extends Node> N com.cliffc.aa.node.Node.keep ( )
packageinherited

Definition at line 228 of file Node.java.

228 { return keep(1); }

References com.cliffc.aa.node.Node.keep().

Referenced by com.cliffc.aa.Parse._expr(), com.cliffc.aa.Parse._expr_higher(), com.cliffc.aa.Parse._short_circuit_expr(), com.cliffc.aa.GVNGCM.Build< N extends Node >.add(), com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below_new(), com.cliffc.aa.Parse.apply(), com.cliffc.aa.node.ScopeNode.IfScope.check(), com.cliffc.aa.Parse.do_call0(), com.cliffc.aa.Parse.do_exit(), com.cliffc.aa.node.UnresolvedNode.filter(), com.cliffc.aa.node.FunNode.FunNode(), com.cliffc.aa.Parse.go(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.Parse.ifex(), com.cliffc.aa.Parse.inc(), com.cliffc.aa.Env.init(), com.cliffc.aa.GVNGCM.Build< N extends Node >.init(), com.cliffc.aa.GVNGCM.iter(), com.cliffc.aa.node.Node.keep(), com.cliffc.aa.Parse.merge_exits(), com.cliffc.aa.node.ScopeNode.ScopeNode(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.Parse.stmt(), com.cliffc.aa.Parse.stmts(), com.cliffc.aa.Parse.struct(), com.cliffc.aa.node.Node.subsume(), com.cliffc.aa.node.CallNode.swap_new(), com.cliffc.aa.Parse.term(), com.cliffc.aa.TestLive.testNewObj(), com.cliffc.aa.Env.top_scope(), and com.cliffc.aa.Parse.tuple().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ keep() [2/2]

public<N extends Node> N com.cliffc.aa.node.Node.keep ( int  d)
packageinherited

Definition at line 230 of file Node.java.

230 { _keep+=d; return (N)this; }

References com.cliffc.aa.node.Node._keep.

◆ kill()

Node com.cliffc.aa.node.Node.kill ( )
inherited

Definition at line 211 of file Node.java.

211  {
212  if( is_dead() ) return null;
213  assert _uses._len==0 && _keep==0;
214  // Similar to unelock(), except do not put on any worklist
215  if( _elock ) { _elock = false; Node x = VALS.remove(this); assert x == this; }
216  while( _defs._len > 0 ) unuse(_defs.pop());
217  set_dead(); // officially dead now
218  LIVE.clear(_uid); // Off the LIVE set. CNT cannot roll back unless the GVN worklists are also clear
219  return this;
220  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._elock, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.is_dead(), com.cliffc.aa.node.Node.LIVE, com.cliffc.aa.node.Node.set_dead(), com.cliffc.aa.node.Node.unuse(), and com.cliffc.aa.node.Node.VALS.

Referenced by com.cliffc.aa.node.Node.con(), com.cliffc.aa.node.Node.init1(), com.cliffc.aa.Parse.kill(), com.cliffc.aa.node.Node.subsume(), and com.cliffc.aa.node.TestNodeSmall.testCallNodeResolve().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ len()

int com.cliffc.aa.node.Node.len ( )
inherited

Definition at line 125 of file Node.java.

125 { return _defs._len; }

References com.cliffc.aa.node.Node._defs.

Referenced by com.cliffc.aa.node.MemPrimNode.err(), com.cliffc.aa.node.CallNode.ideal_reduce(), and com.cliffc.aa.node.CallEpiNode.value().

Here is the caller graph for this function:

◆ live()

TypeMem com.cliffc.aa.node.Node.live ( GVNGCM.Mode  opt_mode)
inherited

Reimplemented in com.cliffc.aa.node.CallNode, com.cliffc.aa.node.RetNode, com.cliffc.aa.node.MemJoinNode, com.cliffc.aa.node.ScopeNode, com.cliffc.aa.node.FunPtrNode, com.cliffc.aa.node.ConNode< T extends Type >, com.cliffc.aa.node.ThretNode, and com.cliffc.aa.node.StartNode.

Definition at line 478 of file Node.java.

478  {
479  if( _keep>0 ) return all_live();
480  // Compute meet/union of all use livenesses
481  TypeMem live = TypeMem.DEAD; // Start at lattice top
482  for( Node use : _uses ) // Computed across all uses
483  if( use.live_uses() ) {
484  TypeMem ulive = use.live_use(opt_mode, this);
485  live = (TypeMem)live.meet(ulive); // Make alive used fields
486  }
487  assert live==TypeMem.DEAD || live.basic_live()==all_live().basic_live();
488  assert live!=TypeMem.LIVE_BOT || (_val !=Type.CTRL && _val !=Type.XCTRL);
489  return live;
490  }

References com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.all_live(), com.cliffc.aa.type.TypeMem.basic_live(), com.cliffc.aa.type.Type< T extends Type< T >.CTRL, com.cliffc.aa.type.TypeMem.DEAD, com.cliffc.aa.type.TypeMem.LIVE_BOT, com.cliffc.aa.type.Type< T extends Type< T >.meet(), and com.cliffc.aa.type.Type< T extends Type< T >.XCTRL.

Referenced by com.cliffc.aa.node.Node.do_flow(), com.cliffc.aa.GVNGCM.gcp(), com.cliffc.aa.node.PhiNode.ideal_reduce(), com.cliffc.aa.node.MemPrimNode.LValueLength.live_use(), com.cliffc.aa.node.LoadNode.live_use(), com.cliffc.aa.node.Node.more_flow(), com.cliffc.aa.node.Node.more_ideal(), com.cliffc.aa.GVNGCM.revalive(), and com.cliffc.aa.node.Node.xliv().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ live_use()

TypeMem com.cliffc.aa.node.StoreNode.live_use ( GVNGCM.Mode  opt_mode,
Node  def 
)

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 135 of file StoreNode.java.

135  {
136  if( def==mem() ) return _live; // Pass full liveness along
137  if( def==adr() ) return TypeMem.ALIVE; // Basic aliveness
138  if( def==rez() ) return TypeMem.ESCAPE;// Value escapes
139  throw com.cliffc.aa.AA.unimpl(); // Should not reach here
140  }

References com.cliffc.aa.node.Node._live, com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.type.TypeMem.ALIVE, com.cliffc.aa.type.TypeMem.ESCAPE, com.cliffc.aa.node.StoreNode.mem(), com.cliffc.aa.node.StoreNode.rez(), and com.cliffc.aa.AA.unimpl().

Here is the call graph for this function:

◆ live_uses()

boolean com.cliffc.aa.node.Node.live_uses ( )
inherited

Definition at line 491 of file Node.java.

491  {
492  return _live != TypeMem.DEAD && // Only live uses make more live
493  // And no chance use turns into a constant (which then does not use anything)
494  !(_live.basic_live() && _val.may_be_con() && !is_prim() && err(true)==null &&
495  // FunPtrs still use their Rets, even if constant
496  !(this instanceof FunPtrNode));
497  }

References com.cliffc.aa.node.Node._live, com.cliffc.aa.node.Node._val, com.cliffc.aa.type.TypeMem.basic_live(), com.cliffc.aa.type.TypeMem.DEAD, com.cliffc.aa.node.Node.err(), com.cliffc.aa.node.Node.is_prim(), and com.cliffc.aa.type.Type< T extends Type< T >.may_be_con().

Here is the call graph for this function:

◆ mem()

Node com.cliffc.aa.node.StoreNode.mem ( )
package

Definition at line 30 of file StoreNode.java.

30 { return in(1); }

References com.cliffc.aa.node.Node.in().

Referenced by com.cliffc.aa.node.StoreNode.err(), com.cliffc.aa.node.LoadNode.find_previous_store(), com.cliffc.aa.node.StoreNode.ideal_grow(), com.cliffc.aa.node.LoadNode.ideal_mono(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.live_use(), com.cliffc.aa.node.StoreNode.StoreNode(), and com.cliffc.aa.node.StoreNode.value().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ merge()

Node com.cliffc.aa.node.Node.merge ( Node  x)
privateinherited

Definition at line 702 of file Node.java.

702  {
703  x._live = (TypeMem)x._live.meet(_live);
704  return Env.GVN.add_flow(x);
705  }

References com.cliffc.aa.node.Node._live, com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.Env.GVN, and com.cliffc.aa.type.Type< T extends Type< T >.meet().

Referenced by com.cliffc.aa.node.Node._do_reduce(), and com.cliffc.aa.node.Node.init1().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ more_flow() [1/2]

final int com.cliffc.aa.node.Node.more_flow ( boolean  lifting)
inherited

Definition at line 747 of file Node.java.

747 { FLOW_VISIT.clear(); return more_flow(lifting,0); }

References com.cliffc.aa.node.Node.FLOW_VISIT, and com.cliffc.aa.node.Node.more_flow().

Referenced by com.cliffc.aa.GVNGCM.check_and_wire(), com.cliffc.aa.GVNGCM.gcp(), com.cliffc.aa.node.Node.more_flow(), and com.cliffc.aa.GVNGCM.remove_ambi().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ more_flow() [2/2]

int com.cliffc.aa.node.Node.more_flow ( boolean  lifting,
int  errs 
)
privateinherited

Definition at line 748 of file Node.java.

748  {
749  if( FLOW_VISIT.tset(_uid) ) return errs; // Been there, done that
750  if( Env.GVN.on_dead(this) ) return errs; // Do not check dying nodes
751  // Check for only forwards flow, and if possible then also on worklist
752  Type oval= _val, nval = value(Env.GVN._opt_mode);
753  TypeMem oliv=_live, nliv = live (Env.GVN._opt_mode);
754  boolean hm = false;
755  if( nval != oval || nliv != oliv || hm ) {
756  boolean ok = lifting
757  ? nval.isa(oval) && nliv.isa(oliv)
758  : oval.isa(nval) && oliv.isa(nliv);
759  if( !ok || (!Env.GVN.on_flow(this) && !Env.GVN.on_dead(this) && _keep==0) ) { // Still-to-be-computed?
760  FLOW_VISIT.clear(_uid); // Pop-frame & re-run in debugger
761  System.err.println(dump(0,new SB(),true)); // Rolling backwards not allowed
762  errs++;
763  }
764  }
765  for( Node def : _defs ) if( def != null ) errs = def.more_flow(lifting,errs);
766  for( Node use : _uses ) if( use != null ) errs = use.more_flow(lifting,errs);
767  return errs;
768  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._live, com.cliffc.aa.GVNGCM._opt_mode, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.FLOW_VISIT, com.cliffc.aa.Env.GVN, com.cliffc.aa.type.Type< T extends Type< T >.isa(), com.cliffc.aa.node.Node.live(), com.cliffc.aa.GVNGCM.on_dead(), com.cliffc.aa.GVNGCM.on_flow(), com.cliffc.aa.util.VBitSet.tset(), and com.cliffc.aa.node.Node.value().

Here is the call graph for this function:

◆ more_ideal()

final boolean com.cliffc.aa.node.Node.more_ideal ( VBitSet  bs)
inherited

Definition at line 722 of file Node.java.

722  {
723  if( bs.tset(_uid) ) return false; // Been there, done that
724  if( _keep == 0 && _live.is_live() ) { // Only non-keeps, which is just top-level scope and prims
725  Type t = value(Env.GVN._opt_mode);
726  if( _val != t )
727  return true; // Found a value improvement
729  if( _live != live )
730  return true; // Found a liveness improvement
731  Node x;
732  x = do_reduce(); if( x != null )
733  return true; // Found an ideal call
734  x = do_mono(); if( x != null )
735  return true; // Found an ideal call
736  x = do_grow(); if( x != null )
737  return true; // Found an ideal call
738  if( this instanceof FunNode ) ((FunNode)this).ideal_inline(true);
739  }
740  for( Node def : _defs ) if( def != null && def.more_ideal(bs) ) return true;
741  for( Node use : _uses ) if( use != null && use.more_ideal(bs) ) return true;
742  return false;
743  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._live, com.cliffc.aa.GVNGCM._opt_mode, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.do_grow(), com.cliffc.aa.node.Node.do_mono(), com.cliffc.aa.node.Node.do_reduce(), com.cliffc.aa.Env.GVN, com.cliffc.aa.type.TypeMem.is_live(), com.cliffc.aa.node.Node.live(), com.cliffc.aa.util.VBitSet.tset(), and com.cliffc.aa.node.Node.value().

Referenced by com.cliffc.aa.GVNGCM.iter().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ new_tvar()

TV2 com.cliffc.aa.node.Node.new_tvar ( String  alloc_site)
inherited

Definition at line 101 of file Node.java.

101 { return TV2.make_leaf(this,alloc_site); }

References com.cliffc.aa.tvar.TV2.make_leaf().

Referenced by com.cliffc.aa.node.Node.copy(), and com.cliffc.aa.node.Node.Node().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ newuid()

int com.cliffc.aa.node.Node.newuid ( )
packageinherited

Definition at line 61 of file Node.java.

61  {
62  assert CNT < 100000 : "infinite node create loop";
63  if( CNT==AA.UID )
64  System.out.print("");
65  LIVE.set(CNT);
66  return CNT++;
67  }

References com.cliffc.aa.node.Node.CNT, com.cliffc.aa.node.Node.LIVE, and com.cliffc.aa.AA.UID.

Referenced by com.cliffc.aa.node.Node.copy(), and com.cliffc.aa.node.Node.Node().

Here is the caller graph for this function:

◆ op_prec()

◆ pop()

Node com.cliffc.aa.node.Node.pop ( )
inherited

Definition at line 174 of file Node.java.

174 { unelock(); Node n = _defs.pop(); unuse(n); return n; }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node.unelock(), and com.cliffc.aa.node.Node.unuse().

Referenced by com.cliffc.aa.node.ScopeNode.early_kill(), com.cliffc.aa.node.PrimNode.AndThen.ideal_grow(), com.cliffc.aa.node.PrimNode.OrElse.ideal_grow(), com.cliffc.aa.node.UnresolvedNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.NewNode< TypeStruct >.kill2(), com.cliffc.aa.node.FunNode.make_new_fun(), com.cliffc.aa.node.CallEpiNode.set_is_copy(), and com.cliffc.aa.node.FunNode.split_callers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ postorder()

void com.cliffc.aa.node.Node.postorder ( Ary< Node nodes,
VBitSet  bs 
)
privateinherited

Definition at line 383 of file Node.java.

383  {
384  if( bs.tset(_uid) ) return;
385  // If CFG, walk the CFG first. Do not walk thru Returns (into Calls) as
386  // this breaks up the whole- functions-at-once.
387  if( is_CFG() && _op!=OP_RET ) {
388  // Walk any CProj first.
389  for( Node use : _uses )
390  if( use._op == OP_CPROJ )
391  use.postorder(nodes,bs);
392  // Walk the CFG, walking CallEpis last
393  for( Node use : _uses )
394  if( !(use instanceof CallEpiNode) && use.is_CFG() )
395  use.postorder(nodes,bs);
396  for( Node use : _uses )
397  if( (use instanceof CallEpiNode) && use.is_CFG() )
398  use.postorder(nodes,bs);
399  }
400 
401  // Walk the rest (especially data). Since visit bits are set on the CFGs
402  // its OK to walk them also. Calls are special, since their Proj's feed
403  // into a Fun's Parms. We want the Fun to walk its own Parms, in order so
404  // ignore these edges. Since the Parms are all reachable from the Fun they
405  // get walked eventually.
406  if( _op != OP_CALL && _op!=OP_RET ) {
407  if( _op!=OP_SPLIT || _uses._len!=2 )
408  for( Node use : _uses )
409  use.postorder(nodes,bs);
410  else { // For MemSplit, walk the "busy" side first
411  Node p0 = _uses.at(0), p1 = _uses.at(1);
412  if( ((ProjNode)p0)._idx==1 ) { p0=p1; p1=_uses.at(0); } // Swap
413  p1.postorder(nodes,bs);
414  p0.postorder(nodes,bs);
415  }
416  }
417 
418  // Slight PO tweak: heads and tails together.
419  if( is_multi_head() )
420  for( Node use : _uses )
421  if( use.is_multi_tail() )
422  nodes.push(use);
423  if( !is_multi_tail() ) nodes.push(this);
424  }

References com.cliffc.aa.node.Node._op, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.is_CFG(), com.cliffc.aa.node.Node.is_multi_head(), com.cliffc.aa.node.Node.is_multi_tail(), com.cliffc.aa.node.Node.OP_CALL, com.cliffc.aa.node.Node.OP_CPROJ, com.cliffc.aa.node.Node.OP_RET, com.cliffc.aa.node.Node.OP_SPLIT, com.cliffc.aa.node.Node.postorder(), com.cliffc.aa.util.Ary< E >.push(), and com.cliffc.aa.util.VBitSet.tset().

Referenced by com.cliffc.aa.node.Node.dumprpo(), and com.cliffc.aa.node.Node.postorder().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ remove()

Node com.cliffc.aa.node.Node.remove ( int  idx)
inherited

Definition at line 176 of file Node.java.

176 { unelock(); return unuse(_defs.remove(idx)); }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node.unelock(), and com.cliffc.aa.node.Node.unuse().

Referenced by com.cliffc.aa.node.RegionNode.stacked_region().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ replace()

void com.cliffc.aa.node.Node.replace ( Node  old,
Node  nnn 
)
inherited

Definition at line 163 of file Node.java.

163 { unelock(); _defs.replace(old,nnn); }

References com.cliffc.aa.node.Node._defs, and com.cliffc.aa.node.Node.unelock().

Referenced by com.cliffc.aa.node.Node.insert().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ reset_to_init0()

static void com.cliffc.aa.node.Node.reset_to_init0 ( )
staticinherited

Definition at line 77 of file Node.java.

77  {
78  CNT = 0;
79  LIVE.clear();
80  VALS.clear();
81  }

References com.cliffc.aa.node.Node.CNT, com.cliffc.aa.node.Node.LIVE, and com.cliffc.aa.node.Node.VALS.

Referenced by com.cliffc.aa.Env.top_reset().

Here is the caller graph for this function:

◆ rez()

Node com.cliffc.aa.node.StoreNode.rez ( )
package

Definition at line 32 of file StoreNode.java.

32 { return in(3); }

References com.cliffc.aa.node.Node.in().

Referenced by com.cliffc.aa.node.LoadNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.live_use(), com.cliffc.aa.node.StoreNode.StoreNode(), com.cliffc.aa.node.StoreNode.unify(), and com.cliffc.aa.node.StoreNode.value().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ roll_back_CNT()

static void com.cliffc.aa.node.Node.roll_back_CNT ( )
staticinherited

Definition at line 222 of file Node.java.

222 { while( !LIVE.get(CNT-1) ) CNT--; }

References com.cliffc.aa.node.Node.CNT, and com.cliffc.aa.node.Node.LIVE.

Referenced by com.cliffc.aa.GVNGCM.iter().

Here is the caller graph for this function:

◆ set_dead()

void com.cliffc.aa.node.Node.set_dead ( )
inherited

Definition at line 821 of file Node.java.

821 { _defs = _uses = null; } // TODO: Poor-mans indication of a dead node, probably needs to recycle these...

References com.cliffc.aa.node.Node._defs, and com.cliffc.aa.node.Node._uses.

Referenced by com.cliffc.aa.node.Node.kill().

Here is the caller graph for this function:

◆ set_def()

Node com.cliffc.aa.node.Node.set_def ( int  idx,
Node  n 
)
inherited

Definition at line 154 of file Node.java.

154  {
155  unelock();
156  Node old = _defs.at(idx); // Get old value
157  // Add edge to new guy before deleting old, in case old goes dead and
158  // recursively makes new guy go dead also
159  if( (_defs._es[idx] = n) != null ) n._uses.add(this);
160  return unuse(old);
161  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.unelock(), and com.cliffc.aa.node.Node.unuse().

Referenced by com.cliffc.aa.node.CallNode._ideal_grow(), com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.Parse.do_exit(), com.cliffc.aa.node.PrimNode.AndThen.ideal_grow(), com.cliffc.aa.node.PrimNode.OrElse.ideal_grow(), com.cliffc.aa.node.CastNode.ideal_mono(), com.cliffc.aa.node.FP2DispNode.ideal_reduce(), com.cliffc.aa.node.IfNode.ideal_reduce(), com.cliffc.aa.node.RegionNode.ideal_reduce(), com.cliffc.aa.node.FreshNode.ideal_reduce(), com.cliffc.aa.node.CastNode.ideal_reduce(), com.cliffc.aa.node.ErrNode.ideal_reduce(), com.cliffc.aa.node.UnresolvedNode.ideal_reduce(), com.cliffc.aa.node.RetNode.ideal_reduce(), com.cliffc.aa.node.FunPtrNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.FunNode.ideal_reduce(), com.cliffc.aa.node.MemSplitNode.insert_split(), com.cliffc.aa.node.DefMemNode.make_mem(), com.cliffc.aa.node.FunPtrNode.merge_ref_def(), com.cliffc.aa.node.NewObjNode.promote_forward(), com.cliffc.aa.Parse.remove_unknown_callers(), com.cliffc.aa.node.ScopeNode.replace_mem(), com.cliffc.aa.node.CallNode.set_arg(), com.cliffc.aa.node.ScopeNode.set_ctrl(), com.cliffc.aa.node.CallNode.set_dsp(), com.cliffc.aa.node.CallNode.set_fdx(), com.cliffc.aa.node.FunNode.set_is_copy(), com.cliffc.aa.node.LoadNode.set_mem(), com.cliffc.aa.node.ScopeNode.set_mem(), com.cliffc.aa.node.CallNode.set_mem(), com.cliffc.aa.node.ScopeNode.set_ptr(), com.cliffc.aa.node.ScopeNode.set_rez(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.CallNode.swap_new(), com.cliffc.aa.node.RetNode.tail_recursive(), and com.cliffc.aa.node.CallEpiNode.unwire().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sharptr()

Type com.cliffc.aa.node.Node.sharptr ( Node  mem)
inherited

Definition at line 855 of file Node.java.

855 { return mem._val.sharptr(_val); }

References com.cliffc.aa.node.Node._val, and com.cliffc.aa.type.Type< T extends Type< T >.sharptr().

Referenced by com.cliffc.aa.node.ParmNode.err(), com.cliffc.aa.node.CallNode.err(), com.cliffc.aa.Parse.get_display_ptr(), com.cliffc.aa.node.AssertNode.ideal_reduce(), com.cliffc.aa.node.FunNode.split_size(), com.cliffc.aa.node.ParmNode.valid_args(), com.cliffc.aa.node.ParmNode.value(), com.cliffc.aa.node.MemPrimNode.LValueLength.value(), com.cliffc.aa.node.AssertNode.value(), and com.cliffc.aa.node.MemPrimNode.LValueRead.value().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ should_con()

boolean com.cliffc.aa.node.Node.should_con ( Type  t)
inherited

Definition at line 651 of file Node.java.

651  {
652  if( this instanceof ConNode || // Already a constant
653  (this instanceof FunPtrNode && _val.is_con()) || // Already a constant
654  this instanceof ErrNode || // Never touch an ErrNode
655  this instanceof FreshNode ||// These modify the TVars but not the constant flows
656  is_prim() ) // Never touch a Primitive
657  return false; // Already a constant, or never touch an ErrNode
658  // Constant argument to call: keep for call resolution.
659  // Call can always inline to fold constant.
660  if( this instanceof ProjNode && in(0) instanceof CallNode && ((ProjNode)this)._idx>0 )
661  return false;
662  // Is in-error; do not remove the error.
663  if( err(true) != null )
664  return false;
665  // Is a constant
666  return t.is_con();
667  }

References com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.err(), com.cliffc.aa.node.Node.in(), com.cliffc.aa.type.Type< T extends Type< T >.is_con(), and com.cliffc.aa.node.Node.is_prim().

Referenced by com.cliffc.aa.node.Node._do_reduce(), and com.cliffc.aa.node.Node.walk_opt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ str()

String com.cliffc.aa.node.StoreNode.str ( )
package

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 27 of file StoreNode.java.

27 { return xstr(); } // Inline short name

References com.cliffc.aa.node.StoreNode.xstr().

Here is the call graph for this function:

◆ subsume()

Node com.cliffc.aa.node.Node.subsume ( Node  nnn)
inherited

Definition at line 201 of file Node.java.

201  {
202  assert !nnn.is_dead();
203  insert(nnn); // Change graph shape
204  nnn.keep(); // Keep-alive
205  kill(); // Delete the old, and anything it uses
206  return nnn.unkeep(); // Remove keep-alive
207  }

References com.cliffc.aa.node.Node.insert(), com.cliffc.aa.node.Node.is_dead(), com.cliffc.aa.node.Node.keep(), com.cliffc.aa.node.Node.kill(), and com.cliffc.aa.node.Node.unkeep().

Referenced by com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.CallNode.copy(), com.cliffc.aa.node.Node.do_reduce(), com.cliffc.aa.node.IfNode.flip(), and com.cliffc.aa.node.Node.walk_opt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ toString()

String com.cliffc.aa.node.Node.toString ( )
inherited

Reimplemented in com.cliffc.aa.node.ConNode< T extends Type >.

Definition at line 284 of file Node.java.

284 { return dump(0,new SB(),false).toString(); }

References com.cliffc.aa.node.Node.dump().

Here is the call graph for this function:

◆ tvar() [1/2]

TV2 com.cliffc.aa.node.Node.tvar ( )
inherited

Definition at line 96 of file Node.java.

96  {
97  TV2 tv = _tvar.find(); // Do U-F step
98  return tv == _tvar ? tv : (_tvar = tv); // Update U-F style in-place.
99  }

References com.cliffc.aa.node.Node._tvar, and com.cliffc.aa.tvar.TV2.find().

Referenced by com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.Parse.func(), com.cliffc.aa.node.Node.tvar(), com.cliffc.aa.node.ProjNode.unify(), com.cliffc.aa.node.FreshNode.unify(), com.cliffc.aa.node.MemSplitNode.unify(), com.cliffc.aa.node.CastNode.unify(), com.cliffc.aa.node.MemJoinNode.unify(), com.cliffc.aa.node.StoreNode.unify(), and com.cliffc.aa.node.LoadNode.unify().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tvar() [2/2]

TV2 com.cliffc.aa.node.Node.tvar ( int  x)
inherited

Definition at line 100 of file Node.java.

100 { return in(x).tvar(); } // nth TV2

References com.cliffc.aa.node.Node.in(), and com.cliffc.aa.node.Node.tvar().

Here is the call graph for this function:

◆ unelock()

void com.cliffc.aa.node.Node.unelock ( )
inherited

Definition at line 128 of file Node.java.

128  {
129  assert check_vals(); // elock & VALs match
130  if( _elock ) { // Edge-locked
131  _elock=false; // Unlock
132  Node x = VALS.remove(this);
133  assert x==this; // Got the right node out
134  Env.GVN.add_reduce(Env.GVN.add_flow(this));
135  }
136  }

References com.cliffc.aa.node.Node._elock, com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.GVNGCM.add_reduce(), com.cliffc.aa.node.Node.check_vals(), com.cliffc.aa.Env.GVN, and com.cliffc.aa.node.Node.VALS.

Referenced by com.cliffc.aa.node.NewNode< TypeStruct >._init(), com.cliffc.aa.node.Node.add_def(), com.cliffc.aa.node.Node.del(), com.cliffc.aa.node.Node.insert(), com.cliffc.aa.node.NewNode< TypeStruct >.kill2(), com.cliffc.aa.node.Node.pop(), com.cliffc.aa.node.Node.remove(), com.cliffc.aa.node.Node.replace(), com.cliffc.aa.node.Node.set_def(), com.cliffc.aa.node.RetNode.set_fidx(), com.cliffc.aa.node.ProjNode.set_idx(), com.cliffc.aa.node.CallNode.set_rpc(), and com.cliffc.aa.node.TestNodeSmall.testCallNodeResolve().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unhook()

public<N extends Node> N com.cliffc.aa.node.Node.unhook ( )
packageinherited

Definition at line 239 of file Node.java.

239  {
240  if( _keep==1 ) Env.GVN.add_work_all(this);
241  return unkeep();
242  }

References com.cliffc.aa.node.Node._keep, com.cliffc.aa.GVNGCM.add_work_all(), com.cliffc.aa.Env.GVN, and com.cliffc.aa.node.Node.unkeep().

Referenced by com.cliffc.aa.Parse.apply(), com.cliffc.aa.Parse.func(), and com.cliffc.aa.Parse.term().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unify() [1/2]

boolean com.cliffc.aa.node.StoreNode.unify ( boolean  test)

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 179 of file StoreNode.java.

179  {
180  return unify(this,rez(),_fld,test,"Store_unify");
181  }

References com.cliffc.aa.node.StoreNode._fld, and com.cliffc.aa.node.StoreNode.rez().

Referenced by com.cliffc.aa.node.MemPrimNode.LValueWrite.unify(), and com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.unify().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unify() [2/2]

static boolean com.cliffc.aa.node.StoreNode.unify ( Node  n,
Node  rez,
String  fld,
boolean  test,
String  alloc_site 
)
static

Definition at line 183 of file StoreNode.java.

183  {
184  // Input should be a TMem
185  TV2 tmem = n.tvar(1);
186  if( !tmem.isa("Mem") ) return false;
187  // Address needs to name the aliases
188  Type tadr = n.val(2);
189  if( !(tadr instanceof TypeMemPtr) ) return false; // Wait until types are sharper
190  TypeMemPtr tmp = (TypeMemPtr)tadr;
191  // This produces same memory
192  boolean progress = n.tvar().unify(tmem,test);
193  if( progress && test ) return progress;
194 
195  // Unify the given aliases and field against the stored type
196  return tmem.unify_alias_fld(n,tmp._aliases,fld,rez.tvar(),test,alloc_site);
197  }

References com.cliffc.aa.type.TypeMemPtr._aliases, com.cliffc.aa.tvar.TV2.isa(), com.cliffc.aa.node.StoreNode.rez(), com.cliffc.aa.node.Node.tvar(), com.cliffc.aa.tvar.TV2.unify(), com.cliffc.aa.tvar.TV2.unify_alias_fld(), and com.cliffc.aa.node.Node.val().

Here is the call graph for this function:

◆ unkeep() [1/2]

public<N extends Node> N com.cliffc.aa.node.Node.unkeep ( )
packageinherited

Definition at line 232 of file Node.java.

232 { return unkeep(1); }

References com.cliffc.aa.node.Node.unkeep().

Referenced by com.cliffc.aa.Parse._args(), com.cliffc.aa.Parse._expr(), com.cliffc.aa.Parse._expr_higher(), com.cliffc.aa.Parse._short_circuit_expr(), com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.node.MemJoinNode.add_alias_below_new(), com.cliffc.aa.Parse.apply(), com.cliffc.aa.node.ScopeNode.IfScope.check(), com.cliffc.aa.node.TestNodeSmall.check(), com.cliffc.aa.Env.close_display(), com.cliffc.aa.Parse.do_call0(), com.cliffc.aa.node.UnresolvedNode.filter(), com.cliffc.aa.Parse.go(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.Parse.ifex(), com.cliffc.aa.Parse.inc(), com.cliffc.aa.Env.init(), com.cliffc.aa.node.MemSplitNode.insert_split(), com.cliffc.aa.GVNGCM.iter(), com.cliffc.aa.node.FunNode.make_new_fun(), com.cliffc.aa.Parse.merge_exits(), com.cliffc.aa.Parse.remove_unknown_callers(), com.cliffc.aa.node.RetNode.RetNode(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.Parse.stmt(), com.cliffc.aa.Parse.struct(), com.cliffc.aa.node.Node.subsume(), com.cliffc.aa.node.CallNode.swap_new(), com.cliffc.aa.Parse.term(), com.cliffc.aa.Parse.tuple(), com.cliffc.aa.node.Node.unhook(), and com.cliffc.aa.node.Node.unkeep().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ unkeep() [2/2]

public<N extends Node> N com.cliffc.aa.node.Node.unkeep ( int  d)
packageinherited

Definition at line 234 of file Node.java.

234  {
235  assert _keep >= d; _keep-=d;
236  return (N)this;
237  }

References com.cliffc.aa.node.Node._keep.

◆ unuse()

Node com.cliffc.aa.node.Node.unuse ( Node  old)
privateinherited

Definition at line 178 of file Node.java.

178  {
179  if( old == null ) return this;
180  old._uses.del(this);
181  // Either last use of old & goes dead, or at least 1 fewer uses & changes liveness
182  Env.GVN.add_unuse(old);
183  if( old._uses._len!=0 && old._keep ==0 ) old.add_flow_def_extra(this);
184  return this;
185  }

References com.cliffc.aa.node.Node._keep, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.add_flow_def_extra(), com.cliffc.aa.GVNGCM.add_unuse(), and com.cliffc.aa.Env.GVN.

Referenced by com.cliffc.aa.node.Node.kill(), com.cliffc.aa.node.Node.pop(), com.cliffc.aa.node.Node.remove(), and com.cliffc.aa.node.Node.set_def().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ val()

Type com.cliffc.aa.node.Node.val ( int  idx)
inherited

Definition at line 470 of file Node.java.

470 { return in(idx)._val; }

References com.cliffc.aa.node.Node._val, and com.cliffc.aa.node.Node.in().

Referenced by com.cliffc.aa.node.NewNode< TypeStruct >.captured(), com.cliffc.aa.node.FunNode.check_callers(), com.cliffc.aa.node.ParmNode.err(), com.cliffc.aa.node.PrimNode.err(), com.cliffc.aa.node.PrimNode.ConvertTypeName.err(), com.cliffc.aa.node.FunNode.find_type_split(), com.cliffc.aa.node.FunNode.find_type_split_index(), com.cliffc.aa.node.AssertNode.ideal_grow(), com.cliffc.aa.node.FunNode.ideal_inline(), com.cliffc.aa.node.IfNode.ideal_reduce(), com.cliffc.aa.node.RegionNode.ideal_reduce(), com.cliffc.aa.node.MrgProjNode.ideal_reduce(), com.cliffc.aa.node.MemJoinNode.ideal_reduce(), com.cliffc.aa.node.PhiNode.ideal_reduce(), com.cliffc.aa.node.PhiNode.live_use(), com.cliffc.aa.node.RetNode.RetNode(), com.cliffc.aa.node.StoreNode.StoreNode(), com.cliffc.aa.node.ThretNode.ThretNode(), com.cliffc.aa.node.StoreNode.unify(), com.cliffc.aa.node.LoadNode.unify(), com.cliffc.aa.node.ParmNode.valid_args(), com.cliffc.aa.node.CEProjNode.value(), com.cliffc.aa.node.ErrNode.value(), com.cliffc.aa.node.ProjNode.value(), com.cliffc.aa.node.MProjNode.value(), com.cliffc.aa.node.FreshNode.value(), com.cliffc.aa.node.CastNode.value(), com.cliffc.aa.node.FP2DispNode.value(), com.cliffc.aa.node.IfNode.value(), com.cliffc.aa.node.PhiNode.value(), com.cliffc.aa.node.ParmNode.value(), com.cliffc.aa.node.MemPrimNode.LValueLength.value(), com.cliffc.aa.node.RegionNode.value(), com.cliffc.aa.node.MemJoinNode.value(), com.cliffc.aa.node.MemPrimNode.LValueRead.value(), com.cliffc.aa.node.PrimNode.value(), com.cliffc.aa.node.RetNode.value(), com.cliffc.aa.node.MemPrimNode.LValueWrite.value(), com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.value(), com.cliffc.aa.node.PrimNode.ConvertStrStr.value(), com.cliffc.aa.node.CallEpiNode.value(), com.cliffc.aa.node.PrimNode.AndI64.value(), com.cliffc.aa.node.PrimNode.OrI64.value(), com.cliffc.aa.node.PrimNode.EQ_OOP.value(), com.cliffc.aa.node.PrimNode.NE_OOP.value(), com.cliffc.aa.node.PrimNode.Not.value(), com.cliffc.aa.node.PrimNode.RandI64.value(), com.cliffc.aa.node.PrimNode.Id.value(), com.cliffc.aa.node.FunNode.value(), and com.cliffc.aa.node.Node.walk_opt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ value()

Type com.cliffc.aa.node.StoreNode.value ( GVNGCM.Mode  opt_mode)

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 112 of file StoreNode.java.

112  {
113  Node mem = mem(), adr = adr(), rez = rez();
114  Type tmem = mem._val;
115  Type tadr = adr._val;
116  Type tval = rez._val; // Value
117  if( tmem==Type.ALL || tadr==Type.ALL ) return Type.ALL;
118 
119  if( !(tmem instanceof TypeMem ) ) return tmem.oob(TypeMem.ALLMEM);
120  if( !(tadr instanceof TypeMemPtr) ) return tadr.above_center() ? tmem : TypeMem.ALLMEM;
121  TypeMem tm = (TypeMem )tmem;
122  TypeMemPtr tmp = (TypeMemPtr)tadr;
123  return tm.update(tmp._aliases,_fin,_fld,tval);
124  }

References com.cliffc.aa.type.TypeMemPtr._aliases, com.cliffc.aa.node.StoreNode._fin, com.cliffc.aa.node.StoreNode._fld, com.cliffc.aa.node.Node._val, com.cliffc.aa.type.Type< T extends Type< T >.above_center(), com.cliffc.aa.node.StoreNode.adr(), com.cliffc.aa.type.Type< T extends Type< T >.ALL, com.cliffc.aa.type.TypeMem.ALLMEM, com.cliffc.aa.node.StoreNode.mem(), com.cliffc.aa.type.Type< T extends Type< T >.oob(), com.cliffc.aa.node.StoreNode.rez(), and com.cliffc.aa.type.TypeMem.update().

Here is the call graph for this function:

◆ walk_dom_last()

Node com.cliffc.aa.node.Node.walk_dom_last ( Predicate< Node P)
packageinherited

Reimplemented in com.cliffc.aa.node.ScopeNode, com.cliffc.aa.node.RegionNode, com.cliffc.aa.node.ConNode< T extends Type >, com.cliffc.aa.node.ThunkNode, com.cliffc.aa.node.StartNode, and com.cliffc.aa.node.LoopNode.

Definition at line 863 of file Node.java.

863  {
864  assert in(0) != null; // All default control nodes pass ctrl in slot 0
865  Node n = in(0).walk_dom_last(P);
866  if( n != null ) return n; // Take last answer first
867  return P.test(this) ? this : null;
868  }

References com.cliffc.aa.node.Node.in(), and com.cliffc.aa.node.Node.walk_dom_last().

Referenced by com.cliffc.aa.node.CastNode.ideal_mono(), com.cliffc.aa.node.LoopNode.walk_dom_last(), com.cliffc.aa.node.ThunkNode.walk_dom_last(), com.cliffc.aa.node.RegionNode.walk_dom_last(), and com.cliffc.aa.node.Node.walk_dom_last().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ walk_initype()

final void com.cliffc.aa.node.Node.walk_initype ( GVNGCM  gvn,
VBitSet  bs 
)
inherited

Definition at line 691 of file Node.java.

691  {
692  if( bs.tset(_uid) ) return; // Been there, done that
693  _val = Type.ANY; // Highest value
694  _live = TypeMem.DEAD; // Not alive
695  // Walk reachable graph
696  gvn.add_flow(this);
697  for( Node use : _uses ) use.walk_initype(gvn,bs);
698  for( Node def : _defs ) if( def != null ) def.walk_initype(gvn,bs);
699  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._live, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.GVNGCM.add_flow(), com.cliffc.aa.type.Type< T extends Type< T >.ANY, com.cliffc.aa.type.TypeMem.DEAD, and com.cliffc.aa.util.VBitSet.tset().

Referenced by com.cliffc.aa.GVNGCM.gcp().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ walk_opt()

void com.cliffc.aa.node.Node.walk_opt ( VBitSet  visit)
inherited

Definition at line 797 of file Node.java.

797  {
798  assert !is_dead();
799  if( visit.tset(_uid) ) return; // Been there, done that
800 
801  // Replace any constants. Since the node computes a constant, its inputs
802  // were never marked live, and so go dead and so go to ANY and so are not
803  // available to recompute the constant later.
804  Type val = _val;
805  TypeFunPtr tfp;
806  if( val instanceof TypeFunPtr &&
807  _live.live_no_disp() &&
808  (tfp=(TypeFunPtr)val)._disp!=TypeMemPtr.NO_DISP )
809  val = tfp.make_no_disp();
810  if( should_con(val) )
812 
813  // Walk reachable graph
814  if( is_dead() ) return;
815  Env.GVN.add_work_all(this);
816  for( Node def : _defs ) if( def != null ) def.walk_opt(visit);
817  for( Node use : _uses ) use.walk_opt(visit);
818  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._live, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.GVNGCM.add_work_all(), com.cliffc.aa.node.Node.con(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.is_dead(), com.cliffc.aa.type.TypeMem.live_no_disp(), com.cliffc.aa.type.TypeFunPtr.make_no_disp(), com.cliffc.aa.type.TypeMemPtr.NO_DISP, com.cliffc.aa.GVNGCM.Mode.Opto, com.cliffc.aa.node.Node.should_con(), com.cliffc.aa.node.Node.subsume(), com.cliffc.aa.util.VBitSet.tset(), com.cliffc.aa.node.Node.val(), com.cliffc.aa.node.Node.walk_opt(), and com.cliffc.aa.node.Node.xliv().

Referenced by com.cliffc.aa.GVNGCM.gcp(), and com.cliffc.aa.node.Node.walk_opt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ walkerr_def()

void com.cliffc.aa.node.Node.walkerr_def ( HashSet< ErrMsg errs,
VBitSet  bs 
)
inherited

Definition at line 771 of file Node.java.

771  {
772  if( bs.tset(_uid) ) return; // Been there, done that
773  for( int i=0; i<_defs._len; i++ ) {
774  Node def = _defs.at(i); // Walk data defs for more errors
775  if( def == null || def._val == Type.XCTRL ) continue;
776  // Walk function bodies that are wired, but not bare FunPtrs.
777  if( def instanceof FunPtrNode && !def.is_forward_ref() )
778  continue;
779  def.walkerr_def(errs,bs);
780  }
781  if( is_prim() ) return;
782  // Skip reporting if any input is 'all', as the input should report instead.
783  for( Node def : _defs )
784  if( def !=null && def._val ==Type.ALL )
785  return; // Skip reporting.
786  adderr(errs);
787  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.adderr(), com.cliffc.aa.type.Type< T extends Type< T >.ALL, com.cliffc.aa.node.Node.is_forward_ref(), com.cliffc.aa.node.Node.is_prim(), com.cliffc.aa.util.VBitSet.tset(), com.cliffc.aa.node.Node.walkerr_def(), and com.cliffc.aa.type.Type< T extends Type< T >.XCTRL.

Referenced by com.cliffc.aa.Parse.gather_errors(), and com.cliffc.aa.node.Node.walkerr_def().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xliv()

Node com.cliffc.aa.node.Node.xliv ( GVNGCM.Mode  opt_mode)
inherited

Definition at line 500 of file Node.java.

500 { _live = live(opt_mode); return this; }

References com.cliffc.aa.node.Node._live, and com.cliffc.aa.node.Node.live().

Referenced by com.cliffc.aa.TestLive.testBasic(), com.cliffc.aa.TestLive.testNewObj(), and com.cliffc.aa.node.Node.walk_opt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xstr()

String com.cliffc.aa.node.StoreNode.xstr ( )

Reimplemented from com.cliffc.aa.node.Node.

Definition at line 26 of file StoreNode.java.

26 { return "."+_fld+"="; } // Self short name

References com.cliffc.aa.node.StoreNode._fld.

Referenced by com.cliffc.aa.node.StoreNode.str().

Here is the caller graph for this function:

◆ xval()

Type com.cliffc.aa.node.Node.xval ( )
inherited

Definition at line 460 of file Node.java.

460  {
461  Type oval = _val; // Get old type
462  Type nval = value(Env.GVN._opt_mode); // Get best type
463  if( nval!=oval ) {
464  _val = nval;
465  Env.GVN.add_flow_uses(this); // Put uses on worklist... values flows downhill
466  }
467  return nval;
468  }

References com.cliffc.aa.GVNGCM._opt_mode, com.cliffc.aa.node.Node._val, com.cliffc.aa.GVNGCM.add_flow_uses(), com.cliffc.aa.Env.GVN, and com.cliffc.aa.node.Node.value().

Referenced by com.cliffc.aa.node.MemSplitNode.add_alias(), com.cliffc.aa.node.MemJoinNode.add_alias_below_new(), com.cliffc.aa.node.NewObjNode.add_fun(), com.cliffc.aa.node.TestNodeSmall.check(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.ConTypeNode.def_fref(), com.cliffc.aa.node.LoadNode.ideal_mono(), com.cliffc.aa.node.MemJoinNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.IntrinsicNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.FunNode.make_new_fun(), com.cliffc.aa.node.FunPtrNode.merge_ref_def(), com.cliffc.aa.node.NewObjNode.promote_forward(), com.cliffc.aa.node.MemSplitNode.remove_alias(), com.cliffc.aa.node.FunNode.split_callers(), and com.cliffc.aa.TestLive.testNewObj().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ _bad

final Parse com.cliffc.aa.node.StoreNode._bad
private

◆ _defs

Ary<Node> com.cliffc.aa.node.Node._defs
inherited

Definition at line 124 of file Node.java.

Referenced by com.cliffc.aa.node.MemJoinNode.add_alias_above(), com.cliffc.aa.node.MemJoinNode.add_alias_below(), com.cliffc.aa.node.Node.add_def(), com.cliffc.aa.node.UnresolvedNode.add_def_unresolved(), com.cliffc.aa.node.CallNode.add_flow_extra(), com.cliffc.aa.GVNGCM.add_work_defs(), com.cliffc.aa.node.CallNode.arg(), com.cliffc.aa.node.MemPrimNode.ReadPrimNode.as_fun(), com.cliffc.aa.node.MemPrimNode.WritePrimNode.as_fun(), com.cliffc.aa.node.PrimNode.as_fun(), com.cliffc.aa.node.FunNode.bad_mem_use(), com.cliffc.aa.node.CallEpiNode.check_and_wire(), com.cliffc.aa.node.FunNode.check_callers(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.UnresolvedNode.copy(), com.cliffc.aa.node.Node.copy(), com.cliffc.aa.node.ConTypeNode.def_fref(), com.cliffc.aa.node.Node.del(), com.cliffc.aa.node.Node.do_flow(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.Node.equals(), com.cliffc.aa.node.MemPrimNode.err(), com.cliffc.aa.node.ErrNode.err(), com.cliffc.aa.node.ParmNode.err(), com.cliffc.aa.node.PrimNode.err(), com.cliffc.aa.node.CallNode.fdx(), com.cliffc.aa.node.UnresolvedNode.filter(), com.cliffc.aa.node.Node.find(), com.cliffc.aa.node.FunNode.find_body(), com.cliffc.aa.node.UnresolvedNode.find_fidx(), com.cliffc.aa.node.FunNode.find_type_split(), com.cliffc.aa.node.FunNode.find_type_split_index(), com.cliffc.aa.node.UnresolvedNode.funptr(), com.cliffc.aa.GVNGCM.gcp(), com.cliffc.aa.node.CallNode.get_fptr(), com.cliffc.aa.node.FunNode.has_unknown_callers(), com.cliffc.aa.node.Node.hashCode(), com.cliffc.aa.node.LoadNode.ideal_grow(), com.cliffc.aa.node.CallNode.ideal_grow(), com.cliffc.aa.node.PrimNode.AndThen.ideal_grow(), com.cliffc.aa.node.PrimNode.OrElse.ideal_grow(), com.cliffc.aa.node.FunNode.ideal_inline(), com.cliffc.aa.node.FP2DispNode.ideal_reduce(), com.cliffc.aa.node.IfNode.ideal_reduce(), com.cliffc.aa.node.RegionNode.ideal_reduce(), com.cliffc.aa.node.UnresolvedNode.ideal_reduce(), com.cliffc.aa.node.MemJoinNode.ideal_reduce(), com.cliffc.aa.node.PhiNode.ideal_reduce(), com.cliffc.aa.node.ParmNode.ideal_reduce(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.NewNode< TypeStruct >.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.Node.in(), com.cliffc.aa.node.Node.insert(), com.cliffc.aa.node.ScopeNode.is_closure(), com.cliffc.aa.node.ThunkNode.is_copy(), com.cliffc.aa.node.RegionNode.is_copy(), com.cliffc.aa.node.PrimNode.AndThen.is_copy(), com.cliffc.aa.node.PrimNode.OrElse.is_copy(), com.cliffc.aa.node.UnresolvedNode.is_pure_call(), com.cliffc.aa.node.Node.kill(), com.cliffc.aa.node.NewNode< TypeStruct >.kill2(), com.cliffc.aa.node.Node.len(), com.cliffc.aa.node.MemPrimNode.ReadPrimNode.live_use(), com.cliffc.aa.node.PhiNode.live_use(), com.cliffc.aa.node.CallNode.live_use(), com.cliffc.aa.node.DefMemNode.make_mem(), com.cliffc.aa.node.FunPtrNode.merge_ref_def(), com.cliffc.aa.node.Node.more_flow(), com.cliffc.aa.node.Node.more_ideal(), com.cliffc.aa.node.CallNode.nargs(), com.cliffc.aa.node.Node.Node(), com.cliffc.aa.node.CallEpiNode.nwired(), com.cliffc.aa.node.CProjNode.op_prec(), com.cliffc.aa.node.UnresolvedNode.op_prec(), com.cliffc.aa.node.CallNode.parms(), com.cliffc.aa.node.Node.pop(), com.cliffc.aa.node.Node.remove(), com.cliffc.aa.node.Node.replace(), com.cliffc.aa.node.FunNode.ret(), com.cliffc.aa.node.CallEpiNode.sane_wiring(), com.cliffc.aa.node.Node.set_dead(), com.cliffc.aa.node.Node.set_def(), com.cliffc.aa.node.CallNode.set_fdx(), com.cliffc.aa.node.CallEpiNode.set_is_copy(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.FunNode.split_size(), com.cliffc.aa.node.RegionNode.stacked_region(), com.cliffc.aa.node.FunPtrNode.str(), com.cliffc.aa.Parse.string(), com.cliffc.aa.node.TestNode.stx(), com.cliffc.aa.node.RetNode.tail_recursive(), com.cliffc.aa.Parse.term(), com.cliffc.aa.node.TestNode.test1monotonic(), com.cliffc.aa.node.TestNode.test1monotonic_intrinsic(), com.cliffc.aa.node.TestNode.test1monotonic_prim(), com.cliffc.aa.node.MemJoinNode.unify(), com.cliffc.aa.node.FunNode.unwire(), com.cliffc.aa.node.CallEpiNode.unwire(), com.cliffc.aa.node.DefMemNode.value(), com.cliffc.aa.node.UnresolvedNode.value(), com.cliffc.aa.node.PhiNode.value(), com.cliffc.aa.node.ParmNode.value(), com.cliffc.aa.node.ConTypeNode.value(), com.cliffc.aa.node.RegionNode.value(), com.cliffc.aa.node.MemJoinNode.value(), com.cliffc.aa.node.PrimNode.value(), com.cliffc.aa.node.PrimNode.ConvertTypeName.value(), com.cliffc.aa.node.CallNode.value(), com.cliffc.aa.node.FunNode.value(), com.cliffc.aa.node.RegionNode.walk_dom_last(), com.cliffc.aa.node.Node.walk_initype(), com.cliffc.aa.node.Node.walk_opt(), com.cliffc.aa.node.Node.walkerr_def(), com.cliffc.aa.node.CallEpiNode.wire1(), and com.cliffc.aa.node.FunPtrNode.xstr().

◆ _elock

◆ _fin

◆ _fld

◆ _INIT0_CNT

int com.cliffc.aa.node.Node._INIT0_CNT
staticinherited

◆ _keep

◆ _live

TypeMem com.cliffc.aa.node.Node._live
inherited

Definition at line 89 of file Node.java.

Referenced by com.cliffc.aa.node.LoadNode._live_use(), com.cliffc.aa.node.NewNode< TypeStruct >.add_flow_def_extra(), com.cliffc.aa.node.FunPtrNode.add_flow_extra(), com.cliffc.aa.node.Node.con(), com.cliffc.aa.node.ConNode< T extends Type >.ConNode(), com.cliffc.aa.node.Node.do_flow(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.ErrNode.ErrNode(), com.cliffc.aa.node.IfNode.flip(), com.cliffc.aa.GVNGCM.gcp(), com.cliffc.aa.node.LoadNode.get_fld2(), com.cliffc.aa.node.MrgProjNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.node.FunNode.ideal_reduce(), com.cliffc.aa.node.Node.init1(), com.cliffc.aa.node.MemSplitNode.insert_split(), com.cliffc.aa.node.MemJoinNode.live(), com.cliffc.aa.node.CallNode.live(), com.cliffc.aa.node.ThretNode.live_use(), com.cliffc.aa.node.DefMemNode.live_use(), com.cliffc.aa.node.FreshNode.live_use(), com.cliffc.aa.node.FP2DispNode.live_use(), com.cliffc.aa.node.MProjNode.live_use(), com.cliffc.aa.node.CastNode.live_use(), com.cliffc.aa.node.NewNode< TypeStruct >.live_use(), com.cliffc.aa.node.MrgProjNode.live_use(), com.cliffc.aa.node.PhiNode.live_use(), com.cliffc.aa.node.MemPrimNode.LValueLength.live_use(), com.cliffc.aa.node.AssertNode.live_use(), com.cliffc.aa.node.IntrinsicNode.live_use(), com.cliffc.aa.node.StoreNode.live_use(), com.cliffc.aa.node.FunPtrNode.live_use(), com.cliffc.aa.node.ScopeNode.live_use(), com.cliffc.aa.node.MemJoinNode.live_use(), com.cliffc.aa.node.MemPrimNode.WritePrimNode.live_use(), com.cliffc.aa.node.RetNode.live_use(), com.cliffc.aa.node.LoadNode.live_use(), com.cliffc.aa.node.CallEpiNode.live_use(), com.cliffc.aa.node.Node.live_use(), com.cliffc.aa.node.CallNode.live_use(), com.cliffc.aa.node.Node.live_uses(), com.cliffc.aa.node.Node.merge(), com.cliffc.aa.node.Node.more_flow(), com.cliffc.aa.node.Node.more_ideal(), com.cliffc.aa.node.Node.Node(), com.cliffc.aa.node.PhiNode.PhiNode(), com.cliffc.aa.GVNGCM.revalive(), com.cliffc.aa.node.RetNode.tail_recursive(), com.cliffc.aa.TestLive.testBasic(), com.cliffc.aa.TestLive.testNewObj(), com.cliffc.aa.node.ThretNode.ThretNode(), com.cliffc.aa.node.DefMemNode.value(), com.cliffc.aa.node.Node.walk_initype(), com.cliffc.aa.node.Node.walk_opt(), com.cliffc.aa.node.CallEpiNode.wire0(), and com.cliffc.aa.node.Node.xliv().

◆ _op

◆ _tvar

TV2 com.cliffc.aa.node.Node._tvar
packageinherited

◆ _uid

◆ _uses

Ary<Node> com.cliffc.aa.node.Node._uses
inherited

Definition at line 245 of file Node.java.

Referenced by com.cliffc.aa.node.CallNode._ideal_grow(), com.cliffc.aa.node.Node.add_def(), com.cliffc.aa.node.MemJoinNode.add_flow_def_extra(), com.cliffc.aa.node.MrgProjNode.add_flow_def_extra(), com.cliffc.aa.node.RegionNode.add_flow_def_extra(), com.cliffc.aa.node.CProjNode.add_flow_use_extra(), com.cliffc.aa.node.ParmNode.add_flow_use_extra(), com.cliffc.aa.node.RegionNode.add_flow_use_extra(), com.cliffc.aa.node.StoreNode.add_reduce_extra(), com.cliffc.aa.GVNGCM.add_unuse(), com.cliffc.aa.GVNGCM.add_work_uses(), com.cliffc.aa.node.MemPrimNode.ReadPrimNode.as_fun(), com.cliffc.aa.node.MemPrimNode.WritePrimNode.as_fun(), com.cliffc.aa.node.PrimNode.as_fun(), com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< TypeAry >.as_fun(), com.cliffc.aa.node.FunNode.bad_mem_use(), com.cliffc.aa.node.NewNode< TypeStruct >.captured(), com.cliffc.aa.node.CallNode.cepi(), com.cliffc.aa.node.FunNode.check_callers(), com.cliffc.aa.node.Node.check_solo_mem_writer(), com.cliffc.aa.node.MemSplitNode.check_split(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.Node.copy(), com.cliffc.aa.node.Node.del(), com.cliffc.aa.node.FunPtrNode.display_used(), com.cliffc.aa.node.Node.do_flow(), com.cliffc.aa.node.Node.do_reduce(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.ErrNode.err(), com.cliffc.aa.node.CallNode.err(), com.cliffc.aa.node.Node.find(), com.cliffc.aa.node.FunNode.find_body(), com.cliffc.aa.node.FunNode.find_type_split_index(), com.cliffc.aa.node.IfNode.flip(), com.cliffc.aa.node.FunNode.fptr(), com.cliffc.aa.node.RetNode.funptr(), com.cliffc.aa.GVNGCM.gcp(), com.cliffc.aa.node.Node.get_mem_writer(), com.cliffc.aa.node.StoreNode.ideal_grow(), com.cliffc.aa.node.PrimNode.AndThen.ideal_grow(), com.cliffc.aa.node.PrimNode.OrElse.ideal_grow(), com.cliffc.aa.node.IfNode.ideal_reduce(), com.cliffc.aa.node.RegionNode.ideal_reduce(), com.cliffc.aa.node.MrgProjNode.ideal_reduce(), com.cliffc.aa.node.MemJoinNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.IntrinsicNode.ideal_reduce(), com.cliffc.aa.node.RetNode.ideal_reduce(), com.cliffc.aa.node.FunNode.ideal_reduce(), com.cliffc.aa.node.Node.insert(), com.cliffc.aa.node.Node.is_dead(), com.cliffc.aa.node.MemSplitNode.join(), com.cliffc.aa.node.Node.kill(), com.cliffc.aa.Parse.kill(), com.cliffc.aa.node.NewNode< TypeStruct >.kill2(), com.cliffc.aa.node.ConNode< T extends Type >.live(), com.cliffc.aa.node.ScopeNode.live(), com.cliffc.aa.node.Node.live(), com.cliffc.aa.node.FunNode.make_new_fun(), com.cliffc.aa.node.FunPtrNode.merge_ref_def(), com.cliffc.aa.node.Node.more_flow(), com.cliffc.aa.node.Node.more_ideal(), com.cliffc.aa.node.NewNode< TypeStruct >.mrg(), com.cliffc.aa.node.FunNode.names(), com.cliffc.aa.node.Node.Node(), com.cliffc.aa.node.FunNode.parm(), com.cliffc.aa.node.FunNode.parms(), com.cliffc.aa.node.Node.postorder(), com.cliffc.aa.node.ProjNode.proj(), com.cliffc.aa.node.NewNode< TypeStruct >.ptr(), com.cliffc.aa.node.MemSplitNode.remove_alias(), com.cliffc.aa.Parse.remove_unknown_callers(), com.cliffc.aa.node.FunNode.ret(), com.cliffc.aa.GVNGCM.retype_mem(), com.cliffc.aa.node.Node.set_dead(), com.cliffc.aa.node.Node.set_def(), com.cliffc.aa.node.ScopeNode.set_mem(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.RegionNode.stacked_region(), com.cliffc.aa.node.RetNode.tail_recursive(), com.cliffc.aa.node.ThunkNode.thret(), com.cliffc.aa.node.Node.unuse(), com.cliffc.aa.node.CallEpiNode.unwire(), com.cliffc.aa.node.CEProjNode.value(), com.cliffc.aa.node.Node.walk_initype(), com.cliffc.aa.node.Node.walk_opt(), com.cliffc.aa.node.CallEpiNode.wire0(), com.cliffc.aa.GVNGCM.xform(), and com.cliffc.aa.GVNGCM.xreduce().

◆ _val

Type com.cliffc.aa.node.Node._val
inherited

Definition at line 88 of file Node.java.

Referenced by com.cliffc.aa.node.Node._do_reduce(), com.cliffc.aa.node.LoadNode._find_previous_store_call(), com.cliffc.aa.node.CallNode._ideal_grow(), com.cliffc.aa.node.MemPrimNode.LValueLength._live_use(), com.cliffc.aa.node.LoadNode._live_use(), com.cliffc.aa.node.FreshNode.add_flow_extra(), com.cliffc.aa.node.CastNode.add_flow_extra(), com.cliffc.aa.node.CallNode.add_flow_extra(), com.cliffc.aa.node.FunPtrNode.add_flow_use_extra(), com.cliffc.aa.node.CallEpiNode.check_and_wire(), com.cliffc.aa.node.RetNode.check_phi_type(), com.cliffc.aa.node.CastNode.checked(), com.cliffc.aa.node.MemJoinNode.combine_splits(), com.cliffc.aa.node.ScopeNode.compute_live_mem(), com.cliffc.aa.node.Node.con(), com.cliffc.aa.node.NewObjNode.create_active(), com.cliffc.aa.Parse.do_exit(), com.cliffc.aa.node.Node.do_flow(), com.cliffc.aa.node.Node.dump(), com.cliffc.aa.node.MemPrimNode.err(), com.cliffc.aa.node.ErrNode.err(), com.cliffc.aa.node.ParmNode.err(), com.cliffc.aa.node.PhiNode.err(), com.cliffc.aa.node.AssertNode.err(), com.cliffc.aa.node.IntrinsicNode.err(), com.cliffc.aa.node.StoreNode.err(), com.cliffc.aa.node.LoadNode.err(), com.cliffc.aa.node.CallNode.err(), com.cliffc.aa.node.StoreNode.escapees(), com.cliffc.aa.node.MemPrimNode.WritePrimNode.escapees(), com.cliffc.aa.node.CallNode.escapees(), com.cliffc.aa.Parse.fact(), com.cliffc.aa.node.CallNode.fidxs(), com.cliffc.aa.node.LoadNode.find_previous_store(), com.cliffc.aa.node.FunNode.find_type_split(), com.cliffc.aa.node.FunNode.find_type_split_index(), com.cliffc.aa.Parse.func(), com.cliffc.aa.Parse.gather_errors(), com.cliffc.aa.GVNGCM.gcp(), com.cliffc.aa.node.AssertNode.ideal_grow(), com.cliffc.aa.node.StoreNode.ideal_grow(), com.cliffc.aa.node.CallNode.ideal_grow(), com.cliffc.aa.node.FunNode.ideal_inline(), com.cliffc.aa.node.LoadNode.ideal_mono(), com.cliffc.aa.node.IfNode.ideal_reduce(), com.cliffc.aa.node.FreshNode.ideal_reduce(), com.cliffc.aa.node.MrgProjNode.ideal_reduce(), com.cliffc.aa.node.CastNode.ideal_reduce(), com.cliffc.aa.node.MemJoinNode.ideal_reduce(), com.cliffc.aa.node.LoadNode.ideal_reduce(), com.cliffc.aa.node.PhiNode.ideal_reduce(), com.cliffc.aa.node.StoreNode.ideal_reduce(), com.cliffc.aa.node.ParmNode.ideal_reduce(), com.cliffc.aa.node.CallEpiNode.ideal_reduce(), com.cliffc.aa.node.IntrinsicNode.ideal_reduce(), com.cliffc.aa.node.RetNode.ideal_reduce(), com.cliffc.aa.node.FunPtrNode.ideal_reduce(), com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.node.CallNode.ideal_reduce(), com.cliffc.aa.Parse.ifex(), com.cliffc.aa.node.Node.init1(), com.cliffc.aa.node.IfNode.is_copy(), com.cliffc.aa.node.CallNode.is_copy(), com.cliffc.aa.node.CallNode.least_cost(), com.cliffc.aa.node.Node.live(), com.cliffc.aa.node.CallNode.live(), com.cliffc.aa.node.MemPrimNode.ReadPrimNode.live_use(), com.cliffc.aa.node.CallEpiNode.live_use(), com.cliffc.aa.node.CallNode.live_use(), com.cliffc.aa.node.CallNode.live_use_call(), com.cliffc.aa.node.Node.live_uses(), com.cliffc.aa.Env.lookup_valtype(), com.cliffc.aa.Parse.merge_exits(), com.cliffc.aa.node.Node.more_flow(), com.cliffc.aa.node.Node.more_ideal(), com.cliffc.aa.node.Node.Node(), com.cliffc.aa.GVNGCM.remove_ambi(), com.cliffc.aa.GVNGCM.retype_mem(), com.cliffc.aa.node.ScopeNode.set_mem(), com.cliffc.aa.node.TestNode.set_type(), com.cliffc.aa.node.Node.sharptr(), com.cliffc.aa.node.Node.should_con(), com.cliffc.aa.node.FunNode.split_callers(), com.cliffc.aa.node.FunNode.split_size(), com.cliffc.aa.node.RetNode.tail_recursive(), com.cliffc.aa.Parse.term(), com.cliffc.aa.node.TestNode.test1jig(), com.cliffc.aa.node.TestNode.test1monotonic_init(), com.cliffc.aa.TestLive.testBasic(), com.cliffc.aa.node.TestNodeSmall.testCallNodeResolve2(), com.cliffc.aa.node.TestNode.testMonotonic(), com.cliffc.aa.TestLive.testNewObj(), com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay(), com.cliffc.aa.node.TestNodeSmall.testUnresolvedAdd(), com.cliffc.aa.Parse.tstmt(), com.cliffc.aa.Parse.type0(), com.cliffc.aa.Parse.typechk(), com.cliffc.aa.node.NewObjNode.update(), com.cliffc.aa.node.Node.val(), com.cliffc.aa.node.DefMemNode.value(), com.cliffc.aa.node.MProjNode.value(), com.cliffc.aa.node.MemSplitNode.value(), com.cliffc.aa.node.UnresolvedNode.value(), com.cliffc.aa.node.MrgProjNode.value(), com.cliffc.aa.node.AssertNode.value(), com.cliffc.aa.node.IntrinsicNode.value(), com.cliffc.aa.node.StoreNode.value(), com.cliffc.aa.node.FunPtrNode.value(), com.cliffc.aa.node.RetNode.value(), com.cliffc.aa.node.LoadNode.value(), com.cliffc.aa.node.CallEpiNode.value(), com.cliffc.aa.node.CallNode.value(), com.cliffc.aa.node.Node.walk_initype(), com.cliffc.aa.node.Node.walk_opt(), com.cliffc.aa.node.Node.walkerr_def(), com.cliffc.aa.node.CallEpiNode.wire0(), and com.cliffc.aa.node.Node.xval().

◆ CNT

int com.cliffc.aa.node.Node.CNT =1
staticprivateinherited

◆ FLOW_VISIT

final VBitSet com.cliffc.aa.node.Node.FLOW_VISIT = new VBitSet()
staticprivateinherited

Definition at line 746 of file Node.java.

Referenced by com.cliffc.aa.node.Node.more_flow().

◆ LIVE

◆ OP_CALL

◆ OP_CALLEPI

final byte com.cliffc.aa.node.Node.OP_CALLEPI = 2
staticpackageinherited

◆ OP_CAST

final byte com.cliffc.aa.node.Node.OP_CAST = 3
staticpackageinherited

◆ OP_CON

final byte com.cliffc.aa.node.Node.OP_CON = 4
staticpackageinherited

Definition at line 20 of file Node.java.

Referenced by com.cliffc.aa.node.ConNode< T extends Type >.ConNode().

◆ OP_CONTYPE

final byte com.cliffc.aa.node.Node.OP_CONTYPE = 5
staticpackageinherited

Definition at line 21 of file Node.java.

Referenced by com.cliffc.aa.node.ConTypeNode.ConTypeNode().

◆ OP_CPROJ

◆ OP_DEFMEM

final byte com.cliffc.aa.node.Node.OP_DEFMEM = 7
staticpackageinherited

◆ OP_ERR

final byte com.cliffc.aa.node.Node.OP_ERR = 8
staticpackageinherited

Definition at line 24 of file Node.java.

Referenced by com.cliffc.aa.node.ErrNode.ErrNode().

◆ OP_FP2DISP

final byte com.cliffc.aa.node.Node.OP_FP2DISP =10
staticpackageinherited

Definition at line 26 of file Node.java.

Referenced by com.cliffc.aa.node.FP2DispNode.FP2DispNode().

◆ OP_FRESH

final byte com.cliffc.aa.node.Node.OP_FRESH = 9
staticpackageinherited

◆ OP_FUN

◆ OP_FUNPTR

final byte com.cliffc.aa.node.Node.OP_FUNPTR =12
staticpackageinherited

◆ OP_IF

◆ OP_JOIN

final byte com.cliffc.aa.node.Node.OP_JOIN =14
staticpackageinherited

Definition at line 30 of file Node.java.

Referenced by com.cliffc.aa.node.MemJoinNode.MemJoinNode().

◆ OP_LOAD

final byte com.cliffc.aa.node.Node.OP_LOAD =15
staticpackageinherited

◆ OP_LOOP

final byte com.cliffc.aa.node.Node.OP_LOOP =16
staticpackageinherited

◆ OP_MAX

final byte com.cliffc.aa.node.Node.OP_MAX =36
staticpackageinherited

Definition at line 52 of file Node.java.

Referenced by com.cliffc.aa.node.FunNode.split_size().

◆ OP_NAME

final byte com.cliffc.aa.node.Node.OP_NAME =17
staticpackageinherited

◆ OP_NEWARY

final byte com.cliffc.aa.node.Node.OP_NEWARY =19
staticpackageinherited

Definition at line 35 of file Node.java.

◆ OP_NEWOBJ

final byte com.cliffc.aa.node.Node.OP_NEWOBJ =18
staticpackageinherited

◆ OP_NEWSTR

final byte com.cliffc.aa.node.Node.OP_NEWSTR =20
staticpackageinherited

◆ OP_PARM

final byte com.cliffc.aa.node.Node.OP_PARM =21
staticpackageinherited

◆ OP_PHI

◆ OP_PRIM

final byte com.cliffc.aa.node.Node.OP_PRIM =23
staticpackageinherited

◆ OP_PROJ

final byte com.cliffc.aa.node.Node.OP_PROJ =24
staticpackageinherited

◆ OP_REGION

◆ OP_RET

◆ OP_SCOPE

final byte com.cliffc.aa.node.Node.OP_SCOPE =27
staticpackageinherited

◆ OP_SPLIT

final byte com.cliffc.aa.node.Node.OP_SPLIT =28
staticpackageinherited

◆ OP_START

final byte com.cliffc.aa.node.Node.OP_START =29
staticpackageinherited

◆ OP_STMEM

final byte com.cliffc.aa.node.Node.OP_STMEM =30
staticpackageinherited

Definition at line 46 of file Node.java.

Referenced by com.cliffc.aa.node.StartMemNode.StartMemNode().

◆ OP_STORE

final byte com.cliffc.aa.node.Node.OP_STORE =31
staticpackageinherited

◆ OP_THRET

final byte com.cliffc.aa.node.Node.OP_THRET =32
staticpackageinherited

Definition at line 48 of file Node.java.

Referenced by com.cliffc.aa.node.ThretNode.ThretNode().

◆ OP_THUNK

final byte com.cliffc.aa.node.Node.OP_THUNK =33
staticpackageinherited

Definition at line 49 of file Node.java.

Referenced by com.cliffc.aa.node.ThunkNode.ThunkNode().

◆ OP_TYPE

final byte com.cliffc.aa.node.Node.OP_TYPE =34
staticpackageinherited

Definition at line 50 of file Node.java.

Referenced by com.cliffc.aa.node.AssertNode.AssertNode().

◆ OP_UNR

final byte com.cliffc.aa.node.Node.OP_UNR =35
staticpackageinherited

Definition at line 51 of file Node.java.

Referenced by com.cliffc.aa.node.UnresolvedNode.UnresolvedNode().

◆ STRS

final String [] com.cliffc.aa.node.Node.STRS = new String[] { null, "Call", "CallEpi", "Cast", "Con", "ConType", "CProj", "DefMem", "Err", "Fresh", "FP2Disp", "Fun", "FunPtr", "If", "Join", "Load", "Loop", "Name", "NewObj", "NewAry", "NewStr", "Parm", "Phi", "Prim", "Proj", "Region", "Return", "Scope","Split", "Start", "StartMem", "Store", "Thret", "Thunk", "Type", "Unresolved" }
staticprivateinherited

Definition at line 54 of file Node.java.

Referenced by com.cliffc.aa.node.Node.xstr().

◆ VALS


The documentation for this class was generated from the following file:
com.cliffc.aa.type.Bits.dual
B dual()
Definition: Bits.java:368
com.cliffc.aa.type.BitsAlias.FULL
static BitsAlias FULL
Definition: BitsAlias.java:27
com.cliffc.aa.node.StoreNode.StoreNode
StoreNode(Node mem, Node adr, Node val, Access fin, String fld, Parse bad)
Definition: StoreNode.java:18
com.cliffc.aa.node.Node.OP_PROJ
static final byte OP_PROJ
Definition: Node.java:40
com.cliffc.aa.util.Ary.at
E at(int i)
Definition: Ary.java:25
com.cliffc.aa.type.TypeMemPtr.NO_DISP
static final Type NO_DISP
Definition: TypeMemPtr.java:80
com.cliffc.aa.node.Node._do_reduce
Node _do_reduce()
Definition: Node.java:570
com.cliffc.aa.node.StoreNode.xstr
String xstr()
Definition: StoreNode.java:26
com.cliffc.aa.node.StoreNode.unify
boolean unify(boolean test)
Definition: StoreNode.java:179
com.cliffc.aa.tvar.TV2.unify
boolean unify(TV2 that, boolean test)
Definition: TV2.java:288
com.cliffc.aa.type.TypeMem.ld
TypeObj ld(TypeMemPtr ptr)
Definition: TypeMem.java:325
com.cliffc.aa.GVNGCM.add_unuse
Node add_unuse(Node n)
Definition: GVNGCM.java:59
com.cliffc.aa.type.TypeMem.DEAD
static final TypeMem DEAD
Definition: TypeMem.java:226
com.cliffc.aa.type.TypeFunPtr
Definition: TypeFunPtr.java:23
com.cliffc.aa.util.Ary.push
E push(E e)
Add element in amortized constant time.
Definition: Ary.java:58
com.cliffc.aa.node.StoreNode.adr
Node adr()
Definition: StoreNode.java:31
com.cliffc.aa.node.Node.OP_START
static final byte OP_START
Definition: Node.java:45
com.cliffc.aa.type.Type.isa
boolean isa(Type t)
Definition: Type.java:623
com.cliffc.aa.type.TypeMem.live_no_disp
boolean live_no_disp()
Definition: TypeMem.java:320
com.cliffc.aa.node.Node.walk_dom_last
Node walk_dom_last(Predicate< Node > P)
Definition: Node.java:863
com.cliffc.aa.type.TypeMem.update
TypeMem update(BitsAlias aliases, Access fin, String fld, Type val)
Definition: TypeMem.java:459
com.cliffc.aa.node.Node.live
TypeMem live(GVNGCM.Mode opt_mode)
Definition: Node.java:478
com.cliffc.aa.AA.UID
static int UID
Definition: AA.java:43
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.util.Util.eq
static boolean eq(String s0, String s1)
Definition: Util.java:16
com.cliffc.aa.GVNGCM.add_mono
public< N extends Node > N add_mono(N n)
Definition: GVNGCM.java:51
com.cliffc.aa.node.Node._live
TypeMem _live
Definition: Node.java:89
com.cliffc.aa.node.Node.OP_LOOP
static final byte OP_LOOP
Definition: Node.java:32
com.cliffc.aa.GVNGCM.add_flow_uses
void add_flow_uses(Node n)
Definition: GVNGCM.java:55
com.cliffc
com.cliffc.aa.node.Node.get_mem_writer
Node get_mem_writer()
Definition: Node.java:840
com.cliffc.aa.type.TypeMem.LIVE_BOT
static final TypeMem LIVE_BOT
Definition: TypeMem.java:226
com.cliffc.aa.node.Node.add_flow_use_extra
void add_flow_use_extra(Node chg)
Definition: Node.java:514
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.node.Node.subsume
Node subsume(Node nnn)
Definition: Node.java:201
com.cliffc.aa.node.Node.VALS
static final ConcurrentHashMap< Node, Node > VALS
Definition: Node.java:537
com.cliffc.aa.node.Node.OP_SPLIT
static final byte OP_SPLIT
Definition: Node.java:44
com.cliffc.aa.type.TypeMem.is_live
boolean is_live()
Definition: TypeMem.java:560
com.cliffc.aa.type.TypeMem.ESCAPE
static final TypeMem ESCAPE
Definition: TypeMem.java:227
com.cliffc.aa.node.StoreNode._bad
final Parse _bad
Definition: StoreNode.java:17
com.cliffc.aa.GVNGCM.add_work_all
Node add_work_all(Node n)
Definition: GVNGCM.java:73
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.node.Node.OP_CALLEPI
static final byte OP_CALLEPI
Definition: Node.java:18
com.cliffc.aa.util.Ary
Definition: Ary.java:11
com.cliffc.aa.node.Node.is_multi_tail
boolean is_multi_tail()
Definition: Node.java:355
com.cliffc.aa.node.Node.add_flow_def_extra
void add_flow_def_extra(Node chg)
Definition: Node.java:515
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.node.Node.do_mono
Node do_mono()
Definition: Node.java:632
com.cliffc.aa.type.TypeFld.Access.RW
RW
Definition: TypeFld.java:111
com.cliffc.aa.node.Node.keep
public< N extends Node > N keep()
Definition: Node.java:228
com.cliffc.aa.util.Ary._len
int _len
Definition: Ary.java:13
com.cliffc.aa.node.Node.err
ErrMsg err(boolean fast)
Definition: Node.java:526
com.cliffc.aa.node.Node.unelock
void unelock()
Definition: Node.java:128
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.Node.find
Node find(int uid)
Definition: Node.java:427
com.cliffc.aa.type.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.node.Node.OP_FUN
static final byte OP_FUN
Definition: Node.java:27
com.cliffc.aa.node.Node.add_def
Node add_def(Node n)
Definition: Node.java:152
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.type.TypeStruct
A memory-based collection of optionally named fields.
Definition: TypeStruct.java:50
com.cliffc.aa.AA.unimpl
static RuntimeException unimpl()
Definition: AA.java:10
com.cliffc.aa.type.Type.str
SB str(SB sb, VBitSet dups, TypeMem mem, boolean debug)
Definition: Type.java:131
com.cliffc.aa.node.Node.OP_CALL
static final byte OP_CALL
Definition: Node.java:17
com.cliffc.aa.node.StoreNode.add_reduce_extra
void add_reduce_extra()
Definition: StoreNode.java:105
com.cliffc.aa.node.Node.ideal_reduce
Node ideal_reduce()
Definition: Node.java:441
com.cliffc.aa.type.Type.ALL
static final Type ALL
Definition: Type.java:324
com.cliffc.aa.tvar.TV2.unify_alias_fld
boolean unify_alias_fld(Node ldst, BitsAlias aliases, String fld, TV2 tv, boolean test, String alloc_site)
Definition: TV2.java:488
com.cliffc.aa.node.Node.is_prim
boolean is_prim()
Definition: Node.java:260
com.cliffc.aa.node.Node.postorder
void postorder(Ary< Node > nodes, VBitSet bs)
Definition: Node.java:383
com.cliffc.aa.node.Node.check_solo_mem_writer
boolean check_solo_mem_writer(Node memw)
Definition: Node.java:845
com.cliffc.aa.node.Node.Node
Node(byte op)
Definition: Node.java:247
com.cliffc.aa.util.VBitSet.tset
boolean tset(int idx)
Definition: VBitSet.java:7
com.cliffc.aa.node.StoreNode._fld
final String _fld
Definition: StoreNode.java:15
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition: Env.java:13
com.cliffc.aa.node.FunNode.name
static String name(int fidx, boolean debug)
Definition: FunNode.java:109
com.cliffc.aa.node.Node.CNT
static int CNT
Definition: Node.java:59
com.cliffc.aa.type.TypeObj
Definition: TypeObj.java:15
com.cliffc.aa.type.TypeFld._access
Access _access
Definition: TypeFld.java:17
com.cliffc.aa.node.Node.unkeep
public< N extends Node > N unkeep()
Definition: Node.java:232
com.cliffc.aa.type.Type.is_con
boolean is_con()
Definition: Type.java:776
com.cliffc.aa.node.Node.FLOW_VISIT
static final VBitSet FLOW_VISIT
Definition: Node.java:746
com.cliffc.aa.type.Type.above_center
boolean above_center()
Definition: Type.java:741
com.cliffc.aa.node.Node.should_con
boolean should_con(Type t)
Definition: Node.java:651
com.cliffc.aa.node.Node.is_dead
boolean is_dead()
Definition: Node.java:820
com.cliffc.aa.node.Node.value
abstract Type value(GVNGCM.Mode opt_mode)
com.cliffc.aa.node.Node.OP_IF
static final byte OP_IF
Definition: Node.java:29
com.cliffc.aa.node.Node.kill
Node kill()
Definition: Node.java:211
com.cliffc.aa.type.BitsAlias.NIL
static BitsAlias NIL
Definition: BitsAlias.java:27
com.cliffc.aa.node.Node._keep
byte _keep
Definition: Node.java:86
com.cliffc.aa.node.StoreNode.bad
ErrMsg bad(String msg, boolean fast, TypeObj to)
Definition: StoreNode.java:163
com.cliffc.aa.node.Node.adderr
void adderr(HashSet< ErrMsg > errs)
Definition: Node.java:789
com.cliffc.aa.node.Node.merge
Node merge(Node x)
Definition: Node.java:702
com.cliffc.aa.util.Util
Definition: Util.java:5
com.cliffc.aa.type.Type.CTRL
static final Type CTRL
Definition: Type.java:326
com.cliffc.aa.type.TypeObj.UNUSED
static final TypeObj UNUSED
Definition: TypeObj.java:46
com.cliffc.aa.util.SB.s
SB s()
Definition: SB.java:41
com.cliffc.aa.node.FunNode.find_fidx
static FunNode find_fidx(int fidx)
Definition: FunNode.java:101
com.cliffc.aa.type.TypeMem.basic_live
boolean basic_live()
Definition: TypeMem.java:561
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
com.cliffc.aa.node.Node.OP_SCOPE
static final byte OP_SCOPE
Definition: Node.java:43
com.cliffc.aa.GVNGCM.on_flow
boolean on_flow(Node n)
Definition: GVNGCM.java:40
com.cliffc.aa.type.Type.must_nil
boolean must_nil()
Definition: Type.java:845
com.cliffc.aa.tvar.TV2.make_leaf
static TV2 make_leaf(Node n, @NotNull String alloc_site)
Definition: TV2.java:126
com.cliffc.aa.node.Node.set_dead
void set_dead()
Definition: Node.java:821
com.cliffc.aa.type.Type.may_be_con
boolean may_be_con()
Definition: Type.java:759
com.cliffc.aa.type.TypeMem.ALIVE
static final TypeMem ALIVE
Definition: TypeMem.java:226
com.cliffc.aa.type.Type.XCTRL
static final Type XCTRL
Definition: Type.java:327
com.cliffc.aa.GVNGCM
Definition: GVNGCM.java:12
com.cliffc.aa.type.Type.sharptr
Type sharptr(Type ptr)
Definition: Type.java:930
com.cliffc.aa.node.Node.unuse
Node unuse(Node old)
Definition: Node.java:178
com.cliffc.aa.node.Node.OP_NEWOBJ
static final byte OP_NEWOBJ
Definition: Node.java:34
com.cliffc.aa.type.TypeFunPtr.make_no_disp
TypeFunPtr make_no_disp()
Definition: TypeFunPtr.java:77
com.cliffc.aa.node.Node._INIT0_CNT
static int _INIT0_CNT
Definition: Node.java:58
com.cliffc.aa.type.Type.simple_ptr
Type simple_ptr()
Definition: Type.java:358
com.cliffc.aa.node.FreshNode
Definition: FreshNode.java:11
com.cliffc.aa.type.BitsAlias.EMPTY
static BitsAlias EMPTY
Definition: BitsAlias.java:27
com.cliffc.aa.util.VBitSet
Definition: VBitSet.java:5
com.cliffc.aa.node.Node.add_reduce_extra
void add_reduce_extra()
Definition: Node.java:517
com.cliffc.aa.node.Node.more_flow
final int more_flow(boolean lifting)
Definition: Node.java:747
com.cliffc.aa.node.Node.insert
Node insert(int idx, Node n)
Definition: Node.java:165
com.cliffc.aa.util.SB
Tight/tiny StringBuilder wrapper.
Definition: SB.java:8
com.cliffc.aa.node.StoreNode._fin
final Access _fin
Definition: StoreNode.java:16
com.cliffc.aa.node.Node.con
static Node con(Type t)
Definition: Node.java:670
com.cliffc.aa.tvar.TV2.isa
boolean isa(String s)
Definition: TV2.java:77
com.cliffc.aa.node.Node._uses
Ary< Node > _uses
Definition: Node.java:245
com.cliffc.aa.node.Node.OP_NEWSTR
static final byte OP_NEWSTR
Definition: Node.java:36
com.cliffc.aa.node.Node.is_mem
boolean is_mem()
Definition: Node.java:838
com.cliffc.aa.node.Node.ideal_grow
Node ideal_grow()
Definition: Node.java:450
com.cliffc.aa.AA
an implementation of language AA
Definition: AA.java:9
com.cliffc.aa.node.Node._header
static void _header(FunNode fun, SB sb)
Definition: Node.java:380
com.cliffc.aa.node.Node.OP_CPROJ
static final byte OP_CPROJ
Definition: Node.java:22
com.cliffc.aa.node.Node.is_CFG
boolean is_CFG()
Definition: Node.java:356
com.cliffc.aa.node.Node.OP_STORE
static final byte OP_STORE
Definition: Node.java:47
com.cliffc.aa.type.TypeStruct.fld_find
int fld_find(String fld)
Definition: TypeStruct.java:1038
com.cliffc.aa.node.Node.val
Type val(int idx)
Definition: Node.java:470
com.cliffc.aa.node.Node.LIVE
static final VBitSet LIVE
Definition: Node.java:60
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.Node.all_live
TypeMem all_live()
Definition: Node.java:509
com.cliffc.aa.util.SB.nl
SB nl()
Definition: SB.java:48
com.cliffc.aa.node.StoreNode.escapees
BitsAlias escapees()
Definition: StoreNode.java:125
com.cliffc.aa.node.Node.xstr
String xstr()
Definition: Node.java:282
com.cliffc.aa.type.TypeStruct.fld
TypeFld fld(int idx)
Definition: TypeStruct.java:1012
com.cliffc.aa.node.Node._elock
boolean _elock
Definition: Node.java:87
com.cliffc.aa.node.Node.is_forward_ref
boolean is_forward_ref()
Definition: Node.java:830
com.cliffc.aa.util.SB.p
SB p(String s)
Definition: SB.java:13
com.cliffc.aa.type.TypeMemPtr._aliases
BitsAlias _aliases
Definition: TypeMemPtr.java:16
com.cliffc.aa.node.Node.do_grow
Node do_grow()
Definition: Node.java:639
com.cliffc.aa.GVNGCM.add_reduce
public< N extends Node > N add_reduce(N n)
Definition: GVNGCM.java:49
com.cliffc.aa.node.CallEpiNode
Definition: CallEpiNode.java:24
com.cliffc.aa.node.Node._op
final byte _op
Definition: Node.java:85
com.cliffc.aa.node.Node.walkerr_def
void walkerr_def(HashSet< ErrMsg > errs, VBitSet bs)
Definition: Node.java:771
com.cliffc.aa.tvar.TV2
Definition: TV2.java:23
com.cliffc.aa.GVNGCM.Mode.Opto
Opto
Definition: GVNGCM.java:17
com.cliffc.aa.GVNGCM.add_flow_defs
void add_flow_defs(Node n)
Definition: GVNGCM.java:54
com.cliffc.aa.node.Node.OP_PARM
static final byte OP_PARM
Definition: Node.java:37
com.cliffc.aa.type.Type.oob
Type oob()
Definition: Type.java:635
com.cliffc.aa.node.Node.is_multi_head
boolean is_multi_head()
Definition: Node.java:354
com.cliffc.aa.node.Node.xval
Type xval()
Definition: Node.java:460
com.cliffc.aa.node.Node.OP_RET
static final byte OP_RET
Definition: Node.java:42
com.cliffc.aa.GVNGCM._opt_mode
Mode _opt_mode
Definition: GVNGCM.java:22
com.cliffc.aa.node.Node.str
String str()
Definition: Node.java:283
com.cliffc.aa.node.StoreNode.rez
Node rez()
Definition: StoreNode.java:32
com.cliffc.aa.node.Node.newuid
int newuid()
Definition: Node.java:61
com.cliffc.aa.GVNGCM.add_flow
public< N extends Node > N add_flow(N n)
Definition: GVNGCM.java:50
com.cliffc.aa.util.SB.i
SB i(int d)
Definition: SB.java:38
com.cliffc.aa.GVNGCM.add_dead
void add_dead(Node n)
Definition: GVNGCM.java:48
com.cliffc.aa.node.Node.dump
String dump(int max)
Definition: Node.java:286
com.cliffc.aa.type.TypeFld.Access
Definition: TypeFld.java:109
com.cliffc.aa.node.Node._tvar
TV2 _tvar
Definition: Node.java:94
com.cliffc.aa.node.Node.ideal_mono
Node ideal_mono()
Definition: Node.java:445
com.cliffc.aa.node.Node._uid
int _uid
Definition: Node.java:84
com.cliffc.aa.node.Node.tvar
TV2 tvar()
Definition: Node.java:96
com.cliffc.aa.node.FunNode
Definition: FunNode.java:58
com.cliffc.aa.node.Node.check_vals
boolean check_vals()
Definition: Node.java:143
com.cliffc.aa.Env.ANY
static ConNode ANY
Definition: Env.java:24
com
com.cliffc.aa.node.Node.do_reduce
Node do_reduce()
Definition: Node.java:545
com.cliffc.aa.node.Node.replace
void replace(Node old, Node nnn)
Definition: Node.java:163
com.cliffc.aa.node.Node.new_tvar
TV2 new_tvar(String alloc_site)
Definition: Node.java:101
com.cliffc.aa.node.Node.OP_PHI
static final byte OP_PHI
Definition: Node.java:38
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.util.SB.toString
String toString()
Definition: SB.java:62
com.cliffc.aa.node.Node.walk_opt
void walk_opt(VBitSet visit)
Definition: Node.java:797
com.cliffc.aa.GVNGCM.on_dead
boolean on_dead(Node n)
Definition: GVNGCM.java:39
com.cliffc.aa.node.Node.add_flow_extra
void add_flow_extra(Type old)
Definition: Node.java:513
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition: Node.java:124
com.cliffc.aa.node.StoreNode.mem
Node mem()
Definition: StoreNode.java:30
com.cliffc.aa.tvar.TV2.find
TV2 find()
Definition: TV2.java:240
com.cliffc.aa.type.TypeMemPtr
Definition: TypeMemPtr.java:14
com.cliffc.aa.node.Node.OP_REGION
static final byte OP_REGION
Definition: Node.java:41
com.cliffc.aa.Env.ALL_CTRL
static ConNode ALL_CTRL
Definition: Env.java:20
com.cliffc.aa.node.FunNode.ret
RetNode ret()
Definition: FunNode.java:900
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