[llvm-dev] Inline Spiller spilling multiple duplicate copies

Ryan Taylor via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 14 07:49:30 PDT 2016


I looked at this again and it appears that while spillAroundUses sets the
register as 'dead', there is no checking to see if it's dead in subsequent
iterations of the bundle loop.

Is this intentional?

On Mon, Mar 7, 2016 at 3:28 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:

> Looks like spillAroundUses is spilling multiple duplicate copies to the
> stack, for example, with some regs we get 1 storeRegToStack call, for
> others we get multiple (2-6+) and then these instructions are never
> eliminated.
>
> Looking at spillAroundUses it looks like multiple duplicate COPYs are
> being generated, why? One for each use?
>
> The reg_bundle holds these multiple copies so that we are iterating over
> the same exact COPY instructions multiple times, even though each one hits
> the same spot in the function:
>
> if (hoistSpill(OldLI, MI)) {
>      MI->getOperand(0).setIsDead();
>      DeadDefs.push_back(MI);
>      continue;
> }
>
> Even when I add a check:
>
> if (MI->getOperand(0)->isDead())
>     continue;
>
> This never checks to true, on the second, third, fourth, etc duplicate.
>
> Not sure what I'm missing? Can someone give me a brief description of why
> these multiple COPYs are being written out (storeRegToStack is being
> called)?
>
> Thanks.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160314/860ed2b7/attachment.html>


More information about the llvm-dev mailing list