destroysCallerSavedRegisters and register reference map in DebugInfo
Doug Simon
doug.simon at oracle.com
Wed Jul 24 00:57:34 PDT 2013
On Jul 23, 2013, at 5:50 PM, Christian Thalinger <christian.thalinger at oracle.com> wrote:
>
> On Jul 23, 2013, at 12:44 AM, Doug Simon <doug.simon at oracle.com> wrote:
>
>>
>> On Jul 23, 2013, at 6:07 AM, Christian Thalinger <christian.thalinger at oracle.com> wrote:
>>
>>> Quick question about this code in LinearScan:
>>>
>>> private void computeDebugInfo(IntervalWalker iw, final LIRInstruction op, LIRFrameState info) {
>>> BitSet registerRefMap = op.destroysCallerSavedRegisters() ? null : frameMap.initRegisterRefMap();
>>> BitSet frameRefMap = frameMap.initFrameRefMap();
>>> computeOopMap(iw, op, registerRefMap, frameRefMap);
>>>
>>> Why are we not creating a register reference map if we destroy caller saved registers?
>>
>> Because all live registers will be spilled around the call and so there are no live values in registers during the call.
>
> That's what I thought but I wanted to make sure.
>
>>
>>> I'm having trouble with this logic on SPARC because computeOopMap wants to store a register in the map (a local register).
>>
>> Wouldn't we just ensure that op.destroysCallerSavedRegisters() returns false for all SPARC ops (given that local registers are never killed by a callee)?
>
> We can do this (I actually tried this already). Would this be the right way to it?
I'm not sure how register oop maps work for SPARC but I think this is the right way to do it. I assume the oop map will cover the registers automatically saved by SPARC register windowing mechanism. What does C2 do?
-Doug
More information about the graal-dev
mailing list