Ensure SplitEdge to return the new block between the two given blocks
[llvm-project.git] / mlir / test / Dialect / SPIRV / Serialization / selection.mlir
blobe05f4a135144d7a7a19962160cb67f9c9e17cc29
1 // RUN: mlir-translate -test-spirv-roundtrip -split-input-file %s | FileCheck %s
3 // Selection with both then and else branches
5 spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
6   spv.func @selection(%cond: i1) -> () "None" {
7 // CHECK:        spv.Branch ^bb1
8 // CHECK-NEXT: ^bb1:
9     %zero = spv.constant 0: i32
10     %one = spv.constant 1: i32
11     %two = spv.constant 2: i32
12     %var = spv.Variable init(%zero) : !spv.ptr<i32, Function>
14 // CHECK-NEXT:   spv.selection control(Flatten)
15 // CHECK-NEXT:     spv.constant 0
16 // CHECK-NEXT:     spv.Variable
17     spv.selection control(Flatten) {
18 // CHECK-NEXT: spv.BranchConditional %{{.*}} [5, 10], ^bb1, ^bb2
19       spv.BranchConditional %cond [5, 10], ^then, ^else
21 // CHECK-NEXT:   ^bb1:
22     ^then:
23 // CHECK-NEXT:     spv.constant 1
24 // CHECK-NEXT:     spv.Store
25       spv.Store "Function" %var, %one : i32
26 // CHECK-NEXT:     spv.Branch ^bb3
27       spv.Branch ^merge
29 // CHECK-NEXT:   ^bb2:
30     ^else:
31 // CHECK-NEXT:     spv.constant 2
32 // CHECK-NEXT:     spv.Store
33       spv.Store "Function" %var, %two : i32
34 // CHECK-NEXT:     spv.Branch ^bb3
35       spv.Branch ^merge
37 // CHECK-NEXT:   ^bb3:
38     ^merge:
39 // CHECK-NEXT:     spv.mlir.merge
40       spv.mlir.merge
41     }
43     spv.Return
44   }
46   spv.func @main() -> () "None" {
47     spv.Return
48   }
49   spv.EntryPoint "GLCompute" @main
50   spv.ExecutionMode @main "LocalSize", 1, 1, 1
53 // -----
55 // Selection with only then branch
56 // Selection in function entry block
58 spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
59 // CHECK:      spv.func @selection(%[[ARG:.*]]: i1
60   spv.func @selection(%cond: i1) -> (i32) "None" {
61 // CHECK:        spv.Branch ^bb1
62 // CHECK-NEXT: ^bb1:
63 // CHECK-NEXT:   spv.selection
64     spv.selection {
65 // CHECK-NEXT: spv.BranchConditional %[[ARG]], ^bb1, ^bb2
66       spv.BranchConditional %cond, ^then, ^merge
68 // CHECK:        ^bb1:
69     ^then:
70       %zero = spv.constant 0 : i32
71       spv.ReturnValue  %zero : i32
73 // CHECK:        ^bb2:
74     ^merge:
75 // CHECK-NEXT:     spv.mlir.merge
76       spv.mlir.merge
77     }
79     %one = spv.constant 1 : i32
80     spv.ReturnValue  %one : i32
81   }
83   spv.func @main() -> () "None" {
84     spv.Return
85   }
86   spv.EntryPoint "GLCompute" @main
87   spv.ExecutionMode @main "LocalSize", 1, 1, 1