aa
FP2DispNode.java
Go to the documentation of this file.
1
package
com.cliffc.aa.node;
2
3
import
com
.
cliffc
.
aa
.
GVNGCM
;
4
import
com
.
cliffc
.
aa
.
type
.*;
5
6
// Extract a Display pointer (a TypeMemPtr) from a TypeFunPtr.
7
public
final
class
FP2DispNode
extends
Node
{
8
public
FP2DispNode
(
Node
funptr ) { super(
OP_FP2DISP
,funptr); }
9
10
@Override
public
Node
ideal_reduce
() {
11
// If at a FunPtrNode, it is only making a TFP out of a code pointer and a
12
// display. Become the display (dropping the code pointer).
13
Node
in0 =
in
(0);
14
Node
disp =
fptr2disp
(in0);
15
if
( disp !=
null
)
return
disp;
16
// If all inputs to an Unresolved are FunPtrs with the same Display, become that display.
17
if
( in0 instanceof
UnresolvedNode
) {
18
for
(
Node
in
: in0.
_defs
) {
19
Node
disp2 =
fptr2disp
(
in
);
20
if
( disp==
null
) disp = disp2;
21
else
if
( disp!=disp2 )
22
return
null
;
23
}
24
return
disp;
25
}
26
27
// FP2Disp can move out of a Call, if the function has no Parm:mem - happens
28
// for single target calls that do not (have not yet) inlined.
29
if
( in0 instanceof
ProjNode
&& in0.
in
(0) instanceof
CallNode
) {
30
int
idx = ((
ProjNode
)in0)._idx;
31
Node
fptr = in0.
in
(0).
in
(idx);
32
return
set_def
(0,fptr);
33
}
34
35
// Move past a 'fresh', just getting the display not a 'fresh' copy of the function TVar.
36
if
(
in
(0) instanceof
FreshNode
&& ((
FreshNode
)
in
(0)).
id
() !=
in
(0) )
37
return
set_def
(0,((
FreshNode
)
in
(0)).
id
());
38
39
return
null
;
40
}
41
42
Node
fptr2disp
(
Node
in
) {
43
if
(
in
instanceof
FunPtrNode
) {
44
FunPtrNode
fptr = (
FunPtrNode
)
in
;
45
if
( !fptr.
is_forward_ref
() )
46
return
fptr.
display
();
47
}
48
return
null
;
49
}
50
51
@Override
public
Type
value
(
GVNGCM
.
Mode
opt_mode) {
52
Type
t =
val
(0);
53
return
t instanceof
TypeFunPtr
? ((
TypeFunPtr
)t).
_disp
.
simple_ptr
() : t.
oob
();
54
}
55
@Override
public
TypeMem
live_use
(
GVNGCM
.
Mode
opt_mode,
Node
def ) {
return
def instanceof
ThretNode
?
TypeMem
.
ANYMEM
:
_live
; }
56
}
com.cliffc.aa.node.FP2DispNode.fptr2disp
Node fptr2disp(Node in)
Definition:
FP2DispNode.java:42
com.cliffc.aa.type.TypeFunPtr
Definition:
TypeFunPtr.java:23
com.cliffc.aa.node.ThretNode
Definition:
ThretNode.java:14
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
Definition:
Node.java:16
com.cliffc.aa.node.FP2DispNode
Definition:
FP2DispNode.java:7
com.cliffc.aa.type.Type
an implementation of language AA
Definition:
Type.java:94
com.cliffc.aa.node.FunPtrNode
Definition:
FunPtrNode.java:40
com.cliffc.aa.node.FP2DispNode.FP2DispNode
FP2DispNode(Node funptr)
Definition:
FP2DispNode.java:8
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.FP2DispNode.ideal_reduce
Node ideal_reduce()
Definition:
FP2DispNode.java:10
com.cliffc.aa.type.TypeFunPtr._disp
Type _disp
Definition:
TypeFunPtr.java:28
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.type.Type.simple_ptr
Type simple_ptr()
Definition:
Type.java:358
com.cliffc.aa.node.FreshNode
Definition:
FreshNode.java:11
com.cliffc.aa.node.ProjNode
Definition:
ProjNode.java:11
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.UnresolvedNode
Definition:
UnresolvedNode.java:13
com.cliffc.aa.node.FunPtrNode.is_forward_ref
boolean is_forward_ref()
Definition:
FunPtrNode.java:216
com.cliffc.aa.node.FP2DispNode.value
Type value(GVNGCM.Mode opt_mode)
Definition:
FP2DispNode.java:51
com.cliffc.aa.node.Node.set_def
Node set_def(int idx, Node n)
Definition:
Node.java:154
com.cliffc.aa.node.Node.OP_FP2DISP
static final byte OP_FP2DISP
Definition:
Node.java:26
com.cliffc.aa.type.Type.oob
Type oob()
Definition:
Type.java:635
com.cliffc.aa.node.FunPtrNode.display
Node display()
Definition:
FunPtrNode.java:63
com
com.cliffc.aa.node.FP2DispNode.live_use
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
Definition:
FP2DispNode.java:55
com.cliffc.aa.type
Definition:
Bits.java:1
com.cliffc.aa.node.Node._defs
Ary< Node > _defs
Definition:
Node.java:124
com.cliffc.aa.GVNGCM.Mode
Definition:
GVNGCM.java:14
src
main
java
com
cliffc
aa
node
FP2DispNode.java
Generated by
1.8.18