Skip to content

Commit a8210c5

Browse files
committed
8274401: C2: GraphKit::load_array_element bypasses Access API
Reviewed-by: kvn, goetz, thartmann
1 parent dfc557c commit a8210c5

File tree

4 files changed

+7
-6
lines changed

4 files changed

+7
-6
lines changed

src/hotspot/share/opto/graphKit.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,14 +1748,15 @@ Node* GraphKit::array_element_address(Node* ary, Node* idx, BasicType elembt,
17481748
}
17491749

17501750
//-------------------------load_array_element-------------------------
1751-
Node* GraphKit::load_array_element(Node* ctl, Node* ary, Node* idx, const TypeAryPtr* arytype) {
1751+
Node* GraphKit::load_array_element(Node* ary, Node* idx, const TypeAryPtr* arytype, bool set_ctrl) {
17521752
const Type* elemtype = arytype->elem();
17531753
BasicType elembt = elemtype->array_element_basic_type();
17541754
Node* adr = array_element_address(ary, idx, elembt, arytype->size());
17551755
if (elembt == T_NARROWOOP) {
17561756
elembt = T_OBJECT; // To satisfy switch in LoadNode::make()
17571757
}
1758-
Node* ld = make_load(ctl, adr, elemtype, elembt, arytype, MemNode::unordered);
1758+
Node* ld = access_load_at(ary, adr, arytype, elemtype, elembt,
1759+
IN_HEAP | IS_ARRAY | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0));
17591760
return ld;
17601761
}
17611762

@@ -4258,7 +4259,7 @@ void GraphKit::inflate_string_slow(Node* src, Node* dst, Node* start, Node* coun
42584259
record_for_igvn(mem);
42594260
set_control(head);
42604261
set_memory(mem, TypeAryPtr::BYTES);
4261-
Node* ch = load_array_element(control(), src, i_byte, TypeAryPtr::BYTES);
4262+
Node* ch = load_array_element(src, i_byte, TypeAryPtr::BYTES, /* set_ctrl */ true);
42624263
Node* st = store_to_memory(control(), array_element_address(dst, i_char, T_BYTE),
42634264
AndI(ch, intcon(0xff)), T_CHAR, TypeAryPtr::BYTES, MemNode::unordered,
42644265
false, false, true /* mismatched */);

src/hotspot/share/opto/graphKit.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ class GraphKit : public Phase {
660660
Node* ctrl = NULL);
661661

662662
// Return a load of array element at idx.
663-
Node* load_array_element(Node* ctl, Node* ary, Node* idx, const TypeAryPtr* arytype);
663+
Node* load_array_element(Node* ary, Node* idx, const TypeAryPtr* arytype, bool set_ctrl);
664664

665665
//---------------- Dtrace support --------------------
666666
void make_dtrace_method_entry_exit(ciMethod* method, bool is_entry);

src/hotspot/share/opto/library_call.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6205,7 +6205,7 @@ Node * LibraryCallKit::get_key_start_from_aescrypt_object(Node *aescrypt_object)
62056205
if (objSessionK == NULL) {
62066206
return (Node *) NULL;
62076207
}
6208-
Node* objAESCryptKey = load_array_element(control(), objSessionK, intcon(0), TypeAryPtr::OOPS);
6208+
Node* objAESCryptKey = load_array_element(objSessionK, intcon(0), TypeAryPtr::OOPS, /* set_ctrl */ true);
62096209
#else
62106210
Node* objAESCryptKey = load_field_from_object(aescrypt_object, "K", "[I");
62116211
#endif // PPC64

src/hotspot/share/opto/stringopts.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1244,7 +1244,7 @@ Node* PhaseStringOpts::int_stringSize(GraphKit& kit, Node* arg) {
12441244
kit.set_control(loop);
12451245
Node* sizeTable = fetch_static_field(kit, size_table_field);
12461246

1247-
Node* value = kit.load_array_element(NULL, sizeTable, index, TypeAryPtr::INTS);
1247+
Node* value = kit.load_array_element(sizeTable, index, TypeAryPtr::INTS, /* set_ctrl */ false);
12481248
C->record_for_igvn(value);
12491249
Node* limit = __ CmpI(phi, value);
12501250
Node* limitb = __ Bool(limit, BoolTest::le);

0 commit comments

Comments
 (0)