Issue 184372
Summary [LV] Crash on `llvm-test-suite` with `-force-vector-interleave=(n>=2)`
Labels vectorizers, crash-on-valid
Assignees
Reporter MacDue
    Note: This is almost identical to #184317, the fix in #184329 only fixed the reduction. I've attached a new reduced test case and the full compile unit now. 

Reduced test case:

```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnu"

define void @create_hierarchy(ptr %0, ptr %1, i64 %indvars.iv218) {
entry:
  br label %for.body

for.body: ; preds = %for.inc, %entry
 %indvars.iv2182 = phi i64 [ 0, %entry ], [ %indvars.iv.next219, %for.inc ]
 store i32 0, ptr %1, align 4
  br i1 false, label %if.then4, label %if.else

if.then4:                                         ; preds = %for.body
  %2 = load i32, ptr %0, align 8
  br label %for.inc

if.else: ; preds = %for.body
  %3 = load i32, ptr %0, align 8
  br label %for.inc

for.inc: ; preds = %if.else, %if.then4
  %cond.i.sink = phi i32 [ 0, %if.then4 ], [ %3, %if.else ]
  store i32 %cond.i.sink, ptr null, align 4
 %indvars.iv.next219 = add i64 %indvars.iv2182, 1
  %exitcond226.not = icmp eq i64 %indvars.iv2182, %indvars.iv218
  br i1 %exitcond226.not, label %for.end, label %for.body

for.end: ; preds = %for.inc
  ret void
}
```

Full compile unit: [full_tu.ll.txt](https://github.com/user-attachments/files/25721359/full_tu.ll.txt)
Run with: `opt  reduced.ll -o - -passes=loop-vectorize -S -force-vector-interleave=2`

<details>
<summary>Stack trace</summary>
opt: /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp:3307: virtual void llvm::VPReplicateRecipe::execute(VPTransformState &): Assertion `IsSingleScalar && "VPReplicateRecipes outside replicate regions " "must have already been unrolled"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0.	Program arguments: ./build/bin/opt foo.ll -o - -passes=loop-vectorize -S -force-vector-interleave=2
1.	Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "foo.ll"
2.	Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "create_hierarchy"
 #0 0x0000f7c67c34db98 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/benmax01/git/llvm-project/llvm/lib/Support/Unix/Signals.inc:880:11
 #1 0x0000f7c67c34e0ac PrintStackTraceSignalHandler(void*) /home/benmax01/git/llvm-project/llvm/lib/Support/Unix/Signals.inc:962:1
 #2 0x0000f7c67c34c0c8 llvm::sys::RunSignalHandlers() /home/benmax01/git/llvm-project/llvm/lib/Support/Signals.cpp:108:5
 #3 0x0000f7c67c34e978 SignalHandler(int, siginfo_t*, void*) /home/benmax01/git/llvm-project/llvm/lib/Support/Unix/Signals.inc:448:38
 #4 0x0000f7c685f48a60 (linux-vdso.so.1+0xa60)
 #5 0x0000f7c67b997608 __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x0000f7c67b94cb3c raise ./signal/../sysdeps/posix/raise.c:27:6
 #7 0x0000f7c67b937e00 abort ./stdlib/abort.c:81:7
 #8 0x0000f7c67b945cc0 __assert_fail_base ./assert/assert.c:93:7
 #9 0x0000f7c67b945d30 __assert_perror_fail ./assert/assert-perr.c:31:1
#10 0x0000f7c68213fbe0 llvm::VPReplicateRecipe::execute(llvm::VPTransformState&) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp:3308:26
#11 0x0000f7c6820afa78 llvm::VPBasicBlock::executeRecipes(llvm::VPTransformState*, llvm::BasicBlock*) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:557:3
#12 0x0000f7c6820afdb4 llvm::VPBasicBlock::execute(llvm::VPTransformState*) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:537:3
#13 0x0000f7c6820b2ad8 llvm::VPlan::execute(llvm::VPTransformState*) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:960:3
#14 0x0000f7c681cc310c llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*, bool) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7536:13
#15 0x0000f7c681ccaedc llvm::LoopVectorizePass::processLoop(llvm::Loop*) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9869:9
#16 0x0000f7c681ccee90 llvm::LoopVectorizePass::runImpl(llvm::Function&) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9922:30
#17 0x0000f7c681ccf1f8 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/benmax01/git/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9960:32
#18 0x0000f7c6839dc6d4 llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/benmax01/git/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:5
#19 0x0000f7c67cf9f4e0 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/benmax01/git/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:76:38
#20 0x0000f7c6848dc4b0 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/benmax01/git/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:5
#21 0x0000f7c67cf9e0d0 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/benmax01/git/llvm-project/llvm/lib/IR/PassManager.cpp:127:38
#22 0x0000f7c685eb2c30 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/benmax01/git/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:5
#23 0x0000f7c67cf9e678 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/benmax01/git/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:76:38
#24 0x0000f7c685e81484 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool, bool) /home/benmax01/git/llvm-project/llvm/tools/opt/NewPMDriver.cpp:574:7
#25 0x0000f7c685eb5d70 optMain /home/benmax01/git/llvm-project/llvm/tools/opt/optdriver.cpp:751:9
#26 0x0000c0c5343b0de4 main /home/benmax01/git/llvm-project/llvm/tools/opt/opt.cpp:27:35
#27 0x0000f7c67b9384c4 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#28 0x0000f7c67b938598 call_init ./csu/../csu/libc-start.c:128:20
#29 0x0000f7c67b938598 __libc_start_main ./csu/../csu/libc-start.c:347:5
#30 0x0000c0c5343b0cb0 _start (./build/bin/opt+0x10cb0)
[1]    269250 abort (core dumped) ./build/bin/opt foo.ll -o - -passes=loop-vectorize -S 
</details>

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to