[llvm] r351520 - Re-enable terminator folding in LoopSimplifyCFG: underlying bugs fixed
Mikael Holmén via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 23 06:29:53 PST 2019
Hi,
We have also found cases that crashes with the enabled term folding,
that are not fixed with D57095.
E.g.
opt -S -o - bbi-23408.ll -loop-simplifycfg
which yields
opt: ../lib/Analysis/LoopInfo.cpp:460: void (anonymous
namespace)::UnloopUpdater::updateBlockParents(): Assertion `(NL !=
&Unloop && (!NL || NL->contains(&Unloop))) && "uninitialized successor"'
failed.
Stack dump:
0. Program arguments: build-all/bin/opt -S -o - bbi-23408.ll
-loop-simplifycfg
1. Running pass 'Function Pass Manager' on module 'bbi-23408.ll'.
2. Running pass 'Loop Pass Manager' on function '@f1'
3. Running pass 'Simplify loop CFG' on basic block '%bb3'
#0 0x000000000229af54 PrintStackTraceSignalHandler(void*)
(build-all/bin/opt+0x229af54)
#1 0x0000000002298f60 llvm::sys::RunSignalHandlers()
(build-all/bin/opt+0x2298f60)
#2 0x000000000229b2b8 SignalHandler(int) (build-all/bin/opt+0x229b2b8)
#3 0x00007fe1fe4cb330 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x10330)
#4 0x00007fe1fd0bac37 gsignal
/build/eglibc-ripdx6/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#5 0x00007fe1fd0be028 abort
/build/eglibc-ripdx6/eglibc-2.19/stdlib/abort.c:91:0
#6 0x00007fe1fd0b3bf6 __assert_fail_base
/build/eglibc-ripdx6/eglibc-2.19/assert/assert.c:92:0
#7 0x00007fe1fd0b3ca2 (/lib/x86_64-linux-gnu/libc.so.6+0x2fca2)
#8 0x00000000016f3b4d llvm::LoopInfo::erase(llvm::Loop*)
(build-all/bin/opt+0x16f3b4d)
#9 0x00000000020e0319 (anonymous
namespace)::ConstantTerminatorFoldingImpl::run()
(build-all/bin/opt+0x20e0319)
#10 0x00000000020dc38e simplifyLoopCFG(llvm::Loop&,
llvm::DominatorTree&, llvm::LoopInfo&, llvm::ScalarEvolution&,
llvm::MemorySSAUpdater*) (build-all/bin/opt+0x20dc38e)
#11 0x00000000020dce53 (anonymous
namespace)::LoopSimplifyCFGLegacyPass::runOnLoop(llvm::Loop*,
llvm::LPPassManager&) (build-all/bin/opt+0x20dce53)
#12 0x00000000016fb08c
llvm::LPPassManager::runOnFunction(llvm::Function&)
(build-all/bin/opt+0x16fb08c)
#13 0x0000000001ca18fd
llvm::FPPassManager::runOnFunction(llvm::Function&)
(build-all/bin/opt+0x1ca18fd)
#14 0x0000000001ca1bb8 llvm::FPPassManager::runOnModule(llvm::Module&)
(build-all/bin/opt+0x1ca1bb8)
#15 0x0000000001ca201a llvm::legacy::PassManagerImpl::run(llvm::Module&)
(build-all/bin/opt+0x1ca201a)
#16 0x00000000007a073b main (build-all/bin/opt+0x7a073b)
#17 0x00007fe1fd0a5f45 __libc_start_main
/build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:321:0
#18 0x000000000078618d _start (build-all/bin/opt+0x78618d)
Abort
/Mikael
On 1/23/19 1:59 PM, Maxim Kazantsev via llvm-commits wrote:
> Hi Jordan,
>
> I’ve prepared a fix that helps this failure, it is
> https://reviews.llvm.org/D57095
>
> It appeared to be surprisingly hard to create an IR repro of this
> situation in my case. The bug is sensitive to the order in which the
> pass manager processes loops. I am still struggling creating such. If
> you have an IR repro, could you please share it?
>
> Also I’d like to ask you to check, if you still have any problems with
> LoopSimplifyCFG’s term folding with this fix? I want to be sure that
> there is no more failures on your side before I re-enable it back.
>
> Thanks,
>
> Max
>
> *From:*Maxim Kazantsev
> *Sent:* Wednesday, January 23, 2019 1:00 PM
> *To:* 'Jordan Rupprecht' <rupprecht at google.com>
> *Cc:* llvm-commits at lists.llvm.org
> *Subject:* RE: [llvm] r351520 - Re-enable terminator folding in
> LoopSimplifyCFG: underlying bugs fixed
>
> Thanks for reverting it Jordan! I’ll take a look.
>
> --Max
>
> *From:*Jordan Rupprecht <rupprecht at google.com
> <mailto:rupprecht at google.com>>
> *Sent:* Wednesday, January 23, 2019 8:15 AM
> *To:* Maxim Kazantsev <max.kazantsev at azul.com
> <mailto:max.kazantsev at azul.com>>
> *Cc:* llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
> *Subject:* Re: [llvm] r351520 - Re-enable terminator folding in
> LoopSimplifyCFG: underlying bugs fixed
>
> Here's the creduce + stack trace w/ a debug build:
>
> $ cat /tmp/repro.c
>
> int a, b, *c, d, e;
>
> void f() {
>
> int g;
>
> for (;;) {
>
> for (; e; e = b) {
>
> c = g;
>
> for (; c; c = d)
>
> if (a) break;
>
> if (c) break;
>
> }
>
> }
>
> }
>
> $ clang -O1 -fexperimental-new-pass-manager -mllvm
> -enable-loop-simplifycfg-term-folding -c /tmp/repro.c
>
> clang-9:
> ~/src/llvm-project/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp:63:
> void llvm::DeleteDeadBlocks(SmallVectorImpl<llvm::BasicBlock *> &,
> llvm::DomTreeUpdater *): Assertion
>
> `Dead.count(Pred) && "All predecessors must be dead!"' failed.
>
> ...
>
> #9 0x00007f448da1723b
> llvm::DeleteDeadBlocks(llvm::SmallVectorImpl<llvm::BasicBlock*>&,
> llvm::DomTreeUpdater*) ~/src/llvm-project/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp:62:
>
> 5
>
> #10 0x00007f448e5c67ab (anonymous
> namespace)::ConstantTerminatorFoldingImpl::deleteDeadLoopBlocks()
> ~/src/llvm-project/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp:415:5
>
> On Tue, Jan 22, 2019 at 9:43 AM Jordan Rupprecht <rupprecht at google.com
> <mailto:rupprecht at google.com>> wrote:
>
> It looks like this is still causing crashes, so I've temporarily
> reverted this as https://reviews.llvm.org/rL351845. I hope to have a
> repro later today.
>
> On Thu, Jan 17, 2019 at 9:01 PM Max Kazantsev via llvm-commits
> <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>>
> wrote:
>
> Author: mkazantsev
> Date: Thu Jan 17 20:57:32 2019
> New Revision: 351520
>
> URL: http://llvm.org/viewvc/llvm-project?rev=351520&view=rev
> Log:
> Re-enable terminator folding in LoopSimplifyCFG: underlying bugs
> fixed
>
> Modified:
> llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp?rev=351520&r1=351519&r2=351520&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp Thu Jan
> 17 20:57:32 2019
> @@ -42,7 +42,7 @@ using namespace llvm;
> #define DEBUG_TYPE "loop-simplifycfg"
>
> static cl::opt<bool>
> EnableTermFolding("enable-loop-simplifycfg-term-folding",
> - cl::init(false));
> + cl::init(true));
>
> STATISTIC(NumTerminatorsFolded,
> "Number of terminators folded to unconditional
> branches");
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
> 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 embedded and charset-unspecified text was scrubbed...
Name: bbi-23408.ll
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190123/f75b69fa/attachment.ksh>
More information about the llvm-commits
mailing list