src/share/vm/c1/c1_GraphBuilder.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8068945-8u-patched Sdiff src/share/vm/c1

src/share/vm/c1/c1_GraphBuilder.cpp

Print this page
rev 7386 : 8068945: Use RBP register as proper frame pointer in JIT compiled code on x86
Summary: Introduce the PreserveFramePointer flag to control if RBP is used as the frame pointer or as a general purpose register.
Reviewed-by: kvn, roland, dlong, enevill, shade


4047           }
4048         } else {
4049           print_inlining(target, "not static or statically bindable", /*success*/ false);
4050         }
4051       } else {
4052         print_inlining(callee, "receiver not constant", /*success*/ false);
4053       }
4054     }
4055     break;
4056 
4057   case vmIntrinsics::_linkToVirtual:
4058   case vmIntrinsics::_linkToStatic:
4059   case vmIntrinsics::_linkToSpecial:
4060   case vmIntrinsics::_linkToInterface:
4061     {
4062       // pop MemberName argument
4063       const int args_base = state()->stack_size() - callee->arg_size();
4064       ValueType* type = apop()->type();
4065       if (type->is_constant()) {
4066         ciMethod* target = type->as_ObjectType()->constant_value()->as_member_name()->get_vmtarget();
4067         // If the target is another method handle invoke try recursivly to get
4068         // a better target.
4069         if (target->is_method_handle_intrinsic()) {
4070           if (try_method_handle_inline(target)) {
4071             return true;
4072           }
4073         } else {
4074           ciSignature* signature = target->signature();
4075           const int receiver_skip = target->is_static() ? 0 : 1;
4076           // Cast receiver to its type.
4077           if (!target->is_static()) {
4078             ciKlass* tk = signature->accessing_klass();
4079             Value obj = state()->stack_at(args_base);
4080             if (obj->exact_type() == NULL &&
4081                 obj->declared_type() != tk && tk != compilation()->env()->Object_klass()) {
4082               TypeCast* c = new TypeCast(tk, obj, state_before);
4083               append(c);
4084               state()->stack_at_put(args_base, c);
4085             }
4086           }
4087           // Cast reference arguments to its type.




4047           }
4048         } else {
4049           print_inlining(target, "not static or statically bindable", /*success*/ false);
4050         }
4051       } else {
4052         print_inlining(callee, "receiver not constant", /*success*/ false);
4053       }
4054     }
4055     break;
4056 
4057   case vmIntrinsics::_linkToVirtual:
4058   case vmIntrinsics::_linkToStatic:
4059   case vmIntrinsics::_linkToSpecial:
4060   case vmIntrinsics::_linkToInterface:
4061     {
4062       // pop MemberName argument
4063       const int args_base = state()->stack_size() - callee->arg_size();
4064       ValueType* type = apop()->type();
4065       if (type->is_constant()) {
4066         ciMethod* target = type->as_ObjectType()->constant_value()->as_member_name()->get_vmtarget();
4067         // If the target is another method handle invoke, try to recursively get
4068         // a better target.
4069         if (target->is_method_handle_intrinsic()) {
4070           if (try_method_handle_inline(target)) {
4071             return true;
4072           }
4073         } else {
4074           ciSignature* signature = target->signature();
4075           const int receiver_skip = target->is_static() ? 0 : 1;
4076           // Cast receiver to its type.
4077           if (!target->is_static()) {
4078             ciKlass* tk = signature->accessing_klass();
4079             Value obj = state()->stack_at(args_base);
4080             if (obj->exact_type() == NULL &&
4081                 obj->declared_type() != tk && tk != compilation()->env()->Object_klass()) {
4082               TypeCast* c = new TypeCast(tk, obj, state_before);
4083               append(c);
4084               state()->stack_at_put(args_base, c);
4085             }
4086           }
4087           // Cast reference arguments to its type.


src/share/vm/c1/c1_GraphBuilder.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File