diff mbox series

[v1,4/6] LoongArch: use -mstrict-align by default when building libraries

Message ID 20230814035707.11272-4-yangyujie@loongson.cn
State New
Headers show
Series [v1,1/6] LoongArch: a symmetric multilib subdir layout | expand

Commit Message

Yang Yujie Aug. 14, 2023, 3:57 a.m. UTC
LoongArch processors may not support memory accesses without natural
alignments.  Building libraries with -mstrict-align may help with
toolchain binary compatiblity and performance on these implementations
(e.g. Loongson 2K1000LA).

With this patch, no significant performance degredation is observed on
current mainstream LoongArch processors.

gcc/ChangeLog:

        * gcc/config/t-linux: add -mstrict-align via self_specs
        when building GCC libraries.
---
 gcc/config/loongarch/t-linux | 3 +++
 1 file changed, 3 insertions(+)

Comments

Xi Ruoyao Aug. 14, 2023, 5:18 a.m. UTC | #1
On Mon, 2023-08-14 at 11:57 +0800, Yang Yujie wrote:
> LoongArch processors may not support memory accesses without natural
> alignments.  Building libraries with -mstrict-align may help with
> toolchain binary compatiblity and performance on these implementations
> (e.g. Loongson 2K1000LA).

I don't think it's a good idea.  You should provide a configuration-time
option (maybe named --with-strict-align) to make -mstrict-align the
default instead, thus both the libraries and the compiled user code will
be suitable for 2K1000.

> With this patch, no significant performance degredation is observed on
> current mainstream LoongArch processors.
> 
> gcc/ChangeLog:
> 
>         * gcc/config/t-linux: add -mstrict-align via self_specs
>         when building GCC libraries.
> ---
>  gcc/config/loongarch/t-linux | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/gcc/config/loongarch/t-linux b/gcc/config/loongarch/t-linux
> index 75bb430c555..2a170d600a9 100644
> --- a/gcc/config/loongarch/t-linux
> +++ b/gcc/config/loongarch/t-linux
> @@ -35,6 +35,9 @@ gen_mlib_spec = $(if $(word 2,$1),\
>  # clean up the result of DRIVER_SELF_SPEC to avoid conflict
>  lib_build_self_spec  = %<march=* %<mtune=* %<mcmodel=* %<mfpu=* %<msimd=*
>  
> +# build libraries with -mstrict-align by default
> +lib_build_self_spec += -mstrict-align
> +
>  # append user-specified build options from --with-multilib-list
>  lib_build_self_spec += $(foreach mlib,$(subst $(comma), ,$(TM_MULTILIB_CONFIG)),\
>                         $(call gen_mlib_spec,$(subst /, ,$(mlib))))
diff mbox series

Patch

diff --git a/gcc/config/loongarch/t-linux b/gcc/config/loongarch/t-linux
index 75bb430c555..2a170d600a9 100644
--- a/gcc/config/loongarch/t-linux
+++ b/gcc/config/loongarch/t-linux
@@ -35,6 +35,9 @@  gen_mlib_spec = $(if $(word 2,$1),\
 # clean up the result of DRIVER_SELF_SPEC to avoid conflict
 lib_build_self_spec  = %<march=* %<mtune=* %<mcmodel=* %<mfpu=* %<msimd=*
 
+# build libraries with -mstrict-align by default
+lib_build_self_spec += -mstrict-align
+
 # append user-specified build options from --with-multilib-list
 lib_build_self_spec += $(foreach mlib,$(subst $(comma), ,$(TM_MULTILIB_CONFIG)),\
 			$(call gen_mlib_spec,$(subst /, ,$(mlib))))