2525#include " opto/arraycopynode.hpp"
2626#include " opto/graphKit.hpp"
2727#include " opto/idealKit.hpp"
28- #include " opto/narrowptrnode.hpp"
2928#include " gc/shared/c2/modRefBarrierSetC2.hpp"
30- #include " utilities/macros.hpp"
3129
3230Node* ModRefBarrierSetC2::store_at_resolved (C2Access& access, C2AccessValue& val) const {
3331 DecoratorSet decorators = access.decorators ();
3432
35- const TypePtr* adr_type = access.addr ().type ();
3633 Node* adr = access.addr ().node ();
3734
3835 bool is_array = (decorators & IS_ARRAY) != 0 ;
@@ -47,36 +44,22 @@ Node* ModRefBarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val
4744
4845 assert (access.is_parse_access (), " entry not supported at optimization time" );
4946 C2ParseAccess& parse_access = static_cast <C2ParseAccess&>(access);
50- GraphKit* kit = parse_access.kit ();
5147
52- uint adr_idx = kit->C ->get_alias_index (adr_type);
53- assert (adr_idx != Compile::AliasIdxTop, " use other store_to_memory factory" );
54-
55- pre_barrier (kit, true /* do_load */ , kit->control (), access.base (), adr, adr_idx, val.node (),
56- static_cast <const TypeOopPtr*>(val.type ()), nullptr /* pre_val */ , access.type ());
5748 Node* store = BarrierSetC2::store_at_resolved (access, val);
58- post_barrier (kit, kit->control (), access.raw_access (), access.base (), adr, adr_idx, val.node (),
59- access.type (), use_precise);
49+ post_barrier (parse_access.kit (), access.base (), adr, val.node (), use_precise);
6050
6151 return store;
6252}
6353
6454Node* ModRefBarrierSetC2::atomic_cmpxchg_val_at_resolved (C2AtomicParseAccess& access, Node* expected_val,
6555 Node* new_val, const Type* value_type) const {
66- GraphKit* kit = access.kit ();
67-
6856 if (!access.is_oop ()) {
6957 return BarrierSetC2::atomic_cmpxchg_val_at_resolved (access, expected_val, new_val, value_type);
7058 }
7159
72- pre_barrier (kit, false /* do_load */ ,
73- kit->control (), nullptr , nullptr , max_juint, nullptr , nullptr ,
74- expected_val /* pre_val */ , T_OBJECT);
75-
7660 Node* result = BarrierSetC2::atomic_cmpxchg_val_at_resolved (access, expected_val, new_val, value_type);
7761
78- post_barrier (kit, kit->control (), access.raw_access (), access.base (),
79- access.addr ().node (), access.alias_idx (), new_val, T_OBJECT, true );
62+ post_barrier (access.kit (), access.base (), access.addr ().node (), new_val, true );
8063
8164 return result;
8265}
@@ -89,10 +72,6 @@ Node* ModRefBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& a
8972 return BarrierSetC2::atomic_cmpxchg_bool_at_resolved (access, expected_val, new_val, value_type);
9073 }
9174
92- pre_barrier (kit, false /* do_load */ ,
93- kit->control (), nullptr , nullptr , max_juint, nullptr , nullptr ,
94- expected_val /* pre_val */ , T_OBJECT);
95-
9675 Node* load_store = BarrierSetC2::atomic_cmpxchg_bool_at_resolved (access, expected_val, new_val, value_type);
9776
9877 // Emit the post barrier only when the actual store happened. This makes sense
@@ -108,8 +87,7 @@ Node* ModRefBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& a
10887 IdealKit ideal (kit);
10988 ideal.if_then (load_store, BoolTest::ne, ideal.ConI (0 ), PROB_STATIC_FREQUENT); {
11089 kit->sync_kit (ideal);
111- post_barrier (kit, ideal.ctrl (), access.raw_access (), access.base (),
112- access.addr ().node (), access.alias_idx (), new_val, T_OBJECT, true );
90+ post_barrier (kit, access.base (), access.addr ().node (), new_val, true );
11391 ideal.sync_kit (kit);
11492 } ideal.end_if ();
11593 kit->final_sync (ideal);
@@ -118,21 +96,12 @@ Node* ModRefBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& a
11896}
11997
12098Node* ModRefBarrierSetC2::atomic_xchg_at_resolved (C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const {
121- GraphKit* kit = access.kit ();
122-
12399 Node* result = BarrierSetC2::atomic_xchg_at_resolved (access, new_val, value_type);
124100 if (!access.is_oop ()) {
125101 return result;
126102 }
127103
128- // Don't need to load pre_val. The old value is returned by load_store.
129- // The pre_barrier can execute after the xchg as long as no safepoint
130- // gets inserted between them.
131- pre_barrier (kit, false /* do_load */ ,
132- kit->control (), nullptr , nullptr , max_juint, nullptr , nullptr ,
133- result /* pre_val */ , T_OBJECT);
134- post_barrier (kit, kit->control (), access.raw_access (), access.base (), access.addr ().node (),
135- access.alias_idx (), new_val, T_OBJECT, true );
104+ post_barrier (access.kit (), access.base (), access.addr ().node (), new_val, true );
136105
137106 return result;
138107}
0 commit comments