src/share/vm/c1/c1_Instruction.cpp
Print this page
rev 2893 : 7121756: Improve C1 inlining policy by using profiling at call sites
Summary: profile based recompilation of methods with C1 with more inlining.
Reviewed-by:
*** 235,250 ****
ciType* CheckCast::declared_type() const {
return klass();
}
ciType* CheckCast::exact_type() const {
! if (klass()->is_instance_klass()) {
! ciInstanceKlass* ik = (ciInstanceKlass*)klass();
! if (ik->is_loaded() && ik->is_final()) {
! return ik;
! }
! }
return NULL;
}
// Implementation of ArithmeticOp
--- 235,248 ----
ciType* CheckCast::declared_type() const {
return klass();
}
ciType* CheckCast::exact_type() const {
! if (direct_compare()) return klass();
!
! assert(!klass()->is_instance_klass() || !klass()->is_loaded() || !((ciInstanceKlass*)klass())->is_final(), "should be a direct compare");
!
return NULL;
}
// Implementation of ArithmeticOp
*** 339,355 ****
// Implementation of Invoke
Invoke::Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args,
! int vtable_index, ciMethod* target, ValueStack* state_before)
: StateSplit(result_type, state_before)
, _code(code)
, _recv(recv)
, _args(args)
, _vtable_index(vtable_index)
, _target(target)
{
set_flag(TargetIsLoadedFlag, target->is_loaded());
set_flag(TargetIsFinalFlag, target_is_loaded() && target->is_final_method());
set_flag(TargetIsStrictfpFlag, target_is_loaded() && target->is_strict());
--- 337,355 ----
// Implementation of Invoke
Invoke::Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args,
! int vtable_index, ciMethod* target, ValueStack* state_before,
! bool is_profiled)
: StateSplit(result_type, state_before)
, _code(code)
, _recv(recv)
, _args(args)
, _vtable_index(vtable_index)
, _target(target)
+ , _is_profiled(is_profiled)
{
set_flag(TargetIsLoadedFlag, target->is_loaded());
set_flag(TargetIsFinalFlag, target_is_loaded() && target->is_final_method());
set_flag(TargetIsStrictfpFlag, target_is_loaded() && target->is_strict());