Issue 75938
Summary llvm crash: Assertion `L->isRecursivelyLCSSAForm(LAR.DT, LI) && "Loops must remain in LCSSA form!"' failed.
Labels new issue
Assignees
Reporter shao-hua-li
    llvm -O2/3 crashes on the following test case. It should be in the `LoopIodiomRecognizePass`.

Bisected to 9d2903c8e50944224eb294afe7bef13138e1ea7b, which was committed by @markoshorro 

Compiler explorer: https://godbolt.org/z/adPo1xxj9

```console
% cat reduced.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@c = external global i16
@e = external global i8
@d = internal global [2 x i64] [i64 2738442171664406024, i64 2738442171664406024]
@f = external global i8
@g = external global i64

define void @h(i32 %.pre.pre, i64 %idxprom) {
entry:
  br label %for.cond

for.cond: ; preds = %for.cond1, %entry
  br label %for.cond1

for.cond1:                                        ; preds = %if.then, %for.cond
  %0 = phi i16 [ 0, %for.cond ], [ %inc, %if.then ]
  store i16 %0, ptr @c, align 2
  %conv = sext i16 %0 to i32
 %tobool.not = icmp eq i32 %conv, %.pre.pre
  br i1 %tobool.not, label %for.cond, label %for.body

for.body: ; preds = %for.cond1
  %arrayidx = getelementptr [2 x i64], ptr @d, i64 0, i64 %idxprom
  %1 = load i64, ptr %arrayidx, align 8
  %2 = load i8, ptr @f, align 1
  %conv2 = sext i8 %2 to i64
  %add3 = add i64 %conv2, 2
  store i64 %add3, ptr @g, align 8
  %cmp.not = icmp slt i64 %1, %add3
  br i1 %cmp.not, label %if.else, label %land.lhs.true

land.lhs.true:                                    ; preds = %for.body
  %3 = load i8, ptr @e, align 1
  %dec = add i8 %3, 1
  store i8 %dec, ptr @e, align 1
  %tobool7.not = icmp eq i8 %3, 0
  br i1 %tobool7.not, label %if.else, label %if.then

if.then: ; preds = %land.lhs.true
  store i8 0, ptr @f, align 1
  %inc = add i16 %0, 1
  br label %for.cond1

if.else:                                          ; preds = %land.lhs.true, %for.body
  ret void
}
%
% opt -disable-output -O2 reduced.ll
opt: /tmp/tmp5ru6ncoi/tmpeo0uglbj/llvm/lib/Transforms/Scalar/LoopPassManager.cpp:282: llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::FunctionAnalysisManager&)::<lambda(llvm::StringRef, llvm::Any)>: Assertion `L->isRecursivelyLCSSAForm(LAR.DT, LI) && "Loops must remain in LCSSA form!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/opt -disable-output -O2 reduced.ll
 #0 0x00007f832c4600bf llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x92d0bf)
 #1 0x00007f832c45d5e4 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f832b748090 (/lib/x86_64-linux-gnu/libc.so.6+0x43090)
 #3 0x00007f832b74800b raise /build/glibc-wuryBv/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #4 0x00007f832b727859 abort /build/glibc-wuryBv/glibc-2.31/stdlib/abort.c:81:7
 #5 0x00007f832b727729 get_sysdep_segment_value /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:509:8
 #6 0x00007f832b727729 _nl_load_domain /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:970:34
 #7 0x00007f832b738fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x00007f832da9691e void llvm::detail::UniqueFunctionBase<void, llvm::StringRef, llvm::Any>::CallImpl<llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)::'lambda'(llvm::StringRef, llvm::Any)>(void*, llvm::StringRef, llvm::Any&) LoopPassManager.cpp:0:0
 #9 0x00007f832da97082 bool llvm::PassInstrumentation::runBeforePass<llvm::Loop, llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>(llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&> const&, llvm::Loop const&) const (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x1f64082)
#10 0x00007f832da97671 std::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::Loop&, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x1f64671)
#11 0x00007f832da97da6 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x1f64da6)
#12 0x00007f832da991bd llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x1f661bd)
#13 0x00007f832da9a412 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x1f67412)
#14 0x00007f832f3695c6 llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x38365c6)
#15 0x00007f832c67498d llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0xb4198d)
#16 0x00007f832f3625e6 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x382f5e6)
#17 0x00007f832e143ab1 llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x2610ab1)
#18 0x00007f832f369576 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x3836576)
#19 0x00007f832e13c41f llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x260941f)
#20 0x00007f832dd927f6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x225f7f6)
#21 0x00007f832e1400dd llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x260d0dd)
#22 0x00007f832dd927a6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x225f7a6)
#23 0x00007f832e13e1ad llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x260b1ad)
#24 0x00007f832dd97d67 llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x2264d67)
#25 0x00007f832f368b76 llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0x3835b76)
#26 0x00007f832c67119d llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/../lib/libLLVM-18git.so+0xb3e19d)
#27 0x000056309e9ca315 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/opt+0x26315)
#28 0x000056309e9bde6a main (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/opt+0x19e6a)
#29 0x00007f832b729083 __libc_start_main /build/glibc-wuryBv/glibc-2.31/csu/../csu/libc-start.c:342:3
#30 0x000056309e9bea3e _start (/zdata/shaoli/compilers/ccbuilder-compilers/clang-9d2903c8e50944224eb294afe7bef13138e1ea7b/bin/opt+0x1aa3e)
[1] 1660780 abort       -disable-output -O2 reduced.ll
%
```

The above IR is reduced from the following C code:
```C
int a;
char b, e, f;
short c;
static long d[] = {2738442171664406024, 2738442171664406024};
long g;
void h() {
  for (;;) {
    c = 0;
    for (; a + c; c++) {
      char *i = &e;
      if (d[b] >= (g = 2 + f) && (*i)--)
        f = 0;
      else
        for (;;)
 ;
    }
  }
}
int main() {}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to