Closed dylanmckay closed 9 years ago
An assertion (located here) is triggered when compiling Print.cpp from the Arduino core.
Print.cpp
Print.ll.
Print.ll
Program output:
llc: /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp:788: bool llvm::AVRExpandPseudo::expand(llvm::AVRExpandPseudo::Block&, llvm::AVRExpandPseudo::BlockIt) [with unsigned int OP = 87u; llvm::AVRExpandPseudo::Block = llvm::MachineBasicBlock; llvm::AVRExpandPseudo::BlockIt = llvm::MachineBasicBlock::bundle_iterator<llvm::MachineInstr, llvm::ilist_iterator<llvm::MachineInstr> >]: Assertion `DstReg != SrcReg && "SrcReg and DstReg cannot be the same"' failed. #0 0x132b14b llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/dylan/projects/avr-llvm/llvm/lib/Support/Unix/Signals.inc:437:0 #1 0x132b4c8 PrintStackTraceSignalHandler(void*) /home/dylan/projects/avr-llvm/llvm/lib/Support/Unix/Signals.inc:495:0 #2 0x132a09f SignalHandler(int) /home/dylan/projects/avr-llvm/llvm/lib/Support/Unix/Signals.inc:210:0 #3 0x7fba1495e660 __restore_rt (/usr/lib/libpthread.so.0+0x10660) #4 0x7fba13b2d528 __GI_raise (/usr/lib/libc.so.6+0x33528) #5 0x7fba13b2e93a __GI_abort (/usr/lib/libc.so.6+0x3493a) #6 0x7fba13b263a7 __assert_fail_base (/usr/lib/libc.so.6+0x2c3a7) #7 0x7fba13b26452 (/usr/lib/libc.so.6+0x2c452) #8 0x9ecf1d bool llvm::AVRExpandPseudo::expand<87u>(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::bundle_iterator<llvm::MachineInstr, llvm::ilist_iterator<llvm::MachineInstr> >) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp:793:0 #9 0x9efea5 llvm::AVRExpandPseudo::expandMI(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::bundle_iterator<llvm::MachineInstr, llvm::ilist_iterator<llvm::MachineInstr> >) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp:1385:0 #10 0x9e92e7 llvm::AVRExpandPseudo::expandMBB(llvm::MachineBasicBlock&) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp:75:0 #11 0x9e93c7 llvm::AVRExpandPseudo::runOnMachineFunction(llvm::MachineFunction&) /home/dylan/projects/avr-llvm/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp:91:0 #12 0xbd3f11 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/dylan/projects/avr-llvm/llvm/lib/CodeGen/MachineFunctionPass.cpp:41:0 #13 0xf89aa3 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1520:0 #14 0xf89c02 llvm::FPPassManager::runOnModule(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1540:0 #15 0xf89f31 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1596:0 #16 0xf8a592 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1698:0 #17 0xf8a797 llvm::legacy::PassManager::run(llvm::Module&) /home/dylan/projects/avr-llvm/llvm/lib/IR/LegacyPassManager.cpp:1730:0 #18 0x9c9b65 compileModule(char**, llvm::LLVMContext&) /home/dylan/projects/avr-llvm/llvm/tools/llc/llc.cpp:367:0 #19 0x9c8cdd main /home/dylan/projects/avr-llvm/llvm/tools/llc/llc.cpp:204:0 #20 0x7fba13b1a790 __libc_start_main (/usr/lib/libc.so.6+0x20790) #21 0x9c7ae9 _start (/home/dylan/projects/builds/avr-llvm/llvm/bin/llc+0x9c7ae9) Stack dump: 0. Program arguments: ./llc -march=avr -mcpu=atmega328p -filetype=obj -O0 /home/dylan/arduino-core/Print.ll -o tmp_arduino/Print.o 1. Running pass 'Function Pass Manager' on module '/home/dylan/arduino-core/Print.ll'. 2. Running pass 'AVR pseudo instruction expansion pass' on function '@_ZN5Print5writeEPKhj' [1] 12146 abort (core dumped) ./llc -march=avr -mcpu=atmega328p -filetype=obj -O0 ~/arduino-core/Print.ll -
Tested on aaab572fc38b4438e769e2fd6b91963be11db7b2.
This error can also be reproduced by compiling WMath.ll from the Arduino core.
WMath.ll
I have added a test test/CodeGen/AVR/mul16.ll which isolates the bug.
test/CodeGen/AVR/mul16.ll
Fixed in 4353c50e5e2b358c581bbe2ff14b3d32a8f8d5b8.
An assertion (located here) is triggered when compiling
Print.cpp
from the Arduino core.Print.ll
.Program output:
Tested on aaab572fc38b4438e769e2fd6b91963be11db7b2.