llvm-project/llvm/test/CodeGen/AVR
Dylan McKay b9c26a9cfe [AVR] Rewrite the function calling convention.
Summary:
The previous version relied on the standard calling convention using
std::reverse() to try to force the AVR ABI. But this only works for
simple cases, it fails for example with aggregate types.

This patch rewrites the calling convention with custom C++ code, that
implements the ABI defined in https://gcc.gnu.org/wiki/avr-gcc.

To do that it adds a few 16-bit pseudo registers for unaligned argument
passing, such as R24R23. For example this function:

    define void @fun({ i8, i16 } %a)

will pass %a.0 in R22 and %a.1 in R24R23.

There are no instructions that can use these pseudo registers, so a new
register class, DREGSMOVW, is defined to make them apart.

Also the ArgCC_AVR_BUILTIN_DIV is no longer necessary, as it is
identical to the C++ behavior (actually the clobber list is more strict
for __div* functions, but that is currently unimplemented).

Reviewers: dylanmckay

Subscribers: Gaelan, Sh4rK, indirect, jwagen, efriedma, dsprenkels, hiraditya, Jim, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68524

Patch by Rodrigo Rivas Costa.
2020-06-23 21:36:18 +12:00
..
atomics
calling-conv/c [AVR] Rewrite the function calling convention. 2020-06-23 21:36:18 +12:00
features [AVR] Fix I/O instructions on XMEGA 2020-05-17 19:46:09 +12:00
inline-asm
integration [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
intrinsics
pseudo [AVR] Fix incorrect register state for LDRdPtr 2020-03-03 17:34:54 +08:00
relax-mem
PR31344.ll
PR31345.ll
PR37143.ll [AVR] Fix incorrect register state for LDRdPtr 2020-03-03 17:34:54 +08:00
add.ll [AVR] Fix miscompilation of zext + add 2020-06-18 16:51:37 +02:00
alloca.ll
and.ll
avr-rust-issue-123.ll
branch-relaxation-long.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
branch-relaxation.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
brind.ll [AVR] Fix incorrect register state for LDRdPtr 2020-03-03 17:34:54 +08:00
call.ll [AVR] Remove faulty stack pushing behavior 2020-06-16 13:53:32 +02:00
clear-bss.ll
cmp.ll
com.ll
copy-data-to-ram.ll
ctlz.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
ctpop.ll
cttz.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
directmem.ll
div.ll [AVR] Do not use divmod calls for bigger integers 2020-04-20 13:56:38 +02:00
dynalloca.ll [AVR] Remove faulty stack pushing behavior 2020-06-16 13:53:32 +02:00
eor.ll
expand-integer-failure.ll
frame.ll
frmidx-iterator-bug.ll
hardware-mul.ll
high-pressure-on-ptrregs.ll
icall-func-pointer-correct-addr-space.ll Infer alignment of unmarked loads in IR/bitcode parsing. 2020-05-14 13:03:50 -07:00
impossible-reg-to-reg-copy.ll
interrupts.ll [AVR] Generalize the previous interrupt bugfix to signal handlers too 2020-03-31 19:33:34 +13:00
io.ll
issue-cannot-select-bswap.ll
issue-regalloc-stackframe-folding-earlyclobber.ll
jmp-long.ll [AVR] Don't adjust for instruction size 2020-06-23 02:15:42 +02:00
large-return-size.ll
lit.local.cfg
load.ll [AVR] Fix incorrect register state for LDRdPtr 2020-03-03 17:34:54 +08:00
lower-formal-args-struct-return.ll
lower-formal-arguments-assertion.ll
neg.ll
no-print-operand-twice.ll
or.ll
pre-schedule.ll
progmem-extended.ll
progmem.ll
rem.ll
return.ll [AVR] Fix stack size in functions with a frame pointer 2020-06-16 13:53:32 +02:00
rot.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
runtime-trig.ll
rust-avr-bug-37.ll Infer alignment of unmarked loads in IR/bitcode parsing. 2020-05-14 13:03:50 -07:00
rust-avr-bug-95.ll Infer alignment of unmarked loads in IR/bitcode parsing. 2020-05-14 13:03:50 -07:00
rust-avr-bug-99.ll
rust-avr-bug-112.ll
sections.ll [AVR] Do not place functions in .progmem.data 2020-04-20 13:56:38 +02:00
select-must-add-unconditional-jump.ll
sext.ll
shift.ll
sign-extension.ll
smul-with-overflow.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
software-mul.ll
std-ldd-immediate-overflow.ll
store-undef.ll
store.ll
sub.ll
trunc.ll
umul-with-overflow.ll [AVR] Fix private label prefix 2020-02-26 20:32:25 +01:00
umul.with.overflow.i16-bug.ll
unaligned-atomic-loads.ll
varargs.ll [AVR] Remove faulty stack pushing behavior 2020-06-16 13:53:32 +02:00
xor.ll
zext.ll