changeset 58931 | 304c63b17b07 |
parent 58217 | b1a394e15ae9 |
child 59025 | b398685dd029 |
58930:a4ddd1667c72 | 58931:304c63b17b07 |
---|---|
94 val.set_node(new_val); |
94 val.set_node(new_val); |
95 } |
95 } |
96 |
96 |
97 store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), access.type(), |
97 store = kit->store_to_memory(kit->control(), access.addr().node(), val.node(), access.type(), |
98 access.addr().type(), mo, requires_atomic_access, unaligned, mismatched, unsafe); |
98 access.addr().type(), mo, requires_atomic_access, unaligned, mismatched, unsafe); |
99 access.set_raw_access(store); |
|
100 } else { |
99 } else { |
101 assert(!requires_atomic_access, "not yet supported"); |
100 assert(!requires_atomic_access, "not yet supported"); |
102 assert(access.is_opt_access(), "either parse or opt access"); |
101 assert(access.is_opt_access(), "either parse or opt access"); |
103 C2OptAccess& opt_access = static_cast<C2OptAccess&>(access); |
102 C2OptAccess& opt_access = static_cast<C2OptAccess&>(access); |
104 Node* ctl = opt_access.ctl(); |
103 Node* ctl = opt_access.ctl(); |
118 store = gvn.transform(st); |
117 store = gvn.transform(st); |
119 if (store == st) { |
118 if (store == st) { |
120 mm->set_memory_at(alias, st); |
119 mm->set_memory_at(alias, st); |
121 } |
120 } |
122 } |
121 } |
122 access.set_raw_access(store); |
|
123 |
|
123 return store; |
124 return store; |
124 } |
125 } |
125 |
126 |
126 Node* BarrierSetC2::load_at_resolved(C2Access& access, const Type* val_type) const { |
127 Node* BarrierSetC2::load_at_resolved(C2Access& access, const Type* val_type) const { |
127 DecoratorSet decorators = access.decorators(); |
128 DecoratorSet decorators = access.decorators(); |
151 load = kit->make_load(control, adr, val_type, access.type(), mo); |
152 load = kit->make_load(control, adr, val_type, access.type(), mo); |
152 } else { |
153 } else { |
153 load = kit->make_load(control, adr, val_type, access.type(), adr_type, mo, |
154 load = kit->make_load(control, adr, val_type, access.type(), adr_type, mo, |
154 dep, requires_atomic_access, unaligned, mismatched, unsafe); |
155 dep, requires_atomic_access, unaligned, mismatched, unsafe); |
155 } |
156 } |
156 access.set_raw_access(load); |
|
157 } else { |
157 } else { |
158 assert(!requires_atomic_access, "not yet supported"); |
158 assert(!requires_atomic_access, "not yet supported"); |
159 assert(access.is_opt_access(), "either parse or opt access"); |
159 assert(access.is_opt_access(), "either parse or opt access"); |
160 C2OptAccess& opt_access = static_cast<C2OptAccess&>(access); |
160 C2OptAccess& opt_access = static_cast<C2OptAccess&>(access); |
161 Node* control = control_dependent ? opt_access.ctl() : NULL; |
161 Node* control = control_dependent ? opt_access.ctl() : NULL; |
163 PhaseGVN& gvn = opt_access.gvn(); |
163 PhaseGVN& gvn = opt_access.gvn(); |
164 Node* mem = mm->memory_at(gvn.C->get_alias_index(adr_type)); |
164 Node* mem = mm->memory_at(gvn.C->get_alias_index(adr_type)); |
165 load = LoadNode::make(gvn, control, mem, adr, adr_type, val_type, access.type(), mo, dep, unaligned, mismatched); |
165 load = LoadNode::make(gvn, control, mem, adr, adr_type, val_type, access.type(), mo, dep, unaligned, mismatched); |
166 load = gvn.transform(load); |
166 load = gvn.transform(load); |
167 } |
167 } |
168 access.set_raw_access(load); |
|
168 |
169 |
169 return load; |
170 return load; |
170 } |
171 } |
171 |
172 |
172 class C2AccessFence: public StackObj { |
173 class C2AccessFence: public StackObj { |
804 Node* src_offset = ac->in(ArrayCopyNode::SrcPos); |
805 Node* src_offset = ac->in(ArrayCopyNode::SrcPos); |
805 Node* dest = ac->in(ArrayCopyNode::Dest); |
806 Node* dest = ac->in(ArrayCopyNode::Dest); |
806 Node* dest_offset = ac->in(ArrayCopyNode::DestPos); |
807 Node* dest_offset = ac->in(ArrayCopyNode::DestPos); |
807 Node* length = ac->in(ArrayCopyNode::Length); |
808 Node* length = ac->in(ArrayCopyNode::Length); |
808 |
809 |
809 assert (src_offset == NULL && dest_offset == NULL, "for clone offsets should be null"); |
810 assert (src_offset == NULL, "for clone offsets should be null"); |
811 assert (dest_offset == NULL, "for clone offsets should be null"); |
|
810 |
812 |
811 const char* copyfunc_name = "arraycopy"; |
813 const char* copyfunc_name = "arraycopy"; |
812 address copyfunc_addr = |
814 address copyfunc_addr = |
813 phase->basictype2arraycopy(T_LONG, NULL, NULL, |
815 phase->basictype2arraycopy(T_LONG, NULL, NULL, |
814 true, copyfunc_name, true); |
816 true, copyfunc_name, true); |