intel/fs: Implement representation of SWSB cross-pipeline synchronization annotations.
The execution units of XeHP platforms have multiple asynchronous ALU pipelines instead of (as far as software is concerned) the single in-order pipeline that handled most ALU instructions except for extended math in the original Xe. It's now the compiler's responsibility to identify cross-pipeline dependencies and insert synchronization annotations whenever necessary, which are encoded as some additional bits of the SWSB instruction field. This commit represents the cross-pipeline synchronization annotations as part of the existing tgl_swsb structure used for codegen. The existing tgl_swsb_*() helpers used by hand-crafted assembly are extended to default to TGL_PIPE_ALL big-hammer synchronization in order to ensure backwards compatibility with the existing assembly. The following commits will extend the software scoreboard lowering pass in order to keep track of cross-pipeline dependencies across IR instructions, and insert more specific pipeline annotations in the SWSB field. The disassembler is also extended here to print out any existing pipeline sync annotations. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10000>
This commit is contained in:

committed by
Marge Bot

parent
d53fc2240b
commit
12479abded
@@ -1642,10 +1642,16 @@ qtr_ctrl(FILE *file, const struct gen_device_info *devinfo, const brw_inst *inst
|
||||
static int
|
||||
swsb(FILE *file, const struct gen_device_info *devinfo, const brw_inst *inst)
|
||||
{
|
||||
const struct tgl_swsb swsb = tgl_swsb_decode(brw_inst_opcode(devinfo, inst),
|
||||
brw_inst_swsb(devinfo, inst));
|
||||
const enum opcode opcode = brw_inst_opcode(devinfo, inst);
|
||||
const uint8_t x = brw_inst_swsb(devinfo, inst);
|
||||
const struct tgl_swsb swsb = tgl_swsb_decode(devinfo, opcode, x);
|
||||
if (swsb.regdist)
|
||||
format(file, " @%d", swsb.regdist);
|
||||
format(file, " %s@%d",
|
||||
(swsb.pipe == TGL_PIPE_FLOAT ? "F" :
|
||||
swsb.pipe == TGL_PIPE_INT ? "I" :
|
||||
swsb.pipe == TGL_PIPE_LONG ? "L" :
|
||||
swsb.pipe == TGL_PIPE_ALL ? "A" : "" ),
|
||||
swsb.regdist);
|
||||
if (swsb.mode)
|
||||
format(file, " $%d%s", swsb.sbid,
|
||||
(swsb.mode & TGL_SBID_SET ? "" :
|
||||
|
Reference in New Issue
Block a user