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-an...@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.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to