[Mlir-commits] [mlir] [MLIR] SPIRV Target Attribute (PR #69949)
Lei Zhang
llvmlistbot at llvm.org
Sat Oct 28 17:30:14 PDT 2023
================
@@ -0,0 +1,94 @@
+//===- SPIRVAttachTarget.cpp - Attach an SPIRV target ---------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the `GpuSPIRVAttachTarget` pass, attaching
+// `#spirv.target` attributes to GPU modules.
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir/Dialect/GPU/Transforms/Passes.h"
+
+#include "mlir/Dialect/GPU/IR/GPUDialect.h"
+#include "mlir/Dialect/SPIRV/IR/SPIRVAttributes.h"
+#include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
+#include "mlir/Dialect/SPIRV/IR/TargetAndABI.h"
+#include "mlir/IR/Builders.h"
+#include "mlir/Pass/Pass.h"
+#include "mlir/Target/SPIRV/Target.h"
+#include "llvm/Support/Regex.h"
+
+namespace mlir {
+#define GEN_PASS_DEF_GPUSPIRVATTACHTARGET
+#include "mlir/Dialect/GPU/Transforms/Passes.h.inc"
+} // namespace mlir
+
+using namespace mlir;
+using namespace mlir::spirv;
+
+namespace {
+struct SPIRVAttachTarget
+ : public impl::GpuSPIRVAttachTargetBase<SPIRVAttachTarget> {
+ using Base::Base;
+
+ void runOnOperation() override;
+
+ void getDependentDialects(DialectRegistry ®istry) const override {
+ registry.insert<spirv::SPIRVDialect>();
+ }
+};
+} // namespace
+
+void SPIRVAttachTarget::runOnOperation() {
+ OpBuilder builder(&getContext());
+ if (!symbolizeVersion(spirvVersion))
+ return signalPassFailure();
+ if (!symbolizeClientAPI(clientApi))
+ return signalPassFailure();
+ if (!symbolizeVendor(deviceVendor))
+ return signalPassFailure();
+ if (!symbolizeDeviceType(deviceType))
+ return signalPassFailure();
+
+ Version version = symbolizeVersion(spirvVersion).value();
----------------
antiagainst wrote:
We should avoid calling `symbolizeVersion` twice. We can save the result in a local variable in the above call and use it here.
https://github.com/llvm/llvm-project/pull/69949
More information about the Mlir-commits
mailing list