mesa/src
Ian Romanick 05703a49f9 glsl: Use csel in do_vec_index_to_cond_assign
This matches what NIR does.  See nir_vector_extract.

This improves code generation for several reasons.  First, it only
requires 3 comparisons instead of 4 (vec3(i > 0, i > 1, i > 2) vs
vec4(i == 0, i == 1, i == 2, i == 3)).

Secondly, it shortens the liverange of some values, possibly quite
dramatically.  Consider a loop in the old version (after lowering
if-statements to selects):

    loop {
        ...
	x = csel(i == 0, a[0], x);
	x = csel(i == 1, a[1], x);
	x = csel(i == 2, a[2], x);
	x = csel(i == 3, a[3], x);
        ...
    }

x is live for the whole loop across iterations.  In the new version, x
is only live while its value is needed:

    loop {
        ...
	t0 = csel(i > 0 , a[1], a[0]);
	t1 = csel(i > 2 , a[3], a[2]);
	x = csel(i > 1, t1, t0);
        ...
    }

Outside a loop, this also means more values of the array may have their
liveness reduced sooner (by consuming two values at once).

All Intel platforms had similar results. (Tigerlake shown)
total instructions in shared programs: 21171336 -> 21163615 (-0.04%)
instructions in affected programs: 89680 -> 81959 (-8.61%)
helped: 40
HURT: 4
helped stats (abs) min: 1 max: 450 x̄: 193.68 x̃: 196
helped stats (rel) min: 0.41% max: 13.32% x̄: 6.01% x̃: 6.22%
HURT stats (abs)   min: 1 max: 12 x̄: 6.50 x̃: 6
HURT stats (rel)   min: 0.50% max: 0.66% x̄: 0.58% x̃: 0.58%
95% mean confidence interval for instructions value: -229.68 -121.28
95% mean confidence interval for instructions %-change: -6.93% -3.89%
Instructions are helped.

total cycles in shared programs: 832879641 -> 829513122 (-0.40%)
cycles in affected programs: 44738430 -> 41371911 (-7.52%)
helped: 35
HURT: 2
helped stats (abs) min: 2 max: 189948 x̄: 96186.49 x̃: 116154
helped stats (rel) min: 0.37% max: 11.08% x̄: 5.88% x̃: 6.47%
HURT stats (abs)   min: 4 max: 4 x̄: 4.00 x̃: 4
HURT stats (rel)   min: 0.69% max: 0.69% x̄: 0.69% x̃: 0.69%
95% mean confidence interval for cycles value: -112881.94 -69092.06
95% mean confidence interval for cycles %-change: -6.77% -4.27%
Cycles are helped.

total spills in shared programs: 8061 -> 7338 (-8.97%)
spills in affected programs: 873 -> 150 (-82.82%)
helped: 24
HURT: 0

total fills in shared programs: 7501 -> 6388 (-14.84%)
fills in affected programs: 1389 -> 276 (-80.13%)
helped: 24
HURT: 0

Radeon R430
total instructions in shared programs: 2449852 -> 2449136 (-0.03%)
instructions in affected programs: 6285 -> 5569 (-11.39%)
helped: 64
HURT: 0
helped stats (abs) min: 4 max: 12 x̄: 11.19 x̃: 12
helped stats (rel) min: 8.16% max: 21.62% x̄: 12.09% x̃: 10.91%

total consts in shared programs: 1032517 -> 1032482 (<.01%)
consts in affected programs: 966 -> 931 (-3.62%)
helped: 35
HURT: 0
helped stats (abs) min: 1 max: 1 x̄: 1.00 x̃: 1
helped stats (rel) min: 2.94% max: 10.00% x̄: 4.26% x̃: 3.57%

Reviewed-by: Matt Turner <mattst88@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14573>
2022-02-11 17:25:33 +00:00
..
amd radv/winsys: fix initializing debug/perftest options if multiple instances 2022-02-11 16:12:47 +01:00
android_stub android_stub: update platform headers to include atrace 2021-10-09 00:42:32 +00:00
asahi agx: Don't kill helper threads in ld_var 2022-02-06 15:02:39 +00:00
broadcom v3dv: Use the common command pool implementation 2022-02-11 08:06:25 +00:00
compiler glsl: Use csel in do_vec_index_to_cond_assign 2022-02-11 17:25:33 +00:00
drm-shim drm-shim: Support kernels with >4k pages 2021-08-13 23:33:52 +00:00
egl egl/wayland: Don't replace existing backbuffer in get_buffers 2022-02-07 09:57:41 +00:00
etnaviv etnaviv: add support for INTEL_blackhole_render 2022-01-31 16:52:29 +00:00
freedreno vulkan: Take a vk_command_pool in vk_command_buffer_init() 2022-02-11 08:06:25 +00:00
gallium r300: transform fs sin and cos input to [0,1) range in NIR 2022-02-11 16:09:45 +00:00
gbm replace 0 with NULL for NULL pointers 2022-01-10 22:53:32 +00:00
getopt
glx glx: Use the new no-error driver interface 2022-02-04 18:36:24 +00:00
gtest gtest: Fix output of array ASSERT/EXPECT macros 2021-11-11 09:53:09 -08:00
hgl
imgui
intel anv: Handle VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE for descriptor sets 2022-02-11 12:03:42 +00:00
loader gallium/dri: add missing PIPE_BIND_DRI_PRIME handling 2022-02-08 00:13:07 +00:00
mapi glthread: call _mesa_glthread_BindBuffer unconditionally 2022-02-01 06:11:22 +00:00
mesa st/mesa: only enable ARB_enhanced_layouts if there are xfb buffers 2022-02-09 03:31:16 +00:00
microsoft microsoft/compiler: Fill interpolation for sysval inputs to non-vertex shader 2022-02-11 00:19:17 +00:00
nouveau
panfrost vulkan: Take a vk_command_pool in vk_command_buffer_init() 2022-02-11 08:06:25 +00:00
tool ci: Use a dlclose-disabling preload library for leak checking in Vulkan. 2022-01-27 23:47:46 +00:00
util driconf: Add Heaven entries for Windows .exe 2022-02-10 20:19:00 +00:00
virtio venus: fix two VN_TRACE_SCOPE's in the same scope 2022-02-10 05:11:46 +00:00
vulkan vulkan: Implement of a bunch of VkCommandPool functions 2022-02-11 08:06:25 +00:00
meson.build meson: start building intel earlier. 2022-01-20 06:41:17 +00:00