< prev index next >
src/hotspot/share/c1/c1_LIRGenerator.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 1716,1726 ****
CodeEmitInfo* store_check_info = new CodeEmitInfo(range_check_info);
array_store_check(value.result(), array.result(), store_check_info, x->profiled_method(), x->profiled_bci());
}
if (is_loaded_flattened_array) {
! index.load_item();
access_flattened_array(false, array, index, value);
} else {
StoreFlattenedArrayStub* slow_path = NULL;
if (x->array()->maybe_flattened_array()) {
--- 1716,1730 ----
CodeEmitInfo* store_check_info = new CodeEmitInfo(range_check_info);
array_store_check(value.result(), array.result(), store_check_info, x->profiled_method(), x->profiled_bci());
}
if (is_loaded_flattened_array) {
! if (!x->is_exact_flattened_array_store()) {
! CodeEmitInfo* info = new CodeEmitInfo(range_check_info);
! ciKlass* element_klass = x->array()->declared_type()->as_value_array_klass()->element_klass();
! flattened_array_store_check(value.result(), element_klass, info);
! }
access_flattened_array(false, array, index, value);
} else {
StoreFlattenedArrayStub* slow_path = NULL;
if (x->array()->maybe_flattened_array()) {
*** 1989,2000 ****
length.set_instruction(x->length());
length.load_item();
}
array.load_item();
! if (index.is_constant() && can_inline_as_constant(x->index())
! && !x->array()->maybe_flattened_array()) {
// let it be a constant
index.dont_load_item();
} else {
index.load_item();
}
--- 1993,2003 ----
length.set_instruction(x->length());
length.load_item();
}
array.load_item();
! if (index.is_constant() && can_inline_as_constant(x->index())) {
// let it be a constant
index.dont_load_item();
} else {
index.load_item();
}
*** 2040,2049 ****
--- 2043,2053 ----
} else {
LIR_Opr result = rlock_result(x, x->elt_type());
LoadFlattenedArrayStub* slow_path = NULL;
if (x->array()->maybe_flattened_array()) {
+ index.load_item();
// Check if we indeed have a flattened array
slow_path = new LoadFlattenedArrayStub(array.result(), index.result(), result, state_for(x));
check_flattened_array(array, slow_path);
}
< prev index next >