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