We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
The following code crashes the x86_64 backend with scheduling failure. The problem doesn't exist when targeting i686, aarch64, or riscv64.
x86_64
i686
aarch64
riscv64
https://godbolt.org/z/jW31Gc7xh
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 }
*** 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
The text was updated successfully, but these errors were encountered:
@DataCorrupted
Sorry, something went wrong.
@llvm/issue-subscribers-backend-x86
Looks like we ended up with a TokenFactor between two nodes that need to be glued together.
No branches or pull requests
Description
The following code crashes the
x86_64
backend with scheduling failure.The problem doesn't exist when targeting
i686
,aarch64
, orriscv64
.Minimal Reproduction
https://godbolt.org/z/jW31Gc7xh
Code
Stack Trace
The text was updated successfully, but these errors were encountered: