[llvm-dev] Potential infinite loop in MemorySSAUpdater
Daniel Berlin via llvm-dev
llvm-dev at lists.llvm.org
Sat Sep 23 08:57:34 PDT 2017
On Sat, Sep 23, 2017 at 8:38 AM, Godala, Bhargav-reddy via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hi,
>
> Can some one explain the intended behaviour of following loop in void
> MemorySSAUpdater::insertDef(MemoryDef *MD, bool RenameUses) function.
>
> while (!FixupList.empty()) {
> unsigned StartingPHISize = InsertedPHIs.size();
> fixupDefs(FixupList);
> FixupList.clear();
> // Put any new phis on the fixup list, and process them
> FixupList.append(InsertedPHIs.end() - StartingPHISize,
> InsertedPHIs.end());
> }
>
> With the latest code on trunk compilation of perlbench SPEC CPU 2017 INT
> benchmark with “-O3 -inline-threshold=1000 and -enable-gvn-hoist” options
> is looping infinitely on the above loop.
>
>
> Above loop never terminates unless elements from InsertedPHIs are removed
> as and when they are processed.
>
Yes, the loop is slightly off.
The intention is to process any new phis added by fixupdefs.
However, it really should be InsertedPHIs.start() + StartingPHISize.
That will insert only the phis that fixupdefs added, and it will terminate
as soon as fixupdefs stops adding phis.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170923/e3b53659/attachment.html>
More information about the llvm-dev
mailing list