| // RUN: mlir-translate -test-spirv-roundtrip -split-input-file %s | FileCheck %s |
| |
| // Selection with both then and else branches |
| |
| spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> { |
| spv.func @selection(%cond: i1) -> () "None" { |
| // CHECK: spv.Branch ^bb1 |
| // CHECK-NEXT: ^bb1: |
| %zero = spv.Constant 0: i32 |
| %one = spv.Constant 1: i32 |
| %two = spv.Constant 2: i32 |
| %var = spv.Variable init(%zero) : !spv.ptr<i32, Function> |
| |
| // CHECK-NEXT: spv.mlir.selection control(Flatten) |
| // CHECK-NEXT: spv.Constant 0 |
| // CHECK-NEXT: spv.Variable |
| spv.mlir.selection control(Flatten) { |
| // CHECK-NEXT: spv.BranchConditional %{{.*}} [5, 10], ^bb1, ^bb2 |
| spv.BranchConditional %cond [5, 10], ^then, ^else |
| |
| // CHECK-NEXT: ^bb1: |
| ^then: |
| // CHECK-NEXT: spv.Constant 1 |
| // CHECK-NEXT: spv.Store |
| spv.Store "Function" %var, %one : i32 |
| // CHECK-NEXT: spv.Branch ^bb3 |
| spv.Branch ^merge |
| |
| // CHECK-NEXT: ^bb2: |
| ^else: |
| // CHECK-NEXT: spv.Constant 2 |
| // CHECK-NEXT: spv.Store |
| spv.Store "Function" %var, %two : i32 |
| // CHECK-NEXT: spv.Branch ^bb3 |
| spv.Branch ^merge |
| |
| // CHECK-NEXT: ^bb3: |
| ^merge: |
| // CHECK-NEXT: spv.mlir.merge |
| spv.mlir.merge |
| } |
| |
| spv.Return |
| } |
| |
| spv.func @main() -> () "None" { |
| spv.Return |
| } |
| spv.EntryPoint "GLCompute" @main |
| spv.ExecutionMode @main "LocalSize", 1, 1, 1 |
| } |
| |
| // ----- |
| |
| // Selection with only then branch |
| // Selection in function entry block |
| |
| spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> { |
| // CHECK: spv.func @selection(%[[ARG:.*]]: i1 |
| spv.func @selection(%cond: i1) -> (i32) "None" { |
| // CHECK: spv.Branch ^bb1 |
| // CHECK-NEXT: ^bb1: |
| // CHECK-NEXT: spv.mlir.selection |
| spv.mlir.selection { |
| // CHECK-NEXT: spv.BranchConditional %[[ARG]], ^bb1, ^bb2 |
| spv.BranchConditional %cond, ^then, ^merge |
| |
| // CHECK: ^bb1: |
| ^then: |
| %zero = spv.Constant 0 : i32 |
| spv.ReturnValue %zero : i32 |
| |
| // CHECK: ^bb2: |
| ^merge: |
| // CHECK-NEXT: spv.mlir.merge |
| spv.mlir.merge |
| } |
| |
| %one = spv.Constant 1 : i32 |
| spv.ReturnValue %one : i32 |
| } |
| |
| spv.func @main() -> () "None" { |
| spv.Return |
| } |
| spv.EntryPoint "GLCompute" @main |
| spv.ExecutionMode @main "LocalSize", 1, 1, 1 |
| } |
| |