Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clang frontend crash (with reproducers) when building Nodejs 21.4.0 with Polly Parallelizer #75923

Open
ms178 opened this issue Dec 19, 2023 · 2 comments
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] polly

Comments

@ms178
Copy link

ms178 commented Dec 19, 2023

With a recent Clang-18 snapshot (cd6e462), I've seen the following frontend crash:

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++ -o /tmp/makepkg/nodejs/src/node/out/Release/obj.target/v8_libbase/deps/v8/src/base/ieee754.o ../deps/v8/src/base/ieee754.cc -D_GLIBCXX_USE_CXX11_ABI=1 -DNODE_OPENSSL_CONF_NAME=nodejs_conf -DICU_NO_USER_DATA_OVERRIDE -DV8_GYP_BUILD -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64 -D__STDC_FORMAT_MACROS -DV8_TARGET_ARCH_X64 -DV8_HAVE_TARGET_OS -DV8_TARGET_OS_LINUX -DV8_EMBEDDER_STRING=\"-node.17\" -DENABLE_DISASSEMBLER -DV8_PROMISE_INTERNAL_FIELD_COUNT=1 -DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION -DV8_SHORT_BUILTIN_CALLS -DOBJECT_PRINT -DV8_INTL_SUPPORT -DV8_ATOMIC_OBJECT_FIELD_WRITES -DV8_ENABLE_LAZY_SOURCE_POSITIONS -DV8_USE_SIPHASH -DV8_SHARED_RO_HEAP -DV8_WIN64_UNWINDING_INFO -DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH -DV8_USE_ZLIB -DV8_ENABLE_TURBOFAN -DV8_ENABLE_WEBASSEMBLY -DV8_ENABLE_JAVASCRIPT_PROMISE_HOOKS -DV8_ALLOCATION_FOLDING -DV8_ALLOCATION_SITE_TRACKING -DV8_ADVANCED_BIGINT_ALGORITHMS -DBUILDING_V8_BASE_SHARED -I../deps/v8 -I../deps/v8/include -pthread -Wno-unused-parameter -fPIC -Wno-return-type -Wno-invalid-offsetof -fno-strict-aliasing -m64 -m64 -O3 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++17 -MMD -MF /tmp/makepkg/nodejs/src/node/out/Release/.deps//tmp/makepkg/nodejs/src/node/out/Release/obj.target/v8_libbase/deps/v8/src/base/ieee754.o.d.raw -D_FORTIFY_SOURCE=0 -O3 -march=native -mtune=native -maes -mbmi2 -mpclmul -mllvm -inline-threshold=1000 -mllvm -polly -mllvm -polly-position=early -mllvm -polly-dependences-computeout=900000000 -mllvm -polly-detect-profitability-min-per-loop-insts=40 -mllvm -polly-tiling=true -mllvm -polly-prevect-width=256 -mllvm -polly-vectorizer=stripmine -mllvm -polly-invariant-load-hoisting -mllvm -polly-loopfusion-greedy -mllvm -polly-run-inliner -mllvm -polly-run-dce -mllvm -polly-enable-delicm=true -mllvm -polly -fmerge-all-constants -mllvm -polly-parallel -fopenmp -fopenmp-version=50 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=36 -mllvm -polly-scheduling=dynamic -mllvm -polly-scheduling-chunksize=1 -mllvm -extra-vectorizer-passes -mllvm -enable-cond-stores-vec -mllvm -slp-vectorize-hor-store -mllvm -enable-loopinterchange -mllvm -enable-loop-distribute -mllvm -enable-unroll-and-jam -mllvm -enable-loop-flatten -mllvm -interleave-small-loop-scalar-reduction -mllvm -unroll-runtime-multi-exit -mllvm -aggressive-ext-opt -fno-math-errno -fno-trapping-math -falign-functions=32 -funroll-loops -fno-semantic-interposition -fcf-protection=none -mharden-sls=none -fomit-frame-pointer -mprefer-vector-width=256 -flto=thin -fwhole-program-vtables -fsplit-lto-unit -mllvm -adce-remove-loops -mllvm -enable-ext-tsp-block-placement -mllvm -enable-gvn-hoist -mllvm -enable-dfa-jump-thread -Wno-error -fgnuc-version=13.2.1 -ffp-contract=fast -fdata-sections -ffunction-sections -fno-unique-section-names -fsplit-machine-functions -freroll-loops -w -Wp,-U_GLIBCXX_ASSERTIONS -c
1.      <eof> parser at end of file
2.      Optimizer
llvm-ar crsT /tmp/makepkg/nodejs/src/node/out/Release/obj.target/tools/v8_gypfiles/libv8_zlib.a @/tmp/makepkg/nodejs/src/node/out/Release/obj.target/tools/v8_gypfiles/libv8_zlib.a.ar-file-list
 #0 0x0000556913f91579 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) Signals.cpp:0:0
 #1 0x0000556913f91370 llvm::sys::CleanupOnSignal(unsigned long) (/home/marcus/llvm18/bin/clang-18+0xd591370)
 #2 0x0000556913f4c3f8 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
 #3 0x0000556913f4c578 CrashRecoverySignalHandler(int) (.llvm.12110217104791804295) CrashRecoveryContext.cpp:0:0
 #4 0x00007f96c3223010 (/usr/lib/libc.so.6+0x223010)
 #5 0x000055691386ded1 llvm::po_iterator<llvm::MachineDominatorTree*, llvm::SmallPtrSet<llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*, 8u>, false, llvm::GraphTraits<llvm::MachineDominatorTree*>>::po_iterator(llvm::DomTreeNodeBase<llvm::MachineBasicBlock>*) EarlyIfConversion.cpp:0:0
 #6 0x0000556914f0aaf1 polly::IslNodeBuilder::createForParallel(isl_ast_node*) IslNodeBuilder.cpp:0:0
 #7 0x0000556914f0d3fc polly::IslNodeBuilder::createFor(isl_ast_node*) (/home/marcus/llvm18/bin/clang-18+0xe50d3fc)
 #8 0x0000556914f0e6a5 polly::IslNodeBuilder::createBlock(isl_ast_node*) (/home/marcus/llvm18/bin/clang-18+0xe50e6a5)
 #9 0x0000556914ea0d1d generateCode(polly::Scop&, polly::IslAstInfo&, llvm::LoopInfo&, llvm::DominatorTree&, llvm::ScalarEvolution&, llvm::RegionInfo&) CodeGeneration.cpp:0:0
#10 0x0000556914ea0505 polly::CodeGenerationPass::run(polly::Scop&, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>&, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&) (/home/marcus/llvm18/bin/clang-18+0xe4a0505)
#11 0x0000556914e9af5d llvm::detail::PassModel<polly::Scop, polly::CodeGenerationPass, llvm::PreservedAnalyses, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&>::run(polly::Scop&, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>&, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&) RegisterPasses.cpp:0:0
#12 0x0000556914ed5dce llvm::PassManager<polly::Scop, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&>::run(polly::Scop&, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>&, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&) (/home/marcus/llvm18/bin/clang-18+0xe4d5dce)
#13 0x0000556914e99475 polly::FunctionToScopPassAdaptor<llvm::PassManager<polly::Scop, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) RegisterPasses.cpp:0:0
#14 0x0000556914e99131 llvm::detail::PassModel<llvm::Function, polly::FunctionToScopPassAdaptor<llvm::PassManager<polly::Scop, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) RegisterPasses.cpp:0:0
#15 0x000055691076962a llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/marcus/llvm18/bin/clang-18+0x9d6962a)
#16 0x0000556910768b0d 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>&) AMDGPUTargetMachine.cpp:0:0
#17 0x0000556910a505fd llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/marcus/llvm18/bin/clang-18+0xa0505fd)
#18 0x0000556910a5030d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) AMDGPUTargetMachine.cpp:0:0
#19 0x0000556910fbd791 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/marcus/llvm18/bin/clang-18+0xa5bd791)
#20 0x00005569111dbc51 (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
#21 0x0000556910f37271 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, 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*) (/home/marcus/llvm18/bin/clang-18+0xa537271)
#22 0x0000556910bb3780 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/marcus/llvm18/bin/clang-18+0xa1b3780)
#23 0x000055691078bf78 clang::ParseAST(clang::Sema&, bool, bool) (/home/marcus/llvm18/bin/clang-18+0x9d8bf78)
#24 0x00005569111fc6b0 clang::FrontendAction::Execute() (/home/marcus/llvm18/bin/clang-18+0xa7fc6b0)
#25 0x000055691120274e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/marcus/llvm18/bin/clang-18+0xa80274e)
#26 0x0000556911202c19 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/marcus/llvm18/bin/clang-18+0xa802c19)
#27 0x0000556911205978 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/marcus/llvm18/bin/clang-18+0xa805978)
#28 0x000055691120409d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#29 0x0000556911203f2b void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#30 0x0000556911203f00 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/marcus/llvm18/bin/clang-18+0xa803f00)
#31 0x0000556911203dd4 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/home/marcus/llvm18/bin/clang-18+0xa803dd4)
#32 0x0000556911203ad1 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/marcus/llvm18/bin/clang-18+0xa803ad1)
#33 0x00005569112035f9 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/marcus/llvm18/bin/clang-18+0xa8035f9)
#34 0x0000556911207a28 clang_main(int, char**, llvm::ToolContext const&) (/home/marcus/llvm18/bin/clang-18+0xa807a28)
#35 0x000055690a8ad01e (/home/marcus/llvm18/bin/clang-18+0x3ead01e)
#36 0x00007f96c3201f47 (/usr/lib/libc.so.6+0x201f47)
#37 0x00007f96c3202004 __libc_start_main (/usr/lib/libc.so.6+0x202004)
#38 0x000055690aba9031 _start (/home/marcus/llvm18/bin/clang-18+0x41a9031)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 18.0.0git (https://github.com/llvm/llvm-project.git cd6e462d012f289cc4ec12927ca8198f9ed1469e)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /home/marcus/llvm18/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/ieee754-a11a66.cpp
clang++: note: diagnostic msg: /tmp/ieee754-a11a66.sh
clang++: note: diagnostic msg: 

********************
make[1]: *** [tools/v8_gypfiles/v8_libbase.target.mk:188: /tmp/makepkg/nodejs/src/node/out/Release/obj.target/v8_libbase/deps/v8/src/base/ieee754.o] Fehler 1

Here are the mentioned files:

ieee754-a11a66.cpp.txt
ieee754-a11a66.sh.txt

I've identified the problematic part of the Cflags to reproduce this is, it comes down to using the Polly parallelizer:

-mllvm -polly-parallel -fopenmp -fopenmp-version=50 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=36 -mllvm -polly-scheduling=dynamic -mllvm -polly-scheduling-chunksize=1

Without these flags, the compile runs fine.

@github-actions github-actions bot added the clang Clang issues not falling into any other category label Dec 19, 2023
@EugeneZelenko EugeneZelenko added polly crash Prefer [crash-on-valid] or [crash-on-invalid] and removed clang Clang issues not falling into any other category labels Dec 19, 2023
@llvmbot
Copy link
Collaborator

llvmbot commented Dec 19, 2023

@llvm/issue-subscribers-polly

Author: None (ms178)

With a recent Clang-18 snapshot (cd6e462), I've seen the following frontend crash:
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++ -o /tmp/makepkg/nodejs/src/node/out/Release/obj.target/v8_libbase/deps/v8/src/base/ieee754.o ../deps/v8/src/base/ieee754.cc -D_GLIBCXX_USE_CXX11_ABI=1 -DNODE_OPENSSL_CONF_NAME=nodejs_conf -DICU_NO_USER_DATA_OVERRIDE -DV8_GYP_BUILD -DV8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64 -D__STDC_FORMAT_MACROS -DV8_TARGET_ARCH_X64 -DV8_HAVE_TARGET_OS -DV8_TARGET_OS_LINUX -DV8_EMBEDDER_STRING=\"-node.17\" -DENABLE_DISASSEMBLER -DV8_PROMISE_INTERNAL_FIELD_COUNT=1 -DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION -DV8_SHORT_BUILTIN_CALLS -DOBJECT_PRINT -DV8_INTL_SUPPORT -DV8_ATOMIC_OBJECT_FIELD_WRITES -DV8_ENABLE_LAZY_SOURCE_POSITIONS -DV8_USE_SIPHASH -DV8_SHARED_RO_HEAP -DV8_WIN64_UNWINDING_INFO -DV8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH -DV8_USE_ZLIB -DV8_ENABLE_TURBOFAN -DV8_ENABLE_WEBASSEMBLY -DV8_ENABLE_JAVASCRIPT_PROMISE_HOOKS -DV8_ALLOCATION_FOLDING -DV8_ALLOCATION_SITE_TRACKING -DV8_ADVANCED_BIGINT_ALGORITHMS -DBUILDING_V8_BASE_SHARED -I../deps/v8 -I../deps/v8/include -pthread -Wno-unused-parameter -fPIC -Wno-return-type -Wno-invalid-offsetof -fno-strict-aliasing -m64 -m64 -O3 -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++17 -MMD -MF /tmp/makepkg/nodejs/src/node/out/Release/.deps//tmp/makepkg/nodejs/src/node/out/Release/obj.target/v8_libbase/deps/v8/src/base/ieee754.o.d.raw -D_FORTIFY_SOURCE=0 -O3 -march=native -mtune=native -maes -mbmi2 -mpclmul -mllvm -inline-threshold=1000 -mllvm -polly -mllvm -polly-position=early -mllvm -polly-dependences-computeout=900000000 -mllvm -polly-detect-profitability-min-per-loop-insts=40 -mllvm -polly-tiling=true -mllvm -polly-prevect-width=256 -mllvm -polly-vectorizer=stripmine -mllvm -polly-invariant-load-hoisting -mllvm -polly-loopfusion-greedy -mllvm -polly-run-inliner -mllvm -polly-run-dce -mllvm -polly-enable-delicm=true -mllvm -polly -fmerge-all-constants -mllvm -polly-parallel -fopenmp -fopenmp-version=50 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=36 -mllvm -polly-scheduling=dynamic -mllvm -polly-scheduling-chunksize=1 -mllvm -extra-vectorizer-passes -mllvm -enable-cond-stores-vec -mllvm -slp-vectorize-hor-store -mllvm -enable-loopinterchange -mllvm -enable-loop-distribute -mllvm -enable-unroll-and-jam -mllvm -enable-loop-flatten -mllvm -interleave-small-loop-scalar-reduction -mllvm -unroll-runtime-multi-exit -mllvm -aggressive-ext-opt -fno-math-errno -fno-trapping-math -falign-functions=32 -funroll-loops -fno-semantic-interposition -fcf-protection=none -mharden-sls=none -fomit-frame-pointer -mprefer-vector-width=256 -flto=thin -fwhole-program-vtables -fsplit-lto-unit -mllvm -adce-remove-loops -mllvm -enable-ext-tsp-block-placement -mllvm -enable-gvn-hoist -mllvm -enable-dfa-jump-thread -Wno-error -fgnuc-version=13.2.1 -ffp-contract=fast -fdata-sections -ffunction-sections -fno-unique-section-names -fsplit-machine-functions -freroll-loops -w -Wp,-U_GLIBCXX_ASSERTIONS -c
1.      &lt;eof&gt; parser at end of file
2.      Optimizer
llvm-ar crsT /tmp/makepkg/nodejs/src/node/out/Release/obj.target/tools/v8_gypfiles/libv8_zlib.a @/tmp/makepkg/nodejs/src/node/out/Release/obj.target/tools/v8_gypfiles/libv8_zlib.a.ar-file-list
 #<!-- -->0 0x0000556913f91579 llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) Signals.cpp:0:0
 #<!-- -->1 0x0000556913f91370 llvm::sys::CleanupOnSignal(unsigned long) (/home/marcus/llvm18/bin/clang-18+0xd591370)
 #<!-- -->2 0x0000556913f4c3f8 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
 #<!-- -->3 0x0000556913f4c578 CrashRecoverySignalHandler(int) (.llvm.12110217104791804295) CrashRecoveryContext.cpp:0:0
 #<!-- -->4 0x00007f96c3223010 (/usr/lib/libc.so.6+0x223010)
 #<!-- -->5 0x000055691386ded1 llvm::po_iterator&lt;llvm::MachineDominatorTree*, llvm::SmallPtrSet&lt;llvm::DomTreeNodeBase&lt;llvm::MachineBasicBlock&gt;*, 8u&gt;, false, llvm::GraphTraits&lt;llvm::MachineDominatorTree*&gt;&gt;::po_iterator(llvm::DomTreeNodeBase&lt;llvm::MachineBasicBlock&gt;*) EarlyIfConversion.cpp:0:0
 #<!-- -->6 0x0000556914f0aaf1 polly::IslNodeBuilder::createForParallel(isl_ast_node*) IslNodeBuilder.cpp:0:0
 #<!-- -->7 0x0000556914f0d3fc polly::IslNodeBuilder::createFor(isl_ast_node*) (/home/marcus/llvm18/bin/clang-18+0xe50d3fc)
 #<!-- -->8 0x0000556914f0e6a5 polly::IslNodeBuilder::createBlock(isl_ast_node*) (/home/marcus/llvm18/bin/clang-18+0xe50e6a5)
 #<!-- -->9 0x0000556914ea0d1d generateCode(polly::Scop&amp;, polly::IslAstInfo&amp;, llvm::LoopInfo&amp;, llvm::DominatorTree&amp;, llvm::ScalarEvolution&amp;, llvm::RegionInfo&amp;) CodeGeneration.cpp:0:0
#<!-- -->10 0x0000556914ea0505 polly::CodeGenerationPass::run(polly::Scop&amp;, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;&amp;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;) (/home/marcus/llvm18/bin/clang-18+0xe4a0505)
#<!-- -->11 0x0000556914e9af5d llvm::detail::PassModel&lt;polly::Scop, polly::CodeGenerationPass, llvm::PreservedAnalyses, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;&gt;::run(polly::Scop&amp;, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;&amp;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;) RegisterPasses.cpp:0:0
#<!-- -->12 0x0000556914ed5dce llvm::PassManager&lt;polly::Scop, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;&gt;::run(polly::Scop&amp;, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;&amp;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;) (/home/marcus/llvm18/bin/clang-18+0xe4d5dce)
#<!-- -->13 0x0000556914e99475 polly::FunctionToScopPassAdaptor&lt;llvm::PassManager&lt;polly::Scop, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;&gt;&gt;::run(llvm::Function&amp;, llvm::AnalysisManager&lt;llvm::Function&gt;&amp;) RegisterPasses.cpp:0:0
#<!-- -->14 0x0000556914e99131 llvm::detail::PassModel&lt;llvm::Function, polly::FunctionToScopPassAdaptor&lt;llvm::PassManager&lt;polly::Scop, llvm::AnalysisManager&lt;polly::Scop, polly::ScopStandardAnalysisResults&amp;&gt;, polly::ScopStandardAnalysisResults&amp;, polly::SPMUpdater&amp;&gt;&gt;, llvm::PreservedAnalyses, llvm::AnalysisManager&lt;llvm::Function&gt;&gt;::run(llvm::Function&amp;, llvm::AnalysisManager&lt;llvm::Function&gt;&amp;) RegisterPasses.cpp:0:0
#<!-- -->15 0x000055691076962a llvm::PassManager&lt;llvm::Function, llvm::AnalysisManager&lt;llvm::Function&gt;&gt;::run(llvm::Function&amp;, llvm::AnalysisManager&lt;llvm::Function&gt;&amp;) (/home/marcus/llvm18/bin/clang-18+0x9d6962a)
#<!-- -->16 0x0000556910768b0d llvm::detail::PassModel&lt;llvm::Function, llvm::PassManager&lt;llvm::Function, llvm::AnalysisManager&lt;llvm::Function&gt;&gt;, llvm::PreservedAnalyses, llvm::AnalysisManager&lt;llvm::Function&gt;&gt;::run(llvm::Function&amp;, llvm::AnalysisManager&lt;llvm::Function&gt;&amp;) AMDGPUTargetMachine.cpp:0:0
#<!-- -->17 0x0000556910a505fd llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&amp;, llvm::AnalysisManager&lt;llvm::Module&gt;&amp;) (/home/marcus/llvm18/bin/clang-18+0xa0505fd)
#<!-- -->18 0x0000556910a5030d llvm::detail::PassModel&lt;llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager&lt;llvm::Module&gt;&gt;::run(llvm::Module&amp;, llvm::AnalysisManager&lt;llvm::Module&gt;&amp;) AMDGPUTargetMachine.cpp:0:0
#<!-- -->19 0x0000556910fbd791 llvm::PassManager&lt;llvm::Module, llvm::AnalysisManager&lt;llvm::Module&gt;&gt;::run(llvm::Module&amp;, llvm::AnalysisManager&lt;llvm::Module&gt;&amp;) (/home/marcus/llvm18/bin/clang-18+0xa5bd791)
#<!-- -->20 0x00005569111dbc51 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr&lt;llvm::raw_pwrite_stream, std::default_delete&lt;llvm::raw_pwrite_stream&gt;&gt;&amp;, std::unique_ptr&lt;llvm::ToolOutputFile, std::default_delete&lt;llvm::ToolOutputFile&gt;&gt;&amp;, clang::BackendConsumer*) BackendUtil.cpp:0:0
#<!-- -->21 0x0000556910f37271 clang::EmitBackendOutput(clang::DiagnosticsEngine&amp;, clang::HeaderSearchOptions const&amp;, clang::CodeGenOptions const&amp;, clang::TargetOptions const&amp;, clang::LangOptions const&amp;, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr&lt;llvm::vfs::FileSystem&gt;, std::unique_ptr&lt;llvm::raw_pwrite_stream, std::default_delete&lt;llvm::raw_pwrite_stream&gt;&gt;, clang::BackendConsumer*) (/home/marcus/llvm18/bin/clang-18+0xa537271)
#<!-- -->22 0x0000556910bb3780 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&amp;) (/home/marcus/llvm18/bin/clang-18+0xa1b3780)
#<!-- -->23 0x000055691078bf78 clang::ParseAST(clang::Sema&amp;, bool, bool) (/home/marcus/llvm18/bin/clang-18+0x9d8bf78)
#<!-- -->24 0x00005569111fc6b0 clang::FrontendAction::Execute() (/home/marcus/llvm18/bin/clang-18+0xa7fc6b0)
#<!-- -->25 0x000055691120274e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&amp;) (/home/marcus/llvm18/bin/clang-18+0xa80274e)
#<!-- -->26 0x0000556911202c19 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/marcus/llvm18/bin/clang-18+0xa802c19)
#<!-- -->27 0x0000556911205978 cc1_main(llvm::ArrayRef&lt;char const*&gt;, char const*, void*) (/home/marcus/llvm18/bin/clang-18+0xa805978)
#<!-- -->28 0x000055691120409d ExecuteCC1Tool(llvm::SmallVectorImpl&lt;char const*&gt;&amp;, llvm::ToolContext const&amp;) driver.cpp:0:0
#<!-- -->29 0x0000556911203f2b void llvm::function_ref&lt;void ()&gt;::callback_fn&lt;clang::driver::CC1Command::Execute(llvm::ArrayRef&lt;std::optional&lt;llvm::StringRef&gt;&gt;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;*, bool*) const::$_0&gt;(long) Job.cpp:0:0
#<!-- -->30 0x0000556911203f00 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref&lt;void ()&gt;) (/home/marcus/llvm18/bin/clang-18+0xa803f00)
#<!-- -->31 0x0000556911203dd4 clang::driver::CC1Command::Execute(llvm::ArrayRef&lt;std::optional&lt;llvm::StringRef&gt;&gt;, std::__cxx11::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;*, bool*) const (/home/marcus/llvm18/bin/clang-18+0xa803dd4)
#<!-- -->32 0x0000556911203ad1 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&amp;, llvm::SmallVectorImpl&lt;std::pair&lt;int, clang::driver::Command const*&gt;&gt;&amp;, bool) const (/home/marcus/llvm18/bin/clang-18+0xa803ad1)
#<!-- -->33 0x00005569112035f9 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&amp;, llvm::SmallVectorImpl&lt;std::pair&lt;int, clang::driver::Command const*&gt;&gt;&amp;) (/home/marcus/llvm18/bin/clang-18+0xa8035f9)
#<!-- -->34 0x0000556911207a28 clang_main(int, char**, llvm::ToolContext const&amp;) (/home/marcus/llvm18/bin/clang-18+0xa807a28)
#<!-- -->35 0x000055690a8ad01e (/home/marcus/llvm18/bin/clang-18+0x3ead01e)
#<!-- -->36 0x00007f96c3201f47 (/usr/lib/libc.so.6+0x201f47)
#<!-- -->37 0x00007f96c3202004 __libc_start_main (/usr/lib/libc.so.6+0x202004)
#<!-- -->38 0x000055690aba9031 _start (/home/marcus/llvm18/bin/clang-18+0x41a9031)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 18.0.0git (https://github.com/llvm/llvm-project.git cd6e462d012f289cc4ec12927ca8198f9ed1469e)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /home/marcus/llvm18/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/ieee754-a11a66.cpp
clang++: note: diagnostic msg: /tmp/ieee754-a11a66.sh
clang++: note: diagnostic msg: 

********************
make[1]: *** [tools/v8_gypfiles/v8_libbase.target.mk:188: /tmp/makepkg/nodejs/src/node/out/Release/obj.target/v8_libbase/deps/v8/src/base/ieee754.o] Fehler 1

Here are the mentioned files:

ieee754-a11a66.cpp.txt
ieee754-a11a66.sh.txt

I've identified the problematic part of the Cflags to reproduce this is, it comes down to using the Polly parallelizer:

-mllvm -polly-parallel -fopenmp -fopenmp-version=50 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=36 -mllvm -polly-scheduling=dynamic -mllvm -polly-scheduling-chunksize=1

Without these flags, the compile runs fine.

@kartcq
Copy link
Contributor

kartcq commented Mar 4, 2024

I have tried to reduce the reproducer to IR to run with opt

@WebRtcIsac_kKltT2Shape = external constant [36 x double]

define void @WebRtcIsac_EncodeLar(i64 %indvars.iv447) {
entry:
  br label %for.inc50

for.inc50:                                        ; preds = %for.inc50, %entry
  br i1 false, label %for.inc50, label %for.end52

for.end52:                                        ; preds = %for.inc50
  %arrayidx76 = getelementptr [36 x double], ptr @WebRtcIsac_kKltT2Shape, i64 0, i64 0
  br label %for.cond200.preheader

for.cond200.preheader:                            ; preds = %for.inc226, %for.end52
  %indvars.iv4471 = phi i64 [ %indvars.iv.next448, %for.inc226 ], [ 0, %for.end52 ]
  br label %for.cond204.preheader

for.cond204.preheader:                            ; preds = %for.cond204.preheader, %for.cond200.preheader
  %indvars.iv457 = phi i64 [ 0, %for.cond200.preheader ], [ %indvars.iv.next458, %for.cond204.preheader ]
  %indvars.iv443 = phi i64 [ 0, %for.cond200.preheader ], [ %indvars.iv.next444, %for.cond204.preheader ]
  %arrayidx211 = getelementptr [36 x double], ptr @WebRtcIsac_kKltT2Shape, i64 0, i64 %indvars.iv447
  %0 = load double, ptr %arrayidx211, align 8
  %arrayidx221 = getelementptr [108 x double], ptr null, i64 0, i64 %indvars.iv457
  store double %0, ptr %arrayidx221, align 8
  %indvars.iv.next458 = add i64 %indvars.iv457, 1
  %indvars.iv.next444 = add i64 %indvars.iv443, 1
  %exitcond462 = icmp ne i64 %indvars.iv443, 1
  br i1 %exitcond462, label %for.cond204.preheader, label %for.inc226

for.inc226:                                       ; preds = %for.cond204.preheader
  %indvars.iv.next448 = add i64 %indvars.iv4471, 1
  %exitcond466 = icmp ne i64 %indvars.iv4471, 1
  br i1 %exitcond466, label %for.cond200.preheader, label %for.body232

for.body232:                                      ; preds = %for.inc226
  ret void
}

Opt command
opt -polly -polly-process-unprofitable -polly-simplify -polly-optree -polly-delicm -polly-simplify -polly-prune-unprofitable -polly-opt-isl -polly-codegen -polly-parallel -polly-run-inliner -polly-loopfusion-greedy comm-reduced.ll

  • On debugging this, the crash is from assert failure in Scalar Evolution Expander() ([ScalarEvolutionExpander.cpp] https://llvm.org/doxygen/ScalarEvolutionExpander_8cpp_source.html)) in function FindValueInExprValueMap .
  • This is due to function difference of ScalarEvolution ExprMap value and the insert point of builder.
  • We are encountering this because Scalar Evolution is expected to be independent for each function, but polly uses the Scalar Evolution of base function to expand the parallel sub functions that are created.

We are trying to address this issue in polly.

dakkshesh07 added a commit to Neutron-Toolchains/llvm-tc-build that referenced this issue Mar 10, 2024
Causes crashes in stage 3 when using polly. By analyzing the core dump,
the issue can be identified to be similar to [1]. Removing the flag fixes the build with polly.

[1]: llvm/llvm-project#75923

Signed-off-by: Dakkshesh <dakkshesh5@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] polly
Projects
None yet
Development

No branches or pull requests

4 participants