Skip to content

Assertion `!isa<PHINode>(this) && "Inserting PHI after debug-records!"' failed. #2481

@ZuseZ4

Description

@ZuseZ4
use std::autodiff::*;

#[no_mangle]
pub extern "C" fn rust_dgmm_objective(
) {
    let mut bmain_term = vec![0.; 10];
    let mut main_term = vec![0.; 10];

    unsafe { dgmm_objective(
        &mut main_term,
        &mut bmain_term,
    )};
}

#[autodiff_reverse(
    dgmm_objective,
    Duplicated
)]
pub fn gmm_objective(
    main_term: &mut [f64],
) {
    let mut slse = 0.;
    for ik in 0..10usize {
        main_term[ik] = main_term[ik] ;
    }
    slse = slse;
}
~/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt safe.ll.txt -load-pass-plugin=/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so -passes="enzyme" -enzyme-strict-aliasing=1 -o rel3.ll -debug-pass-manager -S  
Running pass: EnzymeNewPM on [module]
opt: /home/manuel/prog/rust2/src/llvm-project/llvm/lib/IR/Instruction.cpp:157: void llvm::Instruction::insertBefore(BasicBlock &, InstListType::iterator): Assertion `!isa<PHINode>(this) && "Inserting PHI after debug-records!"' 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/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt safe.ll.txt -load-pass-plugin=/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so -passes=enzyme -enzyme-strict-aliasing=1 -o rel3.ll -debug-pass-manager -S
1.	Running pass "EnzymeNewPM" on module "safe.ll.txt"
 #0 0x000072bf460a3d48 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.21.1-rust-1.92.0-nightly+0x4ea3d48)
 #1 0x000072bf460a1475 llvm::sys::RunSignalHandlers() (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.21.1-rust-1.92.0-nightly+0x4ea1475)
 #2 0x000072bf460a4b01 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x000072bf40a45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x000072bf40a9eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x000072bf40a9eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x000072bf40a9eb2c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x000072bf40a4527e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x000072bf40a288ff abort ./stdlib/abort.c:81:7
 #9 0x000072bf40a2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000072bf40a3b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x000072bf4623809c (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.21.1-rust-1.92.0-nightly+0x503809c)
#12 0x000072bf46237cd5 llvm::Instruction::insertInto(llvm::BasicBlock*, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, false>) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.21.1-rust-1.92.0-nightly+0x5037cd5)
#13 0x000072bf46230cc1 llvm::IRBuilderDefaultInserter::InsertHelper(llvm::Instruction*, llvm::Twine const&, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, false>) const IRBuilder.cpp:0:0
#14 0x000072bf4042d2b1 llvm::IRBuilderBase::CreatePHI(llvm::Type*, unsigned int, llvm::Twine const&) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so+0x22d2b1)
#15 0x000072bf4042f7f6 CacheUtility::getDynamicLoopLimit(llvm::Loop*, bool) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so+0x22f7f6)
#16 0x000072bf40435e33 CacheUtility::getContext(llvm::BasicBlock*, LoopContext&, bool) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so+0x235e33)
#17 0x000072bf408ac555 GradientUtils::forceAugmentedReturns() (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so+0x6ac555)
#18 0x000072bf40796492 EnzymeLogic::CreatePrimalAndGradient(RequestContext, ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so+0x596492)
#19 0x000072bf4075b3a8 (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
#20 0x000072bf407529cb (anonymous namespace)::EnzymeBase::HandleAutoDiffArguments(llvm::CallInst*, DerivativeMode, bool, llvm::SmallVectorImpl<llvm::CallInst*>&) Enzyme.cpp:0:0
#21 0x000072bf4074d1d9 (anonymous namespace)::EnzymeBase::lowerEnzymeCalls(llvm::Function&, std::set<llvm::Function*, std::less<llvm::Function*>, std::allocator<llvm::Function*>>&) Enzyme.cpp:0:0
#22 0x000072bf40747d14 (anonymous namespace)::EnzymeBase::run(llvm::Module&) Enzyme.cpp:0:0
#23 0x000072bf4076dc66 llvm::detail::PassModel<llvm::Module, EnzymeNewPM, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/stage1/lib/libEnzyme-21.so+0x56dc66)
#24 0x000072bf462b9357 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/../lib/libLLVM.so.21.1-rust-1.92.0-nightly+0x50b9357)
#25 0x00005ee261e755a3 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/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt+0x2f5a3)
#26 0x00005ee261e66df8 optMain (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt+0x20df8)
#27 0x000072bf40a2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#28 0x000072bf40a2a28b call_init ./csu/../csu/libc-start.c:128:20
#29 0x000072bf40a2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#30 0x00005ee261e60995 _start (/home/manuel/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt+0x1a995)
[1]    1834650 IOT instruction (core dumped)  ~/prog/rust2/build/x86_64-unknown-linux-gnu/llvm/build/bin/opt safe.ll.txt 

@wsmoses

llvm-extract'ed version
mwe.ll.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions