EnzymeAD / EnzymeAD/Enzyme

enzyme crash for O1, O2, O3 but fine for O0

Open
#2,506 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
LLVM
Stars
1.7k
Forks
188
Avg merge
1d 22h
Merged PRs (30d)
26

Description

```
cd /home/mixu/dev/vNNN/Cromwell2/Output/3d_release_cpu &&
/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang++ ... -O3 -DNDEBUG -std=gnu++17 -fPIC --target=x86_64-pc-linux-gnu --gcc-toolchain=/home/mixu/dev/vNNN/FBU_Dependencies/thirdparty/compilers/gcc/linx64/bin/.. -std=c++17 -stdlib=libstdc++ -Wno-deprecated-builtins -Wno-unknown-warning-option -w -Wno-missing-template-arg-list-after-template-kw -fplugin="/home/mixu/software/Enzyme/enzyme/build-18/Enzyme/ClangEnzyme-18.so" -mllvm -enzyme-loose-types=1 -mllvm -enzyme-detect-readthrow=0 -MD -MT MaterialIdealGas.cxx.o -MF MaterialIdealGas.cxx.o.d -o MaterialIdealGas.cxx.o -c MaterialIdealGas.cxx -O2

```
It crashes with
```

VT: <2 x float> idxs:{i32 0,} start=4 size=4 storeSize=8 val= %133 = tail call { <2 x float>, float } @_ZN8Cromwell9Materials7Physics16StagStaticWorkerINS1_18CPmethod_piecepolyEE21GetTstaticAndVelocityEfffffjPNS_7Buffers15TypedBufferViewIKfEE(ptr noundef nonnull align 8 dereferenceable(16) %132, float noundef %119, float noundef %131, float noundef %69, float noundef %126, float noundef %73, i32 noundef %8, ptr noundef %81) #47
clang++: /home/mixu/software/Enzyme/enzyme/Enzyme/DiffeGradientUtils.cpp:352: llvm::SmallVector DiffeGradientUtils::addToDiffe(llvm::Value*, llvm::Value*, llvm::IRBuilder<>&, llvm::Type*, unsigned int, unsigned int, llvm::ArrayRef, llvm::Value*, size_t): Assertion `0 && "unhandled accumulate with partial sizes"' 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: /home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_NO_AUTO_PTR -DBOOST_STACKTRACE_ADDR2LINE_LOCATION=\"/usr/bin/addr2line\" -DBOOST_STACKTRACE_USE_ADDR2LINE -DBOOST_STACKTRACE_USE_BACKTRACE -DBOOST_STACKTRACE_USE_NOOP -DCONAN_DVS -DCROMWELL_MULTIPORT_AVAILABLE -DCROMWELL_USE_ADJOINT -DCROMWELL_USE_DVS_WRITER -DCROMWELL_USE_METIS -DCromwell_Materials_EXPORTS -D_MaterialsApi -I/home/mixu/dev/vNNN/Cromwell2/Output/3d_release_cpu/generated -I/home/mixu/dev/vNNN/Cromwell2/Cromwell/CFD/Materials/include -I/home/mixu/dev/vNNN/Cromwell2/Cromwell/CFD/CommonModel/include -I/home/mixu/dev/vNNN/Cromwell2/Cromwell/Core/include -I/home/mixu/dev/vNNN/Cromwell2/Cromwell/GeometryTools/include -I/home/mixu/dev/vNNN/Cromwell2/Cromwell/CFD/Solvers/include -I/home/mixu/dev/vNNN/Cromwell2/Cromwell/CFD/Mesh/include -isystem /home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/boost/1.71.0/_/_/package/cfef62e446e1bb07894de4523f2649afdfa94524/include -isystem /home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/bzip2/1.0.8/_/_/package/b27e2b40bcb70be2e7d6f0e0c6e43e35c530f8d3/include -isystem /home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/zlib/1.3.1/_/_/package/d50a0d523d98c15bb147b18fa7d203887c38be8b/include -isystem /home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/ansys.fluids.mpi_wrapper/25.2.20250425/_/_/package/7dfe1fba3a3f4b148e97ec0d94421bb9c475a27b/mpi_wrapper/include -isystem /home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/ansys.fluids.mpi_wrapper/25.2.20250425/_/_/package/7dfe1fba3a3f4b148e97ec0d94421bb9c475a27b/mpi_wrapper/src -isystem /home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/libbacktrace/cci.20210118/_/_/package/d50a0d523d98c15bb147b18fa7d203887c38be8b/include -O3 -DNDEBUG -std=gnu++17 -fPIC --target=x86_64-pc-linux-gnu --gcc-toolchain=/home/mixu/dev/vNNN/FBU_Dependencies/thirdparty/compilers/gcc/linx64/bin/.. -std=c++17 -stdlib=libstdc++ -Wno-deprecated-builtins -Wno-unknown-warning-option -w -Wno-missing-template-arg-list-after-template-kw -fplugin=/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so -mllvm -enzyme-loose-types=1 -mllvm -enzyme-detect-readthrow=0 -MD -MT CFD/Materials/CMakeFiles/Cromwell.Materials.dir/src/BoundaryConditionUDFLibrary/MaterialIdealGas.cxx.o -MF CFD/Materials/CMakeFiles/Cromwell.Materials.dir/src/BoundaryConditionUDFLibrary/MaterialIdealGas.cxx.o.d -o CFD/Materials/CMakeFiles/Cromwell.Materials.dir/src/BoundaryConditionUDFLibrary/MaterialIdealGas.cxx.o -c /home/mixu/dev/vNNN/Cromwell2/Cromwell/CFD/Materials/src/BoundaryConditionUDFLibrary/MaterialIdealGas.cxx
1. parser at end of file
2. Optimizer
#0 0x000014c68955ee2b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libLLVM.so.18.1+0x802e2b)
#1 0x000014c68955cc54 llvm::sys::CleanupOnSignal(unsigned long) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libLLVM.so.18.1+0x800c54)
#2 0x000014c68945fd78 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x000014c6912a4d20 __restore_rt (/lib64/libpthread.so.0+0x12d20)
#4 0x000014c68843452f raise (/lib64/libc.so.6+0x4e52f)
#5 0x000014c688407e65 abort (/lib64/libc.so.6+0x21e65)
#6 0x000014c688407d39 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d39)
#7 0x000014c68842ce86 (/lib64/libc.so.6+0x46e86)
#8 0x000014c6875a22aa DiffeGradientUtils::addToDiffe(llvm::Value*, llvm::Value*, llvm::IRBuilder&, llvm::Type*, unsigned int, unsigned int, llvm::ArrayRef, llvm::Value*, unsigned long) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x3392aa)
#9 0x000014c68768cbdc AdjointGenerator::visitExtractValueInst(llvm::ExtractValueInst&) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x423bdc)
#10 0x000014c687654943 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x3eb943)
#11 0x000014c6876951d3 AdjointGenerator::recursivelyHandleSubfunction(llvm::CallInst&, llvm::Function*, bool, std::vector> const&, bool, DIFFE_TYPE, bool) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x42c1d3)
#12 0x000014c687699873 AdjointGenerator::visitCallInst(llvm::CallInst&) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x430873)
#13 0x000014c687654943 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x3eb943)
#14 0x000014c6875faec0 (anonymous namespace)::EnzymeBase::HandleAutoDiff(llvm::Instruction*, unsigned int, llvm::Value*, llvm::Type*, llvm::SmallVectorImpl&, std::map, std::allocator>> const&, std::vector> const&, llvm::Function*, DerivativeMode, (anonymous namespace)::EnzymeBase::Options&, bool, llvm::SmallVectorImpl&) Enzyme.cpp:0:0
#15 0x000014c6875fd431 (anonymous namespace)::EnzymeBase::HandleAutoDiffArguments(llvm::CallInst*, DerivativeMode, bool, llvm::SmallVectorImpl&) Enzyme.cpp:0:0
#16 0x000014c687605df1 (anonymous namespace)::EnzymeBase::lowerEnzymeCalls(llvm::Function&, std::set, std::allocator>&) Enzyme.cpp:0:0
#17 0x000014c687609102 (anonymous namespace)::EnzymeBase::run(llvm::Module&) Enzyme.cpp:0:0
#18 0x000014c68761bf50 llvm::detail::PassModel>::run(llvm::Module&, llvm::AnalysisManager&) (/home/mixu/dev/vNNN/Cromwell2/Cromwell/Build/conan/.conan/data/enzyme/0.0.203/thirdparty/stable/package/a759b65ce0766f4b1804109cdb2d40af67ab2867/lib/libClangEnzyme.so+0x3b2f50)
#19 0x000014c68973fea3 llvm::PassManager>::run(llvm::Module&, llvm::AnalysisManager&) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libLLVM.so.18.1+0x9e3ea3)
#20 0x000014c68f021d3c (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr>&, std::unique_ptr>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#21 0x000014c68f025140 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr, std::unique_ptr>, clang::BackendConsumer*) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x1e05140)
#22 0x000014c68f491769 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x2271769)
#23 0x000014c68fe59e48 clang::MultiplexConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x2c39e48)
#24 0x000014c68dd391a9 clang::ParseAST(clang::Sema&, bool, bool) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0xb191a9)
#25 0x000014c68fe1bd61 clang::FrontendAction::Execute() (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x2bfbd61)
#26 0x000014c68fd99dcb clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x2b79dcb)
#27 0x000014c68fea8ab7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x2c88ab7)
#28 0x00000000004139c5 cc1_main(llvm::ArrayRef, char const*, void*) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang+++0x4139c5)
#29 0x000000000040c727 ExecuteCC1Tool(llvm::SmallVectorImpl&, llvm::ToolContext const&) driver.cpp:0:0
#30 0x000014c68f9e82f9 void llvm::function_ref::callback_fn>, std::__cxx11::basic_string, std::allocator>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#31 0x000014c6894601b3 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libLLVM.so.18.1+0x7041b3)
#32 0x000014c68f9e8689 clang::driver::CC1Command::Execute(llvm::ArrayRef>, std::__cxx11::basic_string, std::allocator>*, bool*) const (.part.0) Job.cpp:0:0
#33 0x000014c68f9b1725 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x2791725)
#34 0x000014c68f9b21ad clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl>&, bool) const (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x27921ad)
#35 0x000014c68f9c41fc clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl>&) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/../lib/libclang-cpp.so.18.1+0x27a41fc)
#36 0x000000000041127d clang_main(int, char**, llvm::ToolContext const&) (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang+++0x41127d)
#37 0x000000000040bbd3 main (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang+++0x40bbd3)
#38 0x000014c6884207e5 __libc_start_main (/lib64/libc.so.6+0x3a7e5)
#39 0x000000000040bc1e _start (/home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang+++0x40bc1e)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 18.1.8
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/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/MaterialIdealGas-a072b9.cpp
clang++: note: diagnostic msg: /tmp/MaterialIdealGas-a072b9.sh
clang++: note: diagnostic msg:
********************
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the crash with the provided clang++ command, comparing the O0 and optimized builds of MaterialIdealGas.cxx. Then inspect Enzyme's DiffeGradientUtils.cpp around addToDiffe and the partial-size accumulation assertion; done means the reported optimized compilation no longer aborts while the existing behavior remains intact.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.