--- old/src/share/vm/opto/library_call.cpp 2013-10-12 23:25:14.188854512 +0200 +++ new/src/share/vm/opto/library_call.cpp 2013-10-12 23:25:13.525667091 +0200 @@ -63,7 +63,7 @@ virtual bool is_virtual() const { return _is_virtual; } virtual bool is_predicted() const { return _is_predicted; } virtual bool does_virtual_dispatch() const { return _does_virtual_dispatch; } - virtual JVMState* generate(JVMState* jvms); + virtual JVMState* generate(JVMState* jvms, Parse* parent_parser); virtual Node* generate_predicate(JVMState* jvms); vmIntrinsics::ID intrinsic_id() const { return _intrinsic_id; } }; @@ -75,14 +75,16 @@ LibraryIntrinsic* _intrinsic; // the library intrinsic being called Node* _result; // the result node, if any int _reexecute_sp; // the stack pointer when bytecode needs to be reexecuted + Parse* _parent_parser; // The parser for the caller of this intrinsic const TypeOopPtr* sharpen_unsafe_type(Compile::AliasType* alias_type, const TypePtr *adr_type, bool is_native_ptr = false); public: - LibraryCallKit(JVMState* jvms, LibraryIntrinsic* intrinsic) + LibraryCallKit(JVMState* jvms, LibraryIntrinsic* intrinsic, Parse* parent_parser) : GraphKit(jvms), _intrinsic(intrinsic), - _result(NULL) + _result(NULL), + _parent_parser(parent_parser) { // Check if this is a root compile. In that case we don't have a caller. if (!jvms->has_method()) { @@ -118,6 +120,8 @@ } } + virtual Parse* parent_parser() const { return _parent_parser; } + private: void fatal_unexpected_iid(vmIntrinsics::ID iid) { fatal(err_msg_res("unexpected intrinsic %d: %s", iid, vmIntrinsics::name_at(iid))); @@ -556,8 +560,8 @@ // Nothing to do here. } -JVMState* LibraryIntrinsic::generate(JVMState* jvms) { - LibraryCallKit kit(jvms, this); +JVMState* LibraryIntrinsic::generate(JVMState* jvms, Parse* parent_parser) { + LibraryCallKit kit(jvms, this, parent_parser); Compile* C = kit.C; int nodes = C->unique(); #ifndef PRODUCT @@ -605,7 +609,7 @@ } Node* LibraryIntrinsic::generate_predicate(JVMState* jvms) { - LibraryCallKit kit(jvms, this); + LibraryCallKit kit(jvms, this, NULL); Compile* C = kit.C; int nodes = C->unique(); #ifndef PRODUCT