Closed
Description
After 7de895f, I am seeing a crash in SLP when compiling Fortran code with flang.
Note that the crash is still observed after #130743 fix. Assertion must be enabled (otherwise, opt succeeds).
I cannot share the Fortran source, but below is reproducer obtained with llvm-reduce that fails for me on X86-64 with opt -O3
:
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"
define void @zot(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, i64 %arg4, double %arg5) {
bb:
br label %bb6
bb6: ; preds = %bb20, %bb
%phi = phi double [ 0.000000e+00, %bb ], [ %phi22, %bb20 ]
%phi7 = phi i64 [ 0, %bb ], [ %add, %bb20 ]
%phi8 = phi double [ 0.000000e+00, %bb ], [ %phi24, %bb20 ]
%phi9 = phi double [ 0.000000e+00, %bb ], [ %phi25, %bb20 ]
%load = load i32, ptr %arg, align 4
%icmp = icmp eq i32 %load, 0
%add = add i64 %phi7, 1
br i1 %icmp, label %bb20, label %bb10
bb10: ; preds = %bb6
%load11 = load double, ptr %arg, align 8
%fmul = fmul double %load11, 0.000000e+00
%fsub = fsub double 0.000000e+00, %fmul
store double 0.000000e+00, ptr %arg, align 8
%fadd = fadd double %phi9, 1.000000e+00
%fadd12 = fadd double %phi8, 0.000000e+00
%fadd13 = fadd double %fadd, 1.000000e+00
%fadd14 = fadd double %fadd12, 1.000000e+00
%fadd15 = fadd double 1.000000e+00, %fadd13
%fadd16 = fadd double %arg5, %fadd14
%fadd17 = fadd double 1.000000e+00, %fadd15
%fadd18 = fadd double %arg5, %fadd16
%fsub19 = fsub double 0.000000e+00, %load11
br label %bb20
bb20: ; preds = %bb10, %bb6
%phi21 = phi double [ %fadd17, %bb10 ], [ 0.000000e+00, %bb6 ]
%phi22 = phi double [ %fadd18, %bb10 ], [ 0.000000e+00, %bb6 ]
%phi23 = phi double [ %fsub, %bb10 ], [ 0.000000e+00, %bb6 ]
%phi24 = phi double [ %fadd18, %bb10 ], [ 1.000000e+00, %bb6 ]
%phi25 = phi double [ %fadd17, %bb10 ], [ 1.000000e+00, %bb6 ]
%phi26 = phi double [ %fsub19, %bb10 ], [ 0.000000e+00, %bb6 ]
%icmp27 = icmp eq i64 %phi7, %arg4
br i1 %icmp27, label %bb28, label %bb6
bb28: ; preds = %bb20
store double %phi23, ptr %arg, align 8
store double %phi21, ptr %arg3, align 8
store double %phi, ptr %arg2, align 8
store double %phi26, ptr %arg1, align 8
ret void
}
The crash is:
opt: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:16235: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*): Assertion `OpTE1.isSame( ArrayRef(E->Scalars).take_front(OpTE1.getVectorFactor())) && "Expected same first part of scalars."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: opt -O3 reduced.ll -o optimized.ll
1. Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "reduced.ll"
2. Running pass "slp-vectorizer" on function "zot"
#0 0x00005643bfe583ab llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (opt+0x1a683ab)
#1 0x00005643bfe55584 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#2 0x00007f472e842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x00007f472e8969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#4 0x00007f472e8969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#5 0x00007f472e8969fc pthread_kill ./nptl/pthread_kill.c:89:10
#6 0x00007f472e842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#7 0x00007f472e8287f3 abort ./stdlib/abort.c:81:7
#8 0x00007f472e82871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#9 0x00007f472e839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#10 0x00005643c2078a46 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (opt+0x3c88a46)
#11 0x00005643c207238e llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (opt+0x3c8238e)
#12 0x00005643c2075322 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (opt+0x3c85322)
#13 0x00005643c20933d4 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::SmallDenseSet<llvm::Value*, 4u, llvm::DenseMapInfo<llvm::Value*, void>> const&, llvm::Instruction*, llvm::ArrayRef<std::tuple<llvm::Value*, unsigned int, bool>>) (opt+0x3ca33d4)
#14 0x00005643c2097152 llvm::slpvectorizer::BoUpSLP::vectorizeTree() (opt+0x3ca7152)
#15 0x00005643c20ac54d llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (opt+0x3cbc54d)
#16 0x00005643c20b1576 bool tryToVectorizeSequence<llvm::Value>(llvm::SmallVectorImpl<llvm::Value*>&, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::ArrayRef<llvm::Value*>, bool)>, bool, llvm::slpvectorizer::BoUpSLP&) (.constprop.0) SLPVectorizer.cpp:0:0
#17 0x00005643c20b3021 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (opt+0x3cc3021)
#18 0x00005643c20bb066 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#19 0x00005643c20bbc2b llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (opt+0x3ccbc2b)
#20 0x00005643c19f4bf2 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#21 0x00005643c00c80d9 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (opt+0x1cd80d9)
#22 0x00005643c11c0252 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) NVPTXTargetMachine.cpp:0:0
#23 0x00005643c00c6942 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (opt+0x1cd6942)
#24 0x00005643c11c01b2 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NVPTXTargetMachine.cpp:0:0
#25 0x00005643c00c6361 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (opt+0x1cd6361)
#26 0x00005643c181b6a9 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) (opt+0x342b6a9)
#27 0x00005643bfe31ef4 optMain (opt+0x1a41ef4)
#28 0x00007f472e829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#29 0x00007f472e829e40 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007f472e829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#31 0x00005643bfe2512e _start (opt+0x1a3512e)