[Mlir-commits] [mlir] 52aaac6 - [mlir][spirv][complex] Support convert complex.constant

Lei Zhang llvmlistbot at llvm.org
Mon May 29 17:55:17 PDT 2023


Author: Lei Zhang
Date: 2023-05-29T17:54:28-07:00
New Revision: 52aaac635a0f084fbbe4a4209afba3447b2af068

URL: https://github.com/llvm/llvm-project/commit/52aaac635a0f084fbbe4a4209afba3447b2af068
DIFF: https://github.com/llvm/llvm-project/commit/52aaac635a0f084fbbe4a4209afba3447b2af068.diff

LOG: [mlir][spirv][complex] Support convert complex.constant

Reviewed By: kuhar

Differential Revision: https://reviews.llvm.org/D151622

Added: 
    

Modified: 
    mlir/lib/Conversion/ComplexToSPIRV/ComplexToSPIRV.cpp
    mlir/test/Conversion/ComplexToSPIRV/complex-to-spirv.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Conversion/ComplexToSPIRV/ComplexToSPIRV.cpp b/mlir/lib/Conversion/ComplexToSPIRV/ComplexToSPIRV.cpp
index cb1362dc7f120..d531659e0623a 100644
--- a/mlir/lib/Conversion/ComplexToSPIRV/ComplexToSPIRV.cpp
+++ b/mlir/lib/Conversion/ComplexToSPIRV/ComplexToSPIRV.cpp
@@ -28,6 +28,25 @@ using namespace mlir;
 
 namespace {
 
+struct ConstantOpPattern final : OpConversionPattern<complex::ConstantOp> {
+  using OpConversionPattern::OpConversionPattern;
+
+  LogicalResult
+  matchAndRewrite(complex::ConstantOp constOp, OpAdaptor adaptor,
+                  ConversionPatternRewriter &rewriter) const override {
+    auto spirvType =
+        getTypeConverter()->convertType<ShapedType>(constOp.getType());
+    if (!spirvType)
+      return rewriter.notifyMatchFailure(constOp,
+                                         "unable to convert result type");
+
+    rewriter.replaceOpWithNewOp<spirv::ConstantOp>(
+        constOp, spirvType,
+        DenseElementsAttr::get(spirvType, constOp.getValue().getValue()));
+    return success();
+  }
+};
+
 struct CreateOpPattern final : OpConversionPattern<complex::CreateOp> {
   using OpConversionPattern::OpConversionPattern;
 
@@ -87,6 +106,6 @@ void mlir::populateComplexToSPIRVPatterns(SPIRVTypeConverter &typeConverter,
                                           RewritePatternSet &patterns) {
   MLIRContext *context = patterns.getContext();
 
-  patterns.add<CreateOpPattern, ReOpPattern, ImOpPattern>(typeConverter,
-                                                          context);
+  patterns.add<ConstantOpPattern, CreateOpPattern, ReOpPattern, ImOpPattern>(
+      typeConverter, context);
 }

diff  --git a/mlir/test/Conversion/ComplexToSPIRV/complex-to-spirv.mlir b/mlir/test/Conversion/ComplexToSPIRV/complex-to-spirv.mlir
index 6b56a4488b882..45f38d435c50b 100644
--- a/mlir/test/Conversion/ComplexToSPIRV/complex-to-spirv.mlir
+++ b/mlir/test/Conversion/ComplexToSPIRV/complex-to-spirv.mlir
@@ -38,3 +38,12 @@ func.func @imaginary_number(%arg: complex<f32>) -> f32 {
 //       CHECK:   %[[IM:.+]] = spirv.CompositeExtract %[[CAST]][1 : i32] : vector<2xf32>
 //       CHECK:   return %[[IM]] : f32
 
+// -----
+
+func.func @complex_const() -> complex<f32> {
+  %cst = complex.constant [0x7FC00000 : f32, 0.000000e+00 : f32] : complex<f32>
+  return %cst : complex<f32>
+}
+
+// CHECK-LABEL: func.func @complex_const()
+//       CHECK:   spirv.Constant dense<[0x7FC00000, 0.000000e+00]> : vector<2xf32>


        


More information about the Mlir-commits mailing list