[llvm] adc4faf - [IndVarSimplify] Teach IndVarSimplify to preserve MemorySSA.

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 23 04:01:20 PST 2020


Hi Alina,

I noticed that the following started hitting an assertion with this
patch:

opt -S -o - foo.ll -licm -indvars -licm

gives me

opt: ../lib/Analysis/MemorySSA.cpp:2028: void
llvm::MemorySSA::verifyOrderingDominationAndDefUses(llvm::Function &)
const: Assertion `AL->size() == ActualAccesses.size() && "We don't have
the same number of accesses in the block as on the " "access list"'
failed.
Stack dump:
0.      Program arguments: /data/repo/master/llvm/build-all-
builtins/bin/opt -S -o - foo.ll -licm -indvars -licm 
1.      Running pass 'Function Pass Manager' on module 'foo.ll'.
2.      Running pass 'Loop Pass Manager' on function '@v_2_0'
 #0 0x0000000003e7dcf4 PrintStackTraceSignalHandler(void*)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x3e7dcf4)
 #1 0x0000000003e7b8be llvm::sys::RunSignalHandlers()
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x3e7b8be)
 #2 0x0000000003e7e0fc SignalHandler(int)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x3e7e0fc)
 #3 0x00007f45cb006890 __restore_rt (/lib/x86_64-linux-
gnu/libpthread.so.0+0x12890)
 #4 0x00007f45c9aafe97 raise /build/glibc-OTsEL5/glibc-
2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #5 0x00007f45c9ab1801 abort /build/glibc-OTsEL5/glibc-
2.27/stdlib/abort.c:81:0
 #6 0x00007f45c9aa139a __assert_fail_base /build/glibc-OTsEL5/glibc-
2.27/assert/assert.c:89:0
 #7 0x00007f45c9aa1412 (/lib/x86_64-linux-gnu/libc.so.6+0x30412)
 #8 0x00000000030c8daa
llvm::MemorySSA::verifyOrderingDominationAndDefUses(llvm::Function&)
const (/data/repo/master/llvm/build-all-builtins/bin/opt+0x30c8daa)
 #9 0x00000000030cb381 llvm::MemorySSAWrapperPass::verifyAnalysis()
const (/data/repo/master/llvm/build-all-builtins/bin/opt+0x30cb381)
#10 0x00000000036fb939
llvm::PMDataManager::verifyPreservedAnalysis(llvm::Pass*)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x36fb939)
#11 0x00000000030a3bd6
llvm::LPPassManager::runOnFunction(llvm::Function&)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x30a3bd6)
#12 0x00000000036fefd3
llvm::FPPassManager::runOnFunction(llvm::Function&)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x36fefd3)
#13 0x00000000036ff2b8 llvm::FPPassManager::runOnModule(llvm::Module&)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x36ff2b8)
#14 0x00000000036ff91d
llvm::legacy::PassManagerImpl::run(llvm::Module&)
(/data/repo/master/llvm/build-all-builtins/bin/opt+0x36ff91d)
#15 0x0000000002095a93 main (/data/repo/master/llvm/build-all-
builtins/bin/opt+0x2095a93)
#16 0x00007f45c9a92b97 __libc_start_main /build/glibc-OTsEL5/glibc-
2.27/csu/../csu/libc-start.c:344:0
#17 0x000000000207d02a _start (/data/repo/master/llvm/build-all-
builtins/bin/opt+0x207d02a)
Abort (core dumped)

/Mikael

On Wed, 2020-01-22 at 16:39 -0800, Alina Sbirlea via llvm-commits
wrote:
> Author: Alina Sbirlea
> Date: 2020-01-22T16:33:17-08:00
> New Revision: adc4faf532bfefeddb4c789f1562394ae2a1ba0d
> 
> URL: 
> https://protect2.fireeye.com/v1/url?k=f7eee798-ab7ceac4-f7eea703-0cc47ad93d46-8ded1b8e9d278649&q=1&e=01022273-bea5-4c6e-8983-d20037c15100&u=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project%2Fcommit%2Fadc4faf532bfefeddb4c789f1562394ae2a1ba0d
> DIFF: 
> https://protect2.fireeye.com/v1/url?k=8ac1daa5-d653d7f9-8ac19a3e-0cc47ad93d46-571f46367ac21f72&q=1&e=01022273-bea5-4c6e-8983-d20037c15100&u=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project%2Fcommit%2Fadc4faf532bfefeddb4c789f1562394ae2a1ba0d.diff
> 
> LOG: [IndVarSimplify] Teach IndVarSimplify to preserve MemorySSA.
> 
> Added: 
>     
> 
> Modified: 
>     llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> 
> Removed: 
>     
> 
> 
> #####################################################################
> ###########
> diff  --git a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> index a14049543236..259b6aec7b34 100644
> --- a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> +++ b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> @@ -38,6 +38,8 @@
>  #include "llvm/ADT/iterator_range.h"
>  #include "llvm/Analysis/LoopInfo.h"
>  #include "llvm/Analysis/LoopPass.h"
> +#include "llvm/Analysis/MemorySSA.h"
> +#include "llvm/Analysis/MemorySSAUpdater.h"
>  #include "llvm/Analysis/ScalarEvolution.h"
>  #include "llvm/Analysis/ScalarEvolutionExpander.h"
>  #include "llvm/Analysis/ScalarEvolutionExpressions.h"
> @@ -138,6 +140,8 @@ class IndVarSimplify {
>    const DataLayout &DL;
>    TargetLibraryInfo *TLI;
>    const TargetTransformInfo *TTI;
> +  MemorySSA *MSSA;
> +  std::unique_ptr<MemorySSAUpdater> MSSAU;
>  
>    SmallVector<WeakTrackingVH, 16> DeadInsts;
>  
> @@ -162,8 +166,11 @@ class IndVarSimplify {
>  public:
>    IndVarSimplify(LoopInfo *LI, ScalarEvolution *SE, DominatorTree
> *DT,
>                   const DataLayout &DL, TargetLibraryInfo *TLI,
> -                 TargetTransformInfo *TTI)
> -      : LI(LI), SE(SE), DT(DT), DL(DL), TLI(TLI), TTI(TTI) {}
> +                 TargetTransformInfo *TTI, MemorySSA *MSSA)
> +      : LI(LI), SE(SE), DT(DT), DL(DL), TLI(TLI), TTI(TTI),
> MSSA(MSSA) {
> +    if (MSSA)
> +      MSSAU = std::make_unique<MemorySSAUpdater>(MSSA);
> +  }
>  
>    bool run(Loop *L);
>  };
> @@ -418,11 +425,11 @@ bool IndVarSimplify::handleFloatingPointIV(Loop
> *L, PHINode *PN) {
>    // new comparison.
>    NewCompare->takeName(Compare);
>    Compare->replaceAllUsesWith(NewCompare);
> -  RecursivelyDeleteTriviallyDeadInstructions(Compare, TLI);
> +  RecursivelyDeleteTriviallyDeadInstructions(Compare, TLI,
> MSSAU.get());
>  
>    // Delete the old floating point increment.
>    Incr->replaceAllUsesWith(UndefValue::get(Incr->getType()));
> -  RecursivelyDeleteTriviallyDeadInstructions(Incr, TLI);
> +  RecursivelyDeleteTriviallyDeadInstructions(Incr, TLI,
> MSSAU.get());
>  
>    // If the FP induction variable still has uses, this is because
> something else
>    // in the loop uses its value.  In order to canonicalize the
> induction
> @@ -435,7 +442,7 @@ bool IndVarSimplify::handleFloatingPointIV(Loop
> *L, PHINode *PN) {
>      Value *Conv = new SIToFPInst(NewPHI, PN->getType(),
> "indvar.conv",
>                                   &*PN->getParent()-
> >getFirstInsertionPt());
>      PN->replaceAllUsesWith(Conv);
> -    RecursivelyDeleteTriviallyDeadInstructions(PN, TLI);
> +    RecursivelyDeleteTriviallyDeadInstructions(PN, TLI,
> MSSAU.get());
>    }
>    return true;
>  }
> @@ -2823,12 +2830,14 @@ PreservedAnalyses
> IndVarSimplifyPass::run(Loop &L, LoopAnalysisManager &AM,
>    Function *F = L.getHeader()->getParent();
>    const DataLayout &DL = F->getParent()->getDataLayout();
>  
> -  IndVarSimplify IVS(&AR.LI, &AR.SE, &AR.DT, DL, &AR.TLI, &AR.TTI);
> +  IndVarSimplify IVS(&AR.LI, &AR.SE, &AR.DT, DL, &AR.TLI, &AR.TTI,
> AR.MSSA);
>    if (!IVS.run(&L))
>      return PreservedAnalyses::all();
>  
>    auto PA = getLoopPassPreservedAnalyses();
>    PA.preserveSet<CFGAnalyses>();
> +  if (AR.MSSA)
> +    PA.preserve<MemorySSAAnalysis>();
>    return PA;
>  }
>  
> @@ -2853,13 +2862,18 @@ struct IndVarSimplifyLegacyPass : public
> LoopPass {
>      auto *TTIP =
> getAnalysisIfAvailable<TargetTransformInfoWrapperPass>();
>      auto *TTI = TTIP ? &TTIP->getTTI(*L->getHeader()->getParent()) :
> nullptr;
>      const DataLayout &DL = L->getHeader()->getModule()-
> >getDataLayout();
> +    auto *MSSAAnalysis =
> getAnalysisIfAvailable<MemorySSAWrapperPass>();
> +    MemorySSA *MSSA = nullptr;
> +    if (MSSAAnalysis)
> +      MSSA = &MSSAAnalysis->getMSSA();
>  
> -    IndVarSimplify IVS(LI, SE, DT, DL, TLI, TTI);
> +    IndVarSimplify IVS(LI, SE, DT, DL, TLI, TTI, MSSA);
>      return IVS.run(L);
>    }
>  
>    void getAnalysisUsage(AnalysisUsage &AU) const override {
>      AU.setPreservesCFG();
> +    AU.addPreserved<MemorySSAWrapperPass>();
>      getLoopAnalysisUsage(AU);
>    }
>  };
> 
> 
>         
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> 
https://protect2.fireeye.com/v1/url?k=5a03034f-06910e13-5a0343d4-0cc47ad93d46-75959173d0d21924&q=1&e=01022273-bea5-4c6e-8983-d20037c15100&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fllvm-commits
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: foo.ll
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200123/1d69bebe/attachment.ksh>


More information about the llvm-commits mailing list