aa
CProjNode.java
Go to the documentation of this file.
1 package com.cliffc.aa.node;
2 
3 import com.cliffc.aa.AA;
4 import com.cliffc.aa.Env;
5 import com.cliffc.aa.GVNGCM;
6 import com.cliffc.aa.type.Type;
7 import com.cliffc.aa.type.TypeMem;
8 
9 // Proj control
10 public class CProjNode extends ProjNode {
11  public CProjNode( Node ifn ) { this(ifn,AA.CTL_IDX); }
12  public CProjNode( Node ifn, int idx ) { super(OP_CPROJ,ifn,idx); }
13  @Override public String xstr() {
14  if( !is_dead() && in(0) instanceof IfNode )
15  return _idx==0 ? "False" : "True";
16  return "CProj"+_idx;
17  }
18  @Override public Type value(GVNGCM.Mode opt_mode) {
19  Type x = super.value(opt_mode);
20  if( x==Type.ANY ) return Type.XCTRL;
21  if( x==Type.ALL ) return Type. CTRL;
22  return x;
23  }
24  @Override public void add_flow_use_extra(Node chg) {
25  // Control from Calls
26  if( chg instanceof CallNode ) {
27  // if the Call changes val the function might be callable
28  for( Node fun : _uses )
29  if( fun instanceof FunNode )
30  Env.GVN.add_flow(fun);
31  }
32  }
33 
34  @Override public TypeMem all_live() { return TypeMem.ALIVE; }
35  @Override public TypeMem live_use(GVNGCM.Mode opt_mode, Node def ) { return def.all_live().basic_live() ? TypeMem.ALIVE : TypeMem.ANYMEM; }
36 
37  // Return the op_prec of the returned value. Not sensible except
38  // when call on primitives.
39  @Override public byte op_prec() { return _defs.at(0).op_prec(); }
40 }
com.cliffc.aa.type.TypeMem
Memory type; the state of all of memory; memory edges order memory ops.
Definition: TypeMem.java:53
com.cliffc
com.cliffc.aa.node.IfNode
Definition: IfNode.java:9
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.CProjNode
Definition: CProjNode.java:10
com.cliffc.aa.type.Type.ANY
static final Type ANY
Definition: Type.java:325
com.cliffc.aa.node.CProjNode.op_prec
byte op_prec()
Definition: CProjNode.java:39
com.cliffc.aa.node.CallNode
Definition: CallNode.java:86
com.cliffc.aa.type.TypeMem.ANYMEM
static final TypeMem ANYMEM
Definition: TypeMem.java:228
com.cliffc.aa.node.CProjNode.add_flow_use_extra
void add_flow_use_extra(Node chg)
Definition: CProjNode.java:24
com.cliffc.aa.type.Type.ALL
static final Type ALL
Definition: Type.java:324
com.cliffc.aa.Env.GVN
static final GVNGCM GVN
Definition: Env.java:13
com.cliffc.aa.node.CProjNode.xstr
String xstr()
Definition: CProjNode.java:13
com.cliffc.aa.node.CProjNode.value
Type value(GVNGCM.Mode opt_mode)
Definition: CProjNode.java:18
com.cliffc.aa.node.Node.is_dead
boolean is_dead()
Definition: Node.java:820
com.cliffc.aa.node.ProjNode._idx
int _idx
Definition: ProjNode.java:12
com.cliffc.aa.type.TypeMem.basic_live
boolean basic_live()
Definition: TypeMem.java:561
com.cliffc.aa.node.Node.in
Node in(int i)
Definition: Node.java:126
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.ProjNode
Definition: ProjNode.java:11
com.cliffc.aa.node.CProjNode.CProjNode
CProjNode(Node ifn)
Definition: CProjNode.java:11
com.cliffc.aa.node.Node._uses
Ary< Node > _uses
Definition: Node.java:245
com.cliffc.aa.node.CProjNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition: CProjNode.java:35
com.cliffc.aa.AA
an implementation of language AA
Definition: AA.java:9
com.cliffc.aa.node.Node.OP_CPROJ
static final byte OP_CPROJ
Definition: Node.java:22
com.cliffc.aa
Definition: AA.java:1
com.cliffc.aa.node.Node.all_live
TypeMem all_live()
Definition: Node.java:509
com.cliffc.aa.GVNGCM.add_flow
public< N extends Node > N add_flow(N n)
Definition: GVNGCM.java:50
com.cliffc.aa.node.CProjNode.CProjNode
CProjNode(Node ifn, int idx)
Definition: CProjNode.java:12
com.cliffc.aa.node.FunNode
Definition: FunNode.java:58
com
com.cliffc.aa.Env
Definition: Env.java:12
com.cliffc.aa.node.CProjNode.all_live
TypeMem all_live()
Definition: CProjNode.java:34
com.cliffc.aa.type
Definition: Bits.java:1
com.cliffc.aa.AA.CTL_IDX
static final int CTL_IDX
Definition: AA.java:13
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition: Node.java:124
com.cliffc.aa.GVNGCM.Mode
Definition: GVNGCM.java:14