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

Public Member Functions

 AddStrStr ()
 
void add_flow_use_extra (Node chg)
 
FunPtrNode as_fun (GVNGCM gvn)
 
TypeMem live_use (GVNGCM.Mode opt_mode, Node def)
 
byte op_prec ()
 
boolean unify (boolean test)
 
Type value (GVNGCM.Mode opt_mode)
 

Static Public Member Functions

static Ary< NewPrimNodeINTRINSICS ()
 
static void reset ()
 

Public Attributes

final String _name
 

Static Protected Member Functions

static void add_libs (Ary< NewPrimNode > INTRINSICS)
 

Package Functions

TypeTuple _value (TypeObj tobj)
 
String bal_close ()
 
TypeStr dead_type ()
 
TypeObj valueobj ()
 

Static Package Functions

 [static initializer]
 

Package Attributes

final int _op_prec
 
final boolean _reads
 
final TypeFunSig _sig
 

Static Private Attributes

static final Ary< NewPrimNodeINTRINSICS
 
static int OP_PREC =7
 

Detailed Description

Definition at line 67 of file NewStrNode.java.

Constructor & Destructor Documentation

◆ AddStrStr()

Member Function Documentation

◆ [static initializer]()

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

◆ _value()

TypeTuple com.cliffc.aa.node.NewStrNode.AddStrStr._value ( TypeObj  tobj)
package

Definition at line 91 of file NewStrNode.java.

91 { return TypeTuple.make(Type.CTRL,tobj,_tptr); }

References com.cliffc.aa.type.Type< T extends Type< T >.CTRL, and com.cliffc.aa.type.TypeTuple.make().

Referenced by com.cliffc.aa.node.NewStrNode.AddStrStr.value().

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

◆ add_flow_use_extra()

void com.cliffc.aa.node.NewStrNode.AddStrStr.add_flow_use_extra ( Node  chg)

Definition at line 108 of file NewStrNode.java.

108  {
109  if( chg==in(3) || chg==in(4) ) Env.GVN.add_flow(in(1)); // Address into a Load changes, the Memory can be more alive.
110  }

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

Here is the call graph for this function:

◆ add_libs()

static void com.cliffc.aa.node.NewStrNode.add_libs ( Ary< NewPrimNode INTRINSICS)
staticprotectedinherited

Definition at line 25 of file NewStrNode.java.

25  {
26  INTRINSICS.push(new ConvertI64Str());
27  INTRINSICS.push(new ConvertF64Str());
28  INTRINSICS.push(new AddStrStr());
29  }

References com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< TypeStr >.INTRINSICS.

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

Here is the caller graph for this function:

◆ as_fun()

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

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

Definition at line 184 of file NewNode.java.

184 { return null; }

◆ dead_type()

TypeStr com.cliffc.aa.node.NewStrNode.dead_type ( )
packageinherited

Definition at line 24 of file NewStrNode.java.

24 { return TypeStr.XSTR; }

References com.cliffc.aa.type.TypeStr.XSTR.

◆ INTRINSICS()

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

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  }

◆ live_use()

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

Definition at line 94 of file NewStrNode.java.

94  {
95  if( def==in(3) || def==in(4) ) return TypeMem.ALIVE;
96  assert def==in(1);
97  // Memory for aliases is alive, as-if a READ/LOAD
98  Type tmem = val(1);
99  Type tptr0= val(3);
100  Type tptr1= val(4);
101  if( !(tmem instanceof TypeMem ) ) return tmem .oob(TypeMem.ALLMEM); // Not a memory?
102  if( !(tptr0 instanceof TypeMemPtr) ) return tptr0.oob(TypeMem.ALLMEM); // Not a pointer?
103  if( !(tptr1 instanceof TypeMemPtr) ) return tptr1.oob(TypeMem.ALLMEM); // Not a pointer?
104  TypeMem esc0 = ((TypeMem)tmem).remove_no_escapes(((TypeMemPtr)tptr0)._aliases,"",Type.SCALAR);
105  TypeMem esc1 = ((TypeMem)tmem).remove_no_escapes(((TypeMemPtr)tptr1)._aliases,"",Type.SCALAR);
106  return (TypeMem)esc0.meet(esc1);
107  }

References com.cliffc.aa.type.TypeMem.ALIVE, com.cliffc.aa.type.TypeMem.ALLMEM, com.cliffc.aa.type.Type< T extends Type< T >.meet(), com.cliffc.aa.type.Type< T extends Type< T >.oob(), com.cliffc.aa.type.TypeMem.remove_no_escapes(), and com.cliffc.aa.type.Type< T extends Type< T >.SCALAR.

Here is the call graph for this function:

◆ op_prec()

byte com.cliffc.aa.node.NewStrNode.AddStrStr.op_prec ( )

Definition at line 93 of file NewStrNode.java.

93 { return (byte)OP_PREC; }

References com.cliffc.aa.node.NewStrNode.AddStrStr.OP_PREC.

◆ reset()

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

Definition at line 188 of file NewNode.java.

188 { INTRINSICS.clear(); }

◆ unify()

boolean com.cliffc.aa.node.NewStrNode.unify ( boolean  test)
inherited

Definition at line 15 of file NewStrNode.java.

15  {
16  // Self should always should be a TObj
17  TV2 tvar = tvar();
18  if( tvar.is_dead() ) return false;
19  assert tvar.isa("Obj");
20  // TODO: Structural unification on all fields
21  return false;
22  }

References com.cliffc.aa.tvar.TV2.is_dead(), and com.cliffc.aa.tvar.TV2.isa().

Here is the call graph for this function:

◆ value()

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

Definition at line 70 of file NewStrNode.java.

70  {
71  if( is_unused() ) return Type.ANY;
72  Type m = val(1);
73  Type sp0 = val(3);
74  Type sp1 = val(4);
75  if( !(m instanceof TypeMem) ) return m.oob();
76  if( sp0==Type.XNIL && sp1==Type.XNIL ) return TypeTuple.make(TypeObj.UNUSED,Type.XNIL);
77  if( !sp0.isa(TypeMemPtr.STR0) ) return _value(TypeStr.STR);
78  if( !sp1.isa(TypeMemPtr.STR0) ) return _value(TypeStr.STR);
79  if( sp0.above_center() || sp1.above_center() ) return Type.ANY;
80  TypeMem mem = (TypeMem)m;
81  TypeObj s0 = sp0==Type.XNIL ? TypeObj.UNUSED : mem.ld((TypeMemPtr)sp0);
82  TypeObj s1 = sp1==Type.XNIL ? TypeObj.UNUSED : mem.ld((TypeMemPtr)sp1);
83  if( sp0==Type.XNIL ) return _value(s1);
84  if( sp1==Type.XNIL ) return _value(s0);
85  if( !(s0 instanceof TypeStr) || !(s1 instanceof TypeStr) ) return _value(TypeStr.STR);
86  TypeStr str0 = (TypeStr)s0;
87  TypeStr str1 = (TypeStr)s1;
88  if( !str0.is_con() || !str1.is_con() ) return _value(TypeStr.STR);
89  return _value(TypeStr.make(false,(str0.getstr()+str1.getstr()).intern()));
90  }

References com.cliffc.aa.node.NewStrNode.AddStrStr._value(), com.cliffc.aa.type.Type< T extends Type< T >.above_center(), com.cliffc.aa.type.Type< T extends Type< T >.ANY, com.cliffc.aa.type.TypeStr.getstr(), com.cliffc.aa.type.TypeStr.is_con(), com.cliffc.aa.type.Type< T extends Type< T >.isa(), com.cliffc.aa.type.TypeMem.ld(), com.cliffc.aa.type.TypeStr.make(), com.cliffc.aa.type.TypeTuple.make(), com.cliffc.aa.type.Type< T extends Type< T >.oob(), com.cliffc.aa.type.TypeStr.STR, com.cliffc.aa.type.TypeMemPtr.STR0, com.cliffc.aa.type.TypeObj< O extends TypeObj< O >.UNUSED, and com.cliffc.aa.type.Type< T extends Type< T >.XNIL.

Here is the call graph for this function:

◆ valueobj()

TypeObj com.cliffc.aa.node.NewStrNode.AddStrStr.valueobj ( )
package

Definition at line 92 of file NewStrNode.java.

92 { throw com.cliffc.aa.AA.unimpl(); }

References com.cliffc.aa.AA.unimpl().

Here is the call graph for this function:

Member Data Documentation

◆ _name

final String com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >._name
inherited

Definition at line 171 of file NewNode.java.

◆ _op_prec

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

Definition at line 174 of file NewNode.java.

◆ _reads

final boolean com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >._reads
packageinherited

Definition at line 173 of file NewNode.java.

◆ _sig

final TypeFunSig com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >._sig
packageinherited

Definition at line 172 of file NewNode.java.

◆ INTRINSICS

final Ary<NewPrimNode> com.cliffc.aa.node.NewNode< T extends TypeObj< T >.NewPrimNode< T extends TypeObj< T >.INTRINSICS
staticprivateinherited

Definition at line 186 of file NewNode.java.

◆ OP_PREC

int com.cliffc.aa.node.NewStrNode.AddStrStr.OP_PREC =7
staticprivate

The documentation for this class was generated from the following file:
com.cliffc.aa.type.TypeMem.ld
TypeObj ld(TypeMemPtr ptr)
Definition: TypeMem.java:325
com.cliffc.aa.type.Type.isa
boolean isa(Type t)
Definition: Type.java:623
com.cliffc.aa.type.TypeMem
Memory type; the state of all of memory; memory edges order memory ops.
Definition: TypeMem.java:53
com.cliffc.aa.type.Type.SCALAR
static final Type SCALAR
Definition: Type.java:328
com.cliffc
com.cliffc.aa.Env.ALL_CALL
static ConNode ALL_CALL
Definition: Env.java:26
com.cliffc.aa.type.TypeMem.MEM_STR
static final TypeMem MEM_STR
Definition: TypeMem.java:229
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
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.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.node.Node.add_def
Node add_def(Node n)
Definition: Node.java:152
com.cliffc.aa.node.NewNode.NewPrimNode< TypeStr >::bal_close
String bal_close()
Definition: NewNode.java:184
com.cliffc.aa.type.Type.meet
final Type meet(Type t)
Definition: Type.java:412
com.cliffc.aa.AA.unimpl
static RuntimeException unimpl()
Definition: AA.java:10
com.cliffc.aa.type.TypeStr.make
static TypeStr make(String name, boolean any, String con)
Definition: TypeStr.java:36
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.TypeStr.is_con
boolean is_con()
Definition: TypeStr.java:94
com.cliffc.aa.type.TypeFunSig.nargs
int nargs()
Definition: TypeFunSig.java:87
com.cliffc.aa.type.TypeObj
Definition: TypeObj.java:15
com.cliffc.aa.type.TypeMemPtr.STR0
static final TypeMemPtr STR0
Definition: TypeMemPtr.java:98
com.cliffc.aa.type.Type.above_center
boolean above_center()
Definition: Type.java:741
com.cliffc.aa.node.NewNode.NewPrimNode< TypeStr >::INTRINSICS
static final Ary< NewPrimNode > INTRINSICS
Definition: NewNode.java:186
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.node.NewStrNode.AddStrStr._value
TypeTuple _value(TypeObj tobj)
Definition: NewStrNode.java:91
com.cliffc.aa.type.TypeTuple.make
static TypeTuple make(boolean any, Type[] ts)
Definition: TypeTuple.java:82
com.cliffc.aa.type.TypeStr.XSTR
static final TypeStr XSTR
Definition: TypeStr.java:46
com.cliffc.aa.node.NewNode.NewPrimNode< TypeStr >::_name
final String _name
Definition: NewNode.java:171
com.cliffc.aa.type.TypeMem.ALIVE
static final TypeMem ALIVE
Definition: TypeMem.java:226
com.cliffc.aa.node.NewNode.NewPrimNode< TypeStr >::_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.NewStrNode.AddStrStr.OP_PREC
static int OP_PREC
Definition: NewStrNode.java:68
com.cliffc.aa.type.TypeMem.remove_no_escapes
TypeMem remove_no_escapes(BitsAlias escs, String fld, Type live)
Definition: TypeMem.java:479
com.cliffc.aa.AA
an implementation of language AA
Definition: AA.java:9
com.cliffc.aa.type.TypeStr.getstr
String getstr()
Definition: TypeStr.java:52
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.FunNode._bal_close
String _bal_close
Definition: FunNode.java:60
com.cliffc.aa.type.Type.oob
Type oob()
Definition: Type.java:635
com.cliffc.aa.node.NewNode.NewPrimNode< TypeStr >::_reads
final boolean _reads
Definition: NewNode.java:173
com.cliffc.aa.type.Type.XNIL
static final Type XNIL
Definition: Type.java:333
com.cliffc.aa.GVNGCM.add_flow
public< N extends Node > N add_flow(N n)
Definition: GVNGCM.java:50
com.cliffc.aa.type.TypeStr.STR
static final TypeStr STR
Definition: TypeStr.java:45
com.cliffc.aa.node.FunNode
Definition: FunNode.java:58
com
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.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