[llvm] r293361 - MemorySSA: Fix block numbering invalidation and replacement bugs discovered by updater

Manuel Klimek via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 30 01:30:59 PST 2017


Fails with asan, Sam is going to revert.

On Sat, Jan 28, 2017 at 3:34 AM Daniel Berlin via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: dannyb
> Date: Fri Jan 27 20:22:52 2017
> New Revision: 293361
>
> URL: http://llvm.org/viewvc/llvm-project?rev=293361&view=rev
> Log:
> MemorySSA: Fix block numbering invalidation and replacement bugs
> discovered by updater
>
> Modified:
>     llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp
>     llvm/trunk/lib/Transforms/Utils/MemorySSAUpdater.cpp
>
> Modified: llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp?rev=293361&r1=293360&r2=293361&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/MemorySSA.cpp Fri Jan 27 20:22:52 2017
> @@ -1597,6 +1597,7 @@ void MemorySSA::insertIntoListsForBlock(
>        Defs->push_back(*NewAccess);
>      }
>    }
> +  BlockNumberingValid.erase(BB);
>  }
>
>  void MemorySSA::insertIntoListsBefore(MemoryAccess *What, const
> BasicBlock *BB,
> @@ -1624,6 +1625,7 @@ void MemorySSA::insertIntoListsBefore(Me
>          Defs->insert(InsertPt->getDefsIterator(), *What);
>      }
>    }
> +  BlockNumberingValid.erase(BB);
>  }
>
>  // Move What before Where in the IR.  The end result is taht What will
> belong to
> @@ -1638,13 +1640,19 @@ void MemorySSA::moveTo(MemoryUseOrDef *W
>    insertIntoListsBefore(What, BB, Where);
>  }
>
> +void MemorySSA::moveTo(MemoryUseOrDef *What, BasicBlock *BB,
> +                       InsertionPlace Point) {
> +  removeFromLists(What, false);
> +  What->setBlock(BB);
> +  insertIntoListsForBlock(What, BB, Point);
> +}
> +
>  MemoryPhi *MemorySSA::createMemoryPhi(BasicBlock *BB) {
>    assert(!getMemoryAccess(BB) && "MemoryPhi already exists for this BB");
>    MemoryPhi *Phi = new MemoryPhi(BB->getContext(), BB, NextID++);
> +  // Phi's always are placed at the front of the block.
>    insertIntoListsForBlock(Phi, BB, Beginning);
>    ValueToMemoryAccess[BB] = Phi;
> -  // Phi's always are placed at the front of the block.
> -  BlockNumberingValid.erase(BB);
>    return Phi;
>  }
>
> @@ -1665,7 +1673,6 @@ MemoryAccess *MemorySSA::createMemoryAcc
>                                                  InsertionPlace Point) {
>    MemoryUseOrDef *NewAccess = createDefinedAccess(I, Definition);
>    insertIntoListsForBlock(NewAccess, BB, Point);
> -  BlockNumberingValid.erase(BB);
>    return NewAccess;
>  }
>
> @@ -1675,7 +1682,6 @@ MemoryUseOrDef *MemorySSA::createMemoryA
>    assert(I->getParent() == InsertPt->getBlock() &&
>           "New and old access must be in the same block");
>    MemoryUseOrDef *NewAccess = createDefinedAccess(I, Definition);
> -  BlockNumberingValid.erase(InsertPt->getBlock());
>    insertIntoListsBefore(NewAccess, InsertPt->getBlock(),
>                          InsertPt->getIterator());
>    return NewAccess;
> @@ -1687,7 +1693,6 @@ MemoryUseOrDef *MemorySSA::createMemoryA
>    assert(I->getParent() == InsertPt->getBlock() &&
>           "New and old access must be in the same block");
>    MemoryUseOrDef *NewAccess = createDefinedAccess(I, Definition);
> -  BlockNumberingValid.erase(InsertPt->getBlock());
>    insertIntoListsBefore(NewAccess, InsertPt->getBlock(),
>                          ++(InsertPt->getIterator()));
>    return NewAccess;
>
> Modified: llvm/trunk/lib/Transforms/Utils/MemorySSAUpdater.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/MemorySSAUpdater.cpp?rev=293361&r1=293360&r2=293361&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/MemorySSAUpdater.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/MemorySSAUpdater.cpp Fri Jan 27
> 20:22:52 2017
> @@ -243,13 +243,17 @@ void MemorySSAUpdater::insertDef(MemoryD
>    // of that thing with us, since we are in the way of whatever was there
>    // before.
>    // We now define that def's memorydefs and memoryphis
> -  for (auto UI = DefBefore->use_begin(), UE = DefBefore->use_end(); UI !=
> UE;) {
> -    Use &U = *UI++;
> -    // Leave the uses alone
> -    if (isa<MemoryUse>(U.getUser()))
> -      continue;
> -    U.set(MD);
> +  if (DefBeforeSameBlock) {
> +    for (auto UI = DefBefore->use_begin(), UE = DefBefore->use_end();
> +         UI != UE;) {
> +      Use &U = *UI++;
> +      // Leave the uses alone
> +      if (isa<MemoryUse>(U.getUser()))
> +        continue;
> +      U.set(MD);
> +    }
>    }
> +
>    // and that def is now our defining access.
>    // We change them in this order otherwise we will appear in the use list
>    // above and reset ourselves.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170130/b14f6f82/attachment.html>


More information about the llvm-commits mailing list