22#include "llvm/Support/Regex.h"
25#define GEN_PASS_DEF_GPUSPIRVATTACHTARGET
26#include "mlir/Dialect/GPU/Transforms/SPIRV/Passes.h.inc"
33struct SPIRVAttachTarget
37 void runOnOperation()
override;
39 void getDependentDialects(DialectRegistry ®istry)
const override {
40 registry.
insert<spirv::SPIRVDialect>();
45void SPIRVAttachTarget::runOnOperation() {
50 auto apiSymbol = symbolizeClientAPI(
clientApi);
56 auto deviceTypeSymbol = symbolizeDeviceType(
deviceType);
57 if (!deviceTypeSymbol)
63 Version version = versionSymbol.value();
67 auto capSymbol = symbolizeCapability(cap);
69 capabilities.push_back(capSymbol.value());
73 auto extSymbol = symbolizeExtension(ext);
75 extensions.push_back(extSymbol.value());
80 apiSymbol.value(), vendorSymbol.value(),
81 deviceTypeSymbol.value(), deviceId);
82 llvm::Regex matcher(moduleMatcher);
83 getOperation()->walk([&](gpu::GPUModuleOp gpuModule) {
89 if (std::optional<ArrayAttr> attrs = gpuModule.getTargets())
90 targets.append(attrs->getValue().begin(), attrs->getValue().end());
93 targets.erase(llvm::unique(targets), targets.end());
95 gpuModule.setTargetsAttr(builder.getArrayAttr(targets));
This class helps build Operations.
void signalPassFailure()
Signal that some invariant was broken when running.
::mlir::Pass::Option< std::string > clientApi
::mlir::Pass::ListOption< std::string > spirvCapabilities
::mlir::Pass::Option< std::string > deviceType
::mlir::Pass::Option< std::string > spirvVersion
::mlir::Pass::Option< uint32_t > deviceId
::mlir::Pass::Option< std::string > deviceVendor
::mlir::Pass::Option< std::string > moduleMatcher
::mlir::Pass::ListOption< std::string > spirvExtensions
static constexpr uint32_t kUnknownDeviceID
ID for unknown devices.
static TargetEnvAttr get(VerCapExtAttr triple, ResourceLimitsAttr limits, ClientAPI clientAPI=ClientAPI::Unknown, Vendor vendorID=Vendor::Unknown, DeviceType deviceType=DeviceType::Unknown, uint32_t deviceId=kUnknownDeviceID)
Gets a TargetEnvAttr instance.
An attribute that specifies the SPIR-V (version, capabilities, extensions) triple.
static VerCapExtAttr get(Version version, ArrayRef< Capability > capabilities, ArrayRef< Extension > extensions, MLIRContext *context)
Gets a VerCapExtAttr instance.
ResourceLimitsAttr getDefaultResourceLimits(MLIRContext *context)
Returns a default resource limits attribute that uses numbers from "Table 46. Required Limits" of the...
Include the generated interface declarations.