前情提要:在测试各个指令调度策略的过程中偶然发现了这个问题,一开始降版本不行,一直到 LLVM13 都有问题。后来干脆打算提一个 issue 得了。如果你要提交 issue 的话可以参考 https://llvm.org/docs/HowToSubmitABug.html。

错误复现

软硬件环境
  • AMD Ryzen 9 9950X 16-Core Processor、AMD Ryzen 9 7950X 16-Core Processor(均报错)
  • ubuntu 22.04.4 LTS
    Architecture:            x86_64
      CPU op-mode(s):        32-bit, 64-bit
      Address sizes:         48 bits physical, 48 bits virtual
      Byte Order:            Little Endian
    CPU(s):                  32
      On-line CPU(s) list:   0-31
    Vendor ID:               AuthenticAMD
      Model name:            AMD Ryzen 9 9950X 16-Core Processor
        CPU family:          26
        Model:               68
        Thread(s) per core:  2
        Core(s) per socket:  16
        Socket(s):           1
        Stepping:            0
        CPU max MHz:         8180.0000
        CPU min MHz:         600.0000
        BogoMIPS:            8583.34
    LLVM 信息
    2025 年 3 月 10 日从官网 clone,使用的 commit 记录为:
    564b75621d4a (HEAD -> main, origin/main, origin/HEAD) [ADT/Support] Add includes to fix module build
    clang 工具链信息为:
    clang version 21.0.0git (git@github.com:llvm/llvm-project.git 564b75621d4a2e30a1769cc719a3a2b2029b8656)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: xxxxxxxx/llvm-project/build-debug/bin
    Build config: +unoptimized, +assertions
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
    Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
    Candidate multilib: .;@m64
    Selected multilib: .;@m64
    测试程序
    来自于 SPEC2006 的 400. perlbench 中的pp_hot.c。
    原始命令:`clang -c -o pp_hot.o -DSPEC_CPU -DNDEBUG -DPERL_CORE -O3 -mllvm -pre-RA-sched=fast -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX_X64 -ansi -DSPEC_CPU_NO_HAS_SIGSETJMP -DSPEC_LP64 -Wno-int-conversion pp_hot.c -w
    将会报错:
    *** Scheduling failed! ***
    SU(2): t33: i32,i32 = SBB32ri t9, TargetConstant:i32<0>, t37:1
    
        t37: ch,glue = CopyToReg t0, Register:i32 $eflags, t31
    
    has not been scheduled!
    SU(2): t33: i32,i32 = SBB32ri t9, TargetConstant:i32<0>, t37:1
    
        t37: ch,glue = CopyToReg t0, Register:i32 $eflags, t31
    
    has successors left!
    SU(3): t31: i32 = BT32ri8 t2, TargetConstant:i32<16>
    
    has not been scheduled!
    SU(3): t31: i32 = BT32ri8 t2, TargetConstant:i32<16>
    
    has successors left!
    SU(4): t2: i32,ch = CopyFromReg t0, Register:i32 %73
    
    has not been scheduled!
    SU(4): t2: i32,ch = CopyFromReg t0, Register:i32 %73
    
    has successors left!
    SU(5): t9: i32,ch = CopyFromReg t0, Register:i32 %75
    
    has not been scheduled!
    SU(5): t9: i32,ch = CopyFromReg t0, Register:i32 %75
    
    has successors left!
    SU(6): PHYS REG COPY
    has not been scheduled!
    SU(6): PHYS REG COPY
    has successors left!
    clang: llvm-project/llvm/lib/CodeGen/ScheduleDAG.cpp:435: unsigned int llvm::ScheduleDAG::VerifyScheduledDAG(bool): Assertion `!AnyNotSched' 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: llvm-project/build-debug/bin/clang -c -o pp_hot.o -DSPEC_CPU -DNDEBUG -DPERL_CORE -O3 -mllvm -pre-RA-sched=fast -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX_X64 -ansi -DSPEC_CPU_NO_HAS_SIGSETJMP -DSPEC_LP64 -Wno-int-conversion pp_hot.c -w
    1.      <eof> parser at end of file
    2.      Code generation
    3.      Running pass 'Function Pass Manager' on module 'pp_hot.c'.
    4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@Perl_pp_match'
     #0 0x000055b22834be56 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:804:22
     #1 0x000055b22834c277 PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:880:1
     #2 0x000055b2283496a5 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:105:20
     #3 0x000055b22834b57f llvm::sys::CleanupOnSignal(unsigned long) llvm-project/llvm/lib/Support/Unix/Signals.inc:369:31
     #4 0x000055b22826edc2 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
     #5 0x000055b22826f2ee CrashRecoverySignalHandler(int) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
     #6 0x00007f2113242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
     #7 0x00007f21132969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
     #8 0x00007f21132969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
     #9 0x00007f21132969fc pthread_kill ./nptl/pthread_kill.c:89:10
    #10 0x00007f2113242476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
    #11 0x00007f21132287f3 abort ./stdlib/abort.c:81:7
    #12 0x00007f211322871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
    #13 0x00007f2113239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
    #14 0x000055b227419aa1 llvm::ScheduleDAG::VerifyScheduledDAG(bool) llvm-project/llvm/lib/CodeGen/ScheduleDAG.cpp:436:21
    #15 0x000055b22a1b5bb4 llvm::ScheduleDAGSDNodes::VerifyScheduledSequence(bool) llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:728:60
    #16 0x000055b22a19986a (anonymous namespace)::ScheduleDAGFast::ListScheduleBottomUp() llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp:644:1
    #17 0x000055b22a1969f8 (anonymous namespace)::ScheduleDAGFast::Schedule() llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp:127:1
    #18 0x000055b22a1b2729 llvm::ScheduleDAGSDNodes::Run(llvm::SelectionDAG*, llvm::MachineBasicBlock*) llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:65:1
    #19 0x000055b22a08b67c llvm::SelectionDAGISel::CodeGenAndEmitDAG() llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1138:3
    #20 0x000055b22a0898e5 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:877:1
    #21 0x000055b22a08f79b llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1903:33
    #22 0x000055b22a087fcd llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:615:7
    #23 0x000055b2265d0899 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) llvm-project/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:190:0
    #24 0x000055b22a086d24 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:374:40
    #25 0x000055b227174160 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:30
    #26 0x000055b227b206c0 llvm::FPPassManager::runOnFunction(llvm::Function&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1406:20
    #27 0x000055b227b20996 llvm::FPPassManager::runOnModule(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1452:13
    #28 0x000055b227b20df7 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1521:20
    #29 0x000055b227b1bde3 llvm::legacy::PassManagerImpl::run(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:539:13
    #30 0x000055b227b216ed llvm::legacy::PassManager::run(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1649:1
    #31 0x000055b22877f5c4 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(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>>&) llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1245:9
    #32 0x000055b22877f7f1 (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1270:17
    #33 0x000055b22878099b 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*) llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1433:25
    #34 0x000055b2293693d9 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:315:20
    #35 0x000055b22b94c745 clang::ParseAST(clang::Sema&, bool, bool) llvm-project/clang/lib/Parse/ParseAST.cpp:191:14
    #36 0x000055b2296a3592 clang::ASTFrontendAction::ExecuteAction() llvm-project/clang/lib/Frontend/FrontendAction.cpp:1186:11
    #37 0x000055b22936d820 clang::CodeGenAction::ExecuteAction() llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1102:5
    #38 0x000055b2296a2e3b clang::FrontendAction::Execute() llvm-project/clang/lib/Frontend/FrontendAction.cpp:1076:38
    #39 0x000055b2295b0d05 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1056:42
    #40 0x000055b229874a20 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:38
    #41 0x000055b2263cba6a cc1_main(llvm::ArrayRef<char const*>, char const*, void*) llvm-project/clang/tools/driver/cc1_main.cpp:290:40
    #42 0x000055b2263bc37f ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) llvm-project/clang/tools/driver/driver.cpp:218:20
    #43 0x000055b2263bc5a0 clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)::operator()(llvm::SmallVectorImpl<char const*>&) const llvm-project/clang/tools/driver/driver.cpp:365:7
    #44 0x000055b2263bdc95 int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)>(long, llvm::SmallVectorImpl<char const*>&) llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:48:3
    #45 0x000055b2293f7263 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:70:3
    #46 0x000055b2293f5ee0 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()::operator()() const llvm-project/clang/lib/Driver/Job.cpp:437:32
    #47 0x000055b2293f639f 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::'lambda'()>(long) llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:47:40
    #48 0x000055b226de6146 llvm::function_ref<void ()>::operator()() const llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:62
    #49 0x000055b22826f50b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:10
    #50 0x000055b2293f60fd clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const llvm-project/clang/lib/Driver/Job.cpp:437:7
    #51 0x000055b229388f01 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const llvm-project/clang/lib/Driver/Compilation.cpp:196:22
    #52 0x000055b2293892a2 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const llvm-project/clang/lib/Driver/Compilation.cpp:251:62
    #53 0x000055b22939edda clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) llvm-project/clang/lib/Driver/Driver.cpp:2235:28
    #54 0x000055b2263bd7dd clang_main(int, char**, llvm::ToolContext const&) llvm-project/clang/tools/driver/driver.cpp:402:39
    #55 0x000055b2263f2e94 main llvm-project/build-debug/tools/clang/tools/driver/clang-driver.cpp:17:20
    #56 0x00007f2113229d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #57 0x00007f2113229e40 call_init ./csu/../csu/libc-start.c:128:20
    #58 0x00007f2113229e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
    #59 0x000055b2263bb6a5 _start (llvm-project/build-debug/bin/clang+0x111b6a5)
    clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
    clang version 21.0.0git (git@github.com:llvm/llvm-project.git 564b75621d4a2e30a1769cc719a3a2b2029b8656)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: llvm-project/build-debug/bin
    Build config: +unoptimized, +assertions
    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/pp_hot-e5ebc1.c
    clang: note: diagnostic msg: /tmp/pp_hot-e5ebc1.sh
    clang: note: diagnostic msg: 
    
    ********************

    issue 步骤

    第一步,按照要求收集必要文件:
    按照要求我必须收集 bc 文件,所以
    clang -c -emit-llvm -o pp_hot.bc -DSPEC_CPU -DNDEBUG -DPERL_CORE -O3 -mllvm -pre-RA-sched=fast -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX_X64 -ansi -DSPEC_CPU_NO_HAS_SIGSETJMP -DSPEC_LP64 -Wno-int-conversion pp_hot.c -w
    下一步,使用 llc 检测 bug 位置:
    llc pp_hot.bc # 没有报错
    llc -pre-RA-sched=fast # 报错
    然后我又测了其他的调度策略(其实一个 bug 就够了,这里可以忽略):
    llc -pre-RA-sched=linearize pp_hot.bc # 没错
    llc -pre-RA-sched=list-burr pp_hot.bc # 没错
    llc -pre-RA-sched=list-ilp pp_hot.bc # 没错
    llc -pre-RA-sched=list-hybrid pp_hot.bc # 没错
    此外也可以使用 bugpoint 工具链进一步获取更小的可复现 bug 的. bc 文件:bugpoint -run-llc pp_hot.bc --tool-args -pre-RA-sched=fast

    使用这个工具需要一会时间,耐心等待。

日志如下:

最后我提交在 https://github.com/llvm/llvm-project/issues/130730

附录 A

文件:
pp_hot-e5ebc1 1.webp ①编译器/LLVM/模块实践——向LLVM提交issue/pp_hot-e5ebc1.webp ①编译器/LLVM/模块实践——向LLVM提交issue/pp_hot.webp

附录 B

Problem

LLVM crashes with an assertion failure in llvm::ScheduleDAG::VerifyScheduledDAG when compiling pp_hot.c (from SPEC2006 400.perlbench) using -pre-RA-sched=fast.

  • The crash only happens with the fast pre-RA scheduler.
  • Other scheduling strategies (linearize, list-burr, list-ilp, list-hybrid) work fine.
  • This issue also affects multiple SPEC2006 benchmarks (see below).

Crash Output

*** Scheduling failed! ***
SU(2): t33: i32,i32 = SBB32ri t9, TargetConstant:i32<0>, t37:1

    t37: ch,glue = CopyToReg t0, Register:i32 $eflags, t31

has not been scheduled!
SU(2): t33: i32,i32 = SBB32ri t9, TargetConstant:i32<0>, t37:1

    t37: ch,glue = CopyToReg t0, Register:i32 $eflags, t31

has successors left!
SU(3): t31: i32 = BT32ri8 t2, TargetConstant:i32<16>

has not been scheduled!
SU(3): t31: i32 = BT32ri8 t2, TargetConstant:i32<16>

has successors left!
SU(4): t2: i32,ch = CopyFromReg t0, Register:i32 %73

has not been scheduled!
SU(4): t2: i32,ch = CopyFromReg t0, Register:i32 %73

has successors left!
SU(5): t9: i32,ch = CopyFromReg t0, Register:i32 %75

has not been scheduled!
SU(5): t9: i32,ch = CopyFromReg t0, Register:i32 %75

has successors left!
SU(6): PHYS REG COPY
has not been scheduled!
SU(6): PHYS REG COPY
has successors left!
clang: llvm-project/llvm/lib/CodeGen/ScheduleDAG.cpp:435: unsigned int llvm::ScheduleDAG::VerifyScheduledDAG(bool): Assertion `!AnyNotSched' 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: llvm-project/build-debug/bin/clang -c -o pp_hot.o -DSPEC_CPU -DNDEBUG -DPERL_CORE -O3 -mllvm -pre-RA-sched=fast -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX_X64 -ansi -DSPEC_CPU_NO_HAS_SIGSETJMP -DSPEC_LP64 -Wno-int-conversion pp_hot.c -w
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'pp_hot.c'.
4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@Perl_pp_match'
 #0 0x000055b22834be56 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project/llvm/lib/Support/Unix/Signals.inc:804:22
 #1 0x000055b22834c277 PrintStackTraceSignalHandler(void*) llvm-project/llvm/lib/Support/Unix/Signals.inc:880:1
 #2 0x000055b2283496a5 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #3 0x000055b22834b57f llvm::sys::CleanupOnSignal(unsigned long) llvm-project/llvm/lib/Support/Unix/Signals.inc:369:31
 #4 0x000055b22826edc2 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
 #5 0x000055b22826f2ee CrashRecoverySignalHandler(int) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
 #6 0x00007f2113242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #7 0x00007f21132969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #8 0x00007f21132969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #9 0x00007f21132969fc pthread_kill ./nptl/pthread_kill.c:89:10
#10 0x00007f2113242476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#11 0x00007f21132287f3 abort ./stdlib/abort.c:81:7
#12 0x00007f211322871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#13 0x00007f2113239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#14 0x000055b227419aa1 llvm::ScheduleDAG::VerifyScheduledDAG(bool) llvm-project/llvm/lib/CodeGen/ScheduleDAG.cpp:436:21
#15 0x000055b22a1b5bb4 llvm::ScheduleDAGSDNodes::VerifyScheduledSequence(bool) llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:728:60
#16 0x000055b22a19986a (anonymous namespace)::ScheduleDAGFast::ListScheduleBottomUp() llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp:644:1
#17 0x000055b22a1969f8 (anonymous namespace)::ScheduleDAGFast::Schedule() llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp:127:1
#18 0x000055b22a1b2729 llvm::ScheduleDAGSDNodes::Run(llvm::SelectionDAG*, llvm::MachineBasicBlock*) llvm-project/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:65:1
#19 0x000055b22a08b67c llvm::SelectionDAGISel::CodeGenAndEmitDAG() llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1138:3
#20 0x000055b22a0898e5 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:877:1
#21 0x000055b22a08f79b llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1903:33
#22 0x000055b22a087fcd llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:615:7
#23 0x000055b2265d0899 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) llvm-project/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:190:0
#24 0x000055b22a086d24 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:374:40
#25 0x000055b227174160 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:30
#26 0x000055b227b206c0 llvm::FPPassManager::runOnFunction(llvm::Function&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1406:20
#27 0x000055b227b20996 llvm::FPPassManager::runOnModule(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1452:13
#28 0x000055b227b20df7 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1521:20
#29 0x000055b227b1bde3 llvm::legacy::PassManagerImpl::run(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:539:13
#30 0x000055b227b216ed llvm::legacy::PassManager::run(llvm::Module&) llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1649:1
#31 0x000055b22877f5c4 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(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>>&) llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1245:9
#32 0x000055b22877f7f1 (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1270:17
#33 0x000055b22878099b 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*) llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1433:25
#34 0x000055b2293693d9 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:315:20
#35 0x000055b22b94c745 clang::ParseAST(clang::Sema&, bool, bool) llvm-project/clang/lib/Parse/ParseAST.cpp:191:14
#36 0x000055b2296a3592 clang::ASTFrontendAction::ExecuteAction() llvm-project/clang/lib/Frontend/FrontendAction.cpp:1186:11
#37 0x000055b22936d820 clang::CodeGenAction::ExecuteAction() llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1102:5
#38 0x000055b2296a2e3b clang::FrontendAction::Execute() llvm-project/clang/lib/Frontend/FrontendAction.cpp:1076:38
#39 0x000055b2295b0d05 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1056:42
#40 0x000055b229874a20 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:38
#41 0x000055b2263cba6a cc1_main(llvm::ArrayRef<char const*>, char const*, void*) llvm-project/clang/tools/driver/cc1_main.cpp:290:40
#42 0x000055b2263bc37f ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) llvm-project/clang/tools/driver/driver.cpp:218:20
#43 0x000055b2263bc5a0 clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)::operator()(llvm::SmallVectorImpl<char const*>&) const llvm-project/clang/tools/driver/driver.cpp:365:7
#44 0x000055b2263bdc95 int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)>(long, llvm::SmallVectorImpl<char const*>&) llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:48:3
#45 0x000055b2293f7263 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:70:3
#46 0x000055b2293f5ee0 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()::operator()() const llvm-project/clang/lib/Driver/Job.cpp:437:32
#47 0x000055b2293f639f 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::'lambda'()>(long) llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:47:40
#48 0x000055b226de6146 llvm::function_ref<void ()>::operator()() const llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:62
#49 0x000055b22826f50b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:10
#50 0x000055b2293f60fd clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const llvm-project/clang/lib/Driver/Job.cpp:437:7
#51 0x000055b229388f01 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const llvm-project/clang/lib/Driver/Compilation.cpp:196:22
#52 0x000055b2293892a2 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const llvm-project/clang/lib/Driver/Compilation.cpp:251:62
#53 0x000055b22939edda clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) llvm-project/clang/lib/Driver/Driver.cpp:2235:28
#54 0x000055b2263bd7dd clang_main(int, char**, llvm::ToolContext const&) llvm-project/clang/tools/driver/driver.cpp:402:39
#55 0x000055b2263f2e94 main llvm-project/build-debug/tools/clang/tools/driver/clang-driver.cpp:17:20
#56 0x00007f2113229d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#57 0x00007f2113229e40 call_init ./csu/../csu/libc-start.c:128:20
#58 0x00007f2113229e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#59 0x000055b2263bb6a5 _start (llvm-project/build-debug/bin/clang+0x111b6a5)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 21.0.0git (git@github.com:llvm/llvm-project.git 564b75621d4a2e30a1769cc719a3a2b2029b8656)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: llvm-project/build-debug/bin
Build config: +unoptimized, +assertions
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/pp_hot-e5ebc1.c
clang: note: diagnostic msg: /tmp/pp_hot-e5ebc1.sh
clang: note: diagnostic msg: 

********************

Steps to reproduce

  1. Compile the file to LLVM bitcode:
  2.  clang -c -emit-llvm -o pp_hot.bc  -DSPEC_CPU -DNDEBUG -DPERL_CORE -O3 \
       -mllvm -pre-RA-sched=fast -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX_X64 -ansi \
       -DSPEC_CPU_NO_HAS_SIGSETJMP -DSPEC_LP64 -Wno-int-conversion pp_hot.c -w
    

    ```

  3. Run llc with different scheduling strategies:

  • llc pp_hot.bc # ✅ No error
  • llc -pre-RA-sched=fast pp_hot.bc # ❌ Crashes
  • llc -pre-RA-sched=linearize pp_hot.bc # ✅ No error
  • llc -pre-RA-sched=list-burr pp_hot.bc # ✅ No error
  • llc -pre-RA-sched=list-ilp pp_hot.bc # ✅ No error
  • llc -pre-RA-sched=list-hybrid pp_hot.bc # ✅ No error

Additional Affected Tests

This issue also occurs in other SPEC2006 benchmarks:

BenchmarkFile
400.perlbenchpp_hot.c
403.gccalias.c
447.dealIIdof_tools.cc
453.povraypolygon.cpp
483.xalancbmkStylesheetHandler.cpp

System Information

ComponentDetails
CPUAMD Ryzen 9 9950X / 7950X
OSUbuntu 22.04.4 LTS
LLVM Commit564b756 (HEAD -> main, origin/main, origin/HEAD)
Clang Versionclang version 21.0.0git (git@github.com:llvm/llvm-project.git 564b756)\n Target: x86_64-unknown-linux-gnu\nThread model: posix

pp_hot-bug.zip