avr-llvm / llvm

[MERGED UPSTREAM] AVR backend for the LLVM compiler library
220 stars 21 forks source link

Assertion triggered in LDDWRdPtrQ psuedo expansion #140

Closed dylanmckay closed 9 years ago

dylanmckay commented 9 years ago

An assertion (located here) is triggered when compiling Print.cpp from the Arduino core.

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.

dylanmckay commented 9 years ago

This error can also be reproduced by compiling WMath.ll from the Arduino core.

I have added a test test/CodeGen/AVR/mul16.ll which isolates the bug.

dylanmckay commented 9 years ago

Fixed in 4353c50e5e2b358c581bbe2ff14b3d32a8f8d5b8.