[Mesa-dev] [PATCH] meson: enable -fmerge-all-constants by default
Konstantin Kharlamov
hi-angel at yandex.ru
Wed Jul 25 11:28:01 UTC 2018
FWIW I just realized it also enables -fmerge-constants which is enabled
at all optimize levels, and built/compared it with fmerge-all-constants.
The difference is still noticeable. If anybody interested, I can
pretty-format it, and send here.
On 25.07.2018 14:03, Konstantin Kharlamov wrote:
> This is a standard non-conforming optimization, which, quoting,
> "…considers e.g. even constant initialized arrays or initialized
> constant variables with integral or floating-point types. Languages like
> C or C++ require each variable, including multiple instances of the same
> variable in recursive calls, to have distinct locations, so using this
> option results in non-conforming behavior."
>
> Having the same or distinct addresses of constants in recursive calls is
> too obscure behavior to make any use of. More over, until 4 April 2018
> clang have had this option enabled by default¹, and nobody ever noticed
> until kernel build fail this year (having a low-level hackery in kernel
> surprises no one), resulting in PR disabling the option by default.
>
> As for Mesa: I personally have been using the option for release builds
> since forever, never had any problems.
>
> Real world significance, sizes of binaries in bytes:
>
> default | -fmerge-all-constants | diff
> -----------------------------------------------------------------------------------------------------
> 8048024 <-> bellagio/libomx_mesa.so | 7867800 <-> bellagio/libomx_mesa.so | -180224
> 10209120 <-> d3d/d3dadapter9.so.1.0.0 | 10016608 <-> d3d/d3dadapter9.so.1.0.0 | -192512
> 14464936 <-> dri/i915_dri.so | 14383016 <-> dri/i915_dri.so | -81920
> 16894344 <-> dri/kms_swrast_dri.so | 16644488 <-> dri/kms_swrast_dri.so | -249856
> 8077560 <-> dri/nouveau_drv_video.so | 7893240 <-> dri/nouveau_drv_video.so | -184320
> 3882872 <-> gallium-pipe/pipe_nouveau.so | 3870584 <-> gallium-pipe/pipe_nouveau.so | -12288
> 2511160 <-> gallium-pipe/pipe_r300.so | 2502968 <-> gallium-pipe/pipe_r300.so | -8192
> 2818520 <-> gallium-pipe/pipe_r600.so | 2810328 <-> gallium-pipe/pipe_r600.so | -8192
> 4123056 <-> gallium-pipe/pipe_radeonsi.so | 3955120 <-> gallium-pipe/pipe_radeonsi.so | -167936
> 2413936 <-> gallium-pipe/pipe_swrast.so | 2401648 <-> gallium-pipe/pipe_swrast.so | -12288
> 2701360 <-> gallium-pipe/pipe_vmwgfx.so | 2689072 <-> gallium-pipe/pipe_vmwgfx.so | -12288
> 582496 <-> libGLX_mesa.so.0.0.0 | 578400 <-> libGLX_mesa.so.0.0.0 | -4096
> 23451656 <-> libMesaOpenCL.so.1.0.0 | 23447560 <-> libMesaOpenCL.so.1.0.0 | -4096
> 10370344 <-> libOSMesa.so.8.0.0 | 10300712 <-> libOSMesa.so.8.0.0 | -69632
> 4766032 <-> libvulkan_intel.so | 4745552 <-> libvulkan_intel.so | -20480
> 2761376 <-> libvulkan_radeon.so | 2753184 <-> libvulkan_radeon.so | -8192
> 4703776 <-> libxatracker.so.2.4.0 | 4687392 <-> libxatracker.so.2.4.0 | -16384
> 8510392 <-> vdpau/libvdpau_nouveau.so.1.0.0 | 8326072 <-> vdpau/libvdpau_nouveau.so.1.0.0 | -184320
>
> For consistency it's enabled for both debug and release builds.
>
> 1: https://reviews.llvm.org/D45289
>
> Signed-off-by: Konstantin Kharlamov <Hi-Angel at yandex.ru>
> ---
> meson.build | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/meson.build b/meson.build
> index e05645cbf3..36016cf959 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -794,6 +794,11 @@ foreach a : ['-Wall', '-fno-math-errno', '-fno-trapping-math',
> endif
> endforeach
>
> +if ['gcc', 'clang'].contains(cc.get_id())
> + c_args += '-fmerge-all-constants'
> + cpp_args += '-fmerge-all-constants'
> +endif
> +
> # For some reason, the test for -Wno-foo always succeeds with gcc, even if the
> # option is not supported. Hence, check for -Wfoo instead.
>
>
More information about the mesa-dev
mailing list