llvm-project/llvm/test/CodeGen/AVR
Dylan McKay 5c23410fdf [AVR] Insert unconditional branch when inserting MBBs between blocks with fallthrough
This updates the AVR Select8/Select16 expansion code so that, when
inserting the two basic blocks for true and false conditions, any
existing fallthrough on the previous block is preserved.

Prior to this patch, if the block before the Select pseudo fell through
to the subsequent block, two new basic blocks would be inserted at the
prior fallthrough point, changing the fallthrough destination.

The predecessor or successor lists were not updated, causing the
BranchFolding pass at -O1 and above the rearrange basic blocks, causing
an infinite loop. Not to mention the unconditional fallthrough to the
true block is incorrect in of itself.

This patch modifies the Select8/16 expansion so that, if inserting true
and false basic blocks at a fallthrough point, the implicit branch is
preserved by means of an explicit, unconditional branch to the previous
fallthrough destination.

Thanks to Carl Peto for reporting this bug.

This fixes avr-rust bug https://github.com/avr-rust/rust/issues/123.

llvm-svn: 351721
2019-01-21 04:32:02 +00:00
..
atomics [AVR] Fix codegen bug in 16-bit loads 2019-01-20 03:41:08 +00:00
calling-conv/c
features
inline-asm
integration [AVR] Update integration/blink.ll as we now generate sbi/cbi instructions. 2019-01-03 21:25:39 +00:00
intrinsics
pseudo [AVR] Fix codegen bug in 16-bit loads 2019-01-20 03:41:08 +00:00
relax-mem [AVR] Fix the testsuite after '%' changed to '$' in MIR 2018-02-08 09:17:11 +00:00
PR31344.ll
PR31345.ll
PR37143.ll [AVR] Fix codegen bug in 16-bit loads 2019-01-20 03:41:08 +00:00
add.ll
alloca.ll
and.ll
avr-rust-issue-123.ll [AVR] Insert unconditional branch when inserting MBBs between blocks with fallthrough 2019-01-21 04:32:02 +00:00
branch-relaxation-long.ll [AVR] Insert JMP for long branches 2017-10-04 09:51:28 +00:00
branch-relaxation.ll
brind.ll
call.ll [AVR] Fix the 'call.ll' CodeGen test 2018-10-10 03:21:42 +00:00
clear-bss.ll
cmp.ll
com.ll
copy-data-to-ram.ll
ctlz.ll
ctpop.ll
cttz.ll
directmem.ll [AVR] Reorder the CHECK lines in directmem.ll to match current trunk 2018-11-09 23:17:59 +00:00
div.ll [AVR] Lower i128 divisions to runtime library calls 2018-03-19 00:55:50 +00:00
dynalloca.ll
eor.ll
expand-integer-failure.ll
frame.ll
frmidx-iterator-bug.ll
hardware-mul.ll [AVR] Expand 8/16-bit multiplication to libcalls on MCUs that don't have hardware MUL 2019-01-18 06:10:41 +00:00
high-pressure-on-ptrregs.ll
icall-func-pointer-correct-addr-space.ll
impossible-reg-to-reg-copy.ll
interrupts.ll [AVR] Use the short form of 'clr <reg>' 2017-11-24 15:36:43 +00:00
io.ll
issue-cannot-select-bswap.ll
issue-regalloc-stackframe-folding-earlyclobber.ll [AVR] Remove the earlyclobber flag from LDDWRdYQ 2018-03-06 11:20:25 +00:00
large-return-size.ll
lit.local.cfg
load.ll [AVR] Fix codegen bug in 16-bit loads 2019-01-20 03:41:08 +00:00
lower-formal-args-struct-return.ll [AVR] Add a regression test for struct return lowering 2018-03-20 11:23:03 +00:00
lower-formal-arguments-assertion.ll
neg.ll
no-print-operand-twice.ll
or.ll
pre-schedule.ll [ScheduleDAGRRList] Do not preschedule the node has ADJCALLSTACKDOWN parent 2019-01-18 08:36:06 +00:00
progmem-extended.ll
progmem.ll
rem.ll
return.ll [AVR] Fix two CodeGen tests 2017-12-09 07:51:43 +00:00
rot.ll
runtime-trig.ll
rust-avr-bug-37.ll [AVR] Disallow the LDDWRdPtrQ instruction with Z as the destination 2018-11-05 05:00:44 +00:00
rust-avr-bug-95.ll [AVR] Disallow the LDDWRdPtrQ instruction with Z as the destination 2018-11-05 05:00:44 +00:00
rust-avr-bug-99.ll [AVR] Set trackLivenessAfterRegAlloc 2018-06-11 14:46:48 +00:00
rust-avr-bug-112.ll [AVR] Fix a backend bug that left extraneous operands after expansion 2018-11-05 05:49:04 +00:00
select-must-add-unconditional-jump.ll [CodeGen] Unify the syntax of MBB successors in MIR and -debug output 2018-02-09 00:10:31 +00:00
sext.ll
shift.ll
sign-extension.ll
smul-with-overflow.ll [AVR] Expand 8/16-bit multiplication to libcalls on MCUs that don't have hardware MUL 2019-01-18 06:10:41 +00:00
software-mul.ll [AVR] Expand 8/16-bit multiplication to libcalls on MCUs that don't have hardware MUL 2019-01-18 06:10:41 +00:00
std-ldd-immediate-overflow.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
store-undef.ll
store.ll
sub.ll
trunc.ll
umul-with-overflow.ll [AVR] Expand 8/16-bit multiplication to libcalls on MCUs that don't have hardware MUL 2019-01-18 06:10:41 +00:00
unaligned-atomic-loads.ll Relax unaligned access assertion when type is byte aligned 2017-12-09 06:45:36 +00:00
varargs.ll
xor.ll
zext.ll [AVR] Fix the test suite after r326500. 2018-03-05 20:56:25 +00:00