Lines Matching refs:spirv
40 LabelT label, const spirv::TargetEnv &targetEnv, in checkExtensionRequirements()
41 const spirv::SPIRVType::ExtensionArrayRefVector &candidates) { in checkExtensionRequirements()
48 for (spirv::Extension ext : ors) in checkExtensionRequirements()
49 extStrings.push_back(spirv::stringifyExtension(ext)); in checkExtensionRequirements()
68 LabelT label, const spirv::TargetEnv &targetEnv, in checkCapabilityRequirements()
69 const spirv::SPIRVType::CapabilityArrayRefVector &candidates) { in checkCapabilityRequirements()
76 for (spirv::Capability cap : ors) in checkCapabilityRequirements()
77 capStrings.push_back(spirv::stringifyCapability(cap)); in checkCapabilityRequirements()
90 static bool needsExplicitLayout(spirv::StorageClass storageClass) { in needsExplicitLayout()
92 case spirv::StorageClass::PhysicalStorageBuffer: in needsExplicitLayout()
93 case spirv::StorageClass::PushConstant: in needsExplicitLayout()
94 case spirv::StorageClass::StorageBuffer: in needsExplicitLayout()
95 case spirv::StorageClass::Uniform: in needsExplicitLayout()
104 static spirv::PointerType
105 wrapInStructAndGetPointer(Type elementType, spirv::StorageClass storageClass) { in wrapInStructAndGetPointer()
107 ? spirv::StructType::get(elementType, /*offsetInfo=*/0) in wrapInStructAndGetPointer()
108 : spirv::StructType::get(elementType); in wrapInStructAndGetPointer()
109 return spirv::PointerType::get(structType, storageClass); in wrapInStructAndGetPointer()
130 MAP_FN(spirv::StorageClass::Generic, 1) \
131 MAP_FN(spirv::StorageClass::StorageBuffer, 0) \
132 MAP_FN(spirv::StorageClass::Workgroup, 3) \
133 MAP_FN(spirv::StorageClass::Uniform, 4) \
134 MAP_FN(spirv::StorageClass::Private, 5) \
135 MAP_FN(spirv::StorageClass::Function, 6) \
136 MAP_FN(spirv::StorageClass::PushConstant, 7) \
137 MAP_FN(spirv::StorageClass::UniformConstant, 8) \
138 MAP_FN(spirv::StorageClass::Input, 9) \
139 MAP_FN(spirv::StorageClass::Output, 10) \
140 MAP_FN(spirv::StorageClass::CrossWorkgroup, 11) \
141 MAP_FN(spirv::StorageClass::AtomicCounter, 12) \
142 MAP_FN(spirv::StorageClass::Image, 13) \
143 MAP_FN(spirv::StorageClass::CallableDataKHR, 14) \
144 MAP_FN(spirv::StorageClass::IncomingCallableDataKHR, 15) \
145 MAP_FN(spirv::StorageClass::RayPayloadKHR, 16) \
146 MAP_FN(spirv::StorageClass::HitAttributeKHR, 17) \
147 MAP_FN(spirv::StorageClass::IncomingRayPayloadKHR, 18) \
148 MAP_FN(spirv::StorageClass::ShaderRecordBufferKHR, 19) \
149 MAP_FN(spirv::StorageClass::PhysicalStorageBuffer, 20) \
150 MAP_FN(spirv::StorageClass::CodeSectionINTEL, 21) \
151 MAP_FN(spirv::StorageClass::DeviceOnlyINTEL, 22) \
152 MAP_FN(spirv::StorageClass::HostOnlyINTEL, 23)
155 SPIRVTypeConverter::getMemorySpaceForStorageClass(spirv::StorageClass storage) { in getMemorySpaceForStorageClass()
165 Optional<spirv::StorageClass>
193 if (type.isa<spirv::ScalarType>()) { in getTypeNumBytes()
265 static Type convertScalarType(const spirv::TargetEnv &targetEnv, in convertScalarType()
267 spirv::ScalarType type, in convertScalarType()
268 Optional<spirv::StorageClass> storageClass = {}) { in convertScalarType()
270 SmallVector<ArrayRef<spirv::Extension>, 1> extensions;
271 SmallVector<ArrayRef<spirv::Capability>, 2> capabilities;
298 static Type convertVectorType(const spirv::TargetEnv &targetEnv, in convertVectorType()
301 Optional<spirv::StorageClass> storageClass = {}) { in convertVectorType()
305 if (!spirv::CompositeType::isValid(type)) {
313 SmallVector<ArrayRef<spirv::Extension>, 1> extensions;
314 SmallVector<ArrayRef<spirv::Capability>, 2> capabilities;
315 type.cast<spirv::CompositeType>().getExtensions(extensions, storageClass);
316 type.cast<spirv::CompositeType>().getCapabilities(capabilities, storageClass);
324 targetEnv, options, type.getElementType().cast<spirv::ScalarType>(),
337 static Type convertTensorType(const spirv::TargetEnv &targetEnv, in convertTensorType()
347 auto scalarType = type.getElementType().dyn_cast<spirv::ScalarType>(); in convertTensorType()
373 return spirv::ArrayType::get(arrayElemType, arrayElemCount); in convertTensorType()
376 static Type convertBoolMemrefType(const spirv::TargetEnv &targetEnv, in convertBoolMemrefType()
379 Optional<spirv::StorageClass> storageClass = in convertBoolMemrefType()
395 .dyn_cast<spirv::ScalarType>(); in convertBoolMemrefType()
411 auto arrayType = spirv::RuntimeArrayType::get(arrayElemType, stride); in convertBoolMemrefType()
418 auto arrayType = spirv::ArrayType::get(arrayElemType, arrayElemCount, stride); in convertBoolMemrefType()
423 static Type convertMemrefType(const spirv::TargetEnv &targetEnv, in convertMemrefType()
431 Optional<spirv::StorageClass> storageClass = in convertMemrefType()
445 } else if (auto scalarType = elementType.dyn_cast<spirv::ScalarType>()) { in convertMemrefType()
467 auto arrayType = spirv::RuntimeArrayType::get(arrayElemType, stride); in convertMemrefType()
480 auto arrayType = spirv::ArrayType::get(arrayElemType, arrayElemCount, stride); in convertMemrefType()
485 SPIRVTypeConverter::SPIRVTypeConverter(spirv::TargetEnvAttr targetAttr, in SPIRVTypeConverter()
498 addConversion([](spirv::SPIRVType type) { return type; }); in SPIRVTypeConverter()
503 if (auto scalarType = intType.dyn_cast<spirv::ScalarType>()) in SPIRVTypeConverter()
509 if (auto scalarType = floatType.dyn_cast<spirv::ScalarType>()) in SPIRVTypeConverter()
567 auto newFuncOp = rewriter.create<spirv::FuncOp>( in matchAndRewrite()
598 static spirv::GlobalVariableOp getBuiltinVariable(Block &body, in getBuiltinVariable()
599 spirv::BuiltIn builtin) { in getBuiltinVariable()
602 for (auto varOp : body.getOps<spirv::GlobalVariableOp>()) { in getBuiltinVariable()
604 spirv::SPIRVDialect::getAttributeName( in getBuiltinVariable()
605 spirv::Decoration::BuiltIn))) { in getBuiltinVariable()
606 auto varBuiltIn = spirv::symbolizeBuiltIn(builtinAttr.getValue()); in getBuiltinVariable()
616 static std::string getBuiltinVarName(spirv::BuiltIn builtin) { in getBuiltinVarName()
621 static spirv::GlobalVariableOp
622 getOrInsertBuiltinVariable(Block &body, Location loc, spirv::BuiltIn builtin, in getOrInsertBuiltinVariable()
630 spirv::GlobalVariableOp newVarOp; in getOrInsertBuiltinVariable()
632 case spirv::BuiltIn::NumWorkgroups: in getOrInsertBuiltinVariable()
633 case spirv::BuiltIn::WorkgroupSize: in getOrInsertBuiltinVariable()
634 case spirv::BuiltIn::WorkgroupId: in getOrInsertBuiltinVariable()
635 case spirv::BuiltIn::LocalInvocationId: in getOrInsertBuiltinVariable()
636 case spirv::BuiltIn::GlobalInvocationId: { in getOrInsertBuiltinVariable()
637 auto ptrType = spirv::PointerType::get(VectorType::get({3}, integerType), in getOrInsertBuiltinVariable()
638 spirv::StorageClass::Input); in getOrInsertBuiltinVariable()
641 builder.create<spirv::GlobalVariableOp>(loc, ptrType, name, builtin); in getOrInsertBuiltinVariable()
644 case spirv::BuiltIn::SubgroupId: in getOrInsertBuiltinVariable()
645 case spirv::BuiltIn::NumSubgroups: in getOrInsertBuiltinVariable()
646 case spirv::BuiltIn::SubgroupSize: { in getOrInsertBuiltinVariable()
648 spirv::PointerType::get(integerType, spirv::StorageClass::Input); in getOrInsertBuiltinVariable()
651 builder.create<spirv::GlobalVariableOp>(loc, ptrType, name, builtin); in getOrInsertBuiltinVariable()
661 Value mlir::spirv::getBuiltinVariableValue(Operation *op, in getBuiltinVariableValue()
662 spirv::BuiltIn builtin, in getBuiltinVariableValue()
671 spirv::GlobalVariableOp varOp = in getBuiltinVariableValue()
674 Value ptr = builder.create<spirv::AddressOfOp>(op->getLoc(), varOp); in getBuiltinVariableValue()
675 return builder.create<spirv::LoadOp>(op->getLoc(), ptr); in getBuiltinVariableValue()
684 static spirv::PointerType getPushConstantStorageType(unsigned elementCount, in getPushConstantStorageType()
687 auto arrayType = spirv::ArrayType::get(indexType, elementCount, in getPushConstantStorageType()
689 auto structType = spirv::StructType::get({arrayType}, /*offsetInfo=*/0); in getPushConstantStorageType()
690 return spirv::PointerType::get(structType, spirv::StorageClass::PushConstant); in getPushConstantStorageType()
695 static spirv::GlobalVariableOp getPushConstantVariable(Block &body, in getPushConstantVariable()
697 for (auto varOp : body.getOps<spirv::GlobalVariableOp>()) { in getPushConstantVariable()
698 auto ptrType = varOp.type().dyn_cast<spirv::PointerType>(); in getPushConstantVariable()
705 if (ptrType.getStorageClass() == spirv::StorageClass::PushConstant) { in getPushConstantVariable()
707 .cast<spirv::StructType>() in getPushConstantVariable()
709 .cast<spirv::ArrayType>() in getPushConstantVariable()
720 static spirv::GlobalVariableOp
730 return builder.create<spirv::GlobalVariableOp>(loc, type, name, in getOrInsertPushConstantVariable()
734 Value spirv::getPushConstantValue(Operation *op, unsigned elementCount, in getPushConstantValue()
744 spirv::GlobalVariableOp varOp = getOrInsertPushConstantVariable( in getPushConstantValue()
747 Value zeroOp = spirv::ConstantOp::getZero(integerType, loc, builder); in getPushConstantValue()
748 Value offsetOp = builder.create<spirv::ConstantOp>( in getPushConstantValue()
750 auto addrOp = builder.create<spirv::AddressOfOp>(loc, varOp); in getPushConstantValue()
751 auto acOp = builder.create<spirv::AccessChainOp>( in getPushConstantValue()
753 return builder.create<spirv::LoadOp>(loc, acOp); in getPushConstantValue()
760 Value mlir::spirv::linearizeIndex(ValueRange indices, ArrayRef<int64_t> strides, in linearizeIndex()
771 Value linearizedIndex = builder.create<spirv::ConstantOp>( in linearizeIndex()
774 Value strideVal = builder.create<spirv::ConstantOp>( in linearizeIndex()
777 Value update = builder.create<spirv::IMulOp>(loc, strideVal, index.value()); in linearizeIndex()
779 builder.create<spirv::IAddOp>(loc, linearizedIndex, update); in linearizeIndex()
784 spirv::AccessChainOp mlir::spirv::getElementPtr( in getElementPtr()
800 auto zero = spirv::ConstantOp::getZero(indexType, loc, builder); in getElementPtr()
811 return builder.create<spirv::AccessChainOp>(loc, basePtr, linearizedIndices); in getElementPtr()
819 SPIRVConversionTarget::get(spirv::TargetEnvAttr targetAttr) { in get()
824 target->addDynamicallyLegalDialect<spirv::SPIRVDialect>( in get()
831 SPIRVConversionTarget::SPIRVConversionTarget(spirv::TargetEnvAttr targetAttr) in SPIRVConversionTarget()
838 if (auto minVersionIfx = dyn_cast<spirv::QueryMinVersionInterface>(op)) { in isLegalOp()
839 Optional<spirv::Version> minVersion = minVersionIfx.getMinVersion(); in isLegalOp()
843 << spirv::stringifyVersion(*minVersion) << "\n"); in isLegalOp()
847 if (auto maxVersionIfx = dyn_cast<spirv::QueryMaxVersionInterface>(op)) { in isLegalOp()
848 Optional<spirv::Version> maxVersion = maxVersionIfx.getMaxVersion(); in isLegalOp()
852 << spirv::stringifyVersion(*maxVersion) << "\n"); in isLegalOp()
860 if (auto extensions = dyn_cast<spirv::QueryExtensionInterface>(op)) in isLegalOp()
868 if (auto capabilities = dyn_cast<spirv::QueryCapabilityInterface>(op)) in isLegalOp()
879 [](Type t) { return !t.isa<spirv::SPIRVType>(); })) in isLegalOp()
884 if (auto globalVar = dyn_cast<spirv::GlobalVariableOp>(op)) in isLegalOp()
889 SmallVector<ArrayRef<spirv::Extension>, 4> typeExtensions; in isLegalOp()
890 SmallVector<ArrayRef<spirv::Capability>, 8> typeCapabilities; in isLegalOp()
893 valueType.cast<spirv::SPIRVType>().getExtensions(typeExtensions); in isLegalOp()
899 valueType.cast<spirv::SPIRVType>().getCapabilities(typeCapabilities); in isLegalOp()