mesa/src/intel/compiler
Caio Oliveira d2c39b1779 intel/brw: Always have a (non-DO) block after a DO in the CFG
Make the "block after DO" more stable so that adding instructions after
a DO doesn't require repairing the CFG.  Use a new SHADER_OPCODE_FLOW
instruction that is a placeholder representing "go to the next block"
and disappears at code generation.

For some context, there are a few facts about how CFG currently works

- Blocks are assumed to not be empty;
- DO is always by itself in a block, i.e. starts and ends a block;
- There are no empty blocks;
- Predicated WHILE and CONTINUE will link to the "block after DO";
- When nesting loops, it is possible that the "block after DO" is
  another "DO".

Reasons and further explanations for those are in the brw_cfg.c comments.

What makes this new change useful is that a pass might want to add
instructions between two DO instructions.  When that happens, a new
block must be created and any predicated WHILE and CONTINUE must be
repaired.

So, instead of requiring a repair (which has proven to be tricky in
the past), this change adds a block that can be "virtually" empty but
allow instructions to be added without further changes.

One alternative design would be allowing empty blocks, that would be
a deeper change since the blocks are currently assumed to be not empty
in various places.  We'll save that for when other changes are made to
the CFG.

The problem described happens in brw_opt_combine_constants, and a
different patch will clean that up.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33536>
2025-02-24 23:25:06 +00:00
..
elk nir: replace nir_opt_conditional_discard with nir_opt_peephole_select 2025-02-20 21:59:17 +00:00
tests intel/brw: Remove assembler tests for Gfx8- 2024-02-24 02:10:56 +00:00
brw_analysis.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_analysis.h intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_analysis_def.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_analysis_liveness.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_analysis_performance.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_asm.c brw: don't mark instructions read from text assembly as compacted 2025-02-22 00:38:53 +00:00
brw_asm.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
brw_asm_internal.h brw: don't mark instructions read from text assembly as compacted 2025-02-22 00:38:53 +00:00
brw_asm_tool.c intel/brw: Rename brw_inst_* helpers to brw_eu_inst_* 2024-12-30 17:16:15 +00:00
brw_builder.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_builder.h intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_cfg.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_cfg.h intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_compile_bs.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_cs.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_fs.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_gs.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_mesh.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_tcs.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_tes.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compile_vs.cpp brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_compiler.c intel/brw: Rename a few remaining functions to remove fs prefix 2025-02-11 09:13:28 +00:00
brw_compiler.h brw: store source_hash in prog_data 2025-02-22 08:30:22 +00:00
brw_debug_recompile.c intel/brw: Simplify @file annotations 2024-07-22 22:48:03 +00:00
brw_device_sha1_gen_c.py intel/compiler: drop unused ray-tracing fields from cache hash 2024-03-22 00:01:28 +00:00
brw_disasm.c intel/brw: Rename brw_inst_* helpers to brw_eu_inst_* 2024-12-30 17:16:15 +00:00
brw_disasm.h intel/brw: Rename brw_inst to brw_eu_inst 2024-12-30 17:16:15 +00:00
brw_disasm_info.cpp intel/brw: Rename fs_inst to brw_inst 2025-01-31 00:57:21 +00:00
brw_disasm_info.h intel/brw: Rename fs_inst to brw_inst 2025-01-31 00:57:21 +00:00
brw_disasm_tool.c intel/brw: Remove Gfx8- code from disassembler 2024-02-28 05:45:38 +00:00
brw_eu.c intel/brw: Rename brw_inst_* helpers to brw_eu_inst_* 2024-12-30 17:16:15 +00:00
brw_eu.h brw: Lower MEMORY_FENCE and INTERLOCK in lower_logical_sends 2025-02-08 01:07:22 +00:00
brw_eu_compact.c brw: Pass number and sizeof separately to calloc 2025-01-21 22:58:56 +00:00
brw_eu_defines.h intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_eu_emit.c brw: Lower MEMORY_FENCE and INTERLOCK in lower_logical_sends 2025-02-08 01:07:22 +00:00
brw_eu_inst.h intel/brw: Add missing bits in 3-src SWSB encoding for Xe2+ 2025-01-03 21:19:26 +00:00
brw_eu_validate.c intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_from_nir.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_generator.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_generator.h brw: factor out base prog_data setting 2025-02-22 08:30:22 +00:00
brw_gram.y brw: don't mark instructions read from text assembly as compacted 2025-02-22 00:38:53 +00:00
brw_inst.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_inst.h intel/brw: Rename a few remaining functions to remove fs prefix 2025-02-11 09:13:28 +00:00
brw_isa_info.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
brw_kernel.c intel: drop nir_lower_printf calls 2025-02-05 20:33:15 +00:00
brw_kernel.h intel: rework CL pre-compile 2025-01-25 03:28:07 +00:00
brw_lex.l intel/brw: Add assembly support for ARF scalar register 2024-12-13 02:18:15 +00:00
brw_lower.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_lower_dpas.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_lower_integer_multiplication.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_lower_logical_sends.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_lower_pack.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_lower_regioning.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_lower_scoreboard.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_lower_simd_width.cpp intel/brw: Rename a few remaining functions to remove fs prefix 2025-02-11 09:13:28 +00:00
brw_lower_subgroup_ops.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_nir.c nir: replace nir_opt_conditional_discard with nir_opt_peephole_select 2025-02-20 21:59:17 +00:00
brw_nir.h brw: add support for texel address lowering 2025-02-23 15:16:50 +00:00
brw_nir_analyze_ubo_ranges.c intel/compiler: take reg_unit size into account with ubo ranges 2025-01-07 21:38:06 +00:00
brw_nir_lower_alpha_to_coverage.c intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_nir_lower_cooperative_matrix.c intel/brw/xe2+: Allow vec16 for cooperative matrix 2024-06-25 14:17:47 -07:00
brw_nir_lower_cs_intrinsics.c compiler: Allow derivative_group to be used for all stages in shader_info 2024-09-03 20:03:18 +00:00
brw_nir_lower_fsign.py intel/brw: Use range analysis to optimize fsign 2024-05-14 01:28:21 +00:00
brw_nir_lower_intersection_shader.c intel/rt: fix terminateOnFirstHit handling 2024-08-05 21:43:36 +00:00
brw_nir_lower_ray_queries.c intel/rt: fix ray_query stack address calculation 2024-11-08 18:31:52 +00:00
brw_nir_lower_rt_intrinsics.c brw: enable A64 pulling of push constants 2025-02-05 09:56:04 +00:00
brw_nir_lower_shader_calls.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
brw_nir_lower_storage_image.c brw: add support for 64bit storage images load/store 2025-02-23 15:16:50 +00:00
brw_nir_lower_texel_address.c brw: add support for texel address lowering 2025-02-23 15:16:50 +00:00
brw_nir_opt_fsat.c intel/brw: Remove 'fs' prefix from passes and related functions 2025-01-02 18:11:05 +00:00
brw_nir_rt.c brw: enable A64 pulling of push constants 2025-02-05 09:56:04 +00:00
brw_nir_rt.h brw: enable A64 pulling of push constants 2025-02-05 09:56:04 +00:00
brw_nir_rt_builder.h intel/compiler: Drop primitive leaf desc load code 2025-02-12 05:23:05 +00:00
brw_nir_trig_workarounds.py
brw_opt.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_opt_address_reg_load.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_opt_algebraic.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_bank_conflicts.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_cmod_propagation.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_combine_constants.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_copy_propagation.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_opt_cse.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_dead_code_eliminate.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_register_coalesce.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_saturate_propagation.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_txf_combiner.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_opt_virtual_grfs.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_packed_float.c
brw_prim.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
brw_print.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
brw_private.h intel/brw: Rename a few remaining functions to remove fs prefix 2025-02-11 09:13:28 +00:00
brw_reg.cpp brw: add infra to make use of the address register in the IR 2025-01-11 08:41:42 +00:00
brw_reg.h brw: increase brw_reg::subnr size to 6 bits 2025-02-18 19:38:46 +00:00
brw_reg_allocate.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_reg_type.c intel/brw: Rename brw_reg_type_to_hw_type to brw_type_encode 2024-04-25 11:41:48 +00:00
brw_reg_type.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
brw_rt.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
brw_schedule_instructions.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_shader.cpp intel/brw: Update outdated comments 2025-02-11 09:13:28 +00:00
brw_shader.h intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_simd_selection.cpp intel/brw/xe3+: Optimize CS/TASK/MESH compile time optimistically assuming SIMD32. 2025-01-29 23:39:32 +00:00
brw_spirv.c nir/peephole_select: add options struct 2025-02-20 21:59:16 +00:00
brw_thread_payload.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_thread_payload.h intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_validate.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
brw_vue_map.c intel/brw: Simplify @file annotations 2024-07-22 22:48:03 +00:00
brw_workaround.cpp intel/brw: Rename a few remaining functions to remove fs prefix 2025-02-11 09:13:28 +00:00
intel_clc.c intel_clc: remove NIR output support 2025-02-01 07:54:37 +00:00
intel_gfx_ver_enum.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
intel_nir.c intel/compiler: Rename the passes and files related to intel_nir.h 2024-02-16 22:35:05 +00:00
intel_nir.h brw: Align and combine constant-offset UBO loads in NIR 2025-01-10 22:44:09 +00:00
intel_nir_blockify_uniform_loads.c intel: switch to nir_metadata_divergence 2025-02-13 10:08:43 +00:00
intel_nir_clamp_image_1d_2d_array_sizes.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_clamp_per_vertex_loads.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_lower_conversions.c intel/nir: Don't needlessly split u2f16 for nir_type_uint32 2024-07-11 02:37:05 -07:00
intel_nir_lower_non_uniform_barycentric_at_sample.c intel: switch to nir_metadata_divergence 2025-02-13 10:08:43 +00:00
intel_nir_lower_non_uniform_resource_intel.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_lower_printf.c nir: drop printf_base_identifier 2025-02-05 20:33:15 +00:00
intel_nir_lower_shading_rate_output.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_lower_sparse.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_lower_texture.c intel/compiler: Pack texture LOD and offset to a single 32-bit value 2024-02-27 00:22:46 +00:00
intel_nir_opt_peephole_ffma.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_opt_peephole_imul32x16.c treewide: use nir_metadata_control_flow 2024-06-17 16:28:14 -04:00
intel_nir_tcs_workarounds.c intel/nir: Set src_type on TCS quads workaround store_output 2024-05-02 13:58:21 -07:00
intel_shader_enums.h intel/compiler: Use #pragma once instead of header guards 2024-12-11 19:47:44 +00:00
meson.build brw: add support for texel address lowering 2025-02-23 15:16:50 +00:00
test_eu_compact.cpp intel/brw: Rename brw_inst_* helpers to brw_eu_inst_* 2024-12-30 17:16:15 +00:00
test_eu_validate.cpp intel/brw: Rename brw_inst_* helpers to brw_eu_inst_* 2024-12-30 17:16:15 +00:00
test_lower_scoreboard.cpp intel/brw: Always have a (non-DO) block after a DO in the CFG 2025-02-24 23:25:06 +00:00
test_opt_cmod_propagation.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
test_opt_combine_constants.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
test_opt_copy_propagation.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
test_opt_cse.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
test_opt_saturate_propagation.cpp intel/brw: Rename fs_visitor to brw_shader 2025-02-11 09:13:28 +00:00
test_simd_selection.cpp intel/brw/xe3+: Optimize CS/TASK/MESH compile time optimistically assuming SIMD32. 2025-01-29 23:39:32 +00:00
test_vf_float_conversions.cpp