<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63790>63790</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[x86_64] Backend Crash due to Scheduling Failure
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
HazyFish
</td>
</tr>
</table>
<pre>
## Description
The following code crashes the `x86_64` backend with scheduling failure.
The problem doesn't exist when targeting `i686`, `aarch64`, or `riscv64`.
## Minimal Reproduction
https://godbolt.org/z/jW31Gc7xh
### Code
```ll
define void @f(ptr %0, i64 %1) {
BB:
%fps = load <2 x ptr>, ptr %0
%fp = extractelement <2 x ptr> %fps, i64 %1
%p = call ptr %fp(i32 42)
store <2 x ptr> %fps, ptr %p
ret void
}
```
### Stack Trace
```console
*** Scheduling failed! ***
SU(3): t18: i64,ch,glue = CopyFromReg t16:1, Register:i64 $rax, t16:2
t13: ch,glue = CopyToReg t11:1, Register:i32 $edi, t9
t15: ch,glue = CALL64m<Mem:(load (s64))> TargetFrameIndex:i64<0>, TargetConstant:i8<8>, t27, TargetConstant:i32<0>, Register:i16 $noreg, Register:i32 $edi, RegisterMask:Untyped, t43, t13:1
t16: i64,ch,glue = ADJCALLSTACKUP64 TargetConstant:i64<0>, TargetConstant:i64<0>, t15, t15:1
has not been scheduled!
SU(3): t18: i64,ch,glue = CopyFromReg t16:1, Register:i64 $rax, t16:2
t13: ch,glue = CopyToReg t11:1, Register:i32 $edi, t9
t15: ch,glue = CALL64m<Mem:(load (s64))> TargetFrameIndex:i64<0>, TargetConstant:i8<8>, t27, TargetConstant:i32<0>, Register:i16 $noreg, Register:i32 $edi, RegisterMask:Untyped, t43, t13:1
t16: i64,ch,glue = ADJCALLSTACKUP64 TargetConstant:i64<0>, TargetConstant:i64<0>, t15, t15:1
has successors left!
SU(4): t9: i32 = MOV32ri TargetConstant:i32<42>
has not been scheduled!
SU(4): t9: i32 = MOV32ri TargetConstant:i32<42>
has successors left!
SU(7): t25: ch = MOVAPSmr<Mem:(store (s128) into %stack.0)> TargetFrameIndex:i64<0>, TargetConstant:i8<1>, Register:i64 $noreg, TargetConstant:i32<0>, Register:i16 $noreg, t7, t0
has not been scheduled!
SU(7): t25: ch = MOVAPSmr<Mem:(store (s128) into %stack.0)> TargetFrameIndex:i64<0>, TargetConstant:i8<1>, Register:i64 $noreg, TargetConstant:i32<0>, Register:i16 $noreg, t7, t0
has successors left!
SU(8): t27: i64 = SUBREG_TO_REG TargetConstant:i64<0>, t48, TargetConstant:i32<6>
has not been scheduled!
SU(8): t27: i64 = SUBREG_TO_REG TargetConstant:i64<0>, t48, TargetConstant:i32<6>
has successors left!
SU(9): t48: i32,i32 = AND32ri t45, TargetConstant:i32<1>
has not been scheduled!
SU(9): t48: i32,i32 = AND32ri t45, TargetConstant:i32<1>
has successors left!
SU(10): t45: i32 = EXTRACT_SUBREG t4, TargetConstant:i32<6>
has not been scheduled!
SU(10): t45: i32 = EXTRACT_SUBREG t4, TargetConstant:i32<6>
has successors left!
SU(11): t4: i64,ch = CopyFromReg t0, Register:i64 %1
has not been scheduled!
SU(11): t4: i64,ch = CopyFromReg t0, Register:i64 %1
has successors left!
SU(12): t7: v2i64,ch = MOVAPSrm<Mem:(load (s128) from %ir.0)> t2, TargetConstant:i8<1>, Register:i64 $noreg, TargetConstant:i32<0>, Register:i16 $noreg, t0
has not been scheduled!
SU(12): t7: v2i64,ch = MOVAPSrm<Mem:(load (s128) from %ir.0)> t2, TargetConstant:i8<1>, Register:i64 $noreg, TargetConstant:i32<0>, Register:i16 $noreg, t0
has successors left!
SU(13): t2: i64,ch = CopyFromReg t0, Register:i64 %0
has not been scheduled!
SU(13): t2: i64,ch = CopyFromReg t0, Register:i64 %0
has successors left!
llc: /root/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.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel -mtriple=x86_64 <source>
1. Running pass 'Function Pass Manager' on module '<source>'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@f'
#0 0x0000557c0dd5113f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x354913f)
#1 0x0000557c0dd4e894 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f5a99fc7420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00007f5a99a9400b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#4 0x00007f5a99a73859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#5 0x00007f5a99a73729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
#6 0x00007f5a99a84fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#7 0x0000557c0d22e88f (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2a2688f)
#8 0x0000557c0da29731 llvm::ScheduleDAGSDNodes::VerifyScheduledSequence(bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3221731)
#9 0x0000557c0da240ba (anonymous namespace)::ScheduleDAGRRList::Schedule() ScheduleDAGRRList.cpp:0:0
#10 0x0000557c0db184e3 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x33104e3)
#11 0x0000557c0db1bac8 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x3313ac8)
#12 0x0000557c0db1d792 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#13 0x0000557c0c4cf8f0 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#14 0x0000557c0cff0fae llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#15 0x0000557c0d58afa1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2d82fa1)
#16 0x0000557c0d58b1e9 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2d831e9)
#17 0x0000557c0d58ba62 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2d83a62)
#18 0x0000557c0b09e624 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#19 0x0000557c0afe6ef6 main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x7deef6)
#20 0x00007f5a99a75083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#21 0x0000557c0b094a0e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x88ca0e)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWt1y2zjSfRr4BmUVCPD3whe0ZHnyffbEZTnZ3LlAsilxQgJcAEzkefotgKQsyooTZzQzVTtbZVsyAJ4-p9FoAC1xrau1ALhAwSUKFme8MxupLn7hvz8tK705y2TxdIEoQ5ThBehcVa2ppEBkgUja_33YAC5lXcuvlVjjXBaAc8X1BjQ2G8AoJNs4fAx9FBKc8fwziAJ_rcwG63wDRVfbp0pe1Z2C2TNiq2RWQ4MLCVogGhkM20ob_HUDAhuu1mDsgygkVRiHKCSIzu1_nKt844zZBqlsm6p0_sW1zfaJD7JuK1E1vMb30CpZdPmhvo0xrUYsRXSJ6HIti0zWZibVGtHl74guf_sX867zaLt5iW3h57KASU9I-p-67hsKKCsB-IusCox8UiIat0ZhRAMnoQp9-95DNMEouuyfuby0hNxbbHvLVmPEFriWvMCIzSne4tYoxK4sxA5u_wE3HrZG8dxADQ0IM31ywJ1weAbon895XY_wZYtoXDGKfYpoMg7VRir4JvDwaDuOVmCcIwZXRYsDnx138crw_DN-UDw_7ulcCi3rsY8OP3g1jT8oEPXwrrsfvfqAaMysHpZi48X2pQp9ROf5BtH5uu7AOWIu26elks09rLHxQsRSz-q7h3WlDSjE0t6HvuJb29GPoft0McbYeMxaeIn9IHtk7xgyoxYZisohJy9BgyOg6c1N6DeIzW-hcdEd98FDY231JU7zFX5wS22peAPvRAHbXgliczIEVz9gLoU2XBjbHSM2j4deQ6Pjgxjdw9gX44VWjJAK1q_qHDtuuf6MWPpBmKfWTuEcG5_1LmbOWS-8EX5rEtPF_1m3rB7S-f9_uAv9I7S_I33Sbf0-vBzw2HCNhTQ4AxBjGnTh99cH3f8i7h8TcbrLc9BaKo1rKM003Pwx3NxfJ5wt8O37j4yq6lve9Kk1_MbAPp2lVwVFoxk6xOJoJr1bNWo_Coctisbao7HdZithpN2WtN1XZuSPxaV3JOL6VbmLuJ-PVeNi3ZC3zsE_2jmvhk2880w0LFrnmtWHy_ur68eH94_3V9ffXYZ-_Arz8CfWzN_D6lVHJSMlPx7WMaLzcTWnvy7cajZ-8IpN7yc88SeZfVWqR3ZGg_2cdfXp4T6dPzz204CNf-JZ_7Psvi7W2xnd37VeHjjI0YUbvPmgc3KDr8ujozW3kr7Qib0-A6rjh5QhAZZKNtZupXbZz9C_K8W9OfP_t-t_ffJ3h2r6U6H2dm-f2uC35NV1bg0gulRSGkSXdf2lOW-V_A3y8V_7UmWILueygGsQiC6HKzAs0utZ3raIpT5zqaYTri5U2O0eu4dZili6N75v-AiqKp_G5sK20ziTsh50p1qDMpUU2FVkvFQ8_SqNG49oNNy7h6rM3c1VurrCusuaymCOs26NFbRSGWwkPijDVGbTZbNcNnvippIrrTvQiC4xF1ZHXncFuJKUK0-5WpRRPB-rTn0VoeiadldbITNEkjsl14o3mKt114AwenC0bK2VXDZtVYM6h21bSwXKttVcrM_5KF2fG9WJz4gus0o4njk-t2eoJW9bC9SZtjMzjc-3cXjOdXOun4ThW8QWlTBQ4_PGqKqtAbFFX0rDiM217FQOu-zuWar3nRCVWOOWa40RjZadcOUsfGcbbrnga0swwlLgRtoZs6MmYDQa3EGPAX6KQ7xIr88Ru1qk1_id0Eb1FTO8ghr62lmPX462rQVX1oqGKxGijGCyJYSQIIhyUhSB57FyL8z0k-7f3KlKGDcxfXWHxs-DFP_6KLVRwBtEQ1emEsZVyWye-kPTg-gl2bLATzxWPteyEGXelLcPceLjVbUWvP6Fi6K2-PFAo2_Ww7oi7ncHRAegqAx4kpR55FOCHx8VuPP2ozKDin7B9rN-Xlei256vRdd3tGajgBczLW0iviRbz_cpmfBlEzM88QnJsOKVhh_Azy1y6JB9Rkg2QfanyBGLgwTzTP4Q8z1kSuMgmSAHh8jRbk5_GDOiU8xwihn7ZRG-DZOxsggnmNEkFiiFOC5PFXuU0zCOp7EXT-xxmkTMO56aV4tfZQH6aIZewb87EG4pDWn6ZOuFUi9i3oRzcsDZJxm39riQ4qmRncaCN6Bbt7aTF0Lu728qbabNqD-FvBj1cp3Z9TpNNJkX-8D2nTYmrUV6_W4Fdd867I-pKK6ayvR72ikdxTziA9s5yvL0DnhmPI-_y7NvTev6kusqv6xl_llPUuQu_-f2bOWy5ClVMJ7HExX0QEURJfS7KlQn3otbnm8qASPhiYoXfaOMWcuVcYdQfAh9PBrYPr_cz8u4JN8Lx09xuEivH-QpOH-KQ4sx4h0n6U9IliUpOeBvItudfY_TUTKveu4I3nFewWRyg5iXfD__LO_so-MZ482MTpI1i5iW3JuEZHjAOvMg-QHWt3LINXuOH5pOzJh5kEwYR4eMebi_iGpY8_xpOB49c3_XtM-x-Zfw5iGd8J7sTxlJIKQ-Hmzs3JlvuBo_Ypvvqbq5-Xg7l8LAdkxTdZ0fj8PJnsJLCKEMccMrcSpxUQFQhvvaKDk4kwQkZvjx0R4RHrXhyjzuEfjRU4pP4skmQL0DD_qcAO7xT6UtjnNOYGd1vNsYUE0luIHxo3l3drUXndW769XV9cd--HwwjBWYTgko7AiPJQeft54VF6xIWMLP4MIL44TYswo721wUwAKfR2XIPcozz4ecBVmZEx6SOAtZdFZdUEIZiTxCaRAwNmM8IwkLwzDLQj_iPvIJNLyqZzZ0ZlKtz9w17yJkUULOap5Brd13GSgV8BW7TkQpChZn6sJdELNurZFP6kob_YxiKlO7L0EM31UIFvhy-K7C3N0Wiw7sLXTvM-Nl_52Fs07VFz9_OXXE_xMAAP__L_LAXQ">