pan/bi: Support message preloading
Preload LD_VAR_IMM or VAR_TEX instructions in the first block of fragment shaders on v7. Preloaded messages write to fixed registers; when replacing instructions we insert moves from the registers at the start of the program and hope coalescing goes to town. (Admittedly we don't do any coalescing yet...) The extra moves hurts instruction count in some cases; the win for cycle count should cancel this out. When we get smarter copy prop or RA, those moves should go away anyway. This optimization may hurt register pressure by extending the lifetime of up to eight registers written in the first block. This is expected to be acceptable: on a large shader-db, there are no additional spills/fills, and only two shaders are hurt on thread count. This optimization only applies to v7, as the hardware was not introduced on v6 and was removed for Valhall. total instructions in shared programs: 2451624 -> 2454286 (0.11%) instructions in affected programs: 909046 -> 911708 (0.29%) helped: 4719 HURT: 3341 helped stats (abs) min: 1.0 max: 10.0 x̄: 1.49 x̃: 1 helped stats (rel) min: 0.08% max: 33.33% x̄: 6.79% x̃: 3.92% HURT stats (abs) min: 1.0 max: 50.0 x̄: 2.90 x̃: 2 HURT stats (rel) min: 0.12% max: 66.67% x̄: 6.39% x̃: 3.45% 95% mean confidence interval for instructions value: 0.27 0.39 95% mean confidence interval for instructions %-change: -1.55% -1.11% Inconclusive result (value mean confidence interval and %-change mean confidence interval disagree). total tuples in shared programs: 1969529 -> 1963429 (-0.31%) tuples in affected programs: 601327 -> 595227 (-1.01%) helped: 5907 HURT: 1297 helped stats (abs) min: 1.0 max: 8.0 x̄: 1.41 x̃: 1 helped stats (rel) min: 0.07% max: 33.33% x̄: 7.25% x̃: 5.26% HURT stats (abs) min: 1.0 max: 40.0 x̄: 1.73 x̃: 1 HURT stats (rel) min: 0.16% max: 31.75% x̄: 3.38% x̃: 2.02% 95% mean confidence interval for tuples value: -0.88 -0.81 95% mean confidence interval for tuples %-change: -5.52% -5.15% Tuples are helped. total clauses in shared programs: 401689 -> 387830 (-3.45%) clauses in affected programs: 136944 -> 123085 (-10.12%) helped: 8427 HURT: 4 helped stats (abs) min: 1.0 max: 4.0 x̄: 1.65 x̃: 2 helped stats (rel) min: 0.49% max: 50.00% x̄: 19.88% x̃: 18.18% HURT stats (abs) min: 1.0 max: 4.0 x̄: 2.50 x̃: 2 HURT stats (rel) min: 1.96% max: 19.05% x̄: 14.18% x̃: 17.86% 95% mean confidence interval for clauses value: -1.66 -1.63 95% mean confidence interval for clauses %-change: -20.15% -19.58% Clauses are helped. total cycles in shared programs: 202735.83 -> 201862.21 (-0.43%) cycles in affected programs: 16295.46 -> 15421.83 (-5.36%) helped: 3349 HURT: 1962 helped stats (abs) min: 0.041665999999999315 max: 1.0 x̄: 0.32 x̃: 0 helped stats (rel) min: 0.24% max: 100.00% x̄: 40.77% x̃: 33.33% HURT stats (abs) min: 0.041665999999999315 max: 1.5833329999999997 x̄: 0.10 x̃: 0 HURT stats (rel) min: 0.09% max: 31.40% x̄: 2.95% x̃: 1.94% 95% mean confidence interval for cycles value: -0.17 -0.16 95% mean confidence interval for cycles %-change: -25.48% -23.76% Cycles are helped. total arith in shared programs: 74665.50 -> 74920.00 (0.34%) arith in affected programs: 16059.92 -> 16314.42 (1.58%) helped: 860 HURT: 3409 helped stats (abs) min: 0.041665999999999315 max: 0.25 x̄: 0.06 x̃: 0 helped stats (rel) min: 0.24% max: 37.50% x̄: 4.73% x̃: 2.56% HURT stats (abs) min: 0.041665999999999315 max: 1.5833329999999997 x̄: 0.09 x̃: 0 HURT stats (rel) min: 0.09% max: 100.00% x̄: 8.99% x̃: 4.21% 95% mean confidence interval for arith value: 0.06 0.06 95% mean confidence interval for arith %-change: 5.83% 6.62% Arith are HURT. total texture in shared programs: 13083.50 -> 11877 (-9.22%) texture in affected programs: 1663 -> 456.50 (-72.55%) helped: 2377 HURT: 3 helped stats (abs) min: 0.5 max: 1.0 x̄: 0.51 x̃: 0 helped stats (rel) min: 6.25% max: 100.00% x̄: 87.12% x̃: 100.00% HURT stats (abs) min: 0.5 max: 0.5 x̄: 0.50 x̃: 0 HURT stats (rel) min: 0.00% max: 25.00% x̄: 16.67% x̃: 25.00% 95% mean confidence interval for texture value: -0.51 -0.50 95% mean confidence interval for texture %-change: -87.98% -86.00% Texture are helped. total vary in shared programs: 10220.62 -> 4183.88 (-59.06%) vary in affected programs: 10126.50 -> 4089.75 (-59.61%) helped: 8538 HURT: 0 helped stats (abs) min: 0.125 max: 1.0 x̄: 0.71 x̃: 0 helped stats (rel) min: 7.14% max: 100.00% x̄: 74.74% x̃: 87.50% 95% mean confidence interval for vary value: -0.71 -0.70 95% mean confidence interval for vary %-change: -75.32% -74.16% Vary are helped. total quadwords in shared programs: 1766717 -> 1757161 (-0.54%) quadwords in affected programs: 553801 -> 544245 (-1.73%) helped: 6760 HURT: 711 helped stats (abs) min: 1.0 max: 11.0 x̄: 1.58 x̃: 1 helped stats (rel) min: 0.09% max: 29.41% x̄: 5.31% x̃: 4.84% HURT stats (abs) min: 1.0 max: 33.0 x̄: 1.54 x̃: 1 HURT stats (rel) min: 0.10% max: 31.13% x̄: 2.53% x̃: 1.61% 95% mean confidence interval for quadwords value: -1.31 -1.25 95% mean confidence interval for quadwords %-change: -4.67% -4.46% Quadwords are helped. total threads in shared programs: 52899 -> 52897 (<.01%) threads in affected programs: 4 -> 2 (-50.00%) helped: 0 HURT: 2 total preloads in shared programs: 0 -> 116492 preloads in affected programs: 0 -> 116492 helped: 0 HURT: 8604 HURT stats (abs) min: 2.0 max: 24.0 x̄: 13.54 x̃: 14 HURT stats (rel) min: 0.00% max: 0.00% x̄: 0.00% x̃: 0.00% 95% mean confidence interval for preloads value: 13.45 13.63 95% mean confidence interval for preloads %-change: 0.00% 0.00% Preloads are HURT. Signed-off-by:Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <!9438>
- src/panfrost/bifrost/bi_opt_message_preload.c 141 additions, 0 deletionssrc/panfrost/bifrost/bi_opt_message_preload.c
- src/panfrost/bifrost/bifrost.h 1 addition, 0 deletionssrc/panfrost/bifrost/bifrost.h
- src/panfrost/bifrost/bifrost_compile.c 11 additions, 0 deletionssrc/panfrost/bifrost/bifrost_compile.c
- src/panfrost/bifrost/compiler.h 1 addition, 0 deletionssrc/panfrost/bifrost/compiler.h
- src/panfrost/bifrost/meson.build 1 addition, 0 deletionssrc/panfrost/bifrost/meson.build