brintos

brintos / llvm-project-archived public Read only

0
0
Text · 58.9 KiB · 815d2d7 Raw
1026 lines · plain
1//===-- SPIRVInstrInfo.td - Target Description for SPIR-V Target ----------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file describes the SPIR-V instructions in TableGen format.10//11//===----------------------------------------------------------------------===//12 13include "SPIRVInstrFormats.td"14include "SPIRVSymbolicOperands.td"15 16// Codegen only metadata instructions17let isCodeGenOnly=1 in {18  def ASSIGN_TYPE: Pseudo<(outs ID:$dst_id), (ins ID:$src_id, TYPE:$src_ty)>;19}20 21def UNKNOWN_type22    : UnknownOp<(outs TYPE:$type), (ins i32imm:$opcode, variable_ops), " ">;23 24def SPVTypeBin : SDTypeProfile<1, 2, []>;25 26def assigntype : SDNode<"SPIRVISD::AssignType", SPVTypeBin>;27 28def : GINodeEquiv<ASSIGN_TYPE, assigntype>;29 30class BinOp<string name, bits<16> opCode, list<dag> pattern=[]>31                : Op<opCode, (outs ID:$dst), (ins TYPE:$src_ty, ID:$src, ID:$src2),32                  "$dst = "#name#" $src_ty $src $src2", pattern>;33 34class BinOpTyped<string name, bits<16> opCode, RegisterClass CID, SDNode node>35                : Op<opCode, (outs CID:$dst), (ins TYPE:$src_ty, CID:$src, CID:$src2),36                  "$dst = "#name#" $src_ty $src $src2",37                  [(set CID:$dst, (assigntype (node CID:$src, CID:$src2), TYPE:$src_ty))]>;38 39class TernOpTyped<string name, bits<16> opCode, RegisterClass CCond, RegisterClass CID, SDNode node>40                : Op<opCode, (outs CID:$dst), (ins TYPE:$src_ty, CCond:$cond, CID:$src1, CID:$src2),41                  "$dst = "#name#" $src_ty $cond $src1 $src2",42                  [(set CID:$dst, (assigntype (node CCond:$cond, CID:$src1, CID:$src2), TYPE:$src_ty))]>;43 44multiclass BinOpTypedGen<string name, bits<16> opCode, SDNode node, bit genF = 0, bit genV = 0> {45  if genF then46    def S: BinOpTyped<name, opCode, fID, node>;47  else48    def S: BinOpTyped<name, opCode, iID, node>;49  if genV then {50    if genF then51      def V: BinOpTyped<name, opCode, vfID, node>;52    else53      def V: BinOpTyped<name, opCode, vID, node>;54  }55}56 57multiclass TernOpTypedGen<string name, bits<16> opCode, SDNode node, bit genP = 1, bit genI = 1, bit genF = 0, bit genV = 0> {58  if genP then {59    def SPSCond: TernOpTyped<name, opCode, iID, pID, node>;60    def SPVCond: TernOpTyped<name, opCode, vID, pID, node>;61  }62  if genI then {63    def SISCond: TernOpTyped<name, opCode, iID, iID, node>;64    def SIVCond: TernOpTyped<name, opCode, vID, iID, node>;65  }66  if genF then {67    def SFSCond: TernOpTyped<name, opCode, iID, fID, node>;68    def SFVCond: TernOpTyped<name, opCode, vID, fID, node>;69  }70  if genV then {71    if genP then {72      def VPSCond: TernOpTyped<name, opCode, iID, vpID, node>;73      def VPVCond: TernOpTyped<name, opCode, vID, vpID, node>;74    }75    if genI then {76      def VISCond: TernOpTyped<name, opCode, iID, vID, node>;77      def VIVCond: TernOpTyped<name, opCode, vID, vID, node>;78    }79    if genF then {80      def VFSCond: TernOpTyped<name, opCode, iID, vfID, node>;81      def VFVCond: TernOpTyped<name, opCode, vID, vfID, node>;82    }83  }84}85 86class UnOp<string name, bits<16> opCode, list<dag> pattern=[]>87                : Op<opCode, (outs ID:$dst), (ins TYPE:$type, ID:$src),88                  "$dst = "#name#" $type $src", pattern>;89class UnOpTyped<string name, bits<16> opCode, RegisterClass CID, SDNode node>90                : Op<opCode, (outs CID:$dst), (ins TYPE:$src_ty, CID:$src),91                  "$dst = "#name#" $src_ty $src", [(set CID:$dst, (assigntype (node CID:$src), TYPE:$src_ty))]>;92 93class SimpleOp<string name, bits<16> opCode>: Op<opCode, (outs), (ins), name>;94 95// 3.42.1 Miscellaneous Instructions96 97def OpNop: SimpleOp<"OpNop", 0>;98def OpUndef: Op<1, (outs ID:$res), (ins TYPE:$type), "$res = OpUndef $type">;99def OpSizeOf: Op<321, (outs ID:$res), (ins TYPE:$ty, ID:$ptr), "$res = OpSizeOf $ty $ptr">;100 101//  - SPV_KHR_expect_assume : Expect assume instructions102def OpAssumeTrueKHR: Op<5630, (outs), (ins ID:$cond), "OpAssumeTrueKHR $cond">;103def OpExpectKHR: Op<5631, (outs ID:$res), (ins TYPE:$ty, ID:$val, ID:$expected), "$res = OpExpectKHR $ty $val $expected">;104 105// 3.42.2 Debug Instructions106 107def OpSourceContinued: Op<2, (outs), (ins StringImm:$str, variable_ops),108                  "OpSourceContinued $str">;109def OpSource: Op<3, (outs), (ins SourceLanguage:$lang, i32imm:$version, variable_ops),110                  "OpSource $lang $version">;111def OpSourceExtension: Op<4, (outs), (ins StringImm:$extension, variable_ops),112                  "OpSourceExtension $extension">;113def OpName: Op<5, (outs), (ins ANY:$tar, StringImm:$name, variable_ops), "OpName $tar $name">;114def OpMemberName: Op<6, (outs), (ins TYPE:$ty, i32imm:$mem, StringImm:$name, variable_ops),115                  "OpMemberName $ty $mem $name">;116def OpString: Op<7, (outs ID:$r), (ins StringImm:$s, variable_ops), "$r = OpString $s">;117def OpLine: Op<8, (outs), (ins ID:$file, i32imm:$ln, i32imm:$col), "OpLine $file $ln $col">;118def OpNoLine: Op<317, (outs), (ins), "OpNoLine">;119def OpModuleProcessed: Op<330, (outs), (ins StringImm:$process, variable_ops),120                  "OpModuleProcessed $process">;121 122// 3.42.3 Annotation Instructions123 124def OpDecorate: Op<71, (outs), (ins ANY:$target, Decoration:$dec, variable_ops),125                  "OpDecorate $target $dec">;126def OpMemberDecorate: Op<72, (outs), (ins TYPE:$t, i32imm:$m, Decoration:$d, variable_ops),127                  "OpMemberDecorate $t $m $d">;128 129// TODO Currently some deprecated opcodes are missing: OpDecorationGroup,130// OpGroupDecorate and OpGroupMemberDecorate131 132def OpDecorateId: Op<332, (outs), (ins ANY:$target, Decoration:$dec, variable_ops),133                  "OpDecorateId $target $dec">;134def OpDecorateString: Op<5632, (outs), (ins ANY:$t, Decoration:$d, StringImm:$s, variable_ops),135                  "OpDecorateString $t $d $s">;136def OpMemberDecorateString: Op<5633, (outs),137                  (ins TYPE:$ty, i32imm:$mem, Decoration:$dec, StringImm:$str, variable_ops),138                  "OpMemberDecorateString $ty $mem $dec $str">;139 140// 3.42.4 Extension Instructions141 142def OpExtension: Op<10, (outs), (ins StringImm:$name, variable_ops), "OpExtension $name">;143def OpExtInstImport: Op<11, (outs ID:$res), (ins StringImm:$extInstsName, variable_ops),144                  "$res = OpExtInstImport $extInstsName">;145// $set should have been a register by the SPIR-V specification,146// however, OpExtInst and OpExtInstImport get its own special case treatment147// after instruction selection, so `i32imm` is the correct definition from the148// perspective of the instruction selection pass149def OpExtInst: Op<12, (outs ID:$res), (ins TYPE:$ty, i32imm:$set, Extension:$inst, variable_ops),150                  "$res = OpExtInst $ty $set $inst">;151// 3.42.5 Mode-Setting Instructions152 153def OpMemoryModel: Op<14, (outs), (ins AddressingModel:$addr, MemoryModel:$mem),154                  "OpMemoryModel $addr $mem">;155def OpEntryPoint: Op<15, (outs),156                  (ins ExecutionModel:$model, ID:$entry, StringImm:$name, variable_ops),157                  "OpEntryPoint $model $entry $name">;158def OpExecutionMode: Op<16, (outs), (ins ID:$entry, ExecutionMode:$mode, variable_ops),159                  "OpExecutionMode $entry $mode">;160def OpCapability: Op<17, (outs), (ins Capability:$cap), "OpCapability $cap">;161def OpExecutionModeId: Op<331, (outs), (ins ID:$entry, ExecutionMode:$mode, variable_ops),162                  "OpExecutionModeId $entry $mode">;163 164// 3.42.6 Type-Declaration Instructions165 166def OpTypeVoid: Op<19, (outs TYPE:$type), (ins), "$type = OpTypeVoid">;167def OpTypeBool: Op<20, (outs TYPE:$type), (ins), "$type = OpTypeBool">;168def OpTypeInt: Op<21, (outs TYPE:$type), (ins i32imm:$width, i32imm:$signedness),169                  "$type = OpTypeInt $width $signedness">;170def OpTypeFloat: Op<22, (outs TYPE:$type), (ins i32imm:$width, variable_ops),171                  "$type = OpTypeFloat $width">;172def OpTypeVector: Op<23, (outs TYPE:$type), (ins TYPE:$compType, i32imm:$compCount),173                  "$type = OpTypeVector $compType $compCount">;174def OpTypeMatrix: Op<24, (outs TYPE:$type), (ins TYPE:$colType, i32imm:$colCount),175                  "$type = OpTypeMatrix $colType $colCount">;176def OpTypeImage: Op<25, (outs TYPE:$res), (ins TYPE:$sampTy, Dim:$dim, i32imm:$depth,177      i32imm:$arrayed, i32imm:$MS, i32imm:$sampled, ImageFormat:$imFormat, variable_ops),178                  "$res = OpTypeImage $sampTy $dim $depth $arrayed $MS $sampled $imFormat">;179def OpTypeSampler: Op<26, (outs TYPE:$res), (ins), "$res = OpTypeSampler">;180def OpTypeSampledImage: Op<27, (outs TYPE:$res), (ins TYPE:$imageType),181                  "$res = OpTypeSampledImage $imageType">;182def OpTypeArray: Op<28, (outs TYPE:$type), (ins TYPE:$elementType, ID:$length),183                  "$type = OpTypeArray $elementType $length">;184def OpTypeRuntimeArray: Op<29, (outs TYPE:$type), (ins TYPE:$elementType),185                  "$type = OpTypeRuntimeArray $elementType">;186def OpTypeStruct: Op<30, (outs TYPE:$res), (ins variable_ops), "$res = OpTypeStruct">;187def OpTypeStructContinuedINTEL: Op<6090, (outs), (ins variable_ops),188                  "OpTypeStructContinuedINTEL">;189def OpTypeOpaque: Op<31, (outs TYPE:$res), (ins StringImm:$name, variable_ops),190                  "$res = OpTypeOpaque $name">;191def OpTypePointer: Op<32, (outs TYPE:$res), (ins StorageClass:$storage, TYPE:$type),192                  "$res = OpTypePointer $storage $type">;193def OpTypeFunction: Op<33, (outs TYPE:$funcType), (ins TYPE:$returnType, variable_ops),194                  "$funcType = OpTypeFunction $returnType">;195def OpTypeEvent: Op<34, (outs TYPE:$res), (ins), "$res = OpTypeEvent">;196def OpTypeDeviceEvent: Op<35, (outs TYPE:$res), (ins), "$res = OpTypeDeviceEvent">;197def OpTypeReserveId: Op<36, (outs TYPE:$res), (ins), "$res = OpTypeReserveId">;198def OpTypeQueue: Op<37, (outs TYPE:$res), (ins), "$res = OpTypeQueue">;199def OpTypePipe: Op<38, (outs TYPE:$res), (ins AccessQualifier:$a), "$res = OpTypePipe $a">;200def OpTypeForwardPointer: Op<39, (outs), (ins TYPE:$ptrType, StorageClass:$storageClass),201                  "OpTypeForwardPointer $ptrType $storageClass">;202def OpTypePipeStorage: Op<322, (outs TYPE:$res), (ins), "$res = OpTypePipeStorage">;203def OpTypeNamedBarrier: Op<327, (outs TYPE:$res), (ins), "$res = OpTypeNamedBarrier">;204def OpTypeAccelerationStructureNV: Op<5341, (outs TYPE:$res), (ins),205                  "$res = OpTypeAccelerationStructureNV">;206def OpTypeCooperativeMatrixNV: Op<5358, (outs TYPE:$res),207                  (ins TYPE:$compType, ID:$scope, ID:$rows, ID:$cols),208                  "$res = OpTypeCooperativeMatrixNV $compType $scope $rows $cols">;209def OpTypeCooperativeMatrixKHR: Op<4456, (outs TYPE:$res),210                  (ins TYPE:$compType, ID:$scope, ID:$rows, ID:$cols, ID:$use),211                  "$res = OpTypeCooperativeMatrixKHR $compType $scope $rows $cols $use">;212 213// 3.42.7 Constant-Creation Instructions214 215multiclass IntFPImm<bits<16> opCode, string name> {216  def I: Op<opCode, (outs iID:$dst), (ins TYPE:$type, iID:$src, variable_ops),217                  "$dst = "#name#" $type">;218  def F: Op<opCode, (outs fID:$dst), (ins TYPE:$type, fID:$src, variable_ops),219                  "$dst = "#name#" $type">;220}221defm OpConstant: IntFPImm<43, "OpConstant">;222 223def ConstPseudoTrue: IntImmLeaf<i64, [{ return Imm.getBitWidth() == 1 && Imm.getZExtValue() == 1; }]>;224def ConstPseudoFalse: IntImmLeaf<i64, [{ return Imm.getBitWidth() == 1 && Imm.getZExtValue() == 0; }]>;225def OpConstantTrue: Op<41, (outs iID:$dst), (ins TYPE:$src_ty), "$dst = OpConstantTrue $src_ty",226                      [(set iID:$dst, (assigntype ConstPseudoTrue, TYPE:$src_ty))]>;227def OpConstantFalse: Op<42, (outs iID:$dst), (ins TYPE:$src_ty), "$dst = OpConstantFalse $src_ty",228                      [(set iID:$dst, (assigntype ConstPseudoFalse, TYPE:$src_ty))]>;229 230def OpConstantComposite: Op<44, (outs ID:$res), (ins TYPE:$type, variable_ops),231                  "$res = OpConstantComposite $type">;232def OpConstantCompositeContinuedINTEL: Op<6091, (outs), (ins variable_ops),233                  "OpConstantCompositeContinuedINTEL">;234 235def OpConstantSampler: Op<45, (outs ID:$res),236                  (ins TYPE:$t, SamplerAddressingMode:$s, i32imm:$p, SamplerFilterMode:$f),237                  "$res = OpConstantSampler $t $s $p $f">;238def OpConstantNull: Op<46, (outs ID:$dst), (ins TYPE:$src_ty), "$dst = OpConstantNull $src_ty">;239 240def OpSpecConstantTrue: Op<48, (outs ID:$r), (ins TYPE:$t), "$r = OpSpecConstantTrue $t">;241def OpSpecConstantFalse: Op<49, (outs ID:$r), (ins TYPE:$t), "$r = OpSpecConstantFalse $t">;242def OpSpecConstant: Op<50, (outs ID:$res), (ins TYPE:$type, i32imm:$imm, variable_ops),243                  "$res = OpSpecConstant $type $imm">;244def OpSpecConstantComposite: Op<51, (outs ID:$res), (ins TYPE:$type, variable_ops),245                  "$res = OpSpecConstantComposite $type">;246def OpSpecConstantCompositeContinuedINTEL: Op<6092, (outs), (ins variable_ops),247                  "OpSpecConstantCompositeContinuedINTEL">;248def OpSpecConstantOp: Op<52, (outs ID:$res), (ins TYPE:$t, SpecConstantOpOperands:$c, ID:$o, variable_ops),249                  "$res = OpSpecConstantOp $t $c $o">;250 251// 3.42.8 Memory Instructions252 253def OpVariable: Op<59, (outs ID:$res), (ins TYPE:$type, StorageClass:$sc, variable_ops),254                  "$res = OpVariable $type $sc">;255def OpImageTexelPointer: Op<60, (outs ID:$res),256                  (ins TYPE:$resType, ID:$image, ID:$coord, ID:$sample),257                  "$res = OpImageTexelPointer $resType $image $coord $sample">;258def OpLoad: Op<61, (outs ID:$res), (ins TYPE:$resType, ID:$pointer, variable_ops),259                  "$res = OpLoad $resType $pointer">;260def OpStore: Op<62, (outs), (ins ID:$pointer, ID:$objectToStore, variable_ops),261                  "OpStore $pointer $objectToStore">;262def OpCopyMemory: Op<63, (outs), (ins ID:$dest, ID:$src, variable_ops),263                  "OpCopyMemory $dest $src">;264def OpCopyMemorySized: Op<64, (outs), (ins ID:$dest, ID:$src, ID:$size, variable_ops),265                  "OpCopyMemorySized $dest $src $size">;266def OpAccessChain: Op<65, (outs ID:$res), (ins TYPE:$type, ID:$base, variable_ops),267                  "$res = OpAccessChain $type $base">;268def OpInBoundsAccessChain: Op<66, (outs ID:$res),269                  (ins TYPE:$type, ID:$base, variable_ops),270                  "$res = OpInBoundsAccessChain $type $base">;271def OpPtrAccessChain: Op<67, (outs ID:$res),272                  (ins TYPE:$type, ID:$base, ID:$element, variable_ops),273                  "$res = OpPtrAccessChain $type $base $element">;274def OpArrayLength: Op<68, (outs ID:$res), (ins TYPE:$resTy, ID:$struct, i32imm:$arrayMember),275                  "$res = OpArrayLength $resTy $struct $arrayMember">;276def OpGenericPtrMemSemantics: Op<69, (outs ID:$res), (ins TYPE:$resType, ID:$pointer),277                  "$res = OpGenericPtrMemSemantics $resType $pointer">;278def OpInBoundsPtrAccessChain: Op<70, (outs ID:$res),279                  (ins TYPE:$type, ID:$base, ID:$element, variable_ops),280                  "$res = OpInBoundsPtrAccessChain $type $base $element">;281def OpPtrEqual: Op<401, (outs ID:$res), (ins TYPE:$resType, ID:$a, ID:$b),282                  "$res = OpPtrEqual $resType $a $b">;283def OpPtrNotEqual: Op<402, (outs ID:$res), (ins TYPE:$resType, ID:$a, ID:$b),284                  "$res = OpPtrNotEqual $resType $a $b">;285def OpPtrDiff: Op<403, (outs ID:$res), (ins TYPE:$resType, ID:$a, ID:$b),286                  "$res = OpPtrDiff $resType $a $b">;287 288// - SPV_INTEL_variable_length_array289 290def OpVariableLengthArrayINTEL: Op<5818, (outs ID:$res), (ins TYPE:$type, ID:$length),291                  "$res = OpVariableLengthArrayINTEL $type $length">;292def OpSaveMemoryINTEL: Op<5819, (outs ID:$res), (ins TYPE:$type),293                  "$res = OpSaveMemoryINTEL $type">;294def OpRestoreMemoryINTEL: Op<5820, (outs), (ins ID:$ptr),295                  "OpRestoreMemoryINTEL $ptr">;296 297// 3.42.9 Function Instructions298 299def OpFunction: Op<54, (outs ID:$func),300                  (ins TYPE:$resType, FunctionControl:$funcControl, TYPE:$funcType),301                  "$func = OpFunction $resType $funcControl $funcType">;302def OpFunctionParameter: Op<55, (outs ID:$arg), (ins TYPE:$type),303                  "$arg = OpFunctionParameter $type">;304def OpFunctionEnd: Op<56, (outs), (ins), "OpFunctionEnd"> {305  let isTerminator=1;306}307def OpFunctionCall: Op<57, (outs ID:$res), (ins TYPE:$resType, ID:$function, variable_ops),308                  "$res = OpFunctionCall $resType $function">;309 310// 3.42.10 Image Instructions311 312def OpSampledImage: BinOp<"OpSampledImage", 86>;313 314def OpImageSampleImplicitLod: Op<87, (outs ID:$res),315                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, variable_ops),316                  "$res = OpImageSampleImplicitLod $type $sampledImage $coord">;317def OpImageSampleExplicitLod: Op<88, (outs ID:$res),318                  (ins TYPE:$ty, ID:$sImage, ID:$uv, ImageOperand:$op, ID:$i, variable_ops),319                  "$res = OpImageSampleExplicitLod $ty $sImage $uv $op $i">;320 321def OpImageSampleDrefImplicitLod: Op<89, (outs ID:$res),322                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, ID:$dref, variable_ops),323                  "$res = OpImageSampleDrefImplicitLod $type $sampledImage $dref $coord">;324def OpImageSampleDrefExplicitLod: Op<90, (outs ID:$res),325                  (ins TYPE:$ty, ID:$im, ID:$uv, ID:$d, ImageOperand:$op, ID:$i, variable_ops),326                  "$res = OpImageSampleDrefExplicitLod $ty $im $uv $d $op $i">;327 328def OpImageSampleProjImplicitLod: Op<91, (outs ID:$res),329                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, variable_ops),330                  "$res = OpImageSampleProjImplicitLod $type $sampledImage $coord">;331def OpImageSampleProjExplicitLod: Op<92, (outs ID:$res),332                  (ins TYPE:$ty, ID:$im, ID:$uv, ID:$d, ImageOperand:$op, ID:$i, variable_ops),333                  "$res = OpImageSampleProjExplicitLod $ty $im $uv $op $i">;334 335def OpImageSampleProjDrefImplicitLod: Op<93, (outs ID:$res),336                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, ID:$dref, variable_ops),337                  "$res = OpImageSampleProjDrefImplicitLod $type $sampledImage $dref $coord">;338def OpImageSampleProjDrefExplicitLod: Op<94, (outs ID:$res),339                  (ins TYPE:$ty, ID:$im, ID:$uv, ID:$d, ImageOperand:$op, ID:$i, variable_ops),340                  "$res = OpImageSampleProjDrefExplicitLod $ty $im $uv $d $op $i">;341 342def OpImageFetch: Op<95, (outs ID:$res),343                  (ins TYPE:$type, ID:$image, ID:$coord, variable_ops),344                  "$res = OpImageFetch $type $image $coord">;345def OpImageGather: Op<96, (outs ID:$res),346                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, ID:$component, variable_ops),347                  "$res = OpImageGather $type $sampledImage $coord $component">;348def OpImageDrefGather: Op<97, (outs ID:$res),349                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, ID:$dref, variable_ops),350                  "$res = OpImageDrefGather $type $sampledImage $coord $dref">;351 352def OpImageRead: Op<98, (outs ID:$res),353                  (ins TYPE:$type, ID:$image, ID:$coord, variable_ops),354                  "$res = OpImageRead $type $image $coord">;355def OpImageWrite: Op<99, (outs), (ins ID:$image, ID:$coord, ID:$texel, variable_ops),356                  "OpImageWrite $image $coord $texel">;357 358def OpImage: UnOp<"OpImage", 100>;359def OpImageQueryFormat: UnOp<"OpImageQueryFormat", 101>;360def OpImageQueryOrder: UnOp<"OpImageQueryOrder", 102>;361def OpImageQuerySizeLod: BinOp<"OpImageQuerySizeLod", 103>;362def OpImageQuerySize: UnOp<"OpImageQuerySize", 104>;363def OpImageQueryLod: BinOp<"OpImageQueryLod", 105>;364def OpImageQueryLevels: UnOp<"OpImageQueryLevels", 106>;365def OpImageQuerySamples: UnOp<"OpImageQuerySamples", 107>;366 367def OpImageSparseSampleImplicitLod: Op<305, (outs ID:$res),368                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, variable_ops),369                  "$res = OpImageSparseSampleImplicitLod $type $sampledImage $coord">;370def OpImageSparseSampleExplicitLod: Op<306, (outs ID:$res),371                  (ins TYPE:$ty, ID:$sImage, ID:$uv, ImageOperand:$op, ID:$i, variable_ops),372                  "$res = OpImageSparseSampleExplicitLod $ty $sImage $uv $op $i">;373 374def OpImageSparseSampleDrefImplicitLod: Op<307, (outs ID:$res),375                  (ins TYPE:$type, ID:$sampledImg, ID:$coord, ID:$dref, variable_ops),376                  "$res = OpImageSparseSampleDrefImplicitLod $type $sampledImg $dref $coord">;377def OpImageSparseSampleDrefExplicitLod: Op<308, (outs ID:$res),378                  (ins TYPE:$ty, ID:$im, ID:$uv, ID:$d, ImageOperand:$op, ID:$i, variable_ops),379                  "$res = OpImageSparseSampleDrefExplicitLod $ty $im $uv $d $op $i">;380 381def OpImageSparseSampleProjImplicitLod: Op<309, (outs ID:$res),382                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, variable_ops),383                  "$res = OpImageSparseSampleProjImplicitLod $type $sampledImage $coord">;384def OpImageSparseSampleProjExplicitLod: Op<310, (outs ID:$res),385                  (ins TYPE:$ty, ID:$im, ID:$uv, ID:$d, ImageOperand:$op, ID:$i, variable_ops),386                  "$res = OpImageSparseSampleProjExplicitLod $ty $im $uv $op $i">;387 388def OpImageSparseSampleProjDrefImplicitLod: Op<311, (outs ID:$res),389                  (ins TYPE:$type, ID:$sImage, ID:$coord, ID:$dref, variable_ops),390                  "$res = OpImageSparseSampleProjDrefImplicitLod $type $sImage $dref $coord">;391def OpImageSparseSampleProjDrefExplicitLod: Op<312, (outs ID:$res),392                  (ins TYPE:$ty, ID:$im, ID:$uv, ID:$d, ImageOperand:$op, ID:$i, variable_ops),393                  "$res = OpImageSparseSampleProjDrefExplicitLod $ty $im $uv $d $op $i">;394 395def OpImageSparseFetch: Op<313, (outs ID:$res),396                  (ins TYPE:$type, ID:$image, ID:$coord, variable_ops),397                  "$res = OpImageSparseFetch $type $image $coord">;398def OpImageSparseGather: Op<314, (outs ID:$res),399                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, ID:$component, variable_ops),400                  "$res = OpImageSparseGather $type $sampledImage $coord $component">;401def OpImageSparseDrefGather: Op<315, (outs ID:$res),402                  (ins TYPE:$type, ID:$sampledImage, ID:$coord, ID:$dref, variable_ops),403                  "$res = OpImageSparseDrefGather $type $sampledImage $coord $dref">;404 405def OpImageSparseTexelsResident: UnOp<"OpImageSparseTexelsResident", 316>;406 407def OpImageSparseRead: Op<320, (outs ID:$res),408                  (ins TYPE:$type, ID:$image, ID:$coord, variable_ops),409                  "$res = OpImageSparseRead $type $image $coord">;410 411def OpImageSampleFootprintNV: Op<5283, (outs ID:$res),412                  (ins TYPE:$ty, ID:$sImg, ID:$uv, ID:$granularity, ID:$coarse, variable_ops),413                  "$res = OpImageSampleFootprintNV $ty $sImg $uv $granularity $coarse">;414 415// 3.42.11 Conversion instructions416 417def OpConvertFToU : UnOp<"OpConvertFToU", 109>;418def OpConvertFToS : UnOp<"OpConvertFToS", 110>;419def OpConvertSToF : UnOp<"OpConvertSToF", 111>;420def OpConvertUToF : UnOp<"OpConvertUToF", 112>;421 422def OpUConvert : UnOp<"OpUConvert", 113>;423def OpSConvert : UnOp<"OpSConvert", 114>;424def OpFConvert : UnOp<"OpFConvert", 115>;425 426def OpQuantizeToF16 : UnOp<"OpQuantizeToF16", 116>;427 428def OpConvertPtrToU : UnOp<"OpConvertPtrToU", 117>;429 430def OpSatConvertSToU : UnOp<"OpSatConvertSToU", 118>;431def OpSatConvertUToS : UnOp<"OpSatConvertUToS", 119>;432 433def OpConvertUToPtr : UnOp<"OpConvertUToPtr", 120>;434def OpPtrCastToGeneric : UnOp<"OpPtrCastToGeneric", 121>;435def OpGenericCastToPtr : UnOp<"OpGenericCastToPtr", 122>;436def OpGenericCastToPtrExplicit : Op<123, (outs ID:$r), (ins TYPE:$t, ID:$p, StorageClass:$s),437                              "$r = OpGenericCastToPtrExplicit $t $p $s">;438def OpBitcast : UnOp<"OpBitcast", 124>;439 440// SPV_INTEL_usm_storage_classes441def OpPtrCastToCrossWorkgroupINTEL : UnOp<"OpPtrCastToCrossWorkgroupINTEL", 5934>;442def OpCrossWorkgroupCastToPtrINTEL : UnOp<"OpCrossWorkgroupCastToPtrINTEL", 5938>;443 444// SPV_INTEL_bfloat16_conversion445def OpConvertFToBF16INTEL : UnOp<"OpConvertFToBF16INTEL", 6116>;446def OpConvertBF16ToFINTEL : UnOp<"OpConvertBF16ToFINTEL", 6117>;447 448// SPV_INTEL_tensor_float32_conversion449def OpRoundFToTF32INTEL : UnOp<"OpRoundFToTF32INTEL", 6426>;450 451// 3.42.12 Composite Instructions452 453def OpVectorExtractDynamic: Op<77, (outs ID:$res), (ins TYPE:$type, vID:$vec, ID:$idx),454                  "$res = OpVectorExtractDynamic $type $vec $idx">;455def OpVectorInsertDynamic: Op<78, (outs ID:$res), (ins TYPE:$ty, ID:$vec, ID:$comp, ID:$idx),456                  "$res = OpVectorInsertDynamic $ty $vec $comp $idx">;457def OpVectorShuffle: Op<79, (outs ID:$res), (ins TYPE:$ty, ID:$v1, ID:$v2, variable_ops),458                  "$res = OpVectorShuffle $ty $v1 $v2">;459def OpCompositeConstruct: Op<80, (outs ID:$res), (ins TYPE:$type, variable_ops),460                  "$res = OpCompositeConstruct $type">;461def OpCompositeConstructContinuedINTEL: Op<6096, (outs), (ins variable_ops),462                  "OpCompositeConstructContinuedINTEL">;463def OpCompositeExtract: Op<81, (outs ID:$res), (ins TYPE:$type, ID:$base, variable_ops),464                  "$res = OpCompositeExtract $type $base">;465def OpCompositeInsert: Op<82, (outs ID:$r), (ins TYPE:$ty, ID:$obj, ID:$base, variable_ops),466                  "$r = OpCompositeInsert $ty $obj $base">;467def OpCopyObject: UnOp<"OpCopyObject", 83>;468def OpTranspose: UnOp<"OpTranspose", 84>;469def OpCopyLogical: UnOp<"OpCopyLogical", 400>;470 471// 3.42.13 Arithmetic Instructions472 473def OpSNegate: UnOp<"OpSNegate", 126>;474def OpFNegate: UnOpTyped<"OpFNegate", 127, fID, fneg>;475def OpFNegateV: UnOpTyped<"OpFNegate", 127, vfID, fneg>;476defm OpIAdd: BinOpTypedGen<"OpIAdd", 128, add, 0, 1>;477defm OpFAdd: BinOpTypedGen<"OpFAdd", 129, fadd, 1, 1>;478defm OpStrictFAdd: BinOpTypedGen<"OpFAdd", 129, strict_fadd, 1, 1>;479 480defm OpISub: BinOpTypedGen<"OpISub", 130, sub, 0, 1>;481defm OpFSub: BinOpTypedGen<"OpFSub", 131, fsub, 1, 1>;482defm OpStrictFSub: BinOpTypedGen<"OpFSub", 131, strict_fsub, 1, 1>;483 484defm OpIMul: BinOpTypedGen<"OpIMul", 132, mul, 0, 1>;485defm OpFMul: BinOpTypedGen<"OpFMul", 133, fmul, 1, 1>;486defm OpStrictFMul: BinOpTypedGen<"OpFMul", 133, strict_fmul, 1, 1>;487 488defm OpUDiv: BinOpTypedGen<"OpUDiv", 134, udiv, 0, 1>;489defm OpSDiv: BinOpTypedGen<"OpSDiv", 135, sdiv, 0, 1>;490defm OpFDiv: BinOpTypedGen<"OpFDiv", 136, fdiv, 1, 1>;491defm OpStrictFDiv: BinOpTypedGen<"OpFDiv", 136, strict_fdiv, 1, 1>;492 493defm OpUMod: BinOpTypedGen<"OpUMod", 137, urem, 0, 1>;494defm OpSRem: BinOpTypedGen<"OpSRem", 138, srem, 0, 1>;495 496def OpSMod: BinOp<"OpSMod", 139>;497 498defm OpFRem: BinOpTypedGen<"OpFRem", 140, frem, 1, 1>;499defm OpStrictFRem: BinOpTypedGen<"OpFRem", 140, strict_frem, 1, 1>;500 501def OpFMod: BinOp<"OpFMod", 141>;502 503def OpVectorTimesScalar: BinOp<"OpVectorTimesScalar", 142>;504def OpMatrixTimesScalar: BinOp<"OpMatrixTimesScalar", 143>;505def OpVectorTimesMatrix: BinOp<"OpVectorTimesMatrix", 144>;506def OpMatrixTimesVector: BinOp<"OpMatrixTimesVector", 145>;507def OpMatrixTimesMatrix: BinOp<"OpMatrixTimesMatrix", 146>;508 509def OpOuterProduct: BinOp<"OpOuterProduct", 147>;510def OpDot: BinOp<"OpDot", 148>;511 512defm OpIAddCarry: BinOpTypedGen<"OpIAddCarry", 149, addc, 0, 1>;513defm OpISubBorrow: BinOpTypedGen<"OpISubBorrow", 150, subc, 0, 1>;514def OpUMulExtended: BinOp<"OpUMulExtended", 151>;515def OpSMulExtended: BinOp<"OpSMulExtended", 152>;516 517def OpSDot: Op<4450, (outs ID:$res), (ins TYPE:$type, ID:$vec1, ID:$vec2, variable_ops),518                  "$res = OpSDot $type $vec1 $vec2">;519def OpUDot: Op<4451, (outs ID:$res), (ins TYPE:$type, ID:$vec1, ID:$vec2, variable_ops),520                  "$res = OpUDot $type $vec1 $vec2">;521def OpSUDot: Op<4452, (outs ID:$res), (ins TYPE:$type, ID:$vec1, ID:$vec2, variable_ops),522                  "$res = OpSUDot $type $vec1 $vec2">;523def OpSDotAccSat: Op<4453, (outs ID:$res), (ins TYPE:$type, ID:$vec1, ID:$vec2, ID:$acc, variable_ops),524                  "$res = OpSDotAccSat $type $vec1 $vec2 $acc">;525def OpUDotAccSat: Op<4454, (outs ID:$res), (ins TYPE:$type, ID:$vec1, ID:$vec2, ID:$acc, variable_ops),526                  "$res = OpUDotAccSat $type $vec1 $vec2 $acc">;527def OpSUDotAccSat: Op<4455, (outs ID:$res), (ins TYPE:$type, ID:$vec1, ID:$vec2, ID:$acc, variable_ops),528                  "$res = OpSUDotAccSat $type $vec1 $vec2 $acc">;529 530// 3.42.14 Bit Instructions531 532defm OpShiftRightLogical: BinOpTypedGen<"OpShiftRightLogical", 194, srl, 0, 1>;533defm OpShiftRightArithmetic: BinOpTypedGen<"OpShiftRightArithmetic", 195, sra, 0, 1>;534defm OpShiftLeftLogical: BinOpTypedGen<"OpShiftLeftLogical", 196, shl, 0, 1>;535 536defm OpBitwiseOr: BinOpTypedGen<"OpBitwiseOr", 197, or, 0, 1>;537defm OpBitwiseXor: BinOpTypedGen<"OpBitwiseXor", 198, xor, 0, 1>;538defm OpBitwiseAnd: BinOpTypedGen<"OpBitwiseAnd", 199, and, 0, 1>;539def OpNot: UnOp<"OpNot", 200>;540 541def OpBitFieldInsert: Op<201, (outs ID:$res),542                  (ins TYPE:$ty, ID:$base, ID:$insert, ID:$offset, ID:$count),543                  "$res = OpBitFieldInsert $ty $base $insert $offset $count">;544def OpBitFieldSExtract: Op<202, (outs ID:$res),545                  (ins TYPE:$ty, ID:$base, ID:$offset, ID:$count),546                  "$res = OpBitFieldSExtract $ty $base $offset $count">;547def OpBitFieldUExtract: Op<203, (outs ID:$res),548                  (ins TYPE:$ty, ID:$base, ID:$offset, ID:$count),549                  "$res = OpBitFieldUExtract $ty $base $offset $count">;550def OpBitReverse: Op<204, (outs ID:$r), (ins TYPE:$ty, ID:$b), "$r = OpBitReverse $ty $b">;551def OpBitCount: Op<205, (outs ID:$r), (ins TYPE:$ty, ID:$b), "$r = OpBitCount $ty $b">;552 553// 3.42.15 Relational and Logical Instructions554 555def OpAny: Op<154, (outs ID:$res), (ins TYPE:$ty, ID:$vec),556                  "$res = OpAny $ty $vec">;557def OpAll: Op<155, (outs ID:$res), (ins TYPE:$ty, ID:$vec),558                  "$res = OpAll $ty $vec">;559 560def OpIsNan: UnOp<"OpIsNan", 156>;561def OpIsInf: UnOp<"OpIsInf", 157>;562def OpIsFinite: UnOp<"OpIsFinite", 158>;563def OpIsNormal: UnOp<"OpIsNormal", 159>;564def OpSignBitSet: UnOp<"OpSignBitSet", 160>;565 566def OpLessOrGreater: BinOp<"OpLessOrGreater", 161>;567def OpOrdered: BinOp<"OpOrdered", 162>;568def OpUnordered: BinOp<"OpUnordered", 163>;569 570def OpLogicalEqual: BinOp<"OpLogicalEqual", 164>;571def OpLogicalNotEqual: BinOp<"OpLogicalNotEqual", 165>;572def OpLogicalOr: BinOp<"OpLogicalOr", 166>;573def OpLogicalAnd: BinOp<"OpLogicalAnd", 167>;574def OpLogicalNot: UnOp<"OpLogicalNot", 168>;575 576defm OpSelect: TernOpTypedGen<"OpSelect", 169, select, 1, 1, 1, 1>;577 578def OpIEqual: BinOp<"OpIEqual", 170>;579def OpINotEqual: BinOp<"OpINotEqual", 171>;580 581def OpUGreaterThan: BinOp<"OpUGreaterThan", 172>;582def OpSGreaterThan: BinOp<"OpSGreaterThan", 173>;583def OpUGreaterThanEqual: BinOp<"OpUGreaterThanEqual", 174>;584def OpSGreaterThanEqual: BinOp<"OpSGreaterThanEqual", 175>;585def OpULessThan: BinOp<"OpULessThan", 176>;586def OpSLessThan: BinOp<"OpSLessThan", 177>;587def OpULessThanEqual: BinOp<"OpULessThanEqual", 178>;588def OpSLessThanEqual: BinOp<"OpSLessThanEqual", 179>;589 590def OpFOrdEqual: BinOp<"OpFOrdEqual", 180>;591def OpFUnordEqual: BinOp<"OpFUnordEqual", 181>;592def OpFOrdNotEqual: BinOp<"OpFOrdNotEqual", 182>;593def OpFUnordNotEqual: BinOp<"OpFUnordNotEqual", 183>;594 595def OpFOrdLessThan: BinOp<"OpFOrdLessThan", 184>;596def OpFUnordLessThan: BinOp<"OpFUnordLessThan", 185>;597def OpFOrdGreaterThan: BinOp<"OpFOrdGreaterThan", 186>;598def OpFUnordGreaterThan: BinOp<"OpFUnordGreaterThan", 187>;599 600def OpFOrdLessThanEqual: BinOp<"OpFOrdLessThanEqual", 188>;601def OpFUnordLessThanEqual: BinOp<"OpFUnordLessThanEqual", 189>;602def OpFOrdGreaterThanEqual: BinOp<"OpFOrdGreaterThanEqual", 190>;603def OpFUnordGreaterThanEqual: BinOp<"OpFUnordGreaterThanEqual", 191>;604 605// 3.42.16 Derivative Instructions606 607def OpDPdx: UnOp<"OpDPdx", 207>;608def OpDPdy: UnOp<"OpDPdy", 208>;609def OpFwidth: UnOp<"OpFwidth", 209>;610 611def OpDPdxFine: UnOp<"OpDPdxFine", 210>;612def OpDPdyFine: UnOp<"OpDPdyFine", 211>;613def OpFwidthFine: UnOp<"OpFwidthFine", 212>;614 615def OpDPdxCoarse: UnOp<"OpDPdxCoarse", 213>;616def OpDPdyCoarse: UnOp<"OpDPdyCoarse", 214>;617def OpFwidthCoarse: UnOp<"OpFwidthCoarse", 215>;618 619// 3.42.17 Control-Flow Instructions620 621def OpPhi: Op<245, (outs ID:$res), (ins TYPE:$type, ID:$var0, ID:$block0, variable_ops),622                  "$res = OpPhi $type $var0 $block0">;623def OpLoopMerge: Op<246, (outs), (ins unknown:$merge, unknown:$continue, LoopControl:$lc, variable_ops),624                  "OpLoopMerge $merge $continue $lc">;625def OpSelectionMerge: Op<247, (outs), (ins unknown:$merge, SelectionControl:$sc),626                  "OpSelectionMerge $merge $sc">;627def OpLabel: Op<248, (outs ID:$label), (ins), "$label = OpLabel">;628let isBarrier = 1, isTerminator = 1, isBranch = 1 in {629  def OpBranch: Op<249, (outs), (ins unknown:$label), "OpBranch $label">;630  def OpBranchConditional: Op<250, (outs), (ins ID:$cond, unknown:$true, unknown:$false, variable_ops),631                  "OpBranchConditional $cond $true $false">;632  def OpSwitch: Op<251, (outs), (ins ID:$sel, ID:$dflt, variable_ops), "OpSwitch $sel $dflt">;633}634let isReturn = 1, hasDelaySlot = 0, isBarrier = 0, isTerminator = 1, isNotDuplicable = 1 in {635  def OpKill: SimpleOp<"OpKill", 252>;636  def OpReturn: SimpleOp<"OpReturn", 253>;637  def OpReturnValue: Op<254, (outs), (ins ID:$ret), "OpReturnValue $ret">;638  def OpUnreachable: SimpleOp<"OpUnreachable", 255>;639}640def OpLifetimeStart: Op<256, (outs), (ins ID:$ptr, i32imm:$sz), "OpLifetimeStart $ptr $sz">;641def OpLifetimeStop: Op<257, (outs), (ins ID:$ptr, i32imm:$sz), "OpLifetimeStop $ptr $sz">;642def OpDemoteToHelperInvocation: SimpleOp<"OpDemoteToHelperInvocation", 5380>;643 644// 3.42.18 Atomic Instructions645 646class AtomicOp<string name, bits<16> opCode>: Op<opCode, (outs ID:$res),647                  (ins TYPE:$ty, ID:$ptr, ID:$sc, ID:$sem),648                  "$res = "#name#" $ty $ptr $sc $sem">;649 650class AtomicOpVal<string name, bits<16> opCode>: Op<opCode, (outs ID:$res),651                  (ins TYPE:$ty, ID:$ptr, ID:$sc, ID:$sem, ID:$val),652                  "$res = "#name#" $ty $ptr $sc $sem $val">;653 654def OpAtomicLoad: AtomicOp<"OpAtomicLoad", 227>;655 656def OpAtomicStore: Op<228, (outs), (ins ID:$ptr, ID:$sc, ID:$sem, ID:$val),657                  "OpAtomicStore $ptr $sc $sem $val">;658def OpAtomicExchange: Op<229, (outs ID:$res),659                  (ins TYPE:$ty, ID:$ptr, ID:$sc, ID:$sem, ID:$val),660                  "$res = OpAtomicExchange $ty $ptr $sc $sem $val">;661def OpAtomicCompareExchange: Op<230, (outs ID:$res),662                  (ins TYPE:$ty, ID:$ptr, ID:$sc, ID:$eq,663                   ID:$neq, ID:$val, ID:$cmp),664                  "$res = OpAtomicCompareExchange $ty $ptr $sc $eq $neq $val $cmp">;665def OpAtomicCompareExchangeWeak: Op<231, (outs ID:$res),666                   (ins TYPE:$ty, ID:$ptr, ID:$sc, ID:$eq,667                    ID:$neq, ID:$val, ID:$cmp),668                   "$res = OpAtomicCompareExchangeWeak $ty $ptr $sc $eq $neq $val $cmp">;669 670def OpAtomicIIncrement: AtomicOp<"OpAtomicIIncrement", 232>;671def OpAtomicIDecrement: AtomicOp<"OpAtomicIDecrement", 233>;672 673def OpAtomicIAdd: AtomicOpVal<"OpAtomicIAdd", 234>;674def OpAtomicISub: AtomicOpVal<"OpAtomicISub", 235>;675 676def OpAtomicSMin: AtomicOpVal<"OpAtomicSMin", 236>;677def OpAtomicUMin: AtomicOpVal<"OpAtomicUMin", 237>;678def OpAtomicSMax: AtomicOpVal<"OpAtomicSMax", 238>;679def OpAtomicUMax: AtomicOpVal<"OpAtomicUMax", 239>;680 681def OpAtomicAnd: AtomicOpVal<"OpAtomicAnd", 240>;682def OpAtomicOr: AtomicOpVal<"OpAtomicOr", 241>;683def OpAtomicXor: AtomicOpVal<"OpAtomicXor", 242>;684 685def OpAtomicFAddEXT: AtomicOpVal<"OpAtomicFAddEXT", 6035>;686def OpAtomicFMinEXT: AtomicOpVal<"OpAtomicFMinEXT", 5614>;687def OpAtomicFMaxEXT: AtomicOpVal<"OpAtomicFMaxEXT", 5615>;688 689def OpAtomicFlagTestAndSet: AtomicOp<"OpAtomicFlagTestAndSet", 318>;690def OpAtomicFlagClear: Op<319, (outs), (ins ID:$ptr, ID:$sc, ID:$sem),691                  "OpAtomicFlagClear $ptr $sc $sem">;692 693// 3.42.19 Primitive Instructions694 695def OpEmitVertex: SimpleOp<"OpEmitVertex", 218>;696def OpEndPrimitive: SimpleOp<"OpEndPrimitive", 219>;697def OpEmitStreamVertex: Op<220, (outs), (ins ID:$stream), "OpEmitStreamVertex $stream">;698def OpEndStreamPrimitive: Op<221, (outs), (ins ID:$stream), "OpEndStreamPrimitive $stream">;699 700// 3.42.20 Barrier Instructions701 702def OpControlBarrier: Op<224, (outs), (ins ID:$exec, ID:$mem, ID:$sem),703                  "OpControlBarrier $exec $mem $sem">;704def OpMemoryBarrier: Op<225, (outs), (ins ID:$mem, ID:$sem),705                  "OpMemoryBarrier $mem $sem">;706def OpNamedBarrierInitialize: UnOp<"OpNamedBarrierInitialize", 328>;707def OpMemoryNamedBarrier: Op<329, (outs), (ins ID:$barr, ID:$mem, ID:$sem),708                  "OpMemoryNamedBarrier $barr $mem $sem">;709 710// SPV_INTEL_split_barrier711def OpControlBarrierArriveINTEL: Op<6142, (outs), (ins ID:$exec, ID:$mem, ID:$sem),712                  "OpControlBarrierArriveINTEL $exec $mem $sem">;713def OpControlBarrierWaitINTEL: Op<6143, (outs), (ins ID:$exec, ID:$mem, ID:$sem),714                  "OpControlBarrierWaitINTEL $exec $mem $sem">;715 716// 3.42.21. Group and Subgroup Instructions717 718def OpGroupAsyncCopy: Op<259, (outs ID:$res), (ins TYPE:$ty, ID:$scope,719                  ID:$dst, ID:$src, ID:$nelts, ID:$stride, ID:$event),720                  "$res = OpGroupAsyncCopy $ty $scope $dst $src $nelts $stride $event">;721def OpGroupWaitEvents: Op<260, (outs), (ins ID:$scope, ID:$nelts, ID:$elist),722                  "OpGroupWaitEvents $scope $nelts $elist">;723def OpGroupAll: Op<261, (outs ID:$res), (ins TYPE:$ty, ID:$scope, ID:$pr),724                  "$res = OpGroupAll $ty $scope $pr">;725def OpGroupAny: Op<262, (outs ID:$res), (ins TYPE:$ty, ID:$scope, ID:$pr),726                  "$res = OpGroupAny $ty $scope $pr">;727def OpGroupBroadcast: Op<263, (outs ID:$res), (ins TYPE:$ty, ID:$scope,728                               ID:$val, ID:$id),729                  "$res = OpGroupBroadcast $ty $scope $val $id">;730class OpGroup<string name, bits<16> opCode>: Op<opCode, (outs ID:$res),731                  (ins TYPE:$ty, ID:$scope, GroupOperation:$groupOp, ID:$x),732                  "$res = OpGroup"#name#" $ty $scope $groupOp $x">;733def OpGroupIAdd: OpGroup<"IAdd", 264>;734def OpGroupFAdd: OpGroup<"FAdd", 265>;735def OpGroupFMin: OpGroup<"FMin", 266>;736def OpGroupUMin: OpGroup<"UMin", 267>;737def OpGroupSMin: OpGroup<"SMin", 268>;738def OpGroupFMax: OpGroup<"FMax", 269>;739def OpGroupUMax: OpGroup<"UMax", 270>;740def OpGroupSMax: OpGroup<"SMax", 271>;741 742def OpSubgroupMatrixMultiplyAccumulateINTEL: Op<6237, (outs ID:$res),743        (ins TYPE:$ty, ID:$KDim, ID:$A, ID:$B, ID:$C, variable_ops),744                  "$res = OpSubgroupMatrixMultiplyAccumulateINTEL $ty $KDim $A $B $C">;745 746// TODO: 3.42.22. Device-Side Enqueue Instructions747def OpEnqueueKernel: Op<292, (outs ID:$res), (ins TYPE:$type, ID:$queue, ID:$flags, ID:$NDR, ID:$nevents, ID:$wevents,748                                              ID:$revent, ID:$invoke, ID:$param, ID:$psize, ID:$palign, variable_ops),749                  "$res = OpEnqueueKernel $type $queue $flags $NDR $nevents $wevents $revent $invoke $param $psize $palign">;750def OpRetainEvent: Op<297, (outs), (ins ID:$event), "OpRetainEvent $event">;751def OpReleaseEvent: Op<298, (outs), (ins ID:$event), "OpReleaseEvent $event">;752def OpCreateUserEvent: Op<299, (outs ID:$res), (ins TYPE:$type),753                  "$res = OpCreateUserEvent $type">;754def OpIsValidEvent: Op<300, (outs ID:$res), (ins TYPE:$type, ID:$event),755                  "$res = OpIsValidEvent $type $event ">;756def OpSetUserEventStatus: Op<301, (outs), (ins ID:$event, ID:$status),757                  "OpSetUserEventStatus $event $status">;758def OpCaptureEventProfilingInfo: Op<302, (outs),759                  (ins ID:$event, ID:$info, ID:$value),760                  "OpCaptureEventProfilingInfo $event $info $value">;761def OpGetDefaultQueue: Op<303, (outs ID:$res), (ins TYPE:$type),762                  "$res = OpGetDefaultQueue $type">;763def OpBuildNDRange: Op<304, (outs ID:$res), (ins TYPE:$type, ID:$GWS, ID:$LWS, ID:$GWO),764                  "$res = OpBuildNDRange $type $GWS $LWS $GWO">;765 766// 3.42.23. Pipe Instructions767 768def OpReadPipe: Op<274, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$Pointer, ID:$PcktSize, ID:$PcktAlign),769                  "$res = OpReadPipe $type $Pipe $Pointer $PcktSize $PcktAlign">;770def OpWritePipe: Op<275, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$Pointer, ID:$PcktSize, ID:$PcktAlign),771                  "$res = OpWritePipe $type $Pipe $Pointer $PcktSize $PcktAlign">;772def OpReservedReadPipe : Op<276, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$ReserveId, ID:$Index, ID:$Pointer, ID:$PcktSize, ID:$PcktAlign),773                  "$res = OpReservedReadPipe $type $Pipe $ReserveId $Index $Pointer $PcktSize $PcktAlign">;774def OpReservedWritePipe : Op<277, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$ReserveId, ID:$Index, ID:$Pointer, ID:$PcktSize, ID:$PcktAlign), 775                  "$res = OpReservedWritePipe $type $Pipe $ReserveId $Index $Pointer $PcktSize $PcktAlign">;776def OpReserveReadPipePackets : Op<278, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$NumPckts, ID:$PcktSize, ID:$PcktAlign),777                  "$res = OpReserveReadPipePackets $type $Pipe $NumPckts $PcktSize $PcktAlign">;778def OpReserveWritePipePackets : Op<279, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$NumPckts, ID:$PcktSize, ID:$PcktAlign),779                  "$res = OpReserveWritePipePackets $type $Pipe $NumPckts $PcktSize $PcktAlign">;780def OpCommitReadPipe : Op<280, (outs), (ins ID:$Pipe, ID:$ReserveId, ID:$PcktSize, ID:$PcktAlign),781                  "OpCommitReadPipe $Pipe $ReserveId $PcktSize $PcktAlign">;782def OpCommitWritePipe : Op<281, (outs), (ins ID:$Pipe, ID:$ReserveId, ID:$PcktSize, ID:$PcktAlign),783                  "OpCommitWritePipe $Pipe $ReserveId $PcktSize $PcktAlign">;784def OpIsValidReserveId : Op<282, (outs ID:$res), (ins TYPE:$type, ID:$ReserveId),785                  "$res = OpIsValidReserveId $type $ReserveId">;786def OpGetNumPipePackets : Op<283, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$PacketSize, ID:$PacketAlign),787                  "$res = OpGetNumPipePackets $type $Pipe $PacketSize $PacketAlign">;788def OpGetMaxPipePackets : Op<284, (outs ID:$res), (ins TYPE:$type, ID:$Pipe, ID:$PacketSize, ID:$PacketAlign),789                  "$res = OpGetMaxPipePackets $type $Pipe $PacketSize $PacketAlign">;790def OpGroupReserveReadPipePackets : Op<285, (outs ID:$res), (ins TYPE:$type, ID:$Scope, ID:$Pipe, ID:$NumPckts, ID:$PacketSize, ID:$PacketAlign),791                  "$res = OpGroupReserveReadPipePackets $type $Scope $Pipe $NumPckts $PacketSize $PacketAlign">;792def OpGroupReserveWritePipePackets : Op<286, (outs ID:$res), (ins TYPE:$type, ID:$Scope, ID:$Pipe, ID:$NumPckts, ID:$PacketSize, ID:$PacketAlign),793                  "$res = OpGroupReserveWritePipePackets $type $Scope $Pipe $NumPckts $PacketSize $PacketAlign">;794def OpGroupCommitReadPipe : Op<287, (outs), (ins ID:$Scope, ID:$Pipe, ID:$ReserveId, ID:$PacketSize, ID:$PacketAlign),795                  "OpGroupCommitReadPipe $Scope $Pipe $ReserveId $PacketSize $PacketAlign">;796def OpGroupCommitWritePipe : Op<288, (outs), (ins ID:$Scope, ID:$Pipe, ID:$ReserveId, ID:$PacketSize, ID:$PacketAlign),797                  "OpGroupCommitWritePipe $Scope $Pipe $ReserveId $PacketSize $PacketAlign">;798 799// 3.42.24. Non-Uniform Instructions800 801def OpGroupNonUniformElect: Op<333, (outs ID:$res), (ins TYPE:$ty, ID:$scope),802                  "$res = OpGroupNonUniformElect $ty $scope">;803class OpGroupNU3<string name, bits<16> opCode>: Op<opCode,804                  (outs ID:$res), (ins TYPE:$ty, ID:$scope, ID:$pred),805                  "$res = OpGroupNonUniform"#name#" $ty $scope $pred">;806class OpGroupNU4<string name, bits<16> opCode>: Op<opCode,807                  (outs ID:$res), (ins TYPE:$ty, ID:$scope, ID:$val, ID:$id),808                  "$res = OpGroupNonUniform"#name#" $ty $scope $val $id">;809def OpGroupNonUniformAll: OpGroupNU3<"All", 334>;810def OpGroupNonUniformAny: OpGroupNU3<"Any", 335>;811def OpGroupNonUniformAllEqual: OpGroupNU3<"AllEqual", 336>;812def OpGroupNonUniformBroadcast: OpGroupNU4<"Broadcast", 337>;813def OpGroupNonUniformBroadcastFirst: OpGroupNU3<"BroadcastFirst", 338>;814def OpGroupNonUniformBallot: OpGroupNU3<"Ballot", 339>;815def OpGroupNonUniformInverseBallot: OpGroupNU3<"InverseBallot", 340>;816def OpGroupNonUniformBallotBitExtract: OpGroupNU4<"BallotBitExtract", 341>;817def OpGroupNonUniformBallotBitCount: Op<342, (outs ID:$res),818                  (ins TYPE:$ty, ID:$scope, GroupOperation:$groupOp, ID:$val),819                  "$res = OpGroupNonUniformBallotBitCount "820                          "$ty $scope $groupOp $val">;821def OpGroupNonUniformBallotFindLSB: OpGroupNU3<"BallotFindLSB", 343>;822def OpGroupNonUniformBallotFindMSB: OpGroupNU3<"BallotFindMSB", 344>;823def OpGroupNonUniformShuffle: OpGroupNU4<"Shuffle", 345>;824def OpGroupNonUniformShuffleXor: OpGroupNU4<"ShuffleXor", 346>;825def OpGroupNonUniformShuffleUp: OpGroupNU4<"ShuffleUp", 347>;826def OpGroupNonUniformShuffleDown: OpGroupNU4<"ShuffleDown", 348>;827class OpGroupNUGroup<string name, bits<16> opCode>: Op<opCode, (outs ID:$res),828                  (ins TYPE:$ty, ID:$scope, GroupOperation:$groupOp,829                   ID:$val, variable_ops),830                  "$res = OpGroupNonUniform"#name#" $ty $scope $groupOp $val">;831def OpGroupNonUniformIAdd: OpGroupNUGroup<"IAdd", 349>;832def OpGroupNonUniformFAdd: OpGroupNUGroup<"FAdd", 350>;833def OpGroupNonUniformIMul: OpGroupNUGroup<"IMul", 351>;834def OpGroupNonUniformFMul: OpGroupNUGroup<"FMul", 352>;835def OpGroupNonUniformSMin: OpGroupNUGroup<"SMin", 353>;836def OpGroupNonUniformUMin: OpGroupNUGroup<"UMin", 354>;837def OpGroupNonUniformFMin: OpGroupNUGroup<"FMin", 355>;838def OpGroupNonUniformSMax: OpGroupNUGroup<"SMax", 356>;839def OpGroupNonUniformUMax: OpGroupNUGroup<"UMax", 357>;840def OpGroupNonUniformFMax: OpGroupNUGroup<"FMax", 358>;841def OpGroupNonUniformBitwiseAnd: OpGroupNUGroup<"BitwiseAnd", 359>;842def OpGroupNonUniformBitwiseOr: OpGroupNUGroup<"BitwiseOr", 360>;843def OpGroupNonUniformBitwiseXor: OpGroupNUGroup<"BitwiseXor", 361>;844def OpGroupNonUniformLogicalAnd: OpGroupNUGroup<"LogicalAnd", 362>;845def OpGroupNonUniformLogicalOr: OpGroupNUGroup<"LogicalOr", 363>;846def OpGroupNonUniformLogicalXor: OpGroupNUGroup<"LogicalXor", 364>;847 848// SPV_KHR_subgroup_rotate849def OpGroupNonUniformRotateKHR: Op<4431, (outs ID:$res),850                  (ins TYPE:$type, ID:$scope, ID:$value, ID:$delta, variable_ops),851                  "$res = OpGroupNonUniformRotateKHR $type $scope $value $delta">;852 853// SPV_KHR_shader_clock854def OpReadClockKHR: Op<5056, (outs ID:$res),855                  (ins TYPE:$type, ID:$scope),856                  "$res = OpReadClockKHR $type $scope">;857 858// 3.49.7, Constant-Creation Instructions859 860//  - SPV_INTEL_function_pointers861def OpConstantFunctionPointerINTEL: Op<5600, (outs ID:$res), (ins TYPE:$ty, ID:$fun), "$res = OpConstantFunctionPointerINTEL $ty $fun">;862 863// 3.49.9. Function Instructions864 865//  - SPV_INTEL_function_pointers866def OpFunctionPointerCallINTEL: Op<5601, (outs ID:$res), (ins TYPE:$ty, ID:$funPtr, variable_ops), "$res = OpFunctionPointerCallINTEL $ty $funPtr">;867 868// 3.49.21. Group and Subgroup Instructions869 870// - SPV_INTEL_subgroups871def OpSubgroupShuffleINTEL: Op<5571, (outs ID:$res), (ins TYPE:$type, ID:$data, ID:$invocationId),872                  "$res = OpSubgroupShuffleINTEL $type $data $invocationId">;873def OpSubgroupShuffleDownINTEL: Op<5572, (outs ID:$res), (ins TYPE:$type, ID:$current, ID:$next, ID:$delta),874                  "$res = OpSubgroupShuffleDownINTEL $type $current $next $delta">;875def OpSubgroupShuffleUpINTEL: Op<5573, (outs ID:$res), (ins TYPE:$type, ID:$previous, ID:$current, ID:$delta),876                  "$res = OpSubgroupShuffleUpINTEL $type $previous $current $delta">;877def OpSubgroupShuffleXorINTEL: Op<5574, (outs ID:$res), (ins TYPE:$type, ID:$data, ID:$value),878                  "$res = OpSubgroupShuffleXorINTEL $type $data $value">;879def OpSubgroupBlockReadINTEL: Op<5575, (outs ID:$res), (ins TYPE:$type, ID:$ptr),880                  "$res = OpSubgroupBlockReadINTEL $type $ptr">;881def OpSubgroupBlockWriteINTEL: Op<5576, (outs), (ins ID:$ptr, ID:$data),882                  "OpSubgroupBlockWriteINTEL $ptr $data">;883def OpSubgroupImageBlockReadINTEL: Op<5577, (outs ID:$res), (ins TYPE:$type, ID:$image, ID:$coordinate),884                  "$res = OpSubgroupImageBlockReadINTEL $type $image $coordinate">;885def OpSubgroupImageBlockWriteINTEL: Op<5578, (outs), (ins ID:$image, ID:$coordinate, ID:$data),886                  "OpSubgroupImageBlockWriteINTEL $image $coordinate $data">;887 888// SPV_INTEL_media_block_io889def OpSubgroupImageMediaBlockReadINTEL: Op<5580, (outs ID:$res), (ins TYPE:$type, ID:$image, ID:$coordinate, ID:$width, ID:$height),890                  "$res = OpSubgroupImageMediaBlockReadINTEL $type $image $coordinate $width $height">;891def OpSubgroupImageMediaBlockWriteINTEL: Op<5581, (outs), (ins ID:$image, ID:$coordinate, ID:$width, ID:$height, ID:$data),892                  "OpSubgroupImageMediaBlockWriteINTEL $image $coordinate $width $height $data">;893 894// - SPV_KHR_uniform_group_instructions895def OpGroupIMulKHR: Op<6401, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),896                  "$res = OpGroupIMulKHR $type $scope $groupOp $value">;897def OpGroupFMulKHR: Op<6402, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),898                  "$res = OpGroupFMulKHR $type $scope $groupOp $value">;899def OpGroupBitwiseAndKHR: Op<6403, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),900                  "$res = OpGroupBitwiseAndKHR $type $scope $groupOp $value">;901def OpGroupBitwiseOrKHR: Op<6404, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),902                  "$res = OpGroupBitwiseOrKHR $type $scope $groupOp $value">;903def OpGroupBitwiseXorKHR: Op<6405, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),904                  "$res = OpGroupBitwiseXorKHR $type $scope $groupOp $value">;905def OpGroupLogicalAndKHR: Op<6406, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),906                  "$res = OpGroupLogicalAndKHR $type $scope $groupOp $value">;907def OpGroupLogicalOrKHR: Op<6407, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),908                  "$res = OpGroupLogicalOrKHR $type $scope $groupOp $value">;909def OpGroupLogicalXorKHR: Op<6408, (outs ID:$res), (ins TYPE:$type, ID:$scope, i32imm:$groupOp, ID:$value),910                  "$res = OpGroupLogicalXorKHR $type $scope $groupOp $value">;911 912// Inline Assembly Instructions913def OpAsmTargetINTEL: Op<5609, (outs ID:$res), (ins StringImm:$str, variable_ops), "$res = OpAsmTargetINTEL $str">;914def OpAsmINTEL: Op<5610, (outs ID:$res), (ins TYPE:$type, TYPE:$asm_type, ID:$target,915                                          StringImm:$asm, StringImm:$constraints, variable_ops),916                  "$res = OpAsmINTEL $type $asm_type $target $asm">;917def OpAsmCallINTEL: Op<5611, (outs ID:$res), (ins TYPE:$type, ID:$asm, variable_ops),918                  "$res = OpAsmCallINTEL $type $asm">;919 920// SPV_KHR_cooperative_matrix921def OpCooperativeMatrixLoadKHR: Op<4457, (outs ID:$res),922                  (ins TYPE:$resType, ID:$pointer, ID:$memory_layout, variable_ops),923                  "$res = OpCooperativeMatrixLoadKHR $resType $pointer $memory_layout">;924def OpCooperativeMatrixStoreKHR: Op<4458, (outs),925                  (ins ID:$pointer, ID:$objectToStore, ID:$memory_layout, variable_ops),926                  "OpCooperativeMatrixStoreKHR $pointer $objectToStore $memory_layout">;927def OpCooperativeMatrixMulAddKHR: Op<4459, (outs ID:$res),928                  (ins TYPE:$type, ID:$A, ID:$B, ID:$C, variable_ops),929                  "$res = OpCooperativeMatrixMulAddKHR $type $A $B $C">;930def OpCooperativeMatrixLengthKHR: Op<4460, (outs ID:$res), (ins TYPE:$type, ID:$coop_matr_type),931                  "$res = OpCooperativeMatrixLengthKHR $type $coop_matr_type">;932 933// SPV_INTEL_joint_matrix934def OpCooperativeMatrixLoadCheckedINTEL: Op<6193, (outs ID:$res),935                  (ins TYPE:$resType, ID:$pointer, ID:$xOffset, ID:$yOffset, ID:$memory_layout, ID:$height, ID:$width, variable_ops),936                  "$res = OpCooperativeMatrixLoadCheckedINTEL $resType $pointer $xOffset $yOffset $memory_layout $height $width">;937def OpCooperativeMatrixStoreCheckedINTEL: Op<6194, (outs),938                  (ins ID:$pointer, ID:$xOffset, ID:$yOffset, ID:$objectToStore, ID:$memory_layout, ID:$height, ID:$width, variable_ops),939                  "OpCooperativeMatrixStoreCheckedINTEL $pointer $xOffset $yOffset $objectToStore $memory_layout $height $width">;940def OpCooperativeMatrixConstructCheckedINTEL: Op<6195, (outs ID:$res),941                  (ins TYPE:$resType, ID:$xOffset, ID:$yOffset, ID:$height, ID:$width, ID:$value),942                  "$res = OpCooperativeMatrixConstructCheckedINTEL $resType $xOffset $yOffset $height $width $value">;943def OpCooperativeMatrixGetElementCoordINTEL: Op<6440, (outs ID:$res),944                  (ins TYPE:$resType, ID:$matrix, ID:$index),945                  "$res = OpCooperativeMatrixGetElementCoordINTEL $resType $matrix $index">;946def OpCooperativeMatrixPrefetchINTEL: Op<6449, (outs),947                  (ins ID:$pointer, ID:$rows, ID:$columns, i32imm:$cacheLevel, ID:$memory_layout, variable_ops),948                  "OpCooperativeMatrixPrefetchINTEL $pointer $rows $columns $cacheLevel $memory_layout">;949 950// SPV_EXT_arithmetic_fence951def OpArithmeticFenceEXT: Op<6145, (outs ID:$res), (ins TYPE:$type, ID:$target),952                  "$res = OpArithmeticFenceEXT $type $target">;953 954// SPV_INTEL_bindless_images955def OpConvertHandleToImageINTEL: Op<6529, (outs ID:$res), (ins TYPE:$type, ID:$operand),956                  "$res = OpConvertHandleToImageINTEL $type $operand">;957def OpConvertHandleToSamplerINTEL: Op<6530, (outs ID:$res), (ins TYPE:$type, ID:$operand),958                  "$res = OpConvertHandleToSamplerINTEL $type $operand">;959def OpConvertHandleToSampledImageINTEL: Op<6531, (outs ID:$res), (ins TYPE:$type, ID:$operand),960                  "$res = OpConvertHandleToSampledImageINTEL $type $operand">;961 962// SPV_INTEL_memory_access_aliasing963def OpAliasDomainDeclINTEL: Op<5911, (outs ID:$res), (ins variable_ops),964                  "$res = OpAliasDomainDeclINTEL">;965def OpAliasScopeDeclINTEL: Op<5912, (outs ID:$res), (ins ID:$AliasDomain, variable_ops),966                  "$res = OpAliasScopeDeclINTEL $AliasDomain">;967def OpAliasScopeListDeclINTEL: Op<5913, (outs ID:$res), (ins variable_ops),968                  "$res = OpAliasScopeListDeclINTEL">;969 970// SPV_INTEL_ternary_bitwise_function971def OpBitwiseFunctionINTEL: Op<6242, (outs ID:$res), (ins TYPE:$type, ID:$a, ID:$b, ID:$c, ID:$lut_index),972                  "$res = OpBitwiseFunctionINTEL $type $a $b $c $lut_index">;973 974// SPV_INTEL_2d_block_io975def OpSubgroup2DBlockLoadINTEL: Op<6231, (outs), (ins ID:$element_size, ID:$block_width, ID:$block_height,976                  ID:$block_count, ID:$src_base_ptr, ID:$memory_width, ID:$memory_height, ID:$memory_pitch, ID:$coord, ID:$dst_ptr),977                  "OpSubgroup2DBlockLoadINTEL $element_size $block_width $block_height $block_count $src_base_ptr $memory_width $memory_height $memory_pitch $coord $dst_ptr">;978def OpSubgroup2DBlockLoadTransposeINTEL: Op<6233, (outs), (ins ID:$element_size, ID:$block_width, ID:$block_height,979                  ID:$block_count, ID:$src_base_ptr, ID:$memory_width, ID:$memory_height, ID:$memory_pitch, ID:$coord, ID:$dst_ptr),980                  "OpSubgroup2DBlockLoadTransposeINTEL $element_size $block_width $block_height $block_count $src_base_ptr $memory_width $memory_height $memory_pitch $coord $dst_ptr">;981def OpSubgroup2DBlockLoadTransformINTEL: Op<6232, (outs), (ins ID:$element_size, ID:$block_width, ID:$block_height,982                  ID:$block_count, ID:$src_base_ptr, ID:$memory_width, ID:$memory_height, ID:$memory_pitch, ID:$coord, ID:$dst_ptr),983                  "OpSubgroup2DBlockLoadTransformINTEL $element_size $block_width $block_height $block_count $src_base_ptr $memory_width $memory_height $memory_pitch $coord $dst_ptr">;984def OpSubgroup2DBlockPrefetchINTEL: Op<6234, (outs), (ins ID:$element_size, ID:$block_width, ID:$block_height,985                  ID:$block_count, ID:$src_base_ptr, ID:$memory_width, ID:$memory_height, ID:$memory_pitch, ID:$coord),986                  "OpSubgroup2DBlockPrefetchINTEL $element_size $block_width $block_height $block_count $src_base_ptr $memory_width $memory_height $memory_pitch $coord">;987def OpSubgroup2DBlockStoreINTEL: Op<6235, (outs), (ins ID:$element_size, ID:$block_width, ID:$block_height,988                  ID:$block_count, ID:$src_ptr, ID:$dst_base_ptr, ID:$memory_width, ID:$memory_height, ID:$memory_pitch, ID:$coord),989                  "OpSubgroup2DBlockStoreINTEL $element_size $block_width $block_height $block_count $src_ptr $dst_base_ptr $memory_width $memory_height $memory_pitch $coord">;990 991// SPV_INTEL_predicated_io992def OpPredicatedLoadINTEL: Op<6528, (outs ID:$res), (ins TYPE:$resType, ID:$ptr, ID:$predicate, ID:$default_value, variable_ops),993                  "$res = OpPredicatedLoadINTEL $resType $ptr $predicate $default_value">;994def OpPredicatedStoreINTEL: Op<6529, (outs), (ins ID:$ptr, ID:$object, ID:$predicate, variable_ops),995                  "OpPredicatedStoreINTEL $ptr $object $predicate">;996 997//SPV_ALTERA_blocking_pipes998def OpReadPipeBlockingALTERA :Op<5946, (outs), (ins ID:$pipe, ID:$pointer, ID:$packetSize, ID:$packetAlignment),999                   "OpReadPipeBlockingALTERA $pipe $pointer $packetSize $packetAlignment">;1000def OpWritePipeBlockingALTERA :Op<5946, (outs), (ins ID:$pipe, ID:$pointer, ID:$packetSize, ID:$packetAlignment),1001                   "OpWritePipeBlockingALTERA $pipe $pointer $packetSize $packetAlignment">;1002 1003//SPV_ALTERA_arbitrary_precision_fixed_point1004def OpFixedSqrtALTERA: Op<5923, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1005      "$res = OpFixedSqrtALTERA $result_type $input $sign $l $rl $q $o">;1006def OpFixedRecipALTERA: Op<5924, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1007      "$res = OpFixedRecipALTERA $result_type $input $sign $l $rl $q $o">;1008def OpFixedRsqrtALTERA: Op<5925, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1009      "$res = OpFixedRsqrtALTERA $result_type $input $sign $l $rl $q $o">;1010def OpFixedSinALTERA: Op<5926, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1011      "$res = OpFixedSinALTERA $result_type $input $sign $l $rl $q $o">;1012def OpFixedCosALTERA: Op<5927, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1013      "$res = OpFixedCosALTERA $result_type $input $sign $l $rl $q $o">;1014def OpFixedSinCosALTERA: Op<5928, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1015      "$res = OpFixedSinCosALTERA $result_type $input $sign $l $rl $q $o">;1016def OpFixedSinPiALTERA: Op<5929, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1017      "$res = OpFixedSinPiALTERA $result_type $input $sign $l $rl $q $o">;1018def OpFixedCosPiALTERA: Op<5930, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1019      "$res = OpFixedCosPiALTERA $result_type $input $sign $l $rl $q $o">;1020def OpFixedSinCosPiALTERA: Op<5931, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1021      "$res = OpFixedSinCosPiALTERA $result_type $input $sign $l $rl $q $o">;1022def OpFixedLogALTERA: Op<5932, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1023      "$res = OpFixedLogALTERA $result_type $input $sign $l $rl $q $o">;1024def OpFixedExpALTERA: Op<5933, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),1025      "$res = OpFixedExpALTERA $result_type $input $sign $l $rl $q $o">;1026