src/share/vm/code/compiledIC.hpp

Print this page
rev 6561 : imported patch optimizeCompiledICAt

*** 148,157 **** --- 148,160 ---- NativeCall* _ic_call; // the call instruction NativeMovConstReg* _value; // patchable value cell for this IC bool _is_optimized; // an optimized virtual call (i.e., no compiled IC) CompiledIC(nmethod* nm, NativeCall* ic_call); + CompiledIC(RelocIterator* iter); + + void initialize_from_iter(RelocIterator* iter); static bool is_icholder_entry(address entry); // low-level inline-cache manipulation. Cannot be accessed directly, since it might not be MT-safe // to change an inline-cache. These changes the underlying inline-cache directly. They *newer* make
*** 181,190 **** --- 184,194 ---- public: // conversion (machine PC to CompiledIC*) friend CompiledIC* CompiledIC_before(nmethod* nm, address return_addr); friend CompiledIC* CompiledIC_at(nmethod* nm, address call_site); friend CompiledIC* CompiledIC_at(Relocation* call_site); + friend CompiledIC* CompiledIC_at(RelocIterator* reloc_iter); // This is used to release CompiledICHolder*s from nmethods that // are about to be freed. The callsite might contain other stale // values of other kinds so it must be careful. static void cleanup_call_site(virtual_call_Relocation* call_site);
*** 261,270 **** --- 265,281 ---- CompiledIC* c_ic = new CompiledIC(call_site->code(), nativeCall_at(call_site->addr())); c_ic->verify(); return c_ic; } + inline CompiledIC* CompiledIC_at(RelocIterator* reloc_iter) { + assert(reloc_iter->type() == relocInfo::virtual_call_type || + reloc_iter->type() == relocInfo::opt_virtual_call_type, "wrong reloc. info"); + CompiledIC* c_ic = new CompiledIC(reloc_iter); + c_ic->verify(); + return c_ic; + } //----------------------------------------------------------------------------- // The CompiledStaticCall represents a call to a static method in the compiled // // Transition diagram of a static call site is somewhat simpler than for an inlined cache: