Insert Special Code Sequence After Object allocation

Krystal Mo krystal.mo at oracle.com
Tue Nov 27 22:35:12 PST 2012


On 11/28/2012 02:02 PM, Xin Tong wrote:
> On Wed, Nov 28, 2012 at 12:58 AM, Xin Tong <xerox.time.tech at gmail.com> wrote:
>> On Tue, Nov 27, 2012 at 11:23 PM, Krystal Mo <krystal.mo at oracle.com> wrote:
>>> Hi Xin,
>>>
>>> Depends on what the code sequence is and what it does.
>>>
>>> If the code sequence you're inserting can be represented in C2's IR nodes,
>>> then you can try to add those nodes in either
>>> PhaseMacroExpand::expand_allocate_common() or
>>> PhaseMacroExpand::initialize_object(), or somewhere else around.
>>>
>> It is a few assembly instructions. can i wrap the assemblies in a
>> function that hasa prologue and epilogue to save everything. and does
>> the IR has any way of calling a function ?
>>
>> Xin
> Or another thing i am willing to do is to force the JIT to always fail
> on the inlined allocation and force it to the out-of-line ( VM
> managed) allocation. I just do not want to turn the JIT completely off
> as that have an big impact on the behaviours of the program.  Is this
> doable ?
Sure, if you're willing take the performance hit.

It's easy: in PhaseMacroExpand::expand_allocate_common(), just make sure 
the local variables initial_slow_test and always_slow are assigned NULL 
and true respectively, and there you go. It'll call into 
OptoRuntime::new_instance_C().

- Kris

> Xin
>
>>> If your code sequence cannot be represented in C2's IR, well, that will take
>>> some effort. The AllocateNode is lost after PhaseMacroExpand, so you can't
>>> use it as a mark to insert your code. You might want to use prefetchAlloc in
>>> the AD files as a place to insert code, if that works for your purpose.
>>>
>>> That said, though, if the code sequence could be written in Java bytecode,
>>> that'll be the easiest solution: don't have to touch the VM, just do
>>> bytecode instrumentation.
>>>
>>> - Kris
>>>
>>>
>>> On 2012/11/28 10:36, Xin Tong wrote:
>>>> I would like to insert a special binary code sequence after the
>>>> allocation of a java object in the opto JIT code. can anyone tell me
>>>> how to do that ?
>>>>
>>>> Xin



More information about the hotspot-compiler-dev mailing list