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