[llvm] [SLP]Initial support for copyable elements (non-schedulable only) (PR #140279)

Zequan Wu via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 24 14:52:15 PDT 2025


ZequanWu wrote:

This caused clang to crash on our Mac build:
```
clang++: /usr/local/google/home/zequanwu/work/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:1204: Instruction *(anonymous namespace)::InstructionsState::getMainOp() const: Assertion `valid() && "InstructionsState is invalid."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang++ -cc1 -triple arm64-apple-macosx12.0.0 -O2 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -clear-ast-before-backend -main-file-name BC_Decoder.cpp -mrelocation-model pic -pic-level 2 -fmerge-all-constants -fno-delete-null-pointer-checks -mframe-pointer=non-leaf -relaxed-aliasing -ffp-contract=off -fno-rounding-math -target-sdk-version=15.5 -fcompatibility-qualified-id-block-type-checking -fvisibility-inlines-hidden-static-local-var -fdefine-target-os-macros -fno-modulemap-allow-subdirectory-search -enable-tlsdesc -target-cpu apple-m1 -target-feature +v8.4a -target-feature +aes -target-feature +altnzcv -target-feature +ccdp -target-feature +ccpp -target-feature +complxnum -target-feature +crc -target-feature +dotprod -target-feature +flagm -target-feature +fp-armv8 -target-feature +fp16fml -target-feature +fptoint -target-feature +fullfp16 -target-feature +jsconv -target-feature +lse -target-feature +neon -target-feature +pauth -target-feature +perfmon -target-feature +predres -target-feature +ras -target-feature +rcpc -target-feature +rdm -target-feature +sb -target-feature +sha2 -target-feature +sha3 -target-feature +specrestrict -target-feature +ssbs -target-abi darwinpcs -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -mllvm -generate-arange-section -fdebug-compilation-dir=. -target-linker-version 820.1 -mllvm -crash-diagnostics-dir=../../tools/clang/crashreports -fcoverage-compilation-dir=. -nostdinc++ -D SWIFTSHADER_ENABLE_ASTC -D SWIFTSHADER_LEGACY_PRECISION=true -D __ARM_NEON__=1 -D CR_XCODE_VERSION=1640 -D CR_CLANG_REVISION=\"llvmorg-22-init-1245-gd9952a7a-0\" -D _LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE -D COMPONENT_BUILD -D _LIBCPP_INSTRUMENTED_WITH_ASAN=0 -D CR_LIBCXX_REVISION=ed0f32ee7a8d9481bfd26cfa6f5940b9f296f371 -D DCHECK_ALWAYS_ON=1 -D _DEBUG -D DYNAMIC_ANNOTATIONS_ENABLED=1 -D MARL_USE_PTHREAD_THREAD_LOCAL=1 -D __DATE__= -D __TIME__= -D __TIMESTAMP__= -Wno-builtin-macro-redefined -Wno-uninitialized-const-pointer -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wall -Wno-unused-variable -Wno-c++11-narrowing -Wno-unused-but-set-variable -Wunguarded-availability -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi -Wloop-analysis -Wno-unneeded-internal-declaration -Wno-cast-function-type -Wno-thread-safety-reference-return -Wno-nontrivial-memcall -Wno-exit-time-destructors -Wno-shadow -Wno-trigraphs -Wno-invalid-offsetof -Wenum-compare-conditional -Wno-nullability-completeness -Wunique-object-duplication -std=c++20 -fdeprecated-macro -ferror-limit 19 -fvisibility=hidden -fvisibility-inlines-hidden -fwrapv -fwrapv-pointer -stack-protector 2 -ftrivial-auto-var-init=pattern -fblocks -fencode-extended-block-signature -fno-rtti -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fno-implicit-modules -fskip-odr-check-in-gmf -fno-sized-deallocation -fmax-type-align=16 -Qn -fcolor-diagnostics -vectorize-loops -vectorize-slp -debug-info-kind=limited -D__GCC_HAVE_DWARF2_CFI_ASM=1 -x c++ BC_Decoder-7b03ca.cpp
1.      <eof> parser at end of file
2.      Optimizer
3.      Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,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<O2>,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 "BC_Decoder-7b03ca.cpp"
4.      Running pass "slp-vectorizer" on function "_ZN10BC_Decoder6DecodeEPKhPhiiiiib"
 #0 0x000055587d1faa38 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8779a38)
 #1 0x000055587d1f8145 llvm::sys::RunSignalHandlers() (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8777145)
 #2 0x000055587d1fb801 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f3a9cc49df0 (/lib/x86_64-linux-gnu/libc.so.6+0x3fdf0)
 #4 0x00007f3a9cc9e95c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007f3a9cc49cc2 raise ./signal/../sysdeps/posix/raise.c:27:6
 #6 0x00007f3a9cc324ac abort ./stdlib/abort.c:81:3
 #7 0x00007f3a9cc32420 __assert_perror_fail ./assert/assert-perr.c:31:1
 #8 0x000055587e7d4067 llvm::slpvectorizer::BoUpSLP::getTreeCost(llvm::ArrayRef<llvm::Value*>, llvm::InstructionCost) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9d53067)
 #9 0x000055587e842b93 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&, llvm::AssumptionCache*) SLPVectorizer.cpp:0:0
#10 0x000055587e80a98b llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9d8998b)
#11 0x000055587e80be87 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9d8ae87)
#12 0x000055587e800881 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9d7f881)
#13 0x000055587e7fd53e llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9d7c53e)
#14 0x000055587e7fc9c6 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9d7b9c6)
#15 0x000055587e396d35 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#16 0x000055587cbf5bd7 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8174bd7)
#17 0x000055587aac0e79 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) AMDGPUTargetMachine.cpp:0:0
#18 0x000055587cbf9c41 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8178c41)
#19 0x000055587aac1539 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) AMDGPUTargetMachine.cpp:0:0
#20 0x000055587cbf4c77 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8173c77)
#21 0x000055587d9580df (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#22 0x000055587d94f5a6 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8ece5a6)
#23 0x000055587d961353 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x8ee0353)
#24 0x000055587f38ac29 clang::ParseAST(clang::Sema&, bool, bool) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0xa909c29)
#25 0x000055587deee44a clang::FrontendAction::Execute() (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x946d44a)
#26 0x000055587de5ebcd clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x93ddbcd)
#27 0x000055587dfd7552 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x9556552)
#28 0x000055587a6de361 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x5c5d361)
#29 0x000055587a6da21f ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#30 0x000055587a6d92b2 clang_main(int, char**, llvm::ToolContext const&) (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x5c582b2)
#31 0x000055587a6ea547 main (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x5c69547)
#32 0x00007f3a9cc33ca8 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#33 0x00007f3a9cc33d65 call_init ./csu/../csu/libc-start.c:128:20
#34 0x00007f3a9cc33d65 __libc_start_main ./csu/../csu/libc-start.c:347:5
#35 0x000055587a6d7ca1 _start (/usr/local/google/home/zequanwu/work/llvm-project/out/cmake/bin/clang-21+0x5c56ca1)
./BC_Decoder-7b03ca.sh: line 1: 772522 Aborted                 (core dumped) "clang++" "-cc1" "-triple" "arm64-apple-macosx12.0.0" "-O2" "-Wundef-prefix=TARGET_OS_" "-Werror=undef-prefix" "-Wdeprecated-objc-isa-usage" "-Werror=deprecated-objc-isa-usage" "-emit-obj" "-disable-free" "-clear-ast-before-backend" "-main-file-name" "BC_Decoder.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-fmerge-all-constants" "-fno-delete-null-pointer-checks" "-mframe-pointer=non-leaf" "-relaxed-aliasing" "-ffp-contract=off" "-fno-rounding-math" "-target-sdk-version=15.5" "-fcompatibility-qualified-id-block-type-checking" "-fvisibility-inlines-hidden-static-local-var" "-fdefine-target-os-macros" "-fno-modulemap-allow-subdirectory-search" "-enable-tlsdesc" "-target-cpu" "apple-m1" "-target-feature" "+v8.4a" "-target-feature" "+aes" "-target-feature" "+altnzcv" "-target-feature" "+ccdp" "-target-feature" "+ccpp" "-target-feature" "+complxnum" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+flagm" "-target-feature" "+fp-armv8" "-target-feature" "+fp16fml" "-target-feature" "+fptoint" "-target-feature" "+fullfp16" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+neon" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+predres" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sb" "-target-feature" "+sha2" "-target-feature" "+sha3" "-target-feature" "+specrestrict" "-target-feature" "+ssbs" "-target-abi" "darwinpcs" "-debug-info-kind=standalone" "-dwarf-version=4" "-debugger-tuning=lldb" "-mllvm" "-generate-arange-section" "-fdebug-compilation-dir=." "-target-linker-version" "820.1" "-mllvm" "-crash-diagnostics-dir=../../tools/clang/crashreports" "-fcoverage-compilation-dir=." "-nostdinc++" "-D" "SWIFTSHADER_ENABLE_ASTC" "-D" "SWIFTSHADER_LEGACY_PRECISION=true" "-D" "__ARM_NEON__=1" "-D" "CR_XCODE_VERSION=1640" "-D" "CR_CLANG_REVISION=\"llvmorg-22-init-1245-gd9952a7a-0\"" "-D" "_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE" "-D" "COMPONENT_BUILD" "-D" "_LIBCPP_INSTRUMENTED_WITH_ASAN=0" "-D" "CR_LIBCXX_REVISION=ed0f32ee7a8d9481bfd26cfa6f5940b9f296f371" "-D" "DCHECK_ALWAYS_ON=1" "-D" "_DEBUG" "-D" "DYNAMIC_ANNOTATIONS_ENABLED=1" "-D" "MARL_USE_PTHREAD_THREAD_LOCAL=1" "-D" "__DATE__=" "-D" "__TIME__=" "-D" "__TIMESTAMP__=" "-Wno-builtin-macro-redefined" "-Wno-uninitialized-const-pointer" "-Wheader-hygiene" "-Wstring-conversion" "-Wtautological-overlap-compare" "-Wall" "-Wno-unused-variable" "-Wno-c++11-narrowing" "-Wno-unused-but-set-variable" "-Wunguarded-availability" "-Wno-missing-field-initializers" "-Wno-unused-parameter" "-Wno-psabi" "-Wloop-analysis" "-Wno-unneeded-internal-declaration" "-Wno-cast-function-type" "-Wno-thread-safety-reference-return" "-Wno-nontrivial-memcall" "-Wno-exit-time-destructors" "-Wno-shadow" "-Wno-trigraphs" "-Wno-invalid-offsetof" "-Wenum-compare-conditional" "-Wno-nullability-completeness" "-Wunique-object-duplication" "-std=c++20" "-fdeprecated-macro" "-ferror-limit" "19" "-fvisibility=hidden" "-fvisibility-inlines-hidden" "-fwrapv" "-fwrapv-pointer" "-stack-protector" "2" "-ftrivial-auto-var-init=pattern" "-fblocks" "-fencode-extended-block-signature" "-fno-rtti" "-fregister-global-dtors-with-atexit" "-fgnuc-version=4.2.1" "-fno-implicit-modules" "-fskip-odr-check-in-gmf" "-fno-sized-deallocation" "-fmax-type-align=16" "-Qn" "-fcolor-diagnostics" "-vectorize-loops" "-vectorize-slp" "-debug-info-kind=limited" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" "BC_Decoder-7b03ca.cpp"
```
Attached repro. Please revert if it takes a while to fix it.
[BC_Decoder-7b03ca.cpp.txt](https://github.com/user-attachments/files/21419677/BC_Decoder-7b03ca.cpp.txt)
[BC_Decoder-7b03ca.sh.txt](https://github.com/user-attachments/files/21419679/BC_Decoder-7b03ca.sh.txt)


https://github.com/llvm/llvm-project/pull/140279


More information about the llvm-commits mailing list