[llvm-dev] Inline Spiller spilling multiple duplicate copies

Ryan Taylor via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 7 12:28:00 PST 2016


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/20160307/693b4198/attachment.html>


More information about the llvm-dev mailing list