Issue 130730
Summary [X86][Codegen] Scheduling DAG assertion failure with -pre-RA-sched=fast
Labels new issue
Assignees
Reporter yilingqinghan
    ## 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 (g...@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. ```shell
   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```
2. 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:

Benchmark | File
-- | --
400.perlbench | pp_hot.c
403.gcc | alias.c
447.dealII | dof_tools.cc
453.povray | polygon.cpp
483.xalancbmk | StylesheetHandler.cpp

## System Information

Component | Details
-- | --
CPU | AMD Ryzen 9 9950X / 7950X
OS | Ubuntu 22.04.4 LTS
LLVM Commit | 564b75621d4a (HEAD -> main, origin/main, origin/HEAD)
Clang Version |  clang version 21.0.0git (g...@github.com:llvm/llvm-project.git 564b75621d4a2e30a1769cc719a3a2b2029b8656)\n Target: x86_64-unknown-linux-gnu\nThread model: posix

[pp_hot-bug.zip](https://github.com/user-attachments/files/19178025/pp_hot-bug.zip)

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to