aa
com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T > Class Template Referenceabstract
Inheritance diagram for com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >:
[legend]
Collaboration diagram for com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >:
[legend]

Public Member Functions

void add_flow_def_extra (Node chg)
 
void add_reduce_extra ()
 
TypeMem all_live ()
 
FunPtrNode as_fun (GVNGCM gvn)
 
NewNode copy (boolean copy_edges)
 
boolean equals (Object o)
 
int hashCode ()
 
Node ideal_reduce ()
 
TypeMem live_use (GVNGCM.Mode opt_mode, Node def)
 
MrgProjNode mrg ()
 
final void sets (T ts)
 
final void setsm (T ts)
 
Type value (GVNGCM.Mode opt_mode)
 
String xstr ()
 

Static Public Member Functions

static Ary< NewPrimNodeINTRINSICS ()
 
static void reset ()
 

Public Attributes

int _alias
 
final String _name
 
TypeMemPtr _tptr
 
_ts
 

Package Functions

 NewPrimNode (byte op, int parent_alias, T to, String name, boolean reads, int op_prec, Type... args)
 
String bal_close ()
 
abstract T dead_type ()
 
BitsAlias escapees ()
 
Node fld (int fld)
 
boolean is_unused ()
 
void kill2 ()
 
ProjNode ptr ()
 
String str ()
 
abstract TypeObj valueobj ()
 

Static Package Functions

 [static initializer]
 
static int def_idx (int fld)
 

Package Attributes

TypeObj _crushed
 
final int _op_prec
 
final boolean _reads
 
final TypeFunSig _sig
 

Private Member Functions

void _init (int alias, T ts)
 
boolean captured ()
 

Static Private Attributes

static final Ary< NewPrimNodeINTRINSICS = new Ary<>(NewPrimNode.class)
 

Detailed Description

Definition at line 170 of file NewNode.java.

Constructor & Destructor Documentation

◆ NewPrimNode()

com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.NewPrimNode ( byte  op,
int  parent_alias,
to,
String  name,
boolean  reads,
int  op_prec,
Type...  args 
)
package

Definition at line 175 of file NewNode.java.

175  {
176  super(op,parent_alias,to);
177  _name = name;
178  _reads = reads;
179  assert (reads == (args[MEM_IDX]!=TypeMem.ALLMEM)); // If reading, then memory has some requirements
180  args[DSP_IDX] = Type.ALL; // No display
182  _op_prec = op_prec;
183  }

Member Function Documentation

◆ [static initializer]()

com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.[static initializer]
staticpackage

◆ _init()

void com.cliffc.aa.node.NewNode< T extends TypeObj< T >._init ( int  alias,
ts 
)
privateinherited

Definition at line 43 of file NewNode.java.

43  {
44  if( _elock ) unelock(); // Unlock before changing hash
45  _alias = alias;
47  sets(ts);
48  }

◆ add_flow_def_extra()

void com.cliffc.aa.node.NewNode< T extends TypeObj< T >.add_flow_def_extra ( Node  chg)
inherited

Definition at line 72 of file NewNode.java.

72  {
73  if( chg instanceof MrgProjNode && chg._live.at(_alias)==TypeObj.UNUSED )
74  Env.GVN.add_reduce(chg);
75  }

◆ add_reduce_extra()

void com.cliffc.aa.node.NewNode< T extends TypeObj< T >.add_reduce_extra
inherited

Definition at line 77 of file NewNode.java.

77  {
79  }

◆ all_live()

TypeMem com.cliffc.aa.node.NewNode< T extends TypeObj< T >.all_live
inherited

Definition at line 86 of file NewNode.java.

86 { return TypeMem.ALLMEM; }

◆ as_fun()

FunPtrNode com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.as_fun ( GVNGCM  gvn)

Definition at line 198 of file NewNode.java.

198  {
199  try(GVNGCM.Build<FunPtrNode> X = gvn.new Build<>()) {
200  assert in(0)==null && _uses._len==0;
201  FunNode fun = ( FunNode) X.xform(new FunNode(this).add_def(Env.ALL_CTRL));
202  ParmNode rpc = (ParmNode) X.xform(new ParmNode(0,"rpc",fun,Env.ALL_CALL,null));
203  Node memp= X.xform(new ParmNode(MEM_IDX,_sig._args[MEM_IDX],fun, TypeMem.MEM, Env.DEFMEM,null));
204  fun._bal_close = bal_close();
205 
206  // Add input edges to the intrinsic
207  add_def(_reads ? memp : null); // Memory for the primitive in slot MEM_IDX
208  add_def(null); // Closure for the primitive in slot DSP_IDX
209  for( int i=ARG_IDX; i<_sig.nargs(); i++ ) // Args follow
210  add_def( X.xform(new ParmNode(i,_sig._args[i],fun, (ConNode)Node.con(_sig.arg(i).simple_ptr()),null)));
211  NewNode nnn = (NewNode)X.xform(this);
212  Node mem = Env.DEFMEM.make_mem_proj(nnn,memp);
213  Node ptr = X.xform(new ProjNode(nnn,REZ_IDX));
214  RetNode ret = (RetNode)X.xform(new RetNode(fun,mem,ptr,rpc,fun));
215  return (X._ret = new FunPtrNode(_name,ret));
216  }
217  }

◆ bal_close()

String com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.bal_close ( )
package

Definition at line 184 of file NewNode.java.

184 { return null; }

Referenced by com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< TypeAry >.as_fun().

Here is the caller graph for this function:

◆ captured()

boolean com.cliffc.aa.node.NewNode< T extends TypeObj< T >.captured
privateinherited

Definition at line 116 of file NewNode.java.

116  {
117  if( _keep > 0 ) return false;
118  if( _uses._len==0 ) return false; // Dead or being created
119  Node mem = _uses.at(0);
120  // If only either address or memory remains, then memory contents are dead
121  if( _uses._len==1 ) {
122  if( mem instanceof MrgProjNode ) return true; // No pointer, just dead memory
123  // Just a pointer; currently on Strings become memory constants and
124  // constant-fold - leaving the allocation dead.
125  return !(val(1) instanceof TypeStr);
126  }
127  Node ptr = _uses.at(1);
128  if( ptr instanceof MrgProjNode ) ptr = _uses.at(0); // Get ptr not mem
129  if( ptr._keep>0 ) return false;
130 
131  // Scan for memory contents being unreachable.
132  // Really stupid!
133  for( Node use : ptr._uses )
134  if( !(use instanceof IfNode) )
135  return false;
136  // Only used to nil-check (always not-nil) and equality (always unequal to
137  // other aliases).
138  return true;
139  }

◆ copy()

NewNode com.cliffc.aa.node.NewNode< T extends TypeObj< T >.copy ( boolean  copy_edges)
inherited

Definition at line 143 of file NewNode.java.

143  {
144  // Split the original '_alias' class into 2 sub-aliases
145  NewNode<T> nnn = (NewNode<T>)super.copy(copy_edges);
146  nnn._init(BitsAlias.new_alias(_alias),_ts); // Children alias classes, split from parent
147  _init(BitsAlias.new_alias(_alias),_ts); // The original NewNode also splits from the parent alias
148  Env.GVN.add_flow(this); // Alias changes flow
149  return nnn;
150  }

◆ dead_type()

abstract T com.cliffc.aa.node.NewNode< T extends TypeObj< T >.dead_type
abstractpackageinherited

◆ def_idx()

static int com.cliffc.aa.node.NewNode< T extends TypeObj< T >.def_idx ( int  fld)
staticpackageinherited

Definition at line 52 of file NewNode.java.

52 { return fld+1; } // Skip ctl in slot 0

◆ equals()

boolean com.cliffc.aa.node.NewNode< T extends TypeObj< T >.equals ( Object  o)
inherited

Definition at line 157 of file NewNode.java.

157 { return this==o; }

◆ escapees()

BitsAlias com.cliffc.aa.node.NewNode< T extends TypeObj< T >.escapees
packageinherited

Definition at line 98 of file NewNode.java.

98 { return _tptr._aliases; }

◆ fld()

Node com.cliffc.aa.node.NewNode< T extends TypeObj< T >.fld ( int  fld)
packageinherited

Definition at line 53 of file NewNode.java.

53 { return in(def_idx(fld)); } // Node for field#

◆ hashCode()

int com.cliffc.aa.node.NewNode< T extends TypeObj< T >.hashCode
inherited

Definition at line 152 of file NewNode.java.

152 { return super.hashCode()+ _alias; }

◆ ideal_reduce()

Node com.cliffc.aa.node.NewNode< T extends TypeObj< T >.ideal_reduce
inherited

Definition at line 64 of file NewNode.java.

64  {
65  // If either the address or memory is not looked at then the memory
66  // contents are dead. The object might remain as a 'gensym' or 'sentinel'
67  // for identity tests.
68  if( _defs._len > 1 && captured() ) { kill2(); return this; }
69  return null;
70  }

◆ INTRINSICS()

static Ary<NewPrimNode> com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.INTRINSICS ( )
static

Definition at line 189 of file NewNode.java.

189  {
190  if( INTRINSICS.isEmpty() ) {
191  NewAryNode.add_libs(INTRINSICS);
192  NewStrNode.add_libs(INTRINSICS);
193  }
194  return INTRINSICS;
195  }

◆ is_unused()

boolean com.cliffc.aa.node.NewNode< T extends TypeObj< T >.is_unused
packageinherited

Definition at line 100 of file NewNode.java.

100 { return _ts==dead_type(); }

◆ kill2()

void com.cliffc.aa.node.NewNode< T extends TypeObj< T >.kill2
packageinherited

Definition at line 102 of file NewNode.java.

102  {
103  unelock();
104  while( !is_dead() && _defs._len > 1 )
105  pop(); // Kill all fields except memory
106  _crushed = _ts = dead_type();
108  Env.DEFMEM.set_def(_alias,Node.con(TypeObj.UNUSED));
109  Env.GVN.revalive(this,ProjNode.proj(this,0),Env.DEFMEM);
110  if( is_dead() ) return;
111  for( Node use : _uses )
112  Env.GVN.add_flow_uses(use); // Get FPtrs from MrgProj, and dead Ptrs into New
113  }

◆ live_use()

TypeMem com.cliffc.aa.node.NewNode< T extends TypeObj< T >.live_use ( GVNGCM.Mode  opt_mode,
Node  def 
)
inherited

Definition at line 89 of file NewNode.java.

89  {
90  TypeObj to = _live.at(_alias);
91  return to.above_center() ? TypeMem.DEAD : TypeMem.ESCAPE;
92  }

◆ mrg()

MrgProjNode com.cliffc.aa.node.NewNode< T extends TypeObj< T >.mrg
inherited

Definition at line 158 of file NewNode.java.

158  {
159  Node ptr = _uses.at(0);
160  if( !(ptr instanceof MrgProjNode) ) ptr = _uses.at(1);
161  return (MrgProjNode)ptr;
162  }

◆ ptr()

ProjNode com.cliffc.aa.node.NewNode< T extends TypeObj< T >.ptr
packageinherited

Definition at line 163 of file NewNode.java.

163  {
164  Node ptr = _uses.at(0);
165  if( ptr instanceof MrgProjNode ) ptr = _uses.at(1);
166  return (ProjNode)ptr;
167  }

◆ reset()

static void com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.reset ( )
static

Definition at line 188 of file NewNode.java.

188 { INTRINSICS.clear(); }

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

Here is the caller graph for this function:

◆ sets()

final void com.cliffc.aa.node.NewNode< T extends TypeObj< T >.sets ( ts)
inherited

Definition at line 57 of file NewNode.java.

57  {
58  _ts = ts;
59  _crushed = ts.crush();
60  }

◆ setsm()

final void com.cliffc.aa.node.NewNode< T extends TypeObj< T >.setsm ( ts)
inherited

Definition at line 62 of file NewNode.java.

62 { assert ts.isa(_ts); sets(ts); }

◆ str()

String com.cliffc.aa.node.NewNode< T extends TypeObj< T >.str
packageinherited

Definition at line 50 of file NewNode.java.

50 { return "New"+_ts; } // Inline less-short name

◆ value()

Type com.cliffc.aa.node.NewNode< T extends TypeObj< T >.value ( GVNGCM.Mode  opt_mode)
inherited

Definition at line 81 of file NewNode.java.

81  {
82  return TypeTuple.make(Type.CTRL, is_unused() ? TypeObj.UNUSED : valueobj(),_tptr); // Complex obj, simple ptr.
83  }

◆ valueobj()

abstract TypeObj com.cliffc.aa.node.NewNode< T extends TypeObj< T >.valueobj
abstractpackageinherited

◆ xstr()

String com.cliffc.aa.node.NewNode< T extends TypeObj< T >.xstr
inherited

Definition at line 49 of file NewNode.java.

49 { return "New"+"*"+_alias; } // Self short name

Member Data Documentation

◆ _alias

int com.cliffc.aa.node.NewNode< T extends TypeObj< T >._alias
inherited

Definition at line 20 of file NewNode.java.

◆ _crushed

TypeObj com.cliffc.aa.node.NewNode< T extends TypeObj< T >._crushed
packageinherited

Definition at line 31 of file NewNode.java.

◆ _name

◆ _op_prec

final int com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >._op_prec
package

◆ _reads

◆ _sig

◆ _tptr

TypeMemPtr com.cliffc.aa.node.NewNode< T extends TypeObj< T >._tptr
inherited

Definition at line 34 of file NewNode.java.

◆ _ts

T com.cliffc.aa.node.NewNode< T extends TypeObj< T >._ts
inherited

Definition at line 25 of file NewNode.java.

◆ INTRINSICS


The documentation for this class was generated from the following file:
com.cliffc.aa.type.TypeObj.above_center
boolean above_center()
Definition: TypeObj.java:77
com.cliffc.aa.type.TypeMem.DEAD
static final TypeMem DEAD
Definition: TypeMem.java:226
com.cliffc.aa.type.TypeTuple.make_args
static TypeTuple make_args(Type[] ts)
Definition: TypeTuple.java:106
com.cliffc.aa.node.NewNode< T >::captured
boolean captured()
Definition: NewNode.java:116
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_flow_uses
void add_flow_uses(Node n)
Definition: GVNGCM.java:55
com.cliffc.aa.Env.ALL_CALL
static ConNode ALL_CALL
Definition: Env.java:26
com.cliffc.aa.type.TypeObj.crush
TypeObj crush()
Definition: TypeObj.java:85
com.cliffc.aa.type.TypeMem.ESCAPE
static final TypeMem ESCAPE
Definition: TypeMem.java:227
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.type.TypeFunSig.make
static TypeFunSig make(String[] args, TypeTuple formals, TypeTuple ret)
Definition: TypeFunSig.java:71
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.GVNGCM.revalive
void revalive(Node... ns)
Definition: GVNGCM.java:103
com.cliffc.aa.type.TypeTuple
Definition: TypeTuple.java:11
com.cliffc.aa.type.TypeMem.ALLMEM
static final TypeMem ALLMEM
Definition: TypeMem.java:228
com.cliffc.aa.type.BitsAlias.new_alias
static int new_alias(int par)
Definition: BitsAlias.java:75
com.cliffc.aa.node.Node.add_def
Node add_def(Node n)
Definition: Node.java:152
com.cliffc.aa.node.NewNode.NewPrimNode.bal_close
String bal_close()
Definition: NewNode.java:184
com.cliffc.aa.type.Type.ALL
static final Type ALL
Definition: Type.java:324
com.cliffc.aa.node.NewNode< T >::kill2
void kill2()
Definition: NewNode.java:102
com.cliffc.aa.node.NewNode< T >::_tptr
TypeMemPtr _tptr
Definition: NewNode.java:34
com.cliffc.aa.node.Node.Node
Node(byte op)
Definition: Node.java:247
com.cliffc.aa.type.TypeFunSig._args
String[] _args
Definition: TypeFunSig.java:14
com.cliffc.aa.type.TypeFunSig.arg
Type arg(int idx)
Definition: TypeFunSig.java:88
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition: Env.java:13
com.cliffc.aa.type.TypeFunSig.nargs
int nargs()
Definition: TypeFunSig.java:87
com.cliffc.aa.type.TypeObj
Definition: TypeObj.java:15
com.cliffc.aa.node.NewNode< T >::def_idx
static int def_idx(int fld)
Definition: NewNode.java:52
com.cliffc.aa.node.NewNode< T >::fld
Node fld(int fld)
Definition: NewNode.java:53
com.cliffc.aa.node.NewNode.NewPrimNode.INTRINSICS
static final Ary< NewPrimNode > INTRINSICS
Definition: NewNode.java:186
com.cliffc.aa.type.TypeTuple.RET
static final TypeTuple RET
Definition: TypeTuple.java:130
com.cliffc.aa.node.NewNode< T >::_init
void _init(int alias, T ts)
Definition: NewNode.java:43
com.cliffc.aa.type.Type.CTRL
static final Type CTRL
Definition: Type.java:326
com.cliffc.aa.type.TypeObj.UNUSED
static final TypeObj UNUSED
Definition: TypeObj.java:46
com.cliffc.aa.type.TypeObj.ISUSED
static final TypeObj ISUSED
Definition: TypeObj.java:45
com.cliffc.aa.type.TypeTuple.make
static TypeTuple make(boolean any, Type[] ts)
Definition: TypeTuple.java:82
com.cliffc.aa.node.NewNode< T >::NewNode
NewNode(byte type, int par_alias, T to)
Definition: NewNode.java:40
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
com.cliffc.aa.node.NewNode< T >::ptr
ProjNode ptr()
Definition: NewNode.java:163
com.cliffc.aa.node.NewNode< T >::dead_type
abstract T dead_type()
com.cliffc.aa.node.NewNode.NewPrimNode._name
final String _name
Definition: NewNode.java:171
com.cliffc.aa.node.NewNode.NewPrimNode._sig
final TypeFunSig _sig
Definition: NewNode.java:172
com.cliffc.aa.type.Type.simple_ptr
Type simple_ptr()
Definition: Type.java:358
com.cliffc.aa.type.TypeStr
Definition: TypeStr.java:14
com.cliffc.aa.node.NewNode< T >::sets
final void sets(T ts)
Definition: NewNode.java:57
com.cliffc.aa.node.NewNode< T >::_ts
T _ts
Definition: NewNode.java:25
com.cliffc.aa.node.NewNode.NewPrimNode._op_prec
final int _op_prec
Definition: NewNode.java:174
com.cliffc.aa.node.Node._uses
Ary< Node > _uses
Definition: Node.java:245
com.cliffc.aa.type.BitsAlias.make0
static BitsAlias make0(int bit)
Definition: BitsAlias.java:72
com.cliffc.aa.node.NewNode< T >::_crushed
TypeObj _crushed
Definition: NewNode.java:31
com.cliffc.aa.type.TypeMemPtr._aliases
BitsAlias _aliases
Definition: TypeMemPtr.java:16
com.cliffc.aa.type.TypeFunSig
Definition: TypeFunSig.java:10
com.cliffc.aa.GVNGCM.add_reduce
public< N extends Node > N add_reduce(N n)
Definition: GVNGCM.java:49
com.cliffc.aa.node.FunNode._bal_close
String _bal_close
Definition: FunNode.java:60
com.cliffc.aa.node.NewNode.NewPrimNode._reads
final boolean _reads
Definition: NewNode.java:173
com.cliffc.aa.GVNGCM.add_flow
public< N extends Node > N add_flow(N n)
Definition: GVNGCM.java:50
com.cliffc.aa.node.NewNode< T >::_alias
int _alias
Definition: NewNode.java:20
com.cliffc.aa.node.FunNode
Definition: FunNode.java:58
com.cliffc.aa.node.NewNode< T >::valueobj
abstract TypeObj valueobj()
com.cliffc.aa.type.TypeMem.MEM
static final TypeMem MEM
Definition: TypeMem.java:224
com.cliffc.aa.Env.DEFMEM
static DefMemNode DEFMEM
Definition: Env.java:19
com.cliffc.aa.node.Node.op_prec
byte op_prec()
Definition: Node.java:533
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.type.TypeMemPtr
Definition: TypeMemPtr.java:14
com.cliffc.aa.Env.ALL_CTRL
static ConNode ALL_CTRL
Definition: Env.java:20
com.cliffc.aa.node.NewNode< T >::is_unused
boolean is_unused()
Definition: NewNode.java:100
com.cliffc.aa.type.TypeMemPtr.make
static TypeMemPtr make(BitsAlias aliases, TypeObj obj)
Definition: TypeMemPtr.java:66