Go to the documentation of this file. 1 package com.cliffc.aa.node;
23 @Override
public boolean is_mem() {
return true; }
36 for(
int i=1; i<
_defs._len; i++ )
58 if(
msp==
null )
return null;
74 if( mem instanceof
StoreNode )
return mem;
78 if( head instanceof
CallNode )
return null;
84 if( mem instanceof
ParmNode )
return null;
85 if( mem instanceof
PhiNode )
return null;
87 if( mem instanceof
ConNode )
return null;
95 if(
_defs._len==1 )
return null;
111 if( idx == mjn.
_defs._len )
117 remove(
_defs._len-1);
135 for(
int i=0; i<
_defs._len; i++ ) {
141 if( i>0 && !diff ) diff = mems[i]!=mems[0];
143 if( !diff )
return mems[0];
149 for(
int alias=1, i; alias<
Env.
DEFMEM._defs._len; alias++ ) {
150 if( escs.
at(0).test_recur(alias) ) {
151 for( i=1; i<
_defs._len; i++ )
152 if( escs.
at(i).test_recur(alias) )
155 if( alias == 1 ||
Env.
DEFMEM.in(alias) !=
null )
156 pubs[alias] = mems[i].
at(alias);
165 return super.
live(opt_mode);
169 @Override
public boolean unify(
boolean test ) {
171 if(
msp==
null )
return false;
173 boolean progress =
tvar().
unify(tmem,test);
174 if( progress && test )
return true;
176 for(
int i=1; i<
_defs._len; i++ ) {
177 if( !
tvar(i).isa(
"Mem") )
continue;
179 if( progress && test )
return true;
194 if( idx ==
_defs._len ) {
209 GVN.revalive(mprj,base);
211 return (X._ret=
this);
223 if( idx ==
_defs._len ) {
236 if( didx != -1 )
Env.
DEFMEM.set_def(didx,base);
237 GVN.revalive(mspj,head,base);
245 GVN.add_flow_defs(
this);
246 assert
Env.
START.more_flow(
true)==0;
257 for(
int i=1; i<escs.
_len; i++ )
258 if( esc.
isa(escs.
at(i)) )
void remove_alias(int idx)
int add_alias(BitsAlias esc)
boolean unify(TV2 that, boolean test)
Memory type; the state of all of memory; memory edges order memory ops.
an implementation of language AA
public< N extends Node > N keep()
static final TypeMem ALLMEM
static final byte OP_JOIN
void add_alias_below(Node head, BitsAlias head1_escs, Node base)
static RuntimeException unimpl()
static final TypeMem ANYMEM
boolean check_solo_mem_writer(Node memw)
Node can_bypass(BitsAlias esc)
static TypeMem make0(TypeObj[] as)
public< N extends Node > N unkeep()
void add_flow_def_extra(Node chg)
TypeMem live_use(GVNGCM.Mode opt_mode, Node def)
boolean unify(boolean test)
Type value(GVNGCM.Mode opt_mode)
static ProjNode proj(Node head, int idx)
boolean unify_alias(BitsAlias aliases, TV2 mem, boolean test)
static void retype_mem(BitSet aliases, Node mem, Node exit, boolean skip_calls)
Node insert(int idx, Node n)
an implementation of language AA
MemJoinNode add_alias_below_new(Node nnn, Node old)
MemJoinNode add_alias_above(Node head)
Node set_def(int idx, Node n)
TypeMem live(GVNGCM.Mode opt_mode)
Node combine_splits(MemSplitNode head)
E set(int i, E e)
Set existing element.
static Node find_sese_head(Node mem)
MemJoinNode(MProjNode mprj)