intel/fs: Constant propagate into SHADER_OPCODE_SHUFFLE
Code already exists to convert SHADER_OPCODE_SHUFFLE into a simple MOV when either source is constant. However... the constants have to actually get into those sources! On a shader that I'm working on that multiplies very large matrices using lots of subgroup operations, -SIMD8 shader: 1378 instructions. 3 loops. 793896 cycles. 0:0 spills:fills, 23 sends, scheduled with mode non-lifo. Promoted 0 constants. Compacted 22048 to 21664 bytes (2%) +SIMD8 shader: 346 instructions. 3 loops. 61742 cycles. 0:0 spills:fills, 23 sends, scheduled with mode top-down. Promoted 0 constants. Compacted 5536 to 5216 bytes (6%) No changes in shader-db or fossil-db on any Intel platform. v2: Merge a bunch of identical cases. Suggested by Ken. Reviewed-by: Caio Oliveira <caio.oliveira@intel.com> [v1] Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23609>
This commit is contained in:
@@ -1086,23 +1086,12 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
|
||||
case SHADER_OPCODE_TYPED_SURFACE_WRITE_LOGICAL:
|
||||
case SHADER_OPCODE_BYTE_SCATTERED_WRITE_LOGICAL:
|
||||
case SHADER_OPCODE_BYTE_SCATTERED_READ_LOGICAL:
|
||||
inst->src[i] = val;
|
||||
progress = true;
|
||||
break;
|
||||
|
||||
case FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD:
|
||||
case SHADER_OPCODE_BROADCAST:
|
||||
inst->src[i] = val;
|
||||
progress = true;
|
||||
break;
|
||||
|
||||
case BRW_OPCODE_MAD:
|
||||
case BRW_OPCODE_LRP:
|
||||
inst->src[i] = val;
|
||||
progress = true;
|
||||
break;
|
||||
|
||||
case FS_OPCODE_PACK_HALF_2x16_SPLIT:
|
||||
case SHADER_OPCODE_SHUFFLE:
|
||||
inst->src[i] = val;
|
||||
progress = true;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user