[llvm] r257279 - [JumpThreading] Don't forget to report that the IR changed

Dimitry Andric via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 17 10:39:13 PST 2016


Hi David(s),

Can we get r257279 and its followup approved for the 3.8 branch?  Hans, is there still time for RC3? :)

-Dimitry

> On 11 Jan 2016, at 06:42, David Majnemer via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Yes, I added one yesterday (r257280).
> 
> On Sunday, January 10, 2016, David Blaikie <dblaikie at gmail.com <mailto:dblaikie at gmail.com>> wrote:
> any way to test this?
> 
> On Sat, Jan 9, 2016 at 11:13 PM, David Majnemer via llvm-commits <llvm-commits at lists.llvm.org <javascript:_e(%7B%7D,'cvml','llvm-commits at lists.llvm.org');>> wrote:
> Author: majnemer
> Date: Sun Jan 10 01:13:04 2016
> New Revision: 257279
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=257279&view=rev <http://llvm.org/viewvc/llvm-project?rev=257279&view=rev>
> Log:
> [JumpThreading] Don't forget to report that the IR changed
> 
> JumpThreading's runOnFunction is supposed to return true if it made any
> changes.  JumpThreading has a call to removeUnreachableBlocks which may
> result in changes to the IR but runOnFunction didn't appropriate account
> for this possibility, leading to badness.
> 
> While we are here, make sure to call LazyValueInfo::eraseBlock in
> removeUnreachableBlocks;  JumpThreading preserves LVI.
> 
> This fixes PR26096.
> 
> Modified:
>     llvm/trunk/include/llvm/Transforms/Utils/Local.h
>     llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
>     llvm/trunk/lib/Transforms/Utils/Local.cpp
> 
> Modified: llvm/trunk/include/llvm/Transforms/Utils/Local.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Local.h?rev=257279&r1=257278&r2=257279&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Local.h?rev=257279&r1=257278&r2=257279&view=diff>
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Utils/Local.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Utils/Local.h Sun Jan 10 01:13:04 2016
> @@ -42,6 +42,7 @@ class TargetLibraryInfo;
>  class TargetTransformInfo;
>  class DIBuilder;
>  class DominatorTree;
> +class LazyValueInfo;
> 
>  template<typename T> class SmallVectorImpl;
> 
> @@ -303,7 +304,7 @@ void removeUnwindEdge(BasicBlock *BB);
>  /// \brief Remove all blocks that can not be reached from the function's entry.
>  ///
>  /// Returns true if any basic block was removed.
> -bool removeUnreachableBlocks(Function &F);
> +bool removeUnreachableBlocks(Function &F, LazyValueInfo *LVI = nullptr);
> 
>  /// \brief Combine the metadata of two instructions so that K can replace J
>  ///
> 
> Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=257279&r1=257278&r2=257279&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=257279&r1=257278&r2=257279&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Sun Jan 10 01:13:04 2016
> @@ -211,11 +211,12 @@ bool JumpThreading::runOnFunction(Functi
>    // we will loop forever. We take care of this issue by not jump threading for
>    // back edges. This works for normal cases but not for unreachable blocks as
>    // they may have cycle with no back edge.
> -  removeUnreachableBlocks(F);
> +  bool EverChanged = false;
> +  EverChanged |= removeUnreachableBlocks(F, LVI);
> 
>    FindLoopHeaders(F);
> 
> -  bool Changed, EverChanged = false;
> +  bool Changed;
>    do {
>      Changed = false;
>      for (Function::iterator I = F.begin(), E = F.end(); I != E;) {
> 
> Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=257279&r1=257278&r2=257279&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=257279&r1=257278&r2=257279&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/Local.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/Local.cpp Sun Jan 10 01:13:04 2016
> @@ -23,6 +23,7 @@
>  #include "llvm/Analysis/EHPersonalities.h"
>  #include "llvm/Analysis/InstructionSimplify.h"
>  #include "llvm/Analysis/MemoryBuiltins.h"
> +#include "llvm/Analysis/LazyValueInfo.h"
>  #include "llvm/Analysis/ValueTracking.h"
>  #include "llvm/IR/CFG.h"
>  #include "llvm/IR/Constants.h"
> @@ -1407,7 +1408,7 @@ void llvm::removeUnwindEdge(BasicBlock *
>  /// removeUnreachableBlocksFromFn - Remove blocks that are not reachable, even
>  /// if they are in a dead cycle.  Return true if a change was made, false
>  /// otherwise.
> -bool llvm::removeUnreachableBlocks(Function &F) {
> +bool llvm::removeUnreachableBlocks(Function &F, LazyValueInfo *LVI) {
>    SmallPtrSet<BasicBlock*, 128> Reachable;
>    bool Changed = markAliveBlocks(F, Reachable);
> 
> @@ -1428,6 +1429,8 @@ bool llvm::removeUnreachableBlocks(Funct
>           ++SI)
>        if (Reachable.count(*SI))
>          (*SI)->removePredecessor(&*BB);
> +    if (LVI)
> +      LVI->eraseBlock(&*BB);
>      BB->dropAllReferences();
>    }
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org <javascript:_e(%7B%7D,'cvml','llvm-commits at lists.llvm.org');>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
> 
> _______________________________________________
> 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/20160217/e06ade34/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160217/e06ade34/attachment.sig>


More information about the llvm-commits mailing list