[llvm] r342055 - [GVNHoist] computeInsertionPoints() miscalculates IDF

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 12 17:06:09 PDT 2018


I've noticed another round of work recently on fixing issues in 
GVNHoist.  First, let me start by saying, thank you for being responsive 
to issues and disabling quickly while investigation is in progress.  
That makes this much less disruptive for the rest of the community.

However, I would like to suggest a change in approach from the current 
"enable and see what breaks" approach.

We have multiple community fuzzing efforts currently active. Many of the 
issues being found seem like things that fuzzers would be good at 
uncovering.  Can I request that you make a proactive effort to leverage 
testing infrastructure such a fuzzers before re-enabling GVNHoist by 
default?

Specifically, we have the following tooling:

  * csmith is available and I believe regularly run.
  * We have the llvm-opt-fuzzer infrastructure which is run continuously
    on OSSFuzz.  Adapting this to exercise GVNHoist should be
    straight-forward.  (see https://llvm.org/docs/FuzzingLLVM.html)
  * We (Azul) have a Java fuzzer which has found several subtle issues
    in GVN itself.  We can run a few cycles for you at some point, but
    since exposing the failing test cases is very manual for us, I'd ask
    you explore the other options first.

An alternate approach would be to identify one or more large projects - 
say Chromium, Clang itself -, build with GVN hoist enabled, and debug 
any failures which result.  Lest this is not misread, let me be quick to 
say that I haven't followed this effort closely.  It's entirely possible 
this has already been done and this is simply not visible to me as a 
casual observer.  If so, it might be helpful to spell out what has 
already been done and link to it from future re-enable commits.

Philip


On 09/12/2018 07:28 AM, Alexandros Lamprineas via llvm-commits wrote:
> Author: alelab01
> Date: Wed Sep 12 07:28:23 2018
> New Revision: 342055
>
> URL: http://llvm.org/viewvc/llvm-project?rev=342055&view=rev
> Log:
> [GVNHoist] computeInsertionPoints() miscalculates IDF
>
> Fix for https://bugs.llvm.org/show_bug.cgi?id=38912.
>
> In GVNHoist::computeInsertionPoints() we iterate over the Value
> Numbers and calculate the Iterated Dominance Frontiers without
> clearing the IDFBlocks vector first. IDFBlocks ends up accumulating
> an insane number of basic blocks, which bloats the compilation time
> of SemaChecking.cpp with ubsan enabled.
>
> Differential Revision: https://reviews.llvm.org/D51980
>
> Modified:
>      llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp?rev=342055&r1=342054&r2=342055&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp Wed Sep 12 07:28:23 2018
> @@ -155,7 +155,6 @@ struct CHIArg {
>   
>   using CHIIt = SmallVectorImpl<CHIArg>::iterator;
>   using CHIArgs = iterator_range<CHIIt>;
> -using CHICache = DenseMap<BasicBlock *, SmallPtrSet<Instruction *, 4>>;
>   using OutValuesType = DenseMap<BasicBlock *, SmallVector<CHIArg, 2>>;
>   using InValuesType =
>       DenseMap<BasicBlock *, SmallVector<std::pair<VNType, Instruction *>, 2>>;
> @@ -767,7 +766,6 @@ private:
>       ReverseIDFCalculator IDFs(*PDT);
>       OutValuesType OutValue;
>       InValuesType InValue;
> -    CHICache CachedCHIs;
>       for (const auto &R : Ranks) {
>         const SmallVecInsn &V = Map.lookup(R);
>         if (V.size() < 2)
> @@ -786,6 +784,7 @@ private:
>         // which currently have dead terminators that are control
>         // dependence sources of a block which is in NewLiveBlocks.
>         IDFs.setDefiningBlocks(VNBlocks);
> +      IDFBlocks.clear();
>         IDFs.calculate(IDFBlocks);
>   
>         // Make a map of BB vs instructions to be hoisted.
> @@ -798,8 +797,7 @@ private:
>           for (unsigned i = 0; i < V.size(); ++i) {
>             CHIArg C = {VN, nullptr, nullptr};
>              // Ignore spurious PDFs.
> -          if (DT->properlyDominates(IDFB, V[i]->getParent()) &&
> -              CachedCHIs[IDFB].insert(V[i]).second) {
> +          if (DT->properlyDominates(IDFB, V[i]->getParent())) {
>               OutValue[IDFB].push_back(C);
>               LLVM_DEBUG(dbgs() << "\nInsertion a CHI for BB: " << IDFB->getName()
>                                 << ", for Insn: " << *V[i]);
>
>
> _______________________________________________
> 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/20180912/c405d08c/attachment.html>


More information about the llvm-commits mailing list