aa
ConNode.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 java.util.function.Predicate;
8 
9 public class ConNode<T extends Type> extends Node {
10  T _t; // Not final for testing
11  public ConNode( T t ) {
12  super(OP_CON,Env.START);
13  _t=t;
14  _live = all_live();
15  }
16  // Allows ANY type with a normal unification, used for uninitialized variables
17  // (as opposed to dead ones).
18  public ConNode( T t, double dummy ) {
19  super(OP_CON,Env.START);
20  _t=t;
21  }
22  // Used by FunPtrNode
23  ConNode( byte type, T tfp, RetNode ret, Node closure ) { super(type,ret,closure); _t = tfp; }
24  @Override public String xstr() { return Env.ALL_CTRL == this ? "ALL_CTL" : (_t==null?"(null)":_t.toString()); }
25  @Override public Type value(GVNGCM.Mode opt_mode) {
26  // ALL_CTRL is used for unknown callers; during and after GCP there are no
27  // unknown callers. However, we keep the ALL_CTRL for primitives so we can
28  // reset the compilation state easily.
29  if( opt_mode._CG && Env.ALL_CTRL == this ) return Type.XCTRL;
30  return _t.simple_ptr();
31  }
32  @Override public TypeMem live(GVNGCM.Mode opt_mode) {
33  // If any use is alive, the Con is alive... but it never demands memory.
34  // Indeed, it may supply memory.
35  if( _keep>0 ) return all_live();
36  TypeLive live = TypeLive.DEAD; // Start at lattice top
37  for( Node use : _uses )
38  if( use.live_uses() )
39  live = live.lmeet(use.live_use(opt_mode,this).live());
40  return TypeMem.make_live(live);
41  }
42  @Override public TypeMem all_live() { return _t==Type.CTRL ? TypeMem.ALIVE : (_t instanceof TypeMem ? TypeMem.ALIVE : TypeMem.LIVE_BOT); }
43  @Override public String toString() { return str(); }
44  @Override public int hashCode() { return _t.hashCode(); }// In theory also slot 0, but slot 0 is always Start
45  @Override public boolean equals(Object o) {
46  if( this==o ) return true;
47  if( !(o instanceof ConNode) ) return false;
48  ConNode con = (ConNode)o;
49  return _t==con._t;
50  }
51  @Override Node walk_dom_last( Predicate<Node> P) { return null; }
52 }
53 
com.cliffc.aa.node.ConNode.ConNode
ConNode(T t)
Definition: ConNode.java:11
com.cliffc.aa.node.ConNode.ConNode
ConNode(byte type, T tfp, RetNode ret, Node closure)
Definition: ConNode.java:23
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._live
TypeMem _live
Definition: Node.java:89
com.cliffc
com.cliffc.aa.node.Node.OP_CON
static final byte OP_CON
Definition: Node.java:20
com.cliffc.aa.type.TypeMem.LIVE_BOT
static final TypeMem LIVE_BOT
Definition: TypeMem.java:226
com.cliffc.aa.node.Node
Definition: Node.java:16
com.cliffc.aa.type.Type
an implementation of language AA
Definition: Type.java:94
com.cliffc.aa.node.ConNode._t
T _t
Definition: ConNode.java:10
com.cliffc.aa.node.ConNode
Definition: ConNode.java:9
com.cliffc.aa.node.RetNode
Definition: RetNode.java:19
Predicate
com.cliffc.aa.Env.START
static StartNode START
Definition: Env.java:14
com.cliffc.aa.type.TypeLive.DEAD
static final TypeLive DEAD
Definition: TypeLive.java:59
com.cliffc.aa.node.Node._keep
byte _keep
Definition: Node.java:86
com.cliffc.aa.type.Type.CTRL
static final Type CTRL
Definition: Type.java:326
com.cliffc.aa.node.ConNode.all_live
TypeMem all_live()
Definition: ConNode.java:42
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.node.ConNode.walk_dom_last
Node walk_dom_last(Predicate< Node > P)
Definition: ConNode.java:51
com.cliffc.aa.node.ConNode.ConNode
ConNode(T t, double dummy)
Definition: ConNode.java:18
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.ConNode.live
TypeMem live(GVNGCM.Mode opt_mode)
Definition: ConNode.java:32
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.type.TypeLive
Definition: TypeLive.java:19
com.cliffc.aa.node.ConNode.hashCode
int hashCode()
Definition: ConNode.java:44
com.cliffc.aa.node.ConNode.toString
String toString()
Definition: ConNode.java:43
com.cliffc.aa.node.Node.str
String str()
Definition: Node.java:283
com.cliffc.aa.node.ConNode.value
Type value(GVNGCM.Mode opt_mode)
Definition: ConNode.java:25
com
com.cliffc.aa.node.ConNode.equals
boolean equals(Object o)
Definition: ConNode.java:45
com.cliffc.aa.type.TypeMem.make_live
static TypeMem make_live(TypeLive live)
Definition: TypeMem.java:220
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.node.ConNode.xstr
String xstr()
Definition: ConNode.java:24
com.cliffc.aa.Env.ALL_CTRL
static ConNode ALL_CTRL
Definition: Env.java:20
com.cliffc.aa.GVNGCM.Mode
Definition: GVNGCM.java:14