[llvm] r269969 - When looking for a spill slot in reg scavenger, find one that matches RC

Jordy Potman via llvm-commits llvm-commits at lists.llvm.org
Fri May 20 05:04:26 PDT 2016

Hi Krzysztof,

I'm seeing an "Invalid Object Idx" assert in the call to
MFI.getObjectSize(FI) in the code below on my out of tree target after this

+    // Verify that this slot is valid for this register.
> +    int FI = Scavenged[I].FrameIndex;
> +    unsigned S = MFI.getObjectSize(FI);
> +    unsigned A = MFI.getObjectAlignment(FI);
> +    if (NeedSize > S || NeedAlign > A)
> +      continue;

The reason for this is that the Scavenged vector may contain a
ScavengedInfo structure with a FrameIndex of -1 after the first call of
scavengeRegister on targets where there is no spill slot but the target
knows how to save/restore the register (using TRI->saveScavengerRegister).
This ScavengedInfo structure with a FrameIndex of -1 is added to the
Scavenged vector by the code on lines 425-429 in the first call of

I have fixed this in my tree by adding

if (FI < 0)

before the the call to MFI.getObjectSize(FI) in the code above, see the
attached patch, but there may be a cleaner/better solution.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160520/798b0fd2/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: RegisterScavenging.patch
Type: text/x-patch
Size: 563 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160520/798b0fd2/attachment.bin>

More information about the llvm-commits mailing list