Lines Matching defs:spirv

30 #define DEBUG_TYPE "spirv-serialization"
37 if (auto selectionOp = dyn_cast<spirv::SelectionOp>(op))
39 if (auto loopOp = dyn_cast<spirv::LoopOp>(op))
49 // spirv.mlir.loop, we jump to this spirv.mlir.loop from its enclosing block.
51 if (auto loopOp = dyn_cast<spirv::LoopOp>(block->getParentOp())) {
74 namespace spirv {
78 void encodeInstructionInto(SmallVectorImpl<uint32_t> &binary, spirv::Opcode op,
81 binary.push_back(spirv::getPrefixedOpcode(wordCount, op));
85 Serializer::Serializer(spirv::ModuleOp module,
114 auto moduleSize = spirv::kHeaderWordCount + capabilities.size() +
123 spirv::appendModuleHeader(binary, module.getVceTriple()->getVersion(),
172 encodeInstructionInto(capabilities, spirv::Opcode::OpCapability,
184 spirv::encodeStringLiteralInto(operands, fileName);
185 encodeInstructionInto(debug, spirv::Opcode::OpString, operands);
191 for (spirv::Extension ext : module.getVceTriple()->getExtensions()) {
193 spirv::encodeStringLiteralInto(extName, spirv::stringifyExtension(ext));
194 encodeInstructionInto(extensions, spirv::Opcode::OpExtension, extName);
201 module->getAttrOfType<spirv::MemoryModelAttr>(memoryModelName)
206 module->getAttrOfType<spirv::AddressingModelAttr>(addressingModelName)
209 encodeInstructionInto(memoryModel, spirv::Opcode::OpMemoryModel, {am, mm});
261 case spirv::Decoration::LinkageAttributes: {
264 auto linkageAttr = llvm::dyn_cast<spirv::LinkageAttributesAttr>(attr);
268 spirv::encodeStringLiteralInto(args, linkageName);
273 case spirv::Decoration::FPFastMathMode:
280 case spirv::Decoration::FPRoundingMode:
287 case spirv::Decoration::Binding:
288 case spirv::Decoration::DescriptorSet:
289 case spirv::Decoration::Location:
296 case spirv::Decoration::BuiltIn:
298 auto enumVal = spirv::symbolizeBuiltIn(strAttr.getValue());
309 case spirv::Decoration::Aliased:
310 case spirv::Decoration::AliasedPointer:
311 case spirv::Decoration::Flat:
312 case spirv::Decoration::NonReadable:
313 case spirv::Decoration::NonWritable:
314 case spirv::Decoration::NoPerspective:
315 case spirv::Decoration::NoSignedWrap:
316 case spirv::Decoration::NoUnsignedWrap:
317 case spirv::Decoration::RelaxedPrecision:
318 case spirv::Decoration::Restrict:
319 case spirv::Decoration::RestrictPointer:
320 case spirv::Decoration::NoContraction:
321 case spirv::Decoration::Constant:
329 case spirv::Decoration::CacheControlLoadINTEL:
339 case spirv::Decoration::CacheControlStoreINTEL:
361 spirv::symbolizeDecoration(decorationName);
378 spirv::encodeStringLiteralInto(nameOperands, name);
379 encodeInstructionInto(names, spirv::Opcode::OpName, nameOperands);
384 LogicalResult Serializer::processTypeDecoration<spirv::ArrayType>(
385 Location loc, spirv::ArrayType type, uint32_t resultID) {
388 return emitDecoration(resultID, spirv::Decoration::ArrayStride, {stride});
394 LogicalResult Serializer::processTypeDecoration<spirv::RuntimeArrayType>(
395 Location loc, spirv::RuntimeArrayType type, uint32_t resultID) {
398 return emitDecoration(resultID, spirv::Decoration::ArrayStride, {stride});
405 const spirv::StructType::MemberDecorationInfo &memberDecoration) {
412 encodeInstructionInto(decorations, spirv::Opcode::OpMemberDecorate, args);
424 if (auto ptrType = dyn_cast<spirv::PointerType>(type)) {
426 case spirv::StorageClass::PhysicalStorageBuffer:
427 case spirv::StorageClass::PushConstant:
428 case spirv::StorageClass::StorageBuffer:
429 case spirv::StorageClass::Uniform:
430 return isa<spirv::StructType>(ptrType.getPointeeType());
457 auto typeEnum = spirv::Opcode::OpTypeVoid;
483 encodeInstructionInto(typesGlobalValues, spirv::Opcode::OpTypePointer,
497 Location loc, Type type, uint32_t resultID, spirv::Opcode &typeEnum,
503 typeEnum = spirv::Opcode::OpTypeVoid;
509 typeEnum = spirv::Opcode::OpTypeBool;
513 typeEnum = spirv::Opcode::OpTypeInt;
524 typeEnum = spirv::Opcode::OpTypeFloat;
535 typeEnum = spirv::Opcode::OpTypeVector;
541 if (auto imageType = dyn_cast<spirv::ImageType>(type)) {
542 typeEnum = spirv::Opcode::OpTypeImage;
557 if (auto arrayType = dyn_cast<spirv::ArrayType>(type)) {
558 typeEnum = spirv::Opcode::OpTypeArray;
572 if (auto ptrType = dyn_cast<spirv::PointerType>(type)) {
574 spirv::StructType pointeeStruct =
575 dyn_cast<spirv::StructType>(ptrType.getPointeeType());
589 spirv::Opcode::OpTypeForwardPointer,
593 auto structType = spirv::StructType::getIdentified(
613 typeEnum = spirv::Opcode::OpTypePointer;
619 spirv::Decoration::Block)))
627 if (auto runtimeArrayType = dyn_cast<spirv::RuntimeArrayType>(type)) {
633 typeEnum = spirv::Opcode::OpTypeRuntimeArray;
638 if (auto sampledImageType = dyn_cast<spirv::SampledImageType>(type)) {
639 typeEnum = spirv::Opcode::OpTypeSampledImage;
649 if (auto structType = dyn_cast<spirv::StructType>(type)) {
667 spirv::StructType::MemberDecorationInfo offsetDecoration{
668 elementIndex, /*hasValue=*/1, spirv::Decoration::Offset,
677 SmallVector<spirv::StructType::MemberDecorationInfo, 4> memberDecorations;
689 typeEnum = spirv::Opcode::OpTypeStruct;
698 dyn_cast<spirv::CooperativeMatrixType>(type)) {
704 typeEnum = spirv::Opcode::OpTypeCooperativeMatrixKHR;
718 if (auto matrixType = dyn_cast<spirv::MatrixType>(type)) {
724 typeEnum = spirv::Opcode::OpTypeMatrix;
735 spirv::Opcode &typeEnum,
737 typeEnum = spirv::Opcode::OpTypeFunction;
808 auto elementType = cast<spirv::ArrayType>(constType).getElementType();
816 spirv::Opcode opcode = spirv::Opcode::OpConstantComposite;
851 auto elementType = cast<spirv::CompositeType>(constType).getElementType(0);
861 spirv::Opcode opcode = spirv::Opcode::OpConstantComposite;
899 ? (isSpec ? spirv::Opcode::OpSpecConstantTrue
900 : spirv::Opcode::OpConstantTrue)
901 : (isSpec ? spirv::Opcode::OpSpecConstantFalse
902 : spirv::Opcode::OpConstantFalse);
931 isSpec ? spirv::Opcode::OpSpecConstant : spirv::Opcode::OpConstant;
1002 isSpec ? spirv::Opcode::OpSpecConstant : spirv::Opcode::OpConstant;
1066 encodeInstructionInto(functionBody, spirv::Opcode::OpLabel, {blockID});
1080 llvm::IsaPred<spirv::LoopOp, spirv::SelectionOp>)) {
1087 encodeInstructionInto(functionBody, spirv::Opcode::OpBranch, {blockID});
1088 encodeInstructionInto(functionBody, spirv::Opcode::OpLabel, {blockID});
1130 // spirv.mlir.selection/spirv.mlir.loop op in the MLIR predecessor block,
1134 LLVM_DEBUG(llvm::dbgs() << " spirv predecessor ");
1136 if (auto branchOp = dyn_cast<spirv::BranchOp>(terminator)) {
1139 dyn_cast<spirv::BranchConditionalOp>(terminator)) {
1200 encodeInstructionInto(functionBody, spirv::Opcode::OpPhi, phiArgs);
1220 spirv::encodeStringLiteralInto(importOperands, extensionSetName);
1221 encodeInstructionInto(extendedSets, spirv::Opcode::OpExtInstImport,
1236 encodeInstructionInto(functionBody, spirv::Opcode::OpExtInst,
1247 .Case([&](spirv::AddressOfOp op) { return processAddressOfOp(op); })
1248 .Case([&](spirv::BranchOp op) { return processBranchOp(op); })
1249 .Case([&](spirv::BranchConditionalOp op) {
1252 .Case([&](spirv::ConstantOp op) { return processConstantOp(op); })
1253 .Case([&](spirv::FuncOp op) { return processFuncOp(op); })
1254 .Case([&](spirv::GlobalVariableOp op) {
1257 .Case([&](spirv::LoopOp op) { return processLoopOp(op); })
1258 .Case([&](spirv::ReferenceOfOp op) { return processReferenceOfOp(op); })
1259 .Case([&](spirv::SelectionOp op) { return processSelectionOp(op); })
1260 .Case([&](spirv::SpecConstantOp op) { return processSpecConstantOp(op); })
1261 .Case([&](spirv::SpecConstantCompositeOp op) {
1264 .Case([&](spirv::SpecConstantOperationOp op) {
1267 .Case([&](spirv::UndefOp op) { return processUndefOp(op); })
1268 .Case([&](spirv::VariableOp op) { return processVariableOp(op); })
1301 encodeInstructionInto(functionBody, static_cast<spirv::Opcode>(opcode),
1319 spirv::Decoration decoration,
1324 spirv::getPrefixedOpcode(wordCount, spirv::Opcode::OpDecorate), target,
1342 encodeInstructionInto(binary, spirv::Opcode::OpLine,
1346 } // namespace spirv