[Bug middle-end/118109] New: RISC-V: Empty Variadic Function Redundantly Pushes Argument Registers onto Stack
jonathan.gruber.jg at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Dec 18 15:17:05 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118109
Bug ID: 118109
Summary: RISC-V: Empty Variadic Function Redundantly Pushes
Argument Registers onto Stack
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: jonathan.gruber.jg at gmail dot com
Target Milestone: ---
Created attachment 59910
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59910&action=edit
Minimal test case.
When an empty variadic function is compiled to RISC-V, the argument registers
a1-a7 are redundantly pushed onto the stack. I only tested with 64-bit RISC-V,
but I would not be surprised if 32-bit RISC-V has the same problem.
Minimal test case:
#include <stdarg.h>
void test(int dummy, ...) {
/* Empty. */
}
riscv64 assembly, with -Oz, -Os, -O1, -O2, or -O3:
test:
.cfi_startproc
addi sp,sp,-64
.cfi_def_cfa_offset 64
sd a1,8(sp)
sd a2,16(sp)
sd a3,24(sp)
sd a4,32(sp)
sd a5,40(sp)
sd a6,48(sp)
sd a7,56(sp)
addi sp,sp,64
.cfi_def_cfa_offset 0
jr ra
.cfi_endproc
Host system type: Arch Linux, x86_64.
riscv64-linux-gnu-gcc information:
Version: 14.2.0.
Configured with: /build/riscv64-linux-gnu-gcc/src/gcc-14.2.0/configure
--prefix=/usr --program-prefix=riscv64-linux-gnu-
--with-local-prefix=/usr/riscv64-linux-gnu
--with-sysroot=/usr/riscv64-linux-gnu
--with-build-sysroot=/usr/riscv64-linux-gnu --libdir=/usr/lib
--libexecdir=/usr/lib --target=riscv64-linux-gnu --host=x86_64-pc-linux-gnu
--build=x86_64-pc-linux-gnu --with-system-zlib --with-isl
--with-linker-hash-style=gnu --disable-nls --disable-libunwind-exceptions
--disable-libstdcxx-pch --disable-libssp --disable-multilib --disable-werror
--enable-languages=c,c++ --enable-shared --enable-threads=posix
--enable-__cxa_atexit --enable-clocale=gnu --enable-gnu-unique-object
--enable-linker-build-id --enable-lto --enable-plugin
--enable-install-libiberty --enable-gnu-indirect-function --enable-default-pie
--enable-checking=release
More information about the Gcc-bugs
mailing list