Hi Alex,
Thanks for your teaching!
I only implemented GlobalISel skeleton for RISCV target, built with no errors, is it suitable to review code now as Initial porting or wait for more APIs (for example: lowerReturn, getStackAddress) implemented?
I use `a return from a void function` testcase:
define void @f() {
ret void
}
$ llc -global-isel -march=riscv32 -stop-after=irtranslator return.ll -o return.mir
...
savePoint: ''
restorePoint: ''
fixedStack:
stack:
constants:
body: |
bb.1 (%ir-block.0):
MRET
...
But I think it is not correct, so please teach me how to implement `return lowering` in a simple way, thanks!
PS: as you suggested I built RISCV GNU toolchain using upstream repository:
$ /opt/riscv-gnu-git/bin/riscv32-unknown-elf-gcc -O0 -Wall -c return.c -o return-riscv32-gnu.o
^-- return.c is equivalent to above LLVM IR testcase
$ /opt/riscv-gnu-git/bin/riscv32-unknown-elf-objdump -d return-riscv32-gnu.o
return-riscv32-gnu.o: file format elf32-littleriscv
Disassembly of section .text:
00000000 <f>:
0: ff010113 addi sp,sp,-16
4: 00812623 sw s0,12(sp)
8: 01010413 addi s0,sp,16
c: 00000013 nop
10: 00c12403 lw s0,12(sp)
14: 01010113 addi sp,sp,16
18: 00008067 ret
And I merged master branch, is it ok? or use other branch?
$ /opt/riscv-gnu-git/bin/riscv32-unknown-elf-gcc -v
Using built-in specs.
COLLECT_GCC=/opt/riscv-gnu-git/bin/riscv32-unknown-elf-gcc
COLLECT_LTO_WRAPPER=/opt/riscv-gnu-git/libexec/gcc/riscv32-unknown-elf/8.0.0/lto-wrapper
Target: riscv32-unknown-elf
Configured with: ../configure --target=riscv32-unknown-elf --enable-languages=c --disable-shared --disable-threads --disable-multilib --disable-gdb --disable-libssp --with-newlib --with-arch=rv32ima --with-abi=ilp32 --prefix=/opt/riscv-gnu-git
Thread model: single
gcc version 8.0.0 20171215 (experimental) (GCC)