@@ -1156,14 +1156,19 @@ class IntelSubgroupsBuiltin<string name, Op operation> {
11561156 string Name = name;
11571157 Op Opcode = operation;
11581158 bit IsBlock = !or(!eq(operation, OpSubgroupBlockReadINTEL),
1159- !eq(operation, OpSubgroupBlockWriteINTEL));
1160- bit IsWrite = !eq(operation, OpSubgroupBlockWriteINTEL);
1159+ !eq(operation, OpSubgroupBlockWriteINTEL),
1160+ !eq(operation, OpSubgroupImageMediaBlockReadINTEL),
1161+ !eq(operation, OpSubgroupImageMediaBlockWriteINTEL));
1162+ bit IsWrite = !or(!eq(operation, OpSubgroupBlockWriteINTEL),
1163+ !eq(operation, OpSubgroupImageMediaBlockWriteINTEL));
1164+ bit IsMedia = !or(!eq(operation, OpSubgroupImageMediaBlockReadINTEL),
1165+ !eq(operation, OpSubgroupImageMediaBlockWriteINTEL));
11611166}
11621167
11631168// Table gathering all the Intel sub group builtins.
11641169def IntelSubgroupsBuiltins : GenericTable {
11651170 let FilterClass = "IntelSubgroupsBuiltin";
1166- let Fields = ["Name", "Opcode", "IsBlock", "IsWrite"];
1171+ let Fields = ["Name", "Opcode", "IsBlock", "IsWrite", "IsMedia" ];
11671172}
11681173
11691174// Function to lookup group builtins by their name and set.
@@ -1191,17 +1196,24 @@ foreach i = ["", "2", "4", "8"] in {
11911196 // cl_intel_subgroups_short
11921197 defm : DemangledIntelSubgroupsBuiltin<!strconcat("block_read_ui", i), 1, 2, OpSubgroupBlockReadINTEL>;
11931198 defm : DemangledIntelSubgroupsBuiltin<!strconcat("block_write_ui", i), 2, 3, OpSubgroupBlockWriteINTEL>;
1199+ // cl_intel_media_block_io
1200+ defm : DemangledIntelSubgroupsBuiltin<!strconcat("media_block_read", i), 4, 4, OpSubgroupImageMediaBlockReadINTEL>;
1201+ defm : DemangledIntelSubgroupsBuiltin<!strconcat("media_block_read_ui", i), 4, 4, OpSubgroupImageMediaBlockReadINTEL>;
1202+ defm : DemangledIntelSubgroupsBuiltin<!strconcat("media_block_write", i), 5, 5, OpSubgroupImageMediaBlockWriteINTEL>;
1203+ defm : DemangledIntelSubgroupsBuiltin<!strconcat("media_block_write_ui", i), 5, 5, OpSubgroupImageMediaBlockWriteINTEL>;
11941204}
1195- // cl_intel_subgroups_char, cl_intel_subgroups_short, cl_intel_subgroups_long
1205+ // cl_intel_subgroups_char, cl_intel_subgroups_short, cl_intel_subgroups_long, cl_intel_media_block_io
11961206foreach i = ["", "2", "4", "8", "16"] in {
11971207 foreach j = ["c", "s", "l"] in {
11981208 defm : DemangledIntelSubgroupsBuiltin<!strconcat("block_read_u", j, i), 1, 2, OpSubgroupBlockReadINTEL>;
11991209 defm : DemangledIntelSubgroupsBuiltin<!strconcat("block_write_u", j, i), 2, 3, OpSubgroupBlockWriteINTEL>;
1210+ defm : DemangledIntelSubgroupsBuiltin<!strconcat("media_block_read_u", j, i), 4, 4, OpSubgroupImageMediaBlockReadINTEL>;
1211+ defm : DemangledIntelSubgroupsBuiltin<!strconcat("media_block_write_u", j, i), 5, 5, OpSubgroupImageMediaBlockWriteINTEL>;
12001212 }
12011213}
12021214// OpSubgroupImageBlockReadINTEL and OpSubgroupImageBlockWriteINTEL are to be resolved later on (in code)
12031215
1204- // Multiclass used to define builtin wrappers for the SPV_INTEL_subgroups extension .
1216+ // Multiclass used to define builtin wrappers for the SPV_INTEL_subgroups and the SPV_INTEL_media_block_io extensions .
12051217multiclass DemangledIntelSubgroupsBuiltinWrapper<string name, bits<8> numArgs, Op operation> {
12061218 def : DemangledBuiltin<!strconcat("__spirv_", name), OpenCL_std, IntelSubgroups, numArgs, numArgs>;
12071219 def : IntelSubgroupsBuiltin<!strconcat("__spirv_", name), operation>;
@@ -1215,6 +1227,8 @@ defm : DemangledIntelSubgroupsBuiltinWrapper<"SubgroupBlockReadINTEL", 1, OpSubg
12151227defm : DemangledIntelSubgroupsBuiltinWrapper<"SubgroupBlockWriteINTEL", 2, OpSubgroupBlockWriteINTEL>;
12161228defm : DemangledIntelSubgroupsBuiltinWrapper<"SubgroupImageBlockReadINTEL", 2, OpSubgroupImageBlockReadINTEL>;
12171229defm : DemangledIntelSubgroupsBuiltinWrapper<"SubgroupImageBlockWriteINTEL", 3, OpSubgroupImageBlockWriteINTEL>;
1230+ defm : DemangledIntelSubgroupsBuiltinWrapper<"SubgroupImageMediaBlockReadINTEL", 4, OpSubgroupImageMediaBlockReadINTEL>;
1231+ defm : DemangledIntelSubgroupsBuiltinWrapper<"SubgroupImageMediaBlockWriteINTEL", 5, OpSubgroupImageMediaBlockWriteINTEL>;
12181232
12191233//===----------------------------------------------------------------------===//
12201234// Class defining a builtin for group operations within uniform control flow.
0 commit comments