Skip to content

const: Assertion `found != origToNewForward.end()' failed. #2270

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

Open
ZuseZ4 opened this issue Mar 25, 2025 · 3 comments
Open

const: Assertion `found != origToNewForward.end()' failed. #2270

ZuseZ4 opened this issue Mar 25, 2025 · 3 comments

Comments

@ZuseZ4
Copy link
Collaborator

ZuseZ4 commented Mar 25, 2025

/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt reduced.ll --load-pass-plugin=/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so -passes='enzyme' -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 void @lstm_predict(ptr %0) personality ptr null {
  br label %2

2:                                                ; preds = %6, %1
  %3 = tail call i8 @llvm.scmp.i8.i32(i32 0, i32 0)
  switch i8 %3, label %4 [
    i8 1, label %5
    i8 0, label %6
  ]

4:                                                ; preds = %2
  unreachable

5:                                                ; preds = %2
  br label %6

6:                                                ; preds = %5, %2
  %7 = phi i32 [ 0, %5 ], [ 0, %2 ]
  %8 = phi i1 [ false, %5 ], [ true, %2 ]
  %9 = call ptr @calloc(i64 0)
  tail call void @free(ptr %9)
  br label %2
}

define fastcc void @_ZN2ad23d_lstm_unsafe_objective17hfdae8b2443372ae4E() {
  tail call void (...) @__enzyme_autodiff_ZN2ad23d_lstm_unsafe_objective17hfdae8b2443372ae4E(ptr @lstm_predict, metadata !"enzyme_const", ptr null)
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.scmp.i8.i32(i32, i32) #0

declare void @free(ptr nocapture)

declare ptr @calloc(i64)

declare void @__enzyme_autodiff_ZN2ad23d_lstm_unsafe_objective17hfdae8b2443372ae4E(...)

; uselistorder directives
uselistorder ptr null, { 0, 2, 3, 1 }

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
opt: /home/manuel/prog/rust-middle/src/tools/enzyme/enzyme/Enzyme/GradientUtils.cpp:3588: auto GradientUtils::prepRematerializedLoopEntry(LoopContext &)::(anonymous class)::operator()(BasicBlock *) const: Assertion `found != origToNewForward.end()' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt reduced.ll --load-pass-plugin=/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so -passes=enzyme -S
1.	Running pass "EnzymeNewPM" on module "reduced.ll"
 #0 0x000071d67824fd08 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.20.1-rust-1.87.0-nightly+0xe4fd08)
 #1 0x000071d67824d8de llvm::sys::RunSignalHandlers() (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.20.1-rust-1.87.0-nightly+0xe4d8de)
 #2 0x000071d6782503b8 SignalHandler(int) Signals.cpp:0:0
 #3 0x000071d676c45320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
 #4 0x000071d676c9eb1c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x000071d676c9eb1c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x000071d676c9eb1c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x000071d676c4526e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x000071d676c288ff abort ./stdlib/abort.c:81:7
 #9 0x000071d676c2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000071d676c3b507 (/lib/x86_64-linux-gnu/libc.so.6+0x3b507)
#11 0x000071d6768e73b1 (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so+0x4e73b1)
#12 0x000071d6768e4d7b GradientUtils::prepRematerializedLoopEntry(LoopContext&) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so+0x4e4d7b)
#13 0x000071d6768e7c63 GradientUtils::getReverseOrLatchMerge(llvm::BasicBlock*, llvm::BasicBlock*) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so+0x4e7c63)
#14 0x000071d67680187a createInvertedTerminator(DiffeGradientUtils*, llvm::ArrayRef<DIFFE_TYPE>, llvm::BasicBlock*, llvm::AllocaInst*, llvm::AllocaInst*, unsigned int, DIFFE_TYPE) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so+0x40187a)
#15 0x000071d67680a3ec EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so+0x40a3ec)
#16 0x000071d6767ceed1 (anonymous namespace)::EnzymeBase::HandleAutoDiff(llvm::Instruction*, unsigned int, llvm::Value*, llvm::Type*, llvm::SmallVectorImpl<llvm::Value*>&, std::map<int, llvm::Type*, std::less<int>, std::allocator<std::pair<int const, llvm::Type*>>> const&, std::vector<DIFFE_TYPE, std::allocator<DIFFE_TYPE>> const&, llvm::Function*, DerivativeMode, (anonymous namespace)::EnzymeBase::Options&, bool, llvm::SmallVectorImpl<llvm::CallInst*>&) Enzyme.cpp:0:0
#17 0x000071d6767c6708 (anonymous namespace)::EnzymeBase::HandleAutoDiffArguments(llvm::CallInst*, DerivativeMode, bool, llvm::SmallVectorImpl<llvm::CallInst*>&) Enzyme.cpp:0:0
#18 0x000071d6767c1b74 (anonymous namespace)::EnzymeBase::lowerEnzymeCalls(llvm::Function&, std::set<llvm::Function*, std::less<llvm::Function*>, std::allocator<llvm::Function*>>&) Enzyme.cpp:0:0
#19 0x000071d6767bcae5 (anonymous namespace)::EnzymeBase::run(llvm::Module&) Enzyme.cpp:0:0
#20 0x000071d6767dfd24 llvm::detail::PassModel<llvm::Module, EnzymeNewPM, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/LLVMEnzyme-20.so+0x3dfd24)
#21 0x000071d67844cb07 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.20.1-rust-1.87.0-nightly+0x104cb07)
#22 0x00005f8fd82a6283 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) (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt+0x26283)
#23 0x00005f8fd8299522 optMain (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt+0x19522)
#24 0x000071d676c2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#25 0x000071d676c2a28b call_init ./csu/../csu/libc-start.c:128:20
#26 0x000071d676c2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#27 0x00005f8fd8293255 _start (/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt+0x13255)
[1]    537340 IOT instruction (core dumped)   reduced.ll  -passes='enzyme' -S
@ZuseZ4
Copy link
Collaborator Author

ZuseZ4 commented Mar 25, 2025

The explorer for llvm-20 seems broken, but 18 runs in an Enzyme error, even though a different one.
https://fwd.gymni.ch/2iMsLw

Rust's llvm fork is at commit acaea3d2bb8f3, but I guess any llvm-20 should do.

@ZuseZ4
Copy link
Collaborator Author

ZuseZ4 commented Apr 16, 2025

Now that deadlines are over, ping @wsmoses

@ZuseZ4
Copy link
Collaborator Author

ZuseZ4 commented Apr 18, 2025

Per your chat question, it fails on LLVM 20 and 19 with the same error shown above.

On LLVM18, 17, and 16 it fails with (but I obviously don't care about old ones, just FYI):

➜  ad git:(main) ~/prog/llvm18/build/bin/opt  --load-pass-plugin=/home/manuel/prog/Enzyme/enzyme/build18/Enzyme/LLVMEnzyme-18.so -passes=enzyme -S foo.ll
 call:   %3 = tail call i8 @llvm.scmp.i8.i32(i32 0, i32 0) #1
 +   %8 = call ptr @calloc(i64 0) #1
 +   tail call void @free(ptr %8) #1
opt: /home/manuel/prog/Enzyme/enzyme/Enzyme/AdjointGenerator.h:5997: void AdjointGenerator::visitCallInst(llvm::CallInst&): Assertion `overwritten_args_map.find(&call) != overwritten_args_map.end() || Mode == DerivativeMode::ForwardMode || Mode == DerivativeMode::ForwardModeError' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.	Program arguments: /home/manuel/prog/llvm18/build/bin/opt --load-pass-plugin=/home/manuel/prog/Enzyme/enzyme/build18/Enzyme/LLVMEnzyme-18.so -passes=enzyme -S foo.ll
 #0 0x0000618a0c244230 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/manuel/prog/llvm18/build/bin/opt+0x1b88230)
 #1 0x0000618a0c24163f llvm::sys::RunSignalHandlers() (/home/manuel/prog/llvm18/build/bin/opt+0x1b8563f)
 #2 0x0000618a0c241795 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007de818c45320 (/lib/x86_64-linux-gnu/libc.so.6+0x45320)
 #4 0x00007de818c9eb1c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007de818c9eb1c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007de818c9eb1c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007de818c4526e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007de818c288ff abort ./stdlib/abort.c:81:7
 #9 0x00007de818c2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007de818c3b507 (/lib/x86_64-linux-gnu/libc.so.6+0x3b507)
#11 0x00007de8184cb712 AdjointGenerator::visitCallInst(llvm::CallInst&) /home/manuel/prog/Enzyme/enzyme/Enzyme/AdjointGenerator.h:6001:10
#12 0x00007de818510eed llvm::InstVisitor<AdjointGenerator, void>::delegateCallInst(llvm::CallInst&) /home/manuel/prog/llvm18/llvm/include/llvm/IR/InstVisitor.h:305:3
#13 0x00007de81850288d llvm::InstVisitor<AdjointGenerator, void>::visitCall(llvm::CallInst&) /home/manuel/prog/llvm18/llvm/include/llvm/IR/Instruction.def:209:1
#14 0x00007de8184f2fd9 llvm::InstVisitor<AdjointGenerator, void>::visit(llvm::Instruction&) /home/manuel/prog/llvm18/llvm/include/llvm/IR/Instruction.def:209:1
#15 0x00007de8184df5c3 llvm::InstVisitor<AdjointGenerator, void>::visit(llvm::Instruction*) /home/manuel/prog/llvm18/llvm/include/llvm/IR/InstVisitor.h:111:49
#16 0x00007de818488bc2 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) /home/manuel/prog/Enzyme/enzyme/Enzyme/EnzymeLogic.cpp:4290:7
#17 0x00007de81841310a (anonymous namespace)::EnzymeBase::HandleAutoDiff(llvm::Instruction*, unsigned int, llvm::Value*, llvm::Type*, llvm::SmallVectorImpl<llvm::Value*>&, std::map<int, llvm::Type*, std::less<int>, std::allocator<std::pair<int const, llvm::Type*>>> const&, std::vector<DIFFE_TYPE, std::allocator<DIFFE_TYPE>> const&, llvm::Function*, DerivativeMode, (anonymous namespace)::EnzymeBase::Options&, bool, llvm::SmallVectorImpl<llvm::CallInst*>&) /home/manuel/prog/Enzyme/enzyme/Enzyme/Enzyme.cpp:1752:46
#18 0x00007de818414edc (anonymous namespace)::EnzymeBase::HandleAutoDiffArguments(llvm::CallInst*, DerivativeMode, bool, llvm::SmallVectorImpl<llvm::CallInst*>&) /home/manuel/prog/Enzyme/enzyme/Enzyme/Enzyme.cpp:2017:26
#19 0x00007de81841a282 (anonymous namespace)::EnzymeBase::lowerEnzymeCalls(llvm::Function&, std::set<llvm::Function*, std::less<llvm::Function*>, std::allocator<llvm::Function*>>&) /home/manuel/prog/Enzyme/enzyme/Enzyme/Enzyme.cpp:2775:48
#20 0x00007de81841ba4b (anonymous namespace)::EnzymeBase::run(llvm::Module&) /home/manuel/prog/Enzyme/enzyme/Enzyme/Enzyme.cpp:3002:15
#21 0x00007de81842455e EnzymeNewPM::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/manuel/prog/Enzyme/enzyme/Enzyme/Enzyme.cpp:3263:56
#22 0x00007de81846000d llvm::detail::PassModel<llvm::Module, EnzymeNewPM, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/manuel/prog/llvm18/llvm/include/llvm/IR/PassManagerInternal.h:90:3
#23 0x0000618a0bccdd11 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/manuel/prog/llvm18/build/bin/opt+0x1611d11)
#24 0x0000618a0ac58135 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/home/manuel/prog/llvm18/build/bin/opt+0x59c135)
#25 0x0000618a0abb6d94 main (/home/manuel/prog/llvm18/build/bin/opt+0x4fad94)
#26 0x00007de818c2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#27 0x00007de818c2a28b call_init ./csu/../csu/libc-start.c:128:20
#28 0x00007de818c2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#29 0x0000618a0ac4bf65 _start (/home/manuel/prog/llvm18/build/bin/opt+0x58ff65)
[1]    105395 IOT instruction (core dumped)  ~/prog/llvm18/build/bin/opt  -passes=enzyme -S foo.ll

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant