| Issue |
178884
|
| Summary |
[SLPVectorizer] Assertion `castIsValid(op, S, Ty) && "Invalid cast!"' failed.
|
| Labels |
llvm:SLPVectorizer,
crash-on-valid,
generated by fuzzer
|
| Assignees |
|
| Reporter |
dtcxzyw
|
Reproducer: https://godbolt.org/z/Kajqfzjfx
```
; bin/opt -passes=slp-vectorizer test.ll -S
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 fastcc i16 @func_257(i16 %conv11) {
entry:
%0 = add i64 0, 0
%1 = bitcast i64 %0 to double
%mul.i.i.17 = fmul double 0.000000e+00, %1
%2 = or i64 0, 0
%3 = bitcast i64 %2 to double
%mul.i.i.18 = fmul double 0.000000e+00, %3
%4 = fcmp uno double %mul.i.i.18, 0.000000e+00
%5 = select i1 %4, i16 0, i16 0
%6 = trunc i64 %2 to i16
%7 = or i16 %5, %6
%8 = fcmp uno double %mul.i.i.17, 0.000000e+00
%9 = select i1 %8, i16 0, i16 0
%10 = trunc i64 %0 to i16
%11 = or i16 %9, %10
%12 = or i64 0, 0
%13 = bitcast i64 %12 to double
%14 = fcmp uno double %13, 0.000000e+00
%15 = select i1 %14, i16 0, i16 0
%16 = trunc i64 %12 to i16
%17 = zext i16 %conv11 to i64
%18 = or i64 %17, 0
%19 = bitcast i64 %18 to double
%mul.i.i.21 = fmul double 0.000000e+00, %19
%20 = fcmp uno double %mul.i.i.21, 0.000000e+00
%21 = select i1 %20, i16 0, i16 0
%22 = trunc i64 %18 to i16
%23 = or i16 %21, %22
%24 = or i16 %15, %16
%conv140.i.18 = xor i16 %7, %11
%conv140.i.20 = xor i16 %24, %conv140.i.18
%conv140.i.21 = xor i16 %23, %conv140.i.20
ret i16 %conv140.i.21
}
```
```
opt: /root/llvm-project/llvm/lib/IR/Instructions.cpp:3043: static llvm::CastInst* llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*, const llvm::Twine&, llvm::InsertPosition): Assertion `castIsValid(op, S, Ty) && "Invalid cast!"' 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: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -passes=slp-vectorizer <source>
1. Running pass "function(slp-vectorizer)" on module "<source>"
2. Running pass "slp-vectorizer" on function "func_257"
#0 0x0000000005ab1ef8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x5ab1ef8)
#1 0x0000000005aaedd4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#2 0x000072088da42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x000072088da969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#4 0x000072088da42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#5 0x000072088da287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#6 0x000072088da2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#7 0x000072088da39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#8 0x0000000005799836 (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x5799836)
#9 0x0000000000ba36b3 llvm::IRBuilderBase::CreateCast(llvm::Instruction::CastOps, llvm::Value*, llvm::Type*, llvm::Twine const&, llvm::MDNode*, llvm::FMFSource) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xba36b3)
#10 0x0000000003838400 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3838400)
#11 0x00000000038357ee llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38357ee)
#12 0x0000000003835b5d llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3835b5d)
#13 0x0000000003836944 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3836944)
#14 0x00000000038357ee llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38357ee)
#15 0x0000000003856fa4 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/compiler-explorer/clang-assertions-trunk/bin/opt+0x3856fa4)
#16 0x0000000003877229 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&, llvm::AssumptionCache*, llvm::DominatorTree&) SLPVectorizer.cpp:0:0
#17 0x000000000387a478 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x387a478)
#18 0x000000000387f3ab llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (.constprop.0) SLPVectorizer.cpp:0:0
#19 0x0000000003883940 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3883940)
#20 0x0000000003889ed6 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
#21 0x000000000388ad5b llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x388ad5b)
#22 0x0000000003028ffe llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3028ffe)
#23 0x00000000058232e1 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x58232e1)
#24 0x0000000000f0866e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xf0866e)
#25 0x000000000582189a llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x582189a)
#26 0x000000000096594e llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x96594e)
#27 0x0000000005821251 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x5821251)
#28 0x000000000096fb0a 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) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x96fb0a)
#29 0x0000000000963bb8 optMain (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x963bb8)
#30 0x000072088da29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#31 0x000072088da29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#32 0x000000000095a835 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x95a835)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
Unlike https://github.com/llvm/llvm-project/issues/170828, this crash can be triggered without revec.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs