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

Classes

class  IfScope
 

Public Member Functions

 ScopeNode (HashMap< String, ConTypeNode > types, Node ctl, Node mem, Node ptr, Node rez)
 
 ScopeNode (Parse open, boolean closure)
 
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 ()
 
void add_type (String name, ConTypeNode t)
 
TypeMem all_live ()
 
Node check_if (boolean arm, Parse bad, GVNGCM gvn, Node ctrl, Node mem)
 
Node copy (boolean copy_edges)
 
Node ctrl ()
 
void def_if (String name, Access mutable, boolean create)
 
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)
 
RegionNode early_ctrl ()
 
void early_kill ()
 
PhiNode early_mem ()
 
PhiNode early_val ()
 
boolean equals (Object o)
 
ErrMsg err (boolean fast)
 
Node find (int uid)
 
void flip_if ()
 
Node get (String name)
 
Node get_mem_writer ()
 
ConTypeNode get_type (int alias)
 
ConTypeNode get_type (String name)
 
int hashCode ()
 
Node ideal_grow ()
 
Node ideal_mono ()
 
Node ideal_reduce ()
 
Node in (int i)
 
void init ()
 
Node init1 ()
 
Node insert (int idx, Node n)
 
void insert (Node nnn)
 
boolean is_closure ()
 
Node is_copy (int idx)
 
boolean is_dead ()
 
boolean is_forward_ref ()
 
boolean is_mem ()
 
boolean is_multi_head ()
 
boolean is_mutable (String name)
 
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 ()
 
Node mem ()
 
final int more_flow (boolean lifting)
 
final boolean more_ideal (VBitSet bs)
 
TV2 new_tvar (String alloc_site)
 
byte op_prec ()
 
Node pop ()
 
void pop_if ()
 
Node ptr ()
 
void push_if ()
 
Node remove (int idx)
 
void replace (Node old, Node nnn)
 
void replace_mem (Node st)
 
Node rez ()
 
void set_dead ()
 
Node set_def (int idx, Node n)
 
Node set_mem (Node n)
 
void set_ptr (Node n)
 
void set_rez (Node n)
 
Type sharptr (Node mem)
 
boolean should_con (Type t)
 
NewObjNode stk ()
 
Node subsume (Node nnn)
 
boolean test_if ()
 
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 ()
 

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 ()
 
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)
 
int newuid ()
 
public< N extends Node > N set_ctrl (N n)
 
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]
 
static TypeMem compute_live_mem (Node mem, Node rez)
 

Package Attributes

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

Node _do_reduce ()
 
void adderr (HashSet< ErrMsg > errs)
 
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)
 
Node find (int uid, VBitSet bs)
 
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

Ary< IfScope_ifs
 
final HashMap< String, ConTypeNode_types
 

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 17 of file ScopeNode.java.

Constructor & Destructor Documentation

◆ ScopeNode() [1/2]

com.cliffc.aa.node.ScopeNode.ScopeNode ( Parse  open,
boolean  closure 
)

Definition at line 23 of file ScopeNode.java.

23  {
24  super(OP_SCOPE,null,null,null,null);
25  if( closure ) { add_def(null); add_def(null); add_def(null); } // Wire up an early-function-exit path
26  _types = new HashMap<>();
27  _ifs = null;
28  keep();
29  }

References com.cliffc.aa.node.ScopeNode._ifs, com.cliffc.aa.node.ScopeNode._types, com.cliffc.aa.node.Node.add_def(), com.cliffc.aa.node.Node.keep(), and com.cliffc.aa.node.Node.OP_SCOPE.

Here is the call graph for this function:

◆ ScopeNode() [2/2]

com.cliffc.aa.node.ScopeNode.ScopeNode ( HashMap< String, ConTypeNode types,
Node  ctl,
Node  mem,
Node  ptr,
Node  rez 
)

Definition at line 30 of file ScopeNode.java.

30  {
31  super(OP_SCOPE,ctl,mem,ptr,rez);
32  _types = types;
33  keep();
34  }

References com.cliffc.aa.node.ScopeNode._types, com.cliffc.aa.node.Node.keep(), com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.node.Node.OP_SCOPE, com.cliffc.aa.node.ScopeNode.ptr(), and com.cliffc.aa.node.ScopeNode.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.Node.add_flow_extra ( Type  old)
inherited

Reimplemented in com.cliffc.aa.node.CallNode, com.cliffc.aa.node.FunPtrNode, com.cliffc.aa.node.StoreNode, com.cliffc.aa.node.CastNode, and com.cliffc.aa.node.FreshNode.

Definition at line 513 of file Node.java.

513 { }

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

Here is the caller 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.Node.add_reduce_extra ( )
inherited

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

Definition at line 517 of file Node.java.

517 { }

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

Here is the caller graph for this function:

◆ add_type()

void com.cliffc.aa.node.ScopeNode.add_type ( String  name,
ConTypeNode  t 
)

Definition at line 97 of file ScopeNode.java.

97  {
98  assert _types.get(name)==null;
99  _types.put( name, t );
100  }

References com.cliffc.aa.node.ScopeNode._types.

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

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:

◆ all_live()

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

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

Definition at line 124 of file ScopeNode.java.

124 { return TypeMem.ALLMEM; }

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

◆ check_if()

Node com.cliffc.aa.node.ScopeNode.check_if ( boolean  arm,
Parse  bad,
GVNGCM  gvn,
Node  ctrl,
Node  mem 
)

Definition at line 196 of file ScopeNode.java.

196 { return _ifs.last().check(this,arm,bad,gvn,ctrl,mem); }

References com.cliffc.aa.node.ScopeNode._ifs, com.cliffc.aa.node.ScopeNode.ctrl(), and com.cliffc.aa.node.ScopeNode.mem().

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

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:

◆ compute_live_mem()

static TypeMem com.cliffc.aa.node.ScopeNode.compute_live_mem ( Node  mem,
Node  rez 
)
staticpackage

Definition at line 130 of file ScopeNode.java.

130  {
131  Type tmem = mem._val;
132  Type trez = rez._val;
133  if( !(tmem instanceof TypeMem ) ) return tmem.oob(TypeMem.ALLMEM); // Not a memory?
134  if( TypeMemPtr.OOP.isa(trez) ) return ((TypeMem)tmem).flatten_fields(); // All possible pointers, so all memory is alive
135  if( !(trez instanceof TypeMemPtr) ) return TypeMem.ANYMEM; // Not a pointer, basic live only
136  if( trez.above_center() ) return TypeMem.ANYMEM; // Have infinite choices still, report basic live only
137  // Find everything reachable from the pointer and memory, and report it all
138  TypeMem tmem0 = (TypeMem)tmem;
139  BitsAlias aliases = tmem0.all_reaching_aliases(((TypeMemPtr)trez)._aliases);
140  return tmem0.slice_reaching_aliases(aliases).flatten_fields();
141  }

References com.cliffc.aa.node.Node._val, com.cliffc.aa.type.Type< T extends Type< T >.above_center(), com.cliffc.aa.type.TypeMem.all_reaching_aliases(), com.cliffc.aa.type.TypeMem.ALLMEM, com.cliffc.aa.type.TypeMem.ANYMEM, com.cliffc.aa.type.TypeMem.flatten_fields(), com.cliffc.aa.type.Type< T extends Type< T >.isa(), com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.type.Type< T extends Type< T >.oob(), com.cliffc.aa.type.TypeMemPtr.OOP, com.cliffc.aa.node.ScopeNode.rez(), and com.cliffc.aa.type.TypeMem.slice_reaching_aliases().

Referenced by com.cliffc.aa.node.ScopeNode.live(), and com.cliffc.aa.node.AssertNode.live_use().

Here is the call graph for this function:
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:

◆ ctrl()

Node com.cliffc.aa.node.ScopeNode.ctrl ( )

Definition at line 44 of file ScopeNode.java.

44 { return in(0); }

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

Referenced by com.cliffc.aa.node.ScopeNode.IfScope.check(), com.cliffc.aa.node.ScopeNode.check_if(), com.cliffc.aa.Parse.ctrl(), com.cliffc.aa.Env.file_scope(), com.cliffc.aa.node.ScopeNode.ideal_reduce(), and com.cliffc.aa.node.ScopeNode.live_use().

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

◆ def_if()

void com.cliffc.aa.node.ScopeNode.def_if ( String  name,
Access  mutable,
boolean  create 
)

Definition at line 191 of file ScopeNode.java.

191  {
192  if( _ifs == null || _ifs._len==0 ) return; // Not inside an If
193  _ifs.last().def(name,mutable,create); // Var defined in arm of if
194  }

References com.cliffc.aa.node.ScopeNode._ifs.

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

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:

◆ early_ctrl()

RegionNode com.cliffc.aa.node.ScopeNode.early_ctrl ( )

Definition at line 79 of file ScopeNode.java.

79 { return (RegionNode)in(4); }

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

Referenced by com.cliffc.aa.Parse.do_exit(), and com.cliffc.aa.Parse.merge_exits().

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

◆ early_kill()

void com.cliffc.aa.node.ScopeNode.early_kill ( )

Definition at line 82 of file ScopeNode.java.

82 { pop(); pop(); pop(); }

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

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

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

◆ early_mem()

PhiNode com.cliffc.aa.node.ScopeNode.early_mem ( )

Definition at line 80 of file ScopeNode.java.

80 { return ( PhiNode)in(5); }

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

Referenced by com.cliffc.aa.Parse.do_exit(), and com.cliffc.aa.Parse.merge_exits().

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

◆ early_val()

PhiNode com.cliffc.aa.node.ScopeNode.early_val ( )

Definition at line 81 of file ScopeNode.java.

81 { return ( PhiNode)in(6); }

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

Referenced by com.cliffc.aa.Parse.do_exit(), and com.cliffc.aa.Parse.merge_exits().

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

◆ equals()

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

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

Definition at line 173 of file ScopeNode.java.

173 { return this==o; }

◆ err()

◆ escapees()

◆ 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]

Node com.cliffc.aa.node.Node.find ( int  uid,
VBitSet  bs 
)
privateinherited

Definition at line 428 of file Node.java.

428  {
429  if( _uid==uid ) return this;
430  if( bs.tset(_uid) || is_dead() ) return null;
431  Node m;
432  for( Node n : _defs ) if( n!=null && (m=n.find(uid,bs)) !=null ) return m;
433  for( Node n : _uses ) if( (m=n.find(uid,bs)) !=null ) return m;
434  return null;
435  }

References com.cliffc.aa.node.Node._defs, com.cliffc.aa.node.Node._uid, com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node.find(), com.cliffc.aa.node.Node.is_dead(), and com.cliffc.aa.util.VBitSet.tset().

Here is the call graph for this function:

◆ flip_if()

void com.cliffc.aa.node.ScopeNode.flip_if ( )

Definition at line 183 of file ScopeNode.java.

183 { _ifs.last().flip(); }

References com.cliffc.aa.node.ScopeNode._ifs.

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

Here is the caller graph for this function:

◆ get()

Node com.cliffc.aa.node.ScopeNode.get ( String  name)

Definition at line 76 of file ScopeNode.java.

76 { return stk().get(name); }

References com.cliffc.aa.node.NewObjNode.get(), and com.cliffc.aa.node.ScopeNode.stk().

Referenced by com.cliffc.aa.Parse.fact(), and com.cliffc.aa.Env.lookup().

Here is the call graph for this function:
Here is the caller 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:

◆ get_type() [1/2]

ConTypeNode com.cliffc.aa.node.ScopeNode.get_type ( int  alias)

Definition at line 88 of file ScopeNode.java.

88  {
89  for( ConTypeNode ctn : _types.values() )
90  if( ctn._t instanceof TypeMemPtr &&
91  ((TypeMemPtr)ctn._t)._aliases.test(alias) )
92  return ctn;
93  return null;
94  }

References com.cliffc.aa.type.TypeMemPtr._aliases, com.cliffc.aa.node.ScopeNode._types, and com.cliffc.aa.type.Bits< B extends Bits< B >.test().

Here is the call graph for this function:

◆ get_type() [2/2]

ConTypeNode com.cliffc.aa.node.ScopeNode.get_type ( String  name)

Definition at line 85 of file ScopeNode.java.

85 { return _types.get(name); }

References com.cliffc.aa.node.ScopeNode._types.

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

Here is the caller graph for this function:

◆ hashCode()

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

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

Definition at line 171 of file ScopeNode.java.

171 { return 123456789; }

◆ ideal_grow()

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

Reimplemented in com.cliffc.aa.node.PrimNode.OrElse, com.cliffc.aa.node.PrimNode.AndThen, com.cliffc.aa.node.CallNode, com.cliffc.aa.node.LoadNode, com.cliffc.aa.node.StoreNode, com.cliffc.aa.node.MrgProjNode, and com.cliffc.aa.node.AssertNode.

Definition at line 450 of file Node.java.

450 { return null; }

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

Here is the caller graph for this function:

◆ ideal_mono()

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

Reimplemented in com.cliffc.aa.node.RetNode, com.cliffc.aa.node.StoreNode, com.cliffc.aa.node.MemJoinNode, com.cliffc.aa.node.LoadNode, com.cliffc.aa.node.MrgProjNode, and com.cliffc.aa.node.CastNode.

Definition at line 445 of file Node.java.

445 { return null; }

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

Here is the caller graph for this function:

◆ ideal_reduce()

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

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

Definition at line 104 of file ScopeNode.java.

104  {
105  Node ctrl = in(0).is_copy(0);
106  if( ctrl != null ) { set_ctrl(ctrl); return this; }
107 
108  Node mem = mem();
109  Node rez = rez();
110  Type trez = rez==null ? null : rez._val;
111  if( Env.GVN._opt_mode != GVNGCM.Mode.Parse && // Past parsing
112  rez != null && // Have a return result
113  // If type(rez) can never lift to any TMP, then we will not return a
114  // pointer, and do not need the memory state on exit.
115  (!TypeMemPtr.OOP0.dual().isa(trez) || trez==Type.XNIL) &&
116  // And not already wiped it out
117  !(mem instanceof ConNode && mem._val ==TypeMem.XMEM) )
118  // Wipe out return memory
119  return set_mem(Node.con(TypeMem.XMEM));
120 
121  return null;
122  }

References com.cliffc.aa.GVNGCM._opt_mode, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.con(), com.cliffc.aa.node.ScopeNode.ctrl(), com.cliffc.aa.type.Type< T extends Type< T >.dual(), com.cliffc.aa.Env.GVN, com.cliffc.aa.node.Node.in(), com.cliffc.aa.node.Node.is_copy(), com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.type.TypeMemPtr.OOP0, com.cliffc.aa.GVNGCM.Mode.Parse, com.cliffc.aa.node.ScopeNode.rez(), com.cliffc.aa.node.ScopeNode.set_ctrl(), com.cliffc.aa.node.ScopeNode.set_mem(), com.cliffc.aa.type.TypeMem.XMEM, and com.cliffc.aa.type.Type< T extends Type< T >.XNIL.

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:

◆ init()

void com.cliffc.aa.node.ScopeNode.init ( )

Definition at line 37 of file ScopeNode.java.

37  {
38  HashMap<String,Type> ts = new HashMap<>();
39  Type.init0(ts);
40  for( String tname : ts.keySet() )
41  _types.put(tname,Env.GVN.init(new ConTypeNode(tname,ts.get(tname),Env.SCP_0)));
42  }

References com.cliffc.aa.node.ScopeNode._types, com.cliffc.aa.Env.GVN, com.cliffc.aa.GVNGCM.init(), com.cliffc.aa.type.Type< T extends Type< T >.init0(), and com.cliffc.aa.Env.SCP_0.

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

Here is the call graph for this function:
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_closure()

boolean com.cliffc.aa.node.ScopeNode.is_closure ( )

Definition at line 102 of file ScopeNode.java.

102 { assert _defs._len==4 || _defs._len==7; return _defs._len==7; }

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

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

Here is the caller graph for this function:

◆ 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.ScopeNode.is_mem ( )

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

Definition at line 74 of file ScopeNode.java.

74 { 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_mutable()

boolean com.cliffc.aa.node.ScopeNode.is_mutable ( String  name)

Definition at line 77 of file ScopeNode.java.

77 { return stk().is_mutable(name); }

References com.cliffc.aa.node.NewObjNode.is_mutable(), and com.cliffc.aa.node.ScopeNode.stk().

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

Here is the call graph for this function:
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.ScopeNode.live ( GVNGCM.Mode  opt_mode)

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

Definition at line 143 of file ScopeNode.java.

143  {
144  // Prim scope is not used past Call-Graph discovery
145  if( this==Env.SCP_0 ) return opt_mode._CG ? TypeMem.DEAD : TypeMem.ALLMEM;
146  if( opt_mode == GVNGCM.Mode.Parse ) return TypeMem.MEM;
147  assert _uses._len==0;
148  // All fields in all reachable pointers from rez() will be marked live
149  return compute_live_mem(mem(),rez());
150  }

References com.cliffc.aa.node.Node._uses, com.cliffc.aa.type.TypeMem.ALLMEM, com.cliffc.aa.node.ScopeNode.compute_live_mem(), com.cliffc.aa.type.TypeMem.DEAD, com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.type.TypeMem.MEM, com.cliffc.aa.GVNGCM.Mode.Parse, com.cliffc.aa.node.ScopeNode.rez(), and com.cliffc.aa.Env.SCP_0.

Here is the call graph for this function:

◆ live_use()

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

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

Definition at line 152 of file ScopeNode.java.

152  {
153  // The top scope is always alive, and represents what all future unparsed
154  // code MIGHT do.
155  if( this==Env.SCP_0 && opt_mode._CG )
156  return TypeMem.DEAD;
157  // Basic liveness ("You are Alive!") for control and returned value
158  if( def == ctrl() ) return TypeMem.ALIVE;
159  if( def == rez () ) return def.all_live().basic_live() ? TypeMem.LIVE_BOT : TypeMem.ANYMEM;
160  // Returned display is dead in a whole program.
161  // In a partial-program, whats in the display is exported to the next step.
162  if( def == ptr () ) return opt_mode._CG ? TypeMem.DEAD : TypeMem.LIVE_BOT; // Returned display is dead after CG
163  // Memory returns the compute_live_mem state in _live. If rez() is a
164  // pointer, this will include the memory slice.
165  if( def == mem() )
166  return opt_mode==GVNGCM.Mode.Parse ? TypeMem.ALLMEM : _live.flatten_fields();
167  // Merging exit path
168  return def._live;
169  }

References com.cliffc.aa.node.Node._live, com.cliffc.aa.type.TypeMem.ALIVE, com.cliffc.aa.node.Node.all_live(), com.cliffc.aa.type.TypeMem.ALLMEM, com.cliffc.aa.type.TypeMem.ANYMEM, com.cliffc.aa.type.TypeMem.basic_live(), com.cliffc.aa.node.ScopeNode.ctrl(), com.cliffc.aa.type.TypeMem.DEAD, com.cliffc.aa.type.TypeMem.flatten_fields(), com.cliffc.aa.type.TypeMem.LIVE_BOT, com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.GVNGCM.Mode.Parse, com.cliffc.aa.node.ScopeNode.ptr(), com.cliffc.aa.node.ScopeNode.rez(), and com.cliffc.aa.Env.SCP_0.

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.ScopeNode.mem ( )

Definition at line 45 of file ScopeNode.java.

45 { return in(MEM_IDX); }

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

Referenced by com.cliffc.aa.node.ScopeNode.IfScope.check(), com.cliffc.aa.node.ScopeNode.check_if(), com.cliffc.aa.node.ScopeNode.compute_live_mem(), com.cliffc.aa.Env.file_scope(), com.cliffc.aa.Parse.gather_errors(), com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.node.ScopeNode.live(), com.cliffc.aa.node.ScopeNode.live_use(), com.cliffc.aa.Parse.mem(), com.cliffc.aa.node.ScopeNode.replace_mem(), com.cliffc.aa.node.ScopeNode.ScopeNode(), and com.cliffc.aa.node.ScopeNode.set_mem().

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:

◆ pop_if()

void com.cliffc.aa.node.ScopeNode.pop_if ( )

Definition at line 186 of file ScopeNode.java.

186 { _ifs.pop(); }

References com.cliffc.aa.node.ScopeNode._ifs.

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

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:

◆ ptr()

Node com.cliffc.aa.node.ScopeNode.ptr ( )

Definition at line 46 of file ScopeNode.java.

46 { return in(2); }

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

Referenced by com.cliffc.aa.node.ScopeNode.IfScope.check(), com.cliffc.aa.Env.close_display(), com.cliffc.aa.Env.Env(), com.cliffc.aa.Parse.func(), com.cliffc.aa.Parse.get_display_ptr(), com.cliffc.aa.node.ScopeNode.live_use(), com.cliffc.aa.node.ScopeNode.ScopeNode(), and com.cliffc.aa.node.ScopeNode.stk().

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

◆ push_if()

void com.cliffc.aa.node.ScopeNode.push_if ( )

Definition at line 178 of file ScopeNode.java.

178  {
179  if( _ifs == null ) _ifs = new Ary<>(new IfScope[1],0);
180  _ifs.push(new IfScope());
181  }

References com.cliffc.aa.node.ScopeNode._ifs.

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

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:

◆ replace_mem()

void com.cliffc.aa.node.ScopeNode.replace_mem ( Node  st)

Definition at line 69 of file ScopeNode.java.

69  {
70  set_def(MEM_IDX,null);
71  Node mem = Env.GVN.xform(st);
72  set_def(MEM_IDX,mem);
73  }

References com.cliffc.aa.Env.GVN, com.cliffc.aa.node.ScopeNode.mem(), com.cliffc.aa.node.Node.set_def(), and com.cliffc.aa.GVNGCM.xform().

Referenced by com.cliffc.aa.Parse.inc(), com.cliffc.aa.Parse.stmt(), and com.cliffc.aa.Parse.term().

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.ScopeNode.rez ( )

Definition at line 47 of file ScopeNode.java.

47 { return in(3); }

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

Referenced by com.cliffc.aa.node.ScopeNode.compute_live_mem(), com.cliffc.aa.Parse.gather_errors(), com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.node.ScopeNode.live(), com.cliffc.aa.node.ScopeNode.live_use(), and com.cliffc.aa.node.ScopeNode.ScopeNode().

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_ctrl()

public<N extends Node> N com.cliffc.aa.node.ScopeNode.set_ctrl ( n)
package

Definition at line 49 of file ScopeNode.java.

49 { set_def(0,n); return n; }

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

Referenced by com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.Env.init(), com.cliffc.aa.Parse.set_ctrl(), and com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay().

Here is the call graph for this function:
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:

◆ set_mem()

Node com.cliffc.aa.node.ScopeNode.set_mem ( Node  n)

Definition at line 54 of file ScopeNode.java.

54  {
55  assert n._val instanceof TypeMem || n._val ==Type.ANY || n._val ==Type.ALL;
56  Node old = mem();
57  set_def(MEM_IDX,n);
58  if( old!=null ) {
59  Env.GVN.add_work_all(old);
60  if( old._uses._len <= 2 ) // DEFMEM and a MemSplit
61  for( Node use : old._uses )
62  if( use instanceof MemSplitNode )
63  Env.GVN.add_mono(((MemSplitNode)use).join());
64  old.add_flow_def_extra(n); // old loses a use, triggers extra
65  Env.GVN.add_work_all(n);
66  }
67  return this;
68  }

References com.cliffc.aa.node.Node._uses, com.cliffc.aa.node.Node._val, com.cliffc.aa.node.Node.add_flow_def_extra(), com.cliffc.aa.GVNGCM.add_mono(), com.cliffc.aa.GVNGCM.add_work_all(), com.cliffc.aa.type.Type< T extends Type< T >.ALL, com.cliffc.aa.type.Type< T extends Type< T >.ANY, com.cliffc.aa.Env.GVN, com.cliffc.aa.node.ScopeNode.mem(), and com.cliffc.aa.node.Node.set_def().

Referenced by com.cliffc.aa.node.ScopeNode.ideal_reduce(), com.cliffc.aa.Env.init(), com.cliffc.aa.Parse.set_mem(), com.cliffc.aa.TestLive.testBasic(), com.cliffc.aa.TestLive.testNewObj(), and com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay().

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

◆ set_ptr()

void com.cliffc.aa.node.ScopeNode.set_ptr ( Node  n)

Definition at line 50 of file ScopeNode.java.

50 { set_def(2,n); }

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

Referenced by com.cliffc.aa.Env.close_display(), com.cliffc.aa.Env.init(), and com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay().

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

◆ set_rez()

void com.cliffc.aa.node.ScopeNode.set_rez ( Node  n)

Definition at line 51 of file ScopeNode.java.

51 { set_def(3,n); }

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

Referenced by com.cliffc.aa.Env.init(), com.cliffc.aa.Parse.prog(), com.cliffc.aa.TestLive.testBasic(), com.cliffc.aa.TestLive.testNewObj(), and com.cliffc.aa.node.TestNodeSmall.testRecursiveDisplay().

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:

◆ stk()

NewObjNode com.cliffc.aa.node.ScopeNode.stk ( )

Definition at line 48 of file ScopeNode.java.

48 { return (NewObjNode)ptr().in(0); }

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

Referenced by com.cliffc.aa.Parse._short_circuit_expr(), com.cliffc.aa.Env.add_fun(), com.cliffc.aa.Env.close(), com.cliffc.aa.Env.close_display(), com.cliffc.aa.Env.collect_active_scope(), com.cliffc.aa.Parse.create(), com.cliffc.aa.Env.Env(), com.cliffc.aa.Parse.fact(), com.cliffc.aa.node.ScopeNode.get(), com.cliffc.aa.node.ScopeNode.is_mutable(), com.cliffc.aa.Env.lookup_scope(), com.cliffc.aa.Parse.stmt(), and com.cliffc.aa.Env.top_scope().

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

◆ str()

String com.cliffc.aa.node.Node.str ( )
packageinherited

Reimplemented in com.cliffc.aa.node.FunNode, com.cliffc.aa.node.CallNode, com.cliffc.aa.node.FunPtrNode, com.cliffc.aa.node.NewNode< T extends TypeObj< T >, com.cliffc.aa.node.MemSplitNode, com.cliffc.aa.node.StoreNode, com.cliffc.aa.node.LoadNode, and com.cliffc.aa.node.ErrNode.

Definition at line 283 of file Node.java.

283 { return xstr(); } // Inline longer name

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

Referenced by com.cliffc.aa.node.Node.dump(), and com.cliffc.aa.node.ConNode< T extends Type >.toString().

Here is the call graph for this function:
Here is the caller 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:

◆ test_if()

boolean com.cliffc.aa.node.ScopeNode.test_if ( )

Definition at line 189 of file ScopeNode.java.

189 { return _ifs!=null && !_ifs.isEmpty(); }

References com.cliffc.aa.node.ScopeNode._ifs.

◆ 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()

◆ 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.ScopeNode.value ( GVNGCM.Mode  opt_mode)

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

Definition at line 123 of file ScopeNode.java.

123 { return Type.ALL; }

References com.cliffc.aa.type.Type< T extends Type< T >.ALL.

◆ walk_dom_last()

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

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

Definition at line 175 of file ScopeNode.java.

175 { return P.test(this) ? this : null; }

◆ 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()

◆ 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

◆ _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

◆ _ifs

◆ _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

◆ _types

final HashMap<String,ConTypeNode> com.cliffc.aa.node.ScopeNode._types
private

◆ _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.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.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.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.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.GVNGCM.add_mono
public< N extends Node > N add_mono(N n)
Definition: GVNGCM.java:51
com.cliffc.aa.type.TypeMem.XMEM
static final TypeMem XMEM
Definition: TypeMem.java:225
com.cliffc.aa.type.TypeMemPtr.OOP
static final TypeMemPtr OOP
Definition: TypeMemPtr.java:94
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.aa.node.ScopeNode._ifs
Ary< IfScope > _ifs
Definition: ScopeNode.java:21
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.ScopeNode.ctrl
Node ctrl()
Definition: ScopeNode.java:44
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.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.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.ScopeNode.rez
Node rez()
Definition: ScopeNode.java:47
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.node.ScopeNode.ptr
Node ptr()
Definition: ScopeNode.java:46
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.type.Bits.test
static boolean test(long[] bits, int i)
Definition: Bits.java:224
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.type.TypeMem.ANYMEM
static final TypeMem ANYMEM
Definition: TypeMem.java:228
com.cliffc.aa.type.TypeMem.flatten_fields
TypeMem flatten_fields()
Definition: TypeMem.java:522
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.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.GVNGCM.xform
Node xform(Node n)
Definition: GVNGCM.java:126
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.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.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.NewObjNode.get
Node get(String name)
Definition: NewObjNode.java:37
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.Type.init0
static void init0(HashMap< String, Type > types)
Definition: Type.java:642
com.cliffc.aa.node.ScopeNode.mem
Node mem()
Definition: ScopeNode.java:45
com.cliffc.aa.node.Node._keep
byte _keep
Definition: Node.java:86
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.node.Node.is_copy
Node is_copy(int idx)
Definition: Node.java:827
com.cliffc.aa.node.Node.STRS
static final String[] STRS
Definition: Node.java:54
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.ScopeNode._types
final HashMap< String, ConTypeNode > _types
Definition: ScopeNode.java:20
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.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.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.Node.con
static Node con(Type t)
Definition: Node.java:670
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.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.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.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.Node.xstr
String xstr()
Definition: Node.java:282
com.cliffc.aa.node.ScopeNode.stk
NewObjNode stk()
Definition: ScopeNode.java:48
com.cliffc.aa.node.Node._elock
boolean _elock
Definition: Node.java:87
com.cliffc.aa.node.ScopeNode.compute_live_mem
static TypeMem compute_live_mem(Node mem, Node rez)
Definition: ScopeNode.java:130
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.set_def
Node set_def(int idx, Node n)
Definition: Node.java:154
com.cliffc.aa.node.Node.do_grow
Node do_grow()
Definition: Node.java:639
com.cliffc.aa.Env.SCP_0
static ScopeNode SCP_0
Definition: Env.java:18
com.cliffc.aa.GVNGCM.add_reduce
public< N extends Node > N add_reduce(N n)
Definition: GVNGCM.java:49
com.cliffc.aa.type.Type.dual
final T dual()
Definition: Type.java:361
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.type.TypeMem.all_reaching_aliases
BitsAlias all_reaching_aliases(BitsAlias aliases)
Definition: TypeMem.java:349
com.cliffc.aa.node.Node.is_multi_head
boolean is_multi_head()
Definition: Node.java:354
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.type.Type.XNIL
static final Type XNIL
Definition: Type.java:333
com.cliffc.aa.node.Node.str
String str()
Definition: Node.java:283
com.cliffc.aa.node.Node.pop
Node pop()
Definition: Node.java:174
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.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.ScopeNode.set_ctrl
public< N extends Node > N set_ctrl(N n)
Definition: ScopeNode.java:49
com.cliffc.aa.node.NewObjNode.is_mutable
boolean is_mutable(String name)
Definition: NewObjNode.java:39
com.cliffc.aa.type.TypeMemPtr.OOP0
static final TypeMemPtr OOP0
Definition: TypeMemPtr.java:93
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.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.type.TypeMem.MEM
static final TypeMem MEM
Definition: TypeMem.java:224
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.GVNGCM.Mode.Parse
Parse
Definition: GVNGCM.java:15
com.cliffc.aa.util.SB.toString
String toString()
Definition: SB.java:62
com.cliffc.aa.node.ScopeNode.set_mem
Node set_mem(Node n)
Definition: ScopeNode.java:54
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.GVNGCM.init
public< N extends Node > N init(N n)
Definition: GVNGCM.java:99
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition: Node.java:124
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.type.TypeMem.slice_reaching_aliases
TypeMem slice_reaching_aliases(BitsAlias aliases)
Definition: TypeMem.java:392
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