[Mlir-commits] [mlir] 4837d8d - [mlir][SPIR-V] Populate math and cf dialect patterns in `test-convert-to-spirv` (#214627)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Sep 17 05:46:57 PDT 2026


Author: Arseniy Obolenskiy
Date: 2026-09-17T14:46:51+02:00
New Revision: 4837d8d5a3b1694f2e760cb4eec54360b047f722

URL: https://github.com/llvm/llvm-project/commit/4837d8d5a3b1694f2e760cb4eec54360b047f722
DIFF: https://github.com/llvm/llvm-project/commit/4837d8d5a3b1694f2e760cb4eec54360b047f722.diff

LOG: [mlir][SPIR-V] Populate math and cf dialect patterns in `test-convert-to-spirv` (#214627)

Added: 
    

Modified: 
    mlir/test/Conversion/ConvertToSPIRV/scf.mlir
    mlir/test/Conversion/ConvertToSPIRV/simple.mlir
    mlir/test/lib/Pass/TestConvertToSPIRVPass.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/test/Conversion/ConvertToSPIRV/scf.mlir b/mlir/test/Conversion/ConvertToSPIRV/scf.mlir
index fab45d4742850..8418228357a4a 100644
--- a/mlir/test/Conversion/ConvertToSPIRV/scf.mlir
+++ b/mlir/test/Conversion/ConvertToSPIRV/scf.mlir
@@ -78,3 +78,23 @@ func.func @for() {
   }
   return
 }
+
+// CHECK-LABEL: @if_yield_math
+// CHECK-SAME: %[[ARG0:.*]]: i1, %[[ARG1:.*]]: f32
+// CHECK:       spirv.mlir.selection {
+// CHECK:         %[[SQRT:.*]] = spirv.GL.Sqrt %[[ARG1]] : f32
+// CHECK:         spirv.Store "Function" %{{.*}}, %[[SQRT]] : f32
+// CHECK:       ^{{.*}}:
+// CHECK:         %[[EXP:.*]] = spirv.GL.Exp %[[ARG1]] : f32
+// CHECK:         spirv.Store "Function" %{{.*}}, %[[EXP]] : f32
+// CHECK:       }
+func.func @if_yield_math(%arg0: i1, %arg1: f32) -> f32 {
+  %0 = scf.if %arg0 -> f32 {
+    %res = math.sqrt %arg1 : f32
+    scf.yield %res : f32
+  } else {
+    %res = math.exp %arg1 : f32
+    scf.yield %res : f32
+  }
+  return %0 : f32
+}

diff  --git a/mlir/test/Conversion/ConvertToSPIRV/simple.mlir b/mlir/test/Conversion/ConvertToSPIRV/simple.mlir
index aa4a963d1d69a..c485cbb06720c 100644
--- a/mlir/test/Conversion/ConvertToSPIRV/simple.mlir
+++ b/mlir/test/Conversion/ConvertToSPIRV/simple.mlir
@@ -13,3 +13,22 @@ func.func @return_scalar(%arg0 : i32) -> i32 {
 func.func @return_vector(%arg0 : vector<4xi32>) -> vector<4xi32> {
   return %arg0 : vector<4xi32>
 }
+
+// CHECK-LABEL: @cond_br
+// CHECK-SAME: %[[ARG0:.*]]: i1, %[[ARG1:.*]]: i32, %[[ARG2:.*]]: i32
+// CHECK:       spirv.BranchConditional %[[ARG0]], ^[[BB1:.*]], ^[[BB2:.*]]
+// CHECK-NEXT:  ^[[BB1]]:
+// CHECK-NEXT:    spirv.Branch ^[[BB3:.*]](%[[ARG1]] : i32)
+// CHECK-NEXT:  ^[[BB2]]:
+// CHECK-NEXT:    spirv.Branch ^[[BB3]](%[[ARG2]] : i32)
+// CHECK-NEXT:  ^[[BB3]]
+// CHECK:         spirv.ReturnValue
+func.func @cond_br(%arg0: i1, %arg1: i32, %arg2: i32) -> i32 {
+  cf.cond_br %arg0, ^bb1, ^bb2
+^bb1:
+  cf.br ^bb3(%arg1 : i32)
+^bb2:
+  cf.br ^bb3(%arg2 : i32)
+^bb3(%r: i32):
+  return %r : i32
+}

diff  --git a/mlir/test/lib/Pass/TestConvertToSPIRVPass.cpp b/mlir/test/lib/Pass/TestConvertToSPIRVPass.cpp
index 3c99d3c5b60ce..fa07a94aba474 100644
--- a/mlir/test/lib/Pass/TestConvertToSPIRVPass.cpp
+++ b/mlir/test/lib/Pass/TestConvertToSPIRVPass.cpp
@@ -7,9 +7,11 @@
 //===----------------------------------------------------------------------===//
 
 #include "mlir/Conversion/ArithToSPIRV/ArithToSPIRV.h"
+#include "mlir/Conversion/ControlFlowToSPIRV/ControlFlowToSPIRV.h"
 #include "mlir/Conversion/FuncToSPIRV/FuncToSPIRV.h"
 #include "mlir/Conversion/GPUToSPIRV/GPUToSPIRV.h"
 #include "mlir/Conversion/IndexToSPIRV/IndexToSPIRV.h"
+#include "mlir/Conversion/MathToSPIRV/MathToSPIRV.h"
 #include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRV.h"
 #include "mlir/Conversion/SCFToSPIRV/SCFToSPIRV.h"
 #include "mlir/Conversion/UBToSPIRV/UBToSPIRV.h"
@@ -53,10 +55,12 @@ void populateConvertToSPIRVPatterns(const SPIRVTypeConverter &typeConverter,
                                     RewritePatternSet &patterns) {
   arith::populateCeilFloorDivExpandOpsPatterns(patterns);
   arith::populateArithToSPIRVPatterns(typeConverter, patterns);
+  cf::populateControlFlowToSPIRVPatterns(typeConverter, patterns);
   populateBuiltinFuncToSPIRVPatterns(typeConverter, patterns);
   populateFuncToSPIRVPatterns(typeConverter, patterns);
   populateGPUToSPIRVPatterns(typeConverter, patterns);
   index::populateIndexToSPIRVPatterns(typeConverter, patterns);
+  populateMathToSPIRVPatterns(typeConverter, patterns);
   populateMemRefToSPIRVPatterns(typeConverter, patterns);
   populateVectorToSPIRVPatterns(typeConverter, patterns);
   populateSCFToSPIRVPatterns(typeConverter, scfToSPIRVContext, patterns);


        


More information about the Mlir-commits mailing list