[llvm-bugs] [Bug 37888] New: Assertion `!isInvalid() && "Loop not in a valid state!"' failed. with -simple-loop-unswitch -loop-deletion

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Jun 21 01:05:46 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=37888

            Bug ID: 37888
           Summary: Assertion `!isInvalid() && "Loop not in a valid
                    state!"' failed. with -simple-loop-unswitch
                    -loop-deletion
           Product: new-bugs
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: mikael.holmen at ericsson.com
                CC: llvm-bugs at lists.llvm.org

Created attachment 20453
  --> https://bugs.llvm.org/attachment.cgi?id=20453&action=edit
reproducer

Running

opt -S -o - bbi-14637.ll -simple-loop-unswitch -loop-deletion

gives

opt: ../include/llvm/Analysis/LoopInfo.h:150: ArrayRef<BlockT *>
llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getBlocks() const [BlockT =
llvm::BasicBlock, LoopT = llvm::Loop]: Assertion `!isInvalid() && "Loop not in
a valid state!"' failed.
Stack dump:
0.      Program arguments: opt -S -o - bbi-14637.ll -simple-loop-unswitch
-loop-deletion 
1.      Running pass 'Function Pass Manager' on module 'bbi-14637.ll'.
2.      Running pass 'Loop Pass Manager' on function '@f1'
LLVMSymbolizer: error reading file: No such file or directory
#0 0x0000000001feeab4 (opt+0x1feeab4)
#1 0x0000000001fecd20 (opt+0x1fecd20)
#2 0x0000000001feee18 (opt+0x1feee18)
#3 0x00007fb858479330 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x10330)
#4 0x00007fb857068c37 gsignal
/build/eglibc-ripdx6/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#5 0x00007fb85706c028 abort
/build/eglibc-ripdx6/eglibc-2.19/stdlib/abort.c:91:0
#6 0x00007fb857061bf6 __assert_fail_base
/build/eglibc-ripdx6/eglibc-2.19/assert/assert.c:92:0
#7 0x00007fb857061ca2 (/lib/x86_64-linux-gnu/libc.so.6+0x2fca2)
#8 0x000000000152f7e2 (opt+0x152f7e2)
#9 0x0000000001a79d4a (opt+0x1a79d4a)
#10 0x0000000001a79fa8 (opt+0x1a79fa8)
#11 0x0000000001a7a4dd (opt+0x1a7a4dd)
#12 0x00000000007454cc (opt+0x7454cc)
#13 0x00007fb857053f45 __libc_start_main
/build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:321:0
#14 0x000000000072e82d (opt+0x72e82d)
Abort

With -debug-pass=Executions we get

Pass Arguments:  -targetlibinfo -tti -targetpassconfig
-assumption-cache-tracker -domtree -loops -loop-simplify -lcssa-verification
-lcssa -basicaa -aa -scalar-evolution -simple-loop-unswitch -loop-deletion
-verify -print-module
Target Library Information
Target Transform Information
Target Pass Configuration
Assumption Cache Tracker
  ModulePass Manager
    FunctionPass Manager
      Dominator Tree Construction
      Natural Loop Information
      Canonicalize natural loops
      LCSSA Verifier
      Loop-Closed SSA Form Pass
      Basic Alias Analysis (stateless AA impl)
      Function Alias Analysis Results
      Scalar Evolution Analysis
      Loop Pass Manager
        Simple unswitch loops
        Delete dead loops
      Module Verifier
    Print Module IR
[2018-06-13 08:49:54.217778133] 0x4332600   Executing Pass 'Function Pass
Manager' on Module 'bbi-14637.ll'...
[2018-06-13 08:49:54.217895120] 0x4360730     Executing Pass 'Dominator Tree
Construction' on Function 'f1'...
[2018-06-13 08:49:54.217935699] 0x4360730     Executing Pass 'Natural Loop
Information' on Function 'f1'...
[2018-06-13 08:49:54.217994577] 0x4360730     Executing Pass 'Canonicalize
natural loops' on Function 'f1'...
[2018-06-13 08:49:54.218053804] 0x4360730     Made Modification 'Canonicalize
natural loops' on Function 'f1'...
[2018-06-13 08:49:54.218087119] 0x4360730     Executing Pass 'LCSSA Verifier'
on Function 'f1'...
[2018-06-13 08:49:54.218119526] 0x4360730     Executing Pass 'Loop-Closed SSA
Form Pass' on Function 'f1'...
[2018-06-13 08:49:54.218171420] 0x4360730     Executing Pass 'Basic Alias
Analysis (stateless AA impl)' on Function 'f1'...
[2018-06-13 08:49:54.218216469] 0x4360730     Executing Pass 'Function Alias
Analysis Results' on Function 'f1'...
[2018-06-13 08:49:54.218262635] 0x4360730     Executing Pass 'Scalar Evolution
Analysis' on Function 'f1'...
[2018-06-13 08:49:54.218319557] 0x4360730     Executing Pass 'Loop Pass
Manager' on Function 'f1'...
[2018-06-13 08:49:54.218355946] 0x4361cc0       Executing Pass 'Simple unswitch
loops' on Loop 'for.body'...
[2018-06-13 08:49:54.220672155] 0x4361cc0       Made Modification 'Simple
unswitch loops' on Loop 'for.body'...
[2018-06-13 08:49:54.220740042] 0x4361cc0        Freeing Pass 'Simple unswitch
loops' on Loop 'for.body'...
[2018-06-13 08:49:54.220760856] 0x4361cc0       Executing Pass 'Delete dead
loops' on Loop 'for.body'...
[2018-06-13 08:49:54.220917514] 0x4361cc0       Made Modification 'Delete dead
loops' on Loop '<deleted loop>'...
[2018-06-13 08:49:54.220942727] 0x4361cc0        Freeing Pass 'Delete dead
loops' on Loop '<deleted>'...
[2018-06-13 08:49:54.220961096] 0x4361cc0        Freeing Pass 'Simple unswitch
loops' on Loop '<deleted>'...
[2018-06-13 08:49:54.220979325] 0x4361cc0        Freeing Pass 'Delete dead
loops' on Loop '<deleted>'...
opt: ../include/llvm/Analysis/LoopInfo.h:150: ArrayRef<BlockT *>
llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::getBlocks() const [BlockT =
llvm::BasicBlock, LoopT = llvm::Loop]: Assertion `!isInvalid() && "Loop not in
a valid state!"' failed.


This started happening with r333493:

[PM/LoopUnswitch] When using the new SimpleLoopUnswitch pass, schedule
loop-cleanup passes at the beginning of the loop pass pipeline, and
re-enqueue loops after even trivial unswitching.

This will allow us to much more consistently avoid simplifying code
while doing trivial unswitching. I've also added a test case that
specifically shows effective iteration using this technique.

I've unconditionally updated the new PM as that is always using the
SimpleLoopUnswitch pass, and I've made the pipeline changes for the old
PM conditional on using this new unswitch pass. I added a bunch of
comments to the loop pass pipeline in the old PM to make it more clear
what is going on when reviewing.

Hopefully this will unblock doing *partial* unswitching instead of just
full unswitching.

Differential Revision: https://reviews.llvm.org/D47408

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180621/58e23c3d/attachment-0001.html>


More information about the llvm-bugs mailing list