https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121681
Bug ID: 121681 Summary: -mno-scalar-strict-align doesn't work on rv64 (memcpy is not optimized like on x86_64 and aarch64) Product: gcc Version: 15.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: sergey at lobanov dot in Target Milestone: --- source code: #include <string.h> int main(int argc, char **argv) { int x; memcpy(&x, argv[0] + argc, sizeof(int)); return x; } build command line: riscv64-alpine-linux-musl-gcc-15.2.0 -O3 -mno-scalar-strict-align -U_FORTIFY_SOURCE -fno-stack-protector 2.c asm code: 00000000000005e0 <main>: 5e0: 619c ld a5,0(a1) 5e2: 1141 addi sp,sp,-16 5e4: 953e add a0,a0,a5 5e6: 00054603 lbu a2,0(a0) 5ea: 00154683 lbu a3,1(a0) 5ee: 00254703 lbu a4,2(a0) 5f2: 00354783 lbu a5,3(a0) 5f6: 00c10623 sb a2,12(sp) 5fa: 00d106a3 sb a3,13(sp) 5fe: 00e10723 sb a4,14(sp) 602: 00f107a3 sb a5,15(sp) 606: 4532 lw a0,12(sp) 608: 0141 addi sp,sp,16 60a: 8082 ret expected result (this result was obtained using "clang -O3 -mno-strict-align -fno-stack-protector -U_FORTIFY_SOURCE 2.c"): 00000000000006dc <main>: 6dc: 618c ld a1,0(a1) 6de: 952e add a0,a0,a1 6e0: 4108 lw a0,0(a0) 6e2: 8082 ret clang (20.1.8) optimizes memcpy as unaligned access. gcc doesn't do it on linux x86_64 and linux aarch64 gcc optimizes provided example as unaligned access, but on riscv64 I can't force GCC to use unaligned access # riscv64-alpine-linux-musl-gcc-15.2.0 -v Using built-in specs. COLLECT_GCC=riscv64-alpine-linux-musl-gcc-15.2.0 COLLECT_LTO_WRAPPER=/usr/libexec/gcc/riscv64-alpine-linux-musl/15.2.0/lto-wrapper Target: riscv64-alpine-linux-musl Configured with: /home/buildozer/aports/main/gcc/src/gcc-15.2.0/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --build=riscv64-alpine-linux-musl --host=riscv64-alpine-linux-musl --target=riscv64-alpine-linux-musl --enable-checking=release --disable-cet --disable-fixed-point --disable-libstdcxx-pch --disable-multilib --disable-nls --disable-werror --disable-symvers --enable-__cxa_atexit --enable-default-pie --enable-default-ssp --enable-languages=c,c++,objc,go,fortran,ada --enable-link-serialization=2 --enable-linker-build-id --with-arch=rv64gc --with-abi=lp64d --enable-autolink-libatomic --disable-libquadmath --disable-libssp --disable-libsanitizer --enable-shared --enable-threads --enable-tls --disable-libitm --with-bugurl=https://gitlab.alpinelinux.org/alpine/aports/-/issues --with-system-zlib --with-linker-hash-style=gnu --with-pkgversion='Alpine 15.2.0' Thread model: posix Supported LTO compression algorithms: zlib gcc version 15.2.0 (Alpine 15.2.0)