1472N/A * or visit www.oracle.com if you need additional information or have any
1879N/A#include "precompiled.hpp"
1879N/A#include "ci/bcEscapeAnalyzer.hpp"
1879N/A#include "ci/ciConstant.hpp"
1879N/A#include "ci/ciField.hpp"
1879N/A#include "ci/ciMethodBlocks.hpp"
1879N/A#include "ci/ciStreams.hpp"
1879N/A#include "interpreter/bytecode.hpp"
1879N/A#include "utilities/bitMap.inline.hpp"
1667N/A ArgumentMap raw_pop() { guarantee(_stack_height > 0, "stack underflow"); return _stack[--_stack_height]; }
1667N/A void raw_push(ArgumentMap i) { guarantee(_stack_height < _max_stack, "stack overflow"); _stack[_stack_height++] = i; }
0N/A _return_allocated = _return_allocated && vars.contains_allocated() && !(vars.contains_unknown() || vars.contains_vars());
0N/A if (_conservative)
0N/A _allocated_escapes = true;
2965N/A _return_local = false;
2965N/A _return_allocated = false;
45N/A _unknown_modified = true;
45N/A if (l > ARG_OFFSET_MAX)
45N/A l = ARG_OFFSET_MAX;
45N/A if (l > ARG_OFFSET_MAX)
45N/A l = ARG_OFFSET_MAX;
0N/Avoid BCEscapeAnalyzer::invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder) {
0N/A (code != Bytecodes::_invokevirtual || target->is_final_method() || state._stack[arg_base] .is_empty());
0N/A skip_callee = !is_argument(arg) || !is_arg_stack(arg) || (directly_recursive && arg.is_singleton(i - arg_base));
2049N/A skip_callee = true;
0N/A if (skip_callee) {
0N/A TRACE_BCEA(3, tty->print_cr("[EA] skipping method %s::%s", holder->name()->as_utf8(), target->name()->as_utf8()));
0N/A must_record_dependencies = true;
0N/A if (must_record_dependencies) {
0N/A if (code == Bytecodes::_invokeinterface || code == Bytecodes::_invokevirtual && !target->is_final_method()) {
0N/Avoid BCEscapeAnalyzer::iterate_one_block(ciBlock *blk, StateInfo &state, GrowableArray<ciBlock *> &successors) {
0N/A fall_through = true;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
45N/A set_modified(p, will_link ? field->offset() : OFFSET_ANY, type2size[field_type]*HeapWordSize);
3932N/A if (s.has_appendix()) {
0N/A fall_through = false;
0N/A fall_through = false;
0N/A fall_through = false;
0N/A if (fall_through) {
0N/Avoid BCEscapeAnalyzer::merge_block_states(StateInfo *blockstates, ciBlock *dest, StateInfo *s_state) {
0N/A ArgumentMap t;
0N/A ArgumentMap t;
0N/A if (!t->is_primitive_type()) {
0N/A if (b->is_handler()) {
0N/A _return_local = false;
0N/A if (!t->is_primitive_type()) {
0N/A _return_local = false;
0N/A _return_allocated = false;
0N/A _return_local = true;
0N/A _return_allocated = true;
0N/A _allocated_escapes = false;
45N/A _unknown_modified = false;
0N/A _return_local = false;
0N/A _return_allocated = false;
0N/A _allocated_escapes = true;
45N/A _unknown_modified = true;
0N/A if (iid == vmIntrinsics::_none && (method()->is_abstract() || method()->is_native() || !method()->holder()->is_initialized()
0N/A initialize();
0N/A if (_return_local) {
78N/A if (_return_allocated) {
78N/A if (_allocated_escapes) {
78N/A if (_unknown_modified) {
78N/A if (_return_local) {
78N/A } else if (is_return_allocated()) {
78N/A if (_arg_modified[i] == 0)
78N/A if (_return_allocated)
78N/A if (_allocated_escapes)
78N/A if (_unknown_modified)
0N/A , _return_local(false)
0N/A , _return_allocated(false)
0N/A , _allocated_escapes(false)
45N/A , _unknown_modified(false)
0N/A if (!_conservative) {