xref: /llvm-project/mlir/test/Dialect/SPIRV/Linking/ModuleCombiner/basic.mlir (revision 4f4cd963a6e820b50514706a1a3faed3a05779a2)
190a8260cSergawy// RUN: mlir-opt -test-spirv-module-combiner -split-input-file -verify-diagnostics %s | FileCheck %s
290a8260cSergawy
323326b9fSLei Zhang// Combine modules without the same symbols
423326b9fSLei Zhang
590a8260cSergawy// CHECK:      module {
65ab6ef75SJakub Kuderski// CHECK-NEXT:   spirv.module Logical GLSL450 {
75ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.SpecConstant @m1_sc
85ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.GlobalVariable @m1_gv bind(1, 0)
95ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.func @no_op
105ab6ef75SJakub Kuderski// CHECK-NEXT:       spirv.Return
1123326b9fSLei Zhang// CHECK-NEXT:     }
125ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.EntryPoint "GLCompute" @no_op
135ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.ExecutionMode @no_op "LocalSize", 32, 1, 1
1423326b9fSLei Zhang
155ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.SpecConstant @m2_sc
165ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.GlobalVariable @m2_gv bind(0, 1)
175ab6ef75SJakub Kuderski// CHECK-NEXT:     spirv.func @variable_init_spec_constant
185ab6ef75SJakub Kuderski// CHECK-NEXT:       spirv.mlir.referenceof @m2_sc
195ab6ef75SJakub Kuderski// CHECK-NEXT:       spirv.Variable init
205ab6ef75SJakub Kuderski// CHECK-NEXT:       spirv.Return
2190a8260cSergawy// CHECK-NEXT:     }
2290a8260cSergawy// CHECK-NEXT:   }
2390a8260cSergawy// CHECK-NEXT: }
2490a8260cSergawy
2590a8260cSergawymodule {
265ab6ef75SJakub Kuderskispirv.module Logical GLSL450 {
275ab6ef75SJakub Kuderski  spirv.SpecConstant @m1_sc = 42.42 : f32
285ab6ef75SJakub Kuderski  spirv.GlobalVariable @m1_gv bind(1, 0): !spirv.ptr<f32, Input>
295ab6ef75SJakub Kuderski  spirv.func @no_op() -> () "None" {
305ab6ef75SJakub Kuderski    spirv.Return
3123326b9fSLei Zhang  }
325ab6ef75SJakub Kuderski  spirv.EntryPoint "GLCompute" @no_op
335ab6ef75SJakub Kuderski  spirv.ExecutionMode @no_op "LocalSize", 32, 1, 1
3490a8260cSergawy}
3590a8260cSergawy
365ab6ef75SJakub Kuderskispirv.module Logical GLSL450 {
375ab6ef75SJakub Kuderski  spirv.SpecConstant @m2_sc = 42 : i32
385ab6ef75SJakub Kuderski  spirv.GlobalVariable @m2_gv bind(0, 1): !spirv.ptr<f32, Input>
395ab6ef75SJakub Kuderski  spirv.func @variable_init_spec_constant() -> () "None" {
405ab6ef75SJakub Kuderski    %0 = spirv.mlir.referenceof @m2_sc : i32
415ab6ef75SJakub Kuderski    %1 = spirv.Variable init(%0) : !spirv.ptr<i32, Function>
425ab6ef75SJakub Kuderski    spirv.Return
4390a8260cSergawy  }
4490a8260cSergawy}
4590a8260cSergawy}
4690a8260cSergawy
4790a8260cSergawy// -----
4890a8260cSergawy
4990a8260cSergawymodule {
505ab6ef75SJakub Kuderskispirv.module Physical64 GLSL450 {
5190a8260cSergawy}
5290a8260cSergawy
5323326b9fSLei Zhang// expected-error @+1 {{input modules differ in addressing model, memory model, and/or VCE triple}}
545ab6ef75SJakub Kuderskispirv.module Logical GLSL450 {
5590a8260cSergawy}
5690a8260cSergawy}
5790a8260cSergawy
5890a8260cSergawy// -----
5990a8260cSergawy
6090a8260cSergawymodule {
615ab6ef75SJakub Kuderskispirv.module Logical Simple {
6290a8260cSergawy}
6390a8260cSergawy
6423326b9fSLei Zhang// expected-error @+1 {{input modules differ in addressing model, memory model, and/or VCE triple}}
655ab6ef75SJakub Kuderskispirv.module Logical GLSL450 {
6690a8260cSergawy}
6790a8260cSergawy}
6823326b9fSLei Zhang
6923326b9fSLei Zhang// -----
7023326b9fSLei Zhang
7123326b9fSLei Zhangmodule {
725ab6ef75SJakub Kuderskispirv.module Logical GLSL450 {
7323326b9fSLei Zhang}
7423326b9fSLei Zhang
7523326b9fSLei Zhang// expected-error @+1 {{input modules differ in addressing model, memory model, and/or VCE triple}}
76ce82530cSJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], [SPV_KHR_storage_buffer_storage_class]> {
7723326b9fSLei Zhang}
7823326b9fSLei Zhang}
7923326b9fSLei Zhang
80*4f4cd963SJakub Kuderski// -----
81*4f4cd963SJakub Kuderski
82*4f4cd963SJakub Kuderski// No spir-v modules to combine.
83*4f4cd963SJakub Kuderskimodule {
84*4f4cd963SJakub Kuderski  func.func @foo(%arg0: i32) -> i32 {
85*4f4cd963SJakub Kuderski    return %arg0 : i32
86*4f4cd963SJakub Kuderski  }
87*4f4cd963SJakub Kuderski}
88