Lines Matching refs:spirv

26 static spirv::GlobalVariableOp
27 createGlobalVarForEntryPointArgument(OpBuilder &builder, spirv::FuncOp funcOp, in createGlobalVarForEntryPointArgument()
29 spirv::InterfaceVarABIAttr abiInfo) { in createGlobalVarForEntryPointArgument()
30 auto spirvModule = funcOp->getParentOfType<spirv::ModuleOp>(); in createGlobalVarForEntryPointArgument()
43 if (varType.cast<spirv::SPIRVType>().isScalarOrVector()) { in createGlobalVarForEntryPointArgument()
48 spirv::PointerType::get(spirv::StructType::get(varType), *storageClass); in createGlobalVarForEntryPointArgument()
50 auto varPtrType = varType.cast<spirv::PointerType>(); in createGlobalVarForEntryPointArgument()
51 auto varPointeeType = varPtrType.getPointeeType().cast<spirv::StructType>(); in createGlobalVarForEntryPointArgument()
55 VulkanLayoutUtils::decorateType(varPointeeType).cast<spirv::StructType>(); in createGlobalVarForEntryPointArgument()
61 spirv::PointerType::get(varPointeeType, varPtrType.getStorageClass()); in createGlobalVarForEntryPointArgument()
63 return builder.create<spirv::GlobalVariableOp>( in createGlobalVarForEntryPointArgument()
71 getInterfaceVariables(spirv::FuncOp funcOp, in getInterfaceVariables()
73 auto module = funcOp->getParentOfType<spirv::ModuleOp>(); in getInterfaceVariables()
82 funcOp.walk([&](spirv::AddressOfOp addressOfOp) { in getInterfaceVariables()
84 module.lookupSymbol<spirv::GlobalVariableOp>(addressOfOp.variable()); in getInterfaceVariables()
90 switch (var.type().cast<spirv::PointerType>().getStorageClass()) { in getInterfaceVariables()
91 case spirv::StorageClass::Input: in getInterfaceVariables()
92 case spirv::StorageClass::Output: in getInterfaceVariables()
101 funcOp.getContext(), cast<spirv::GlobalVariableOp>(var).sym_name())); in getInterfaceVariables()
107 static LogicalResult lowerEntryPointABIAttr(spirv::FuncOp funcOp, in lowerEntryPointABIAttr()
109 auto entryPointAttrName = spirv::getEntryPointABIAttrName(); in lowerEntryPointABIAttr()
111 funcOp->getAttrOfType<spirv::EntryPointABIAttr>(entryPointAttrName); in lowerEntryPointABIAttr()
117 auto spirvModule = funcOp->getParentOfType<spirv::ModuleOp>(); in lowerEntryPointABIAttr()
127 spirv::TargetEnvAttr targetEnv = spirv::lookupTargetEnv(funcOp); in lowerEntryPointABIAttr()
128 FailureOr<spirv::ExecutionModel> executionModel = in lowerEntryPointABIAttr()
129 spirv::getExecutionModel(targetEnv); in lowerEntryPointABIAttr()
134 builder.create<spirv::EntryPointOp>(funcOp.getLoc(), executionModel.value(), in lowerEntryPointABIAttr()
142 builder.create<spirv::ExecutionModeOp>( in lowerEntryPointABIAttr()
143 funcOp.getLoc(), funcOp, spirv::ExecutionMode::LocalSize, localSize); in lowerEntryPointABIAttr()
157 class ProcessInterfaceVarABI final : public OpConversionPattern<spirv::FuncOp> {
159 using OpConversionPattern<spirv::FuncOp>::OpConversionPattern;
162 matchAndRewrite(spirv::FuncOp funcOp, OpAdaptor adaptor,
174 spirv::FuncOp funcOp, OpAdaptor adaptor, in matchAndRewrite()
176 if (!funcOp->getAttrOfType<spirv::EntryPointABIAttr>( in matchAndRewrite()
177 spirv::getEntryPointABIAttrName())) { in matchAndRewrite()
187 auto attrName = spirv::getInterfaceVarABIAttrName(); in matchAndRewrite()
190 auto abiInfo = funcOp.getArgAttrOfType<spirv::InterfaceVarABIAttr>( in matchAndRewrite()
199 spirv::GlobalVariableOp var = createGlobalVarForEntryPointArgument( in matchAndRewrite()
208 rewriter.create<spirv::AddressOfOp>(funcOp.getLoc(), var); in matchAndRewrite()
215 if (argType.value().cast<spirv::SPIRVType>().isScalarOrVector()) { in matchAndRewrite()
217 spirv::ConstantOp::getZero(indexType, funcOp.getLoc(), rewriter); in matchAndRewrite()
218 auto loadPtr = rewriter.create<spirv::AccessChainOp>( in matchAndRewrite()
220 replacement = rewriter.create<spirv::LoadOp>(funcOp.getLoc(), loadPtr); in matchAndRewrite()
239 spirv::ModuleOp module = getOperation(); in runOnOperation()
242 spirv::TargetEnv targetEnv(spirv::lookupTargetEnv(module)); in runOnOperation()
248 spirv::PointerType type, in runOnOperation()
250 if (inputs.size() != 1 || !inputs[0].getType().isa<spirv::PointerType>()) in runOnOperation()
252 return builder.create<spirv::BitcastOp>(loc, type, inputs[0]).getResult(); in runOnOperation()
260 target.addDynamicallyLegalOp<spirv::FuncOp>([&](spirv::FuncOp op) { in runOnOperation()
261 StringRef attrName = spirv::getInterfaceVarABIAttrName(); in runOnOperation()
270 spirv::SPIRVDialect::getDialectNamespace(); in runOnOperation()
278 SmallVector<spirv::FuncOp, 1> entryPointFns; in runOnOperation()
279 auto entryPointAttrName = spirv::getEntryPointABIAttrName(); in runOnOperation()
280 module.walk([&](spirv::FuncOp funcOp) { in runOnOperation()
281 if (funcOp->getAttrOfType<spirv::EntryPointABIAttr>(entryPointAttrName)) { in runOnOperation()
292 std::unique_ptr<OperationPass<spirv::ModuleOp>>
293 mlir::spirv::createLowerABIAttributesPass() { in createLowerABIAttributesPass()