aa
MProjNode.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.MEM_IDX;
8 
9 // Proj memory
10 public class MProjNode extends ProjNode {
11 
12  public MProjNode( CallNode call, Node def ) { super(MEM_IDX,call,def); }
13  public MProjNode( Node head ) { super(head, MEM_IDX); }
14  public MProjNode( Node head, int idx ) { super(head,idx); }
15  @Override public String xstr() { return "MProj"+_idx; }
16  @Override public boolean is_mem() { return true; }
17 
18  @Override public Node ideal_reduce() {
19  Node x = super.ideal_reduce();
20  if( x!=null ) return x;
21  // TODO: Turn back on, as a local flow property
22  //if( in(0) instanceof CallEpiNode ) {
23  // Node precall = in(0).is_pure_call(); // See if memory can bypass pure calls (most primitives)
24  // if( precall != null && _val == precall._val )
25  // return precall;
26  //}
27  return null;
28  }
29 
30  @Override public Type value(GVNGCM.Mode opt_mode) {
31  Type c = val(0);
32  if( c instanceof TypeTuple ) {
33  TypeTuple ct = (TypeTuple)c;
34  if( _idx < ct._ts.length ) {
35  Type t = ct.at(_idx);
36  // Break forward dead-alias cycles in recursive functions by inspecting
37  // dead-ness in DefMem.
38  if( in(0) instanceof CallNode && !opt_mode._CG)
39  t = t.join(in(1)._val);
40  return t;
41  }
42  }
43  return c.oob();
44  }
45 
46  //@Override public TV2 new_tvar( String alloc_site) { return TV2.make_mem(this,alloc_site); }
47 
48  @Override public void add_flow_use_extra(Node chg) {
49  if( chg instanceof CallNode ) { // If the Call changes value
50  Env.GVN.add_flow(chg.in(MEM_IDX)); // The called memory changes liveness
51  Env.GVN.add_flow(((CallNode)chg).fdx()); // The called function changes liveness
52  }
53  }
54 
55  @Override BitsAlias escapees() { return in(0).escapees(); }
56  @Override public TypeMem all_live() { return TypeMem.ALLMEM; }
57  // Only called here if alive, and input is more-than-basic-alive
58  @Override public TypeMem live_use(GVNGCM.Mode opt_mode, Node def ) {
59  return opt_mode._CG && def==Env.DEFMEM ? TypeMem.DEAD : _live;
60  }
61 }
com.cliffc.aa.node.Node.escapees
BitsAlias escapees()
Definition: Node.java:859
com.cliffc.aa.type.TypeMem.DEAD
static final TypeMem DEAD
Definition: TypeMem.java:226
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.join
Type join(Type t)
Definition: Type.java:619
com.cliffc.aa.node.Node._live
TypeMem _live
Definition: Node.java:89
com.cliffc
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.node.MProjNode.all_live
TypeMem all_live()
Definition: MProjNode.java:56
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.node.MProjNode.MProjNode
MProjNode(CallNode call, Node def)
Definition: MProjNode.java:12
com.cliffc.aa.AA.MEM_IDX
static final int MEM_IDX
Definition: AA.java:14
com.cliffc.aa.type.BitsAlias
Definition: BitsAlias.java:8
com.cliffc.aa.type.TypeTuple
Definition: TypeTuple.java:11
com.cliffc.aa.node.MProjNode.MProjNode
MProjNode(Node head, int idx)
Definition: MProjNode.java:14
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.CallNode
Definition: CallNode.java:86
com.cliffc.aa.node.MProjNode
Definition: MProjNode.java:10
com.cliffc.aa.node.Node.ideal_reduce
Node ideal_reduce()
Definition: Node.java:441
com.cliffc.aa.node.MProjNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: MProjNode.java:58
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition: Env.java:13
com.cliffc.aa.node.MProjNode.value
Type value(GVNGCM.Mode opt_mode)
Definition: MProjNode.java:30
com.cliffc.aa.node.ProjNode._idx
int _idx
Definition: ProjNode.java:12
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
com.cliffc.aa.GVNGCM
Definition: GVNGCM.java:12
com.cliffc.aa.node.ProjNode
Definition: ProjNode.java:11
com.cliffc.aa.node.MProjNode.escapees
BitsAlias escapees()
Definition: MProjNode.java:55
com.cliffc.aa.AA
an implementation of language AA
Definition: AA.java:9
com.cliffc.aa.node.Node.val
Type val(int idx)
Definition: Node.java:470
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.MProjNode.MProjNode
MProjNode(Node head)
Definition: MProjNode.java:13
com.cliffc.aa.type.TypeTuple.at
Type at(int idx)
Definition: TypeTuple.java:182
com.cliffc.aa.node.MProjNode.ideal_reduce
Node ideal_reduce()
Definition: MProjNode.java:18
com.cliffc.aa.type.Type.oob
Type oob()
Definition: Type.java:635
com.cliffc.aa.type.TypeTuple._ts
Type[] _ts
Definition: TypeTuple.java:13
com.cliffc.aa.GVNGCM.add_flow
public< N extends Node > N add_flow(N n)
Definition: GVNGCM.java:50
com.cliffc.aa.node.MProjNode.xstr
String xstr()
Definition: MProjNode.java:15
com.cliffc.aa.node.MProjNode.is_mem
boolean is_mem()
Definition: MProjNode.java:16
com
com.cliffc.aa.Env.DEFMEM
static DefMemNode DEFMEM
Definition: Env.java:19
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.node.MProjNode.add_flow_use_extra
void add_flow_use_extra(Node chg)
Definition: MProjNode.java:48
com.cliffc.aa.GVNGCM.Mode
Definition: GVNGCM.java:14