aa
MemPrimNode.java
Go to the documentation of this file.
1 package com.cliffc.aa.node;
2 
3 import com.cliffc.aa.Env;
4 import com.cliffc.aa.GVNGCM;
5 import com.cliffc.aa.type.*;
6 
7 import static com.cliffc.aa.AA.*;
8 
9 // Memory-based primitives
10 public abstract class MemPrimNode extends PrimNode {
11  MemPrimNode( String name, String[] args, TypeTuple formals, Type ret ) { super(name,args,formals,ret); _op_prec = 0; }
12  Node mem() { return in(1); }
13  Node adr() { return in(2); }
14  Node idx() { return in(3); }
15  Node rez() { return in(4); }
16  abstract String bal_close();
17  @Override public String xstr() { return _name+(bal_close()==null?"":bal_close()); }
18 
19  @Override public ErrMsg err(boolean fast) {
20  Type tmem = mem()._val;
21  Type tadr = adr()._val;
22  Type tidx = _defs._len <= 3 ? Type.XNIL : idx()._val;
23  if( tmem==Type.ANY ) return null; // No error
24  if( tadr==Type.ANY ) return null; // No error
25  if( tidx==Type.ANY ) return null; // No error
26  if( tadr.must_nil() ) return fast ? ErrMsg.FAST : ErrMsg.niladr(_badargs[1],"Array might be nil when reading",null);
27  if( !(tadr instanceof TypeMemPtr) )
28  return fast ? ErrMsg.FAST : ErrMsg.typerr(_badargs[1],tadr,tmem,TypeMemPtr.ISUSED);
29  TypeMemPtr ptr = (TypeMemPtr)tadr;
30  TypeObj objs = ((TypeMem)tmem).ld(ptr); // General load from memory
31  if( objs==TypeObj.UNUSED || objs==TypeObj.XOBJ ) return null; // Can fall to valid array
32  if( !(objs instanceof TypeAry) )
33  return fast ? ErrMsg.FAST : ErrMsg.typerr(_badargs[1],ptr,tmem,TypeMemPtr.ARYPTR);
34  TypeAry ary = (TypeAry)objs;
35  if( tidx instanceof TypeInt ) {
36  TypeInt idx = (TypeInt)tidx;
37  if( idx.is_con() ) {
38  long i = idx.getl();
39  long len = ary._size.is_con() ? ary._size.getl() : (ary._size._z>=63 ? Integer.MAX_VALUE : (1L<<ary._size._z));
40  if( i<0 || i>=len ) return fast ? ErrMsg.FAST : ErrMsg.niladr(_badargs[2],"Index must be out of bounds",null);
41  }
42  }
43 
44  return null;
45  }
46 
47  // ------------------------------------------------------------
48  public abstract static class ReadPrimNode extends MemPrimNode {
49  ReadPrimNode( String name, String[] args, TypeTuple formals, Type ret ) { super(name,args,formals,ret); }
50 
51  @Override public FunPtrNode as_fun( GVNGCM gvn ) {
52  try(GVNGCM.Build<FunPtrNode> X = gvn.new Build<>()) {
53  assert _defs._len==0 && _uses._len==0;
54  FunNode fun = ( FunNode) X.xform(new FunNode(this).add_def(Env.ALL_CTRL)); // Points to ScopeNode only
55  ParmNode rpc = (ParmNode) X.xform(new ParmNode( 0 ,"rpc" ,fun,Env.ALL_CALL,null));
56  ParmNode mem = (ParmNode) X.xform(new ParmNode(MEM_IDX," mem",fun,TypeMem.MEM,Env.DEFMEM,null));
57  fun._bal_close = bal_close();
58  add_def(null); // Control for the primitive in slot 0
59  add_def(mem ); // Memory for the primitive in slot 1
60  for( int i=ARG_IDX; i<_sig.nargs(); i++ ) // First is display, never used
61  add_def(X.xform(new ParmNode(i,_sig._args[i],fun, (ConNode)Node.con(_sig.arg(i).simple_ptr()),null)));
62  X.xform(this);
63  // Functions return the set of *modified* memory. ReadPrimNodes do not modify
64  // memory.
65  RetNode ret = (RetNode)X.xform(new RetNode(fun,mem(),this,rpc,fun));
66  // No closures are added to primitives
67  return (X._ret = new FunPtrNode(_name,ret));
68  }
69  }
70 
71  // The only memory required here is what is needed to support the Load
72  @Override public TypeMem live_use(GVNGCM.Mode opt_mode, Node def ) {
73  if( def==adr() ) return TypeMem.ALIVE;
74  if( _defs._len>3 && def==idx() ) return TypeMem.ALIVE;
75  Type tmem = mem()._val;
76  Type tptr = adr()._val;
77  if( !(tmem instanceof TypeMem ) ) return tmem.oob(TypeMem.ALLMEM); // Not a memory?
78  if( !(tptr instanceof TypeMemPtr) ) return tptr.oob(TypeMem.ALLMEM); // Not a pointer?
79  return ((TypeMem)tmem).remove_no_escapes(((TypeMemPtr)tptr)._aliases,"", Type.SCALAR);
80  }
81 
82  }
83 
84  // Array length
85  static class LValueLength extends ReadPrimNode {
86  LValueLength() { super("#",new String[]{" ctl"," mem","^","ary"},TypeTuple.LVAL_LEN,TypeInt.INT64); }
87  @Override public String bal_close() { return null; } // Balanced op
88  @Override public Type value(GVNGCM.Mode opt_mode) {
89  Type mem = val(1);
90  Type adr = val(2);
91  if( !(mem instanceof TypeMem ) ) return mem .oob();
92  if( !(adr instanceof TypeMemPtr) ) return adr.oob();
94  if( !(ptr._obj instanceof TypeAry) ) return ptr._obj.oob(TypeInt.INT64);
95  TypeAry ary = (TypeAry)ptr._obj;
96  return ary._size;
97  }
98  // Similar to LoadNode, of a field named '#'
99  @Override public TypeMem live_use(GVNGCM.Mode opt_mode, Node def ) {
100  TypeMem live = _live_use(opt_mode,def);
101  return def==adr()
103  : live;
104  }
105  public TypeMem _live_use(GVNGCM.Mode opt_mode, Node def ) {
106  Type tmem = mem()._val;
107  Type tptr = adr()._val;
108  if( !(tmem instanceof TypeMem ) ) return tmem.oob(TypeMem.ALLMEM); // Not a memory?
109  if( !(tptr instanceof TypeMemPtr) ) return tptr.oob(TypeMem.ALLMEM); // Not a pointer?
110  if( tptr.above_center() ) return TypeMem.ANYMEM; // Loaded from nothing
111 
112  Type tobj = ((TypeMem)tmem).ld((TypeMemPtr)tptr);
113  if( !(tobj instanceof TypeAry) )
114  return tobj.oob(TypeMem.ALLMEM);
115  Type tlen = ((TypeAry)tobj)._size;
116  if( tlen.is_con() ) return TypeMem.DEAD;
117  if( def==adr() ) // Load is sane, so address is alive
118  return tlen.above_center() ? TypeMem.DEAD : TypeMem.ALIVE;
119  return ((TypeMem)tmem).remove_no_escapes(((TypeMemPtr)tptr)._aliases,"#", Type.SCALAR);
120  }
121 
122  @Override public boolean unify( boolean test ) {
123  return LoadNode.unify(this," len",test,"[]_unify");
124  }
125 
126  @Override public TypeInt apply( Type[] args ) { throw unimpl(); }
127  }
128 
129  // Produces a binop LValue, where the leading TMP is a non-zero array
130  static class LValueRead extends ReadPrimNode {
131  LValueRead() { super("[",new String[]{" ctl"," mem","^","ary","idx"},TypeTuple.LVAL_RD,Type.SCALAR); }
132  @Override public String bal_close() { return "]"; } // Balanced op
133  @Override public byte op_prec() { return 0; } // Balanced op
134  @Override public Type value(GVNGCM.Mode opt_mode) {
135  Type mem = val(1);
136  Type adr = val(2);
137  Type idx = val(3);
138  if( !(mem instanceof TypeMem ) ) return mem .oob();
139  if( !(adr instanceof TypeMemPtr) ) return adr.oob();
140  if( !(idx instanceof TypeInt) && idx != Type.XNIL ) return idx.oob();
141  if( err(true) != null ) return Type.SCALAR;
143  TypeInt idx2 = idx==Type.XNIL ? TypeInt.ZERO : (TypeInt)idx;
144  if( !(ptr._obj instanceof TypeAry) ) return ptr._obj.oob();
145  TypeAry ary = (TypeAry)ptr._obj;
146  return ary.ld(idx2);
147  }
148 
149  @Override public boolean unify( boolean test ) {
150  return LoadNode.unify(this," elem",test,"[]_unify");
151  }
152 
153  @Override public TypeInt apply( Type[] args ) { throw unimpl(); }
154  }
155 
156  // ------------------------------------------------------------
157  public abstract static class WritePrimNode extends MemPrimNode {
158  WritePrimNode( String name, String[] args, TypeTuple formals, Type ret ) { super(name,args,formals,ret); }
159  @Override public boolean is_mem() { return true; }
160 
161  @Override public FunPtrNode as_fun( GVNGCM gvn ) {
162  try(GVNGCM.Build<FunPtrNode> X = gvn.new Build<>()) {
163  assert _defs._len==0 && _uses._len==0;
164  FunNode fun = ( FunNode) X.xform(new FunNode(this).add_def(Env.ALL_CTRL)); // Points to ScopeNode only
165  ParmNode rpc = (ParmNode) X.xform(new ParmNode( 0 ,"rpc" ,fun,Env.ALL_CALL,null));
166  ParmNode mem = (ParmNode) X.xform(new ParmNode(MEM_IDX," mem",fun,TypeMem.MEM,Env.DEFMEM,null));
167  fun._bal_close = bal_close();
168  add_def(null); // Control for the primitive in slot 0
169  add_def(mem ); // Memory for the primitive in slot 1
170  for( int i=ARG_IDX; i<_sig.nargs(); i++ ) // First is display, never used
171  add_def(X.xform(new ParmNode(i,_sig._args[i],fun, (ConNode)Node.con(_sig.arg(i).simple_ptr()),null)));
172  // Write prims return both a value and memory.
173  MemPrimNode prim = (MemPrimNode)X.xform(this);
174  RetNode ret = (RetNode)X.xform(new RetNode(fun,prim,prim.rez(),rpc,fun));
175  return (X._ret = new FunPtrNode(_name,ret));
176  }
177  }
178 
179  @Override public TypeMem all_live() { return TypeMem.ALLMEM; }
180  // The only memory required here is what is needed to support the Load
181  @Override public TypeMem live_use(GVNGCM.Mode opt_mode, Node def ) {
182  if( def==mem() ) return _live; // Pass full liveness along
183  if( def==rez() ) return TypeMem.ESCAPE;// Value escapes
184  if( def==adr() ) return TypeMem.ALIVE; // Basic aliveness
185  if( def==idx() ) return TypeMem.ALIVE ;// Basic aliveness
186  throw unimpl(); // Should not reach here
187  }
188  @Override BitsAlias escapees() {
189  Type adr = adr()._val;
190  if( !(adr instanceof TypeMemPtr) ) return adr.above_center() ? BitsAlias.EMPTY : BitsAlias.FULL;
191  return ((TypeMemPtr)adr)._aliases;
192  }
193 
194  @Override public boolean unify(boolean test) {
195  throw unimpl();
196  }
197  }
198 
199  // Produces a triop LValue, where the leading TMP is a non-zero array
200  static class LValueWrite extends WritePrimNode {
201  LValueWrite() { super("[",new String[]{" ctl"," mem","^","ary","idx","val"},TypeTuple.LVAL_WR,Type.SCALAR); }
202  @Override public String bal_close() { return "]:="; } // Balanced op
203  @Override public byte op_prec() { return 0; }
204  @Override public Type value(GVNGCM.Mode opt_mode) {
205  Type mem = val(1);
206  Type ary = val(2);
207  Type idx = val(3);
208  Type val = val(4);
209  if( !(mem instanceof TypeMem ) ) return mem.oob();
210  if( !(ary instanceof TypeMemPtr) ) return ary.oob();
211  if( !(idx instanceof TypeInt) && idx!=Type.XNIL ) return idx.oob();
212  if( !val.isa(Type.SCALAR) ) return val.oob();
213  TypeMem tmem = (TypeMem )mem;
214  TypeMemPtr tary = (TypeMemPtr)ary;
215  TypeInt tidx = idx==Type.XNIL ? TypeInt.ZERO : (TypeInt)idx;
216  TypeMem tmem2 = tmem.update(tary._aliases,tidx,val);
217  return tmem2;
218  }
219  @Override public boolean unify(boolean test) {
220  return StoreNode.unify(this,rez()," elem",test,"[]:=_unify");
221  }
222  @Override public TypeInt apply( Type[] args ) { throw unimpl(); }
223  }
224 
225  // Produces a triop LValue, where the leading TMP is a non-zero array
226  static class LValueWriteFinal extends WritePrimNode {
227  LValueWriteFinal() { super("[",new String[]{" ctl"," mem","^","ary","idx","val"},TypeTuple.LVAL_WR,Type.SCALAR); }
228  @Override public String bal_close() { return "]="; } // Balanced op
229  @Override public byte op_prec() { return 0; }
230  @Override public Type value(GVNGCM.Mode opt_mode) {
231  Type mem = val(1);
232  Type ary = val(2);
233  Type idx = val(3);
234  Type val = val(4);
235  if( !(mem instanceof TypeMem ) ) return mem.oob();
236  if( !(ary instanceof TypeMemPtr) ) return ary.oob();
237  if( !(idx instanceof TypeInt) && idx!=Type.XNIL ) return idx.oob();
238  if( !val.isa(Type.SCALAR) ) return val.oob();
239  TypeMem tmem = (TypeMem )mem;
240  TypeMemPtr tary = (TypeMemPtr)ary;
241  TypeInt tidx = idx==Type.XNIL ? TypeInt.ZERO : (TypeInt)idx;
242  TypeMem tmem2 = tmem.update(tary._aliases,tidx,val);
243  return tmem2;
244  }
245  @Override public boolean unify(boolean test) {
246  return StoreNode.unify(this,rez()," elem",test,"[]=_unify");
247  }
248  @Override public TypeInt apply( Type[] args ) { throw unimpl(); }
249  @Override public ErrMsg err(boolean fast) {
250  ErrMsg msg = super.err(fast);
251  if( msg != null ) return msg;
252  return Node.ErrMsg.syntax(_badargs[0],"Final array assignment not supported.");
253  }
254  }
255 
256 }
com.cliffc.aa.type.BitsAlias.FULL
static BitsAlias FULL
Definition: BitsAlias.java:27
com.cliffc.aa.node.StoreNode.unify
boolean unify(boolean test)
Definition: StoreNode.java:179
com.cliffc.aa.node.MemPrimNode
Definition: MemPrimNode.java:10
com.cliffc.aa.type.TypeMem.DEAD
static final TypeMem DEAD
Definition: TypeMem.java:226
com.cliffc.aa.node.PrimNode
Definition: PrimNode.java:20
com.cliffc.aa.type.Type.isa
boolean isa(Type t)
Definition: Type.java:623
com.cliffc.aa.type.TypeMem.update
TypeMem update(BitsAlias aliases, Access fin, String fld, Type val)
Definition: TypeMem.java:459
com.cliffc.aa.node.Node.live
TypeMem live(GVNGCM.Mode opt_mode)
Definition: Node.java:478
com.cliffc.aa.node.MemPrimNode.WritePrimNode
Definition: MemPrimNode.java:157
com.cliffc.aa.node.MemPrimNode.LValueLength.value
Type value(GVNGCM.Mode opt_mode)
Definition: MemPrimNode.java:88
com.cliffc.aa.type.TypeMem
Memory type; the state of all of memory; memory edges order memory ops.
Definition: TypeMem.java:53
com.cliffc.aa.node.Node.len
int len()
Definition: Node.java:125
com.cliffc.aa.node.MemPrimNode.LValueRead.op_prec
byte op_prec()
Definition: MemPrimNode.java:133
com.cliffc.aa.node.Node._live
TypeMem _live
Definition: Node.java:89
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.node.MemPrimNode.LValueWriteFinal.err
ErrMsg err(boolean fast)
Definition: MemPrimNode.java:249
com.cliffc.aa.type.TypeTuple.LVAL_RD
static final TypeTuple LVAL_RD
Definition: TypeTuple.java:144
com.cliffc.aa.node.MemPrimNode.LValueLength.unify
boolean unify(boolean test)
Definition: MemPrimNode.java:122
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.LValueWriteFinal
LValueWriteFinal()
Definition: MemPrimNode.java:227
com.cliffc.aa.node.MemPrimNode.LValueLength
Definition: MemPrimNode.java:85
com.cliffc.aa.type.TypeInt
Definition: TypeInt.java:9
com.cliffc.aa.type.TypeMem.ESCAPE
static final TypeMem ESCAPE
Definition: TypeMem.java:227
com.cliffc.aa.type.TypeAry.ld
Type ld(TypeInt idx)
Definition: TypeAry.java:90
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.node.StoreNode
Definition: StoreNode.java:14
com.cliffc.aa.node.MemPrimNode.LValueWrite.bal_close
String bal_close()
Definition: MemPrimNode.java:202
com.cliffc.aa.type.TypeTuple.LVAL_WR
static final TypeTuple LVAL_WR
Definition: TypeTuple.java:145
com.cliffc.aa.type.TypeInt._z
byte _z
Definition: TypeInt.java:11
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.node.Node.ErrMsg.typerr
static ErrMsg typerr(Parse loc, Type actual, Type t0mem, Type expected)
Definition: Node.java:906
com.cliffc.aa.type.TypeTuple
Definition: TypeTuple.java:11
com.cliffc.aa.node.MemPrimNode.LValueRead.LValueRead
LValueRead()
Definition: MemPrimNode.java:131
com.cliffc.aa.node.MemPrimNode.LValueLength.LValueLength
LValueLength()
Definition: MemPrimNode.java:86
com.cliffc.aa.node.MemPrimNode.rez
Node rez()
Definition: MemPrimNode.java:15
com.cliffc.aa.node.Node.ErrMsg.niladr
static ErrMsg niladr(Parse loc, String msg, String fld)
Definition: Node.java:934
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.LoadNode
Definition: LoadNode.java:13
com.cliffc.aa.type.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.node.Node.ErrMsg
Definition: Node.java:888
com.cliffc.aa.node.ConNode
Definition: ConNode.java:9
com.cliffc.aa.node.Node.add_def
Node add_def(Node n)
Definition: Node.java:152
com.cliffc.aa.node.FunPtrNode
Definition: FunPtrNode.java:40
com.cliffc.aa.node.MemPrimNode.WritePrimNode.WritePrimNode
WritePrimNode(String name, String[] args, TypeTuple formals, Type ret)
Definition: MemPrimNode.java:158
com.cliffc.aa.type.TypeAry
Definition: TypeAry.java:7
com.cliffc.aa.node.RetNode
Definition: RetNode.java:19
com.cliffc.aa.node.MemPrimNode.mem
Node mem()
Definition: MemPrimNode.java:12
com.cliffc.aa.type.TypeMemPtr._obj
TypeObj _obj
Definition: TypeMemPtr.java:26
com.cliffc.aa.node.PrimNode._name
final String _name
Definition: PrimNode.java:21
com.cliffc.aa.type.TypeMem.ANYMEM
static final TypeMem ANYMEM
Definition: TypeMem.java:228
com.cliffc.aa.type.TypeMem.above_center
boolean above_center()
Definition: TypeMem.java:548
com.cliffc.aa.node.MemPrimNode.LValueRead.bal_close
String bal_close()
Definition: MemPrimNode.java:132
com.cliffc.aa.node.MemPrimNode.bal_close
abstract String bal_close()
com.cliffc.aa.node.MemPrimNode.WritePrimNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: MemPrimNode.java:181
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.type.TypeInt.INT64
static final TypeInt INT64
Definition: TypeInt.java:39
com.cliffc.aa.node.MemPrimNode.LValueWriteFinal
Definition: MemPrimNode.java:226
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.MemPrimNode.LValueWrite.value
Type value(GVNGCM.Mode opt_mode)
Definition: MemPrimNode.java:204
com.cliffc.aa.type.Type.is_con
boolean is_con()
Definition: Type.java:776
com.cliffc.aa.node.MemPrimNode.LValueLength._live_use
TypeMem _live_use(GVNGCM.Mode opt_mode, Node def)
Definition: MemPrimNode.java:105
com.cliffc.aa.type.Type.above_center
boolean above_center()
Definition: Type.java:741
com.cliffc.aa.node.Node.ErrMsg.syntax
static ErrMsg syntax(Parse loc, String msg)
Definition: Node.java:900
com.cliffc.aa.node.PrimNode._sig
final TypeFunSig _sig
Definition: PrimNode.java:22
com.cliffc.aa.node.MemPrimNode.LValueWrite.apply
TypeInt apply(Type[] args)
Definition: MemPrimNode.java:222
com.cliffc.aa.type.TypeAry._size
TypeInt _size
Definition: TypeAry.java:8
com.cliffc.aa.node.MemPrimNode.LValueWrite.LValueWrite
LValueWrite()
Definition: MemPrimNode.java:201
com.cliffc.aa.type.TypeObj.XOBJ
static final TypeObj XOBJ
Definition: TypeObj.java:47
com.cliffc.aa.type.TypeInt.is_con
boolean is_con()
Definition: TypeInt.java:181
com.cliffc.aa.node.MemPrimNode.LValueWrite.unify
boolean unify(boolean test)
Definition: MemPrimNode.java:219
com.cliffc.aa.node.MemPrimNode.LValueRead.apply
TypeInt apply(Type[] args)
Definition: MemPrimNode.java:153
com.cliffc.aa.type.TypeObj.UNUSED
static final TypeObj UNUSED
Definition: TypeObj.java:46
com.cliffc.aa.node.MemPrimNode.LValueRead.unify
boolean unify(boolean test)
Definition: MemPrimNode.java:149
com.cliffc.aa.node.MemPrimNode.err
ErrMsg err(boolean fast)
Definition: MemPrimNode.java:19
com.cliffc.aa.node.MemPrimNode.LValueWrite.op_prec
byte op_prec()
Definition: MemPrimNode.java:203
com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.value
Type value(GVNGCM.Mode opt_mode)
Definition: MemPrimNode.java:230
com.cliffc.aa.node.Node.ErrMsg.FAST
static final ErrMsg FAST
Definition: Node.java:893
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
com.cliffc.aa.type.TypeMemPtr.ARYPTR
static final TypeMemPtr ARYPTR
Definition: TypeMemPtr.java:95
com.cliffc.aa.type.Type.must_nil
boolean must_nil()
Definition: Type.java:845
com.cliffc.aa.type.TypeMem.ALIVE
static final TypeMem ALIVE
Definition: TypeMem.java:226
com.cliffc.aa.GVNGCM
Definition: GVNGCM.java:12
com.cliffc.aa.type.Type.simple_ptr
Type simple_ptr()
Definition: Type.java:358
com.cliffc.aa.node.MemPrimNode.WritePrimNode.unify
boolean unify(boolean test)
Definition: MemPrimNode.java:194
com.cliffc.aa.type.BitsAlias.EMPTY
static BitsAlias EMPTY
Definition: BitsAlias.java:27
com.cliffc.aa.node.MemPrimNode.LValueRead.value
Type value(GVNGCM.Mode opt_mode)
Definition: MemPrimNode.java:134
com.cliffc.aa.type.TypeTuple.LVAL_LEN
static final TypeTuple LVAL_LEN
Definition: TypeTuple.java:143
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.MemPrimNode.ReadPrimNode.as_fun
FunPtrNode as_fun(GVNGCM gvn)
Definition: MemPrimNode.java:51
com.cliffc.aa.AA
an implementation of language AA
Definition: AA.java:9
com.cliffc.aa.node.MemPrimNode.adr
Node adr()
Definition: MemPrimNode.java:13
com.cliffc.aa.node.Node.val
Type val(int idx)
Definition: Node.java:470
com.cliffc.aa.node.MemPrimNode.LValueRead
Definition: MemPrimNode.java:130
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.MemPrimNode.LValueLength.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: MemPrimNode.java:99
com.cliffc.aa.node.PrimNode._op_prec
byte _op_prec
Definition: PrimNode.java:24
com.cliffc.aa.type.TypeMemPtr._aliases
BitsAlias _aliases
Definition: TypeMemPtr.java:16
com.cliffc.aa.node.MemPrimNode.ReadPrimNode
Definition: MemPrimNode.java:48
com.cliffc.aa.node.MemPrimNode.LValueLength.bal_close
String bal_close()
Definition: MemPrimNode.java:87
com.cliffc.aa.node.MemPrimNode.WritePrimNode.is_mem
boolean is_mem()
Definition: MemPrimNode.java:159
com.cliffc.aa.node.Node.sharptr
Type sharptr(Node mem)
Definition: Node.java:855
com.cliffc.aa.node.MemPrimNode.ReadPrimNode.ReadPrimNode
ReadPrimNode(String name, String[] args, TypeTuple formals, Type ret)
Definition: MemPrimNode.java:49
com.cliffc.aa.node.ParmNode
Definition: ParmNode.java:14
com.cliffc.aa.node.FunNode._bal_close
String _bal_close
Definition: FunNode.java:60
com.cliffc.aa.type.TypeInt.getl
long getl()
Definition: TypeInt.java:61
com.cliffc.aa.node.MemPrimNode.LValueLength.apply
TypeInt apply(Type[] args)
Definition: MemPrimNode.java:126
com.cliffc.aa.type.Type.oob
Type oob()
Definition: Type.java:635
com.cliffc.aa.node.MemPrimNode.WritePrimNode.escapees
BitsAlias escapees()
Definition: MemPrimNode.java:188
com.cliffc.aa.type.TypeMemPtr.ISUSED
static final TypeMemPtr ISUSED
Definition: TypeMemPtr.java:92
com.cliffc.aa.type.Type.XNIL
static final Type XNIL
Definition: Type.java:333
com.cliffc.aa.type.TypeInt.ZERO
static final TypeInt ZERO
Definition: TypeInt.java:49
com.cliffc.aa.node.PrimNode._badargs
Parse[] _badargs
Definition: PrimNode.java:23
com.cliffc.aa.GVNGCM.Build
Definition: GVNGCM.java:356
com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.apply
TypeInt apply(Type[] args)
Definition: MemPrimNode.java:248
com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.bal_close
String bal_close()
Definition: MemPrimNode.java:228
com.cliffc.aa.node.MemPrimNode.LValueWriteFinal.op_prec
byte op_prec()
Definition: MemPrimNode.java:229
com.cliffc.aa.node.FunNode
Definition: FunNode.java:58
com.cliffc.aa.node.MemPrimNode.ReadPrimNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: MemPrimNode.java:72
com
com.cliffc.aa.node.MemPrimNode.MemPrimNode
MemPrimNode(String name, String[] args, TypeTuple formals, Type ret)
Definition: MemPrimNode.java:11
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.node.MemPrimNode.LValueWriteFinal.unify
boolean unify(boolean test)
Definition: MemPrimNode.java:245
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.node.MemPrimNode.LValueWrite
Definition: MemPrimNode.java:200
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition: Node.java:124
com.cliffc.aa.type.TypeMemPtr
Definition: TypeMemPtr.java:14
com.cliffc.aa.node.MemPrimNode.idx
Node idx()
Definition: MemPrimNode.java:14
com.cliffc.aa.Env.ALL_CTRL
static ConNode ALL_CTRL
Definition: Env.java:20
com.cliffc.aa.GVNGCM.Mode
Definition: GVNGCM.java:14
com.cliffc.aa.node.MemPrimNode.WritePrimNode.as_fun
FunPtrNode as_fun(GVNGCM gvn)
Definition: MemPrimNode.java:161
com.cliffc.aa.node.LoadNode.unify
boolean unify(boolean test)
Definition: LoadNode.java:267
com.cliffc.aa.node.MemPrimNode.WritePrimNode.all_live
TypeMem all_live()
Definition: MemPrimNode.java:179
com.cliffc.aa.node.MemPrimNode.xstr
String xstr()
Definition: MemPrimNode.java:17