Lines Matching defs:spirv

24 using namespace mlir::spirv::AttrNames;
26 namespace mlir::spirv {
43 spirv::MemoryAccess memoryAccessAttr;
46 if (spirv::parseEnumStrAttr<spirv::MemoryAccessAttr>(
50 if (spirv::bitEnumContainsAll(memoryAccessAttr,
51 spirv::MemoryAccess::Aligned)) {
78 spirv::MemoryAccess memoryAccessAttr;
81 if (spirv::parseEnumStrAttr<spirv::MemoryAccessAttr>(
85 if (spirv::bitEnumContainsAll(memoryAccessAttr,
86 spirv::MemoryAccess::Aligned)) {
109 std::optional<spirv::MemoryAccess> memoryAccessAtrrValue = std::nullopt,
121 if (spirv::bitEnumContainsAll(*memAccess, spirv::MemoryAccess::Aligned)) {
131 elidedAttrs.push_back(spirv::attributeName<spirv::StorageClass>());
138 std::optional<spirv::MemoryAccess> memoryAccessAtrrValue = std::nullopt,
147 if (spirv::bitEnumContainsAll(*memAccess, spirv::MemoryAccess::Aligned)) {
157 elidedAttrs.push_back(spirv::attributeName<spirv::StorageClass>());
163 // ODS already checks ptr is spirv::PointerType. Just check that the pointee
169 llvm::cast<spirv::PointerType>(ptr.getType()).getPointeeType()) {
193 auto memAccess = llvm::cast<spirv::MemoryAccessAttr>(memAccessAttr);
200 if (spirv::bitEnumContainsAll(memAccess.getValue(),
201 spirv::MemoryAccess::Aligned)) {
237 auto memAccess = llvm::cast<spirv::MemoryAccessAttr>(memAccessAttr);
244 if (spirv::bitEnumContainsAll(memAccess.getValue(),
245 spirv::MemoryAccess::Aligned)) {
260 // spirv.AccessChainOp
264 auto ptrType = llvm::dyn_cast<spirv::PointerType>(type);
266 emitError(baseLoc, "'spirv.AccessChain' op expected a pointer "
277 auto cType = llvm::dyn_cast<spirv::CompositeType>(resultType);
281 "'spirv.AccessChain' op cannot extract from non-composite type ")
286 if (llvm::isa<spirv::StructType>(resultType)) {
289 emitError(baseLoc, "'spirv.AccessChain' op index must be an "
290 "integer spirv.Constant to access "
291 "element of spirv.struct");
297 if (failed(spirv::extractValueFromConstOp(op, index))) {
300 "'spirv.AccessChain' index must be an integer spirv.Constant to "
301 "access element of spirv.struct, but provided ")
306 emitError(baseLoc, "'spirv.AccessChain' op index ")
313 return spirv::PointerType::get(resultType, resultStorageClass);
337 llvm::dyn_cast<spirv::PointerType>(accessChainOp.getType());
355 // spirv.LoadOp
360 auto ptrType = llvm::cast<spirv::PointerType>(basePtr.getType());
367 spirv::StorageClass storageClass;
377 auto ptrType = spirv::PointerType::get(elementType, storageClass);
389 llvm::cast<spirv::PointerType>(getPtr().getType()).getStorageClass());
409 // spirv.StoreOp
414 spirv::StorageClass storageClass;
425 auto ptrType = spirv::PointerType::get(elementType, storageClass);
436 llvm::cast<spirv::PointerType>(getPtr().getType()).getStorageClass());
454 // spirv.CopyMemory
461 llvm::cast<spirv::PointerType>(getTarget().getType()).getStorageClass());
465 llvm::cast<spirv::PointerType>(getSource().getType()).getStorageClass());
477 llvm::cast<spirv::PointerType>(getTarget().getType()).getPointeeType();
482 spirv::StorageClass targetStorageClass;
485 spirv::StorageClass sourceStorageClass;
511 auto targetPtrType = spirv::PointerType::get(elementType, targetStorageClass);
512 auto sourcePtrType = spirv::PointerType::get(elementType, sourceStorageClass);
524 llvm::cast<spirv::PointerType>(getTarget().getType()).getPointeeType();
527 llvm::cast<spirv::PointerType>(getSource().getType()).getPointeeType();
547 // spirv.InBoundsPtrAccessChainOp
563 // spirv.PtrAccessChainOp
578 // spirv.Variable
603 auto ptrType = llvm::dyn_cast<spirv::PointerType>(type);
605 return parser.emitError(loc, "expected spirv.ptr type");
615 auto attr = parser.getBuilder().getAttr<spirv::StorageClassAttr>(
617 result.addAttribute(spirv::attributeName<spirv::StorageClass>(), attr);
624 spirv::attributeName<spirv::StorageClass>()};
637 if (getStorageClass() != spirv::StorageClass::Function) {
640 "spirv.GlobalVariable for module-level variables.");
643 auto pointerType = llvm::cast<spirv::PointerType>(getPointer().getType());
652 if (!initOp || !isa<spirv::ConstantOp, // for normal constant
653 spirv::ReferenceOfOp, // for spec constant
654 spirv::AddressOfOp>(initOp))
656 "constant or spirv.GlobalVariable op");
659 auto getDecorationAttr = [op = getOperation()](spirv::Decoration decoration) {
666 {spirv::Decoration::DescriptorSet, spirv::Decoration::Binding,
667 spirv::Decoration::BuiltIn}) {
672 << "' attribute (only allowed in spirv.GlobalVariable)";
679 auto pointeePtrType = dyn_cast<spirv::PointerType>(getPointeeType());
681 if (auto pointeeArrayType = dyn_cast<spirv::ArrayType>(getPointeeType())) {
683 dyn_cast<spirv::PointerType>(pointeeArrayType.getElementType());
688 spirv::StorageClass::PhysicalStorageBuffer) {
690 getDecorationAttr(spirv::Decoration::AliasedPointer) != nullptr;
692 getDecorationAttr(spirv::Decoration::RestrictPointer) != nullptr;
707 } // namespace mlir::spirv