1*e4889c0aSrkayaith// RUN: mlir-translate -no-implicit-module -split-input-file -test-spirv-roundtrip %s | FileCheck %s 201178654SLei Zhang 301178654SLei Zhang// Test branch with one block argument 401178654SLei Zhang 55ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 65ab6ef75SJakub Kuderski spirv.func @foo() -> () "None" { 75ab6ef75SJakub Kuderski// CHECK: %[[CST:.*]] = spirv.Constant 0 85ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 95ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb1(%[[CST]] : i32) 105ab6ef75SJakub Kuderski spirv.Branch ^bb1(%zero : i32) 1101178654SLei Zhang// CHECK-NEXT: ^bb1(%{{.*}}: i32): 1201178654SLei Zhang ^bb1(%arg0: i32): 135ab6ef75SJakub Kuderski spirv.Return 1401178654SLei Zhang } 1501178654SLei Zhang 165ab6ef75SJakub Kuderski spirv.func @main() -> () "None" { 175ab6ef75SJakub Kuderski spirv.Return 1801178654SLei Zhang } 195ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @main 2001178654SLei Zhang} 2101178654SLei Zhang 2201178654SLei Zhang// ----- 2301178654SLei Zhang 2401178654SLei Zhang// Test branch with multiple block arguments 2501178654SLei Zhang 265ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 275ab6ef75SJakub Kuderski spirv.func @foo() -> () "None" { 285ab6ef75SJakub Kuderski// CHECK: %[[ZERO:.*]] = spirv.Constant 0 295ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 305ab6ef75SJakub Kuderski// CHECK-NEXT: %[[ONE:.*]] = spirv.Constant 1 315ab6ef75SJakub Kuderski %one = spirv.Constant 1.0 : f32 325ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb1(%[[ZERO]], %[[ONE]] : i32, f32) 335ab6ef75SJakub Kuderski spirv.Branch ^bb1(%zero, %one : i32, f32) 3401178654SLei Zhang 3501178654SLei Zhang// CHECK-NEXT: ^bb1(%{{.*}}: i32, %{{.*}}: f32): // pred: ^bb0 3601178654SLei Zhang ^bb1(%arg0: i32, %arg1: f32): 375ab6ef75SJakub Kuderski spirv.Return 3801178654SLei Zhang } 3901178654SLei Zhang 405ab6ef75SJakub Kuderski spirv.func @main() -> () "None" { 415ab6ef75SJakub Kuderski spirv.Return 4201178654SLei Zhang } 435ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @main 4401178654SLei Zhang} 4501178654SLei Zhang 4601178654SLei Zhang// ----- 4701178654SLei Zhang 4801178654SLei Zhang// Test using block arguments within branch 4901178654SLei Zhang 505ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 515ab6ef75SJakub Kuderski spirv.func @foo() -> () "None" { 525ab6ef75SJakub Kuderski// CHECK: %[[CST0:.*]] = spirv.Constant 0 535ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 545ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb1(%[[CST0]] : i32) 555ab6ef75SJakub Kuderski spirv.Branch ^bb1(%zero : i32) 5601178654SLei Zhang 5701178654SLei Zhang// CHECK-NEXT: ^bb1(%[[ARG:.*]]: i32): 5801178654SLei Zhang ^bb1(%arg0: i32): 595ab6ef75SJakub Kuderski// CHECK-NEXT: %[[ADD:.*]] = spirv.IAdd %[[ARG]], %[[ARG]] : i32 605ab6ef75SJakub Kuderski %0 = spirv.IAdd %arg0, %arg0 : i32 615ab6ef75SJakub Kuderski// CHECK-NEXT: %[[CST1:.*]] = spirv.Constant 0 625ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb2(%[[CST1]], %[[ADD]] : i32, i32) 635ab6ef75SJakub Kuderski spirv.Branch ^bb2(%zero, %0 : i32, i32) 6401178654SLei Zhang 6501178654SLei Zhang// CHECK-NEXT: ^bb2(%{{.*}}: i32, %{{.*}}: i32): 6601178654SLei Zhang ^bb2(%arg1: i32, %arg2: i32): 675ab6ef75SJakub Kuderski spirv.Return 6801178654SLei Zhang } 6901178654SLei Zhang 705ab6ef75SJakub Kuderski spirv.func @main() -> () "None" { 715ab6ef75SJakub Kuderski spirv.Return 7201178654SLei Zhang } 735ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @main 7401178654SLei Zhang} 7501178654SLei Zhang 7601178654SLei Zhang// ----- 7701178654SLei Zhang 7801178654SLei Zhang// Test block not following domination order 7901178654SLei Zhang 805ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 815ab6ef75SJakub Kuderski spirv.func @foo() -> () "None" { 825ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^bb1 835ab6ef75SJakub Kuderski spirv.Branch ^bb1 8401178654SLei Zhang 8501178654SLei Zhang// CHECK-NEXT: ^bb1: 865ab6ef75SJakub Kuderski// CHECK-NEXT: %[[ZERO:.*]] = spirv.Constant 0 875ab6ef75SJakub Kuderski// CHECK-NEXT: %[[ONE:.*]] = spirv.Constant 1 885ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb2(%[[ZERO]], %[[ONE]] : i32, f32) 8901178654SLei Zhang 9001178654SLei Zhang// CHECK-NEXT: ^bb2(%{{.*}}: i32, %{{.*}}: f32): 9101178654SLei Zhang ^bb2(%arg0: i32, %arg1: f32): 925ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Return 935ab6ef75SJakub Kuderski spirv.Return 9401178654SLei Zhang 9501178654SLei Zhang // This block is reordered to follow domination order. 9601178654SLei Zhang ^bb1: 975ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 985ab6ef75SJakub Kuderski %one = spirv.Constant 1.0 : f32 995ab6ef75SJakub Kuderski spirv.Branch ^bb2(%zero, %one : i32, f32) 10001178654SLei Zhang } 10101178654SLei Zhang 1025ab6ef75SJakub Kuderski spirv.func @main() -> () "None" { 1035ab6ef75SJakub Kuderski spirv.Return 10401178654SLei Zhang } 1055ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @main 10601178654SLei Zhang} 10701178654SLei Zhang 10801178654SLei Zhang// ----- 10901178654SLei Zhang 11001178654SLei Zhang// Test multiple predecessors 11101178654SLei Zhang 1125ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 1135ab6ef75SJakub Kuderski spirv.func @foo() -> () "None" { 1145ab6ef75SJakub Kuderski %var = spirv.Variable : !spirv.ptr<i32, Function> 11501178654SLei Zhang 1165ab6ef75SJakub Kuderski// CHECK: spirv.mlir.selection 1175ab6ef75SJakub Kuderski spirv.mlir.selection { 1185ab6ef75SJakub Kuderski %true = spirv.Constant true 1195ab6ef75SJakub Kuderski// CHECK: spirv.BranchConditional %{{.*}}, ^bb1, ^bb2 1205ab6ef75SJakub Kuderski spirv.BranchConditional %true, ^true, ^false 12101178654SLei Zhang 12201178654SLei Zhang// CHECK-NEXT: ^bb1: 12301178654SLei Zhang ^true: 1245ab6ef75SJakub Kuderski// CHECK-NEXT: %[[ZERO:.*]] = spirv.Constant 0 1255ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 1265ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb3(%[[ZERO]] : i32) 1275ab6ef75SJakub Kuderski spirv.Branch ^phi(%zero: i32) 12801178654SLei Zhang 12901178654SLei Zhang// CHECK-NEXT: ^bb2: 13001178654SLei Zhang ^false: 1315ab6ef75SJakub Kuderski// CHECK-NEXT: %[[ONE:.*]] = spirv.Constant 1 1325ab6ef75SJakub Kuderski %one = spirv.Constant 1 : i32 1335ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^bb3(%[[ONE]] : i32) 1345ab6ef75SJakub Kuderski spirv.Branch ^phi(%one: i32) 13501178654SLei Zhang 13601178654SLei Zhang// CHECK-NEXT: ^bb3(%[[ARG:.*]]: i32): 13701178654SLei Zhang ^phi(%arg: i32): 1385ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Store "Function" %{{.*}}, %[[ARG]] : i32 1395ab6ef75SJakub Kuderski spirv.Store "Function" %var, %arg : i32 1405ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Return 1415ab6ef75SJakub Kuderski spirv.Return 14201178654SLei Zhang 14301178654SLei Zhang// CHECK-NEXT: ^bb4: 14401178654SLei Zhang ^merge: 1455ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.mlir.merge 1465ab6ef75SJakub Kuderski spirv.mlir.merge 14701178654SLei Zhang } 1485ab6ef75SJakub Kuderski spirv.Return 14901178654SLei Zhang } 15001178654SLei Zhang 1515ab6ef75SJakub Kuderski spirv.func @main() -> () "None" { 1525ab6ef75SJakub Kuderski spirv.Return 15301178654SLei Zhang } 1545ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @main 15501178654SLei Zhang} 15601178654SLei Zhang 15701178654SLei Zhang// ----- 15801178654SLei Zhang 15901178654SLei Zhang// Test nested loops with block arguments 16001178654SLei Zhang 1615ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 1625ab6ef75SJakub Kuderski spirv.GlobalVariable @__builtin_var_NumWorkgroups__ built_in("NumWorkgroups") : !spirv.ptr<vector<3xi32>, Input> 1635ab6ef75SJakub Kuderski spirv.GlobalVariable @__builtin_var_WorkgroupId__ built_in("WorkgroupId") : !spirv.ptr<vector<3xi32>, Input> 1645ab6ef75SJakub Kuderski spirv.func @fmul_kernel() "None" { 1655ab6ef75SJakub Kuderski %3 = spirv.Constant 12 : i32 1665ab6ef75SJakub Kuderski %4 = spirv.Constant 32 : i32 1675ab6ef75SJakub Kuderski %5 = spirv.Constant 4 : i32 1685ab6ef75SJakub Kuderski %6 = spirv.mlir.addressof @__builtin_var_WorkgroupId__ : !spirv.ptr<vector<3xi32>, Input> 1695ab6ef75SJakub Kuderski %7 = spirv.Load "Input" %6 : vector<3xi32> 1705ab6ef75SJakub Kuderski %8 = spirv.CompositeExtract %7[0 : i32] : vector<3xi32> 1715ab6ef75SJakub Kuderski %9 = spirv.mlir.addressof @__builtin_var_WorkgroupId__ : !spirv.ptr<vector<3xi32>, Input> 1725ab6ef75SJakub Kuderski %10 = spirv.Load "Input" %9 : vector<3xi32> 1735ab6ef75SJakub Kuderski %11 = spirv.CompositeExtract %10[1 : i32] : vector<3xi32> 1745ab6ef75SJakub Kuderski %18 = spirv.mlir.addressof @__builtin_var_NumWorkgroups__ : !spirv.ptr<vector<3xi32>, Input> 1755ab6ef75SJakub Kuderski %19 = spirv.Load "Input" %18 : vector<3xi32> 1765ab6ef75SJakub Kuderski %20 = spirv.CompositeExtract %19[0 : i32] : vector<3xi32> 1775ab6ef75SJakub Kuderski %21 = spirv.mlir.addressof @__builtin_var_NumWorkgroups__ : !spirv.ptr<vector<3xi32>, Input> 1785ab6ef75SJakub Kuderski %22 = spirv.Load "Input" %21 : vector<3xi32> 1795ab6ef75SJakub Kuderski %23 = spirv.CompositeExtract %22[1 : i32] : vector<3xi32> 1805ab6ef75SJakub Kuderski %30 = spirv.IMul %11, %4 : i32 1815ab6ef75SJakub Kuderski %31 = spirv.IMul %23, %4 : i32 18201178654SLei Zhang 1835ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^[[FN_BB:.*]](%{{.*}} : i32) 18401178654SLei Zhang// CHECK: ^[[FN_BB]](%[[FN_BB_ARG:.*]]: i32): 1855ab6ef75SJakub Kuderski// CHECK: spirv.mlir.loop { 1865ab6ef75SJakub Kuderski spirv.mlir.loop { 1875ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^bb1(%[[FN_BB_ARG]] : i32) 1885ab6ef75SJakub Kuderski spirv.Branch ^bb1(%30 : i32) 18901178654SLei Zhang// CHECK: ^[[LP1_HDR:.*]](%[[LP1_HDR_ARG:.*]]: i32): 19001178654SLei Zhang ^bb1(%32: i32): 1915ab6ef75SJakub Kuderski// CHECK: spirv.SLessThan 1925ab6ef75SJakub Kuderski %33 = spirv.SLessThan %32, %3 : i32 1935ab6ef75SJakub Kuderski// CHECK: spirv.BranchConditional %{{.*}}, ^[[LP1_BDY:.*]], ^[[LP1_MG:.*]] 1945ab6ef75SJakub Kuderski spirv.BranchConditional %33, ^bb2, ^bb3 19501178654SLei Zhang// CHECK: ^[[LP1_BDY]]: 19601178654SLei Zhang ^bb2: 1975ab6ef75SJakub Kuderski// CHECK: %[[MUL:.*]] = spirv.IMul 1985ab6ef75SJakub Kuderski %34 = spirv.IMul %8, %5 : i32 1995ab6ef75SJakub Kuderski// CHECK: spirv.IMul 2005ab6ef75SJakub Kuderski %35 = spirv.IMul %20, %5 : i32 2015ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^[[LP1_CNT:.*]](%[[MUL]] : i32) 20201178654SLei Zhang// CHECK: ^[[LP1_CNT]](%[[LP1_CNT_ARG:.*]]: i32): 2035ab6ef75SJakub Kuderski// CHECK: spirv.mlir.loop { 2045ab6ef75SJakub Kuderski spirv.mlir.loop { 2055ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^[[LP2_HDR:.*]](%[[LP1_CNT_ARG]] : i32) 2065ab6ef75SJakub Kuderski spirv.Branch ^bb1(%34 : i32) 20701178654SLei Zhang// CHECK: ^[[LP2_HDR]](%[[LP2_HDR_ARG:.*]]: i32): 20801178654SLei Zhang ^bb1(%37: i32): 2095ab6ef75SJakub Kuderski// CHECK: spirv.SLessThan %[[LP2_HDR_ARG]] 2105ab6ef75SJakub Kuderski %38 = spirv.SLessThan %37, %5 : i32 2115ab6ef75SJakub Kuderski// CHECK: spirv.BranchConditional %{{.*}}, ^[[LP2_BDY:.*]], ^[[LP2_MG:.*]] 2125ab6ef75SJakub Kuderski spirv.BranchConditional %38, ^bb2, ^bb3 21301178654SLei Zhang// CHECK: ^[[LP2_BDY]]: 21401178654SLei Zhang ^bb2: 2155ab6ef75SJakub Kuderski// CHECK: %[[ADD1:.*]] = spirv.IAdd 2165ab6ef75SJakub Kuderski %48 = spirv.IAdd %37, %35 : i32 2175ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^[[LP2_HDR]](%[[ADD1]] : i32) 2185ab6ef75SJakub Kuderski spirv.Branch ^bb1(%48 : i32) 21901178654SLei Zhang// CHECK: ^[[LP2_MG]]: 22001178654SLei Zhang ^bb3: 2215ab6ef75SJakub Kuderski// CHECK: spirv.mlir.merge 2225ab6ef75SJakub Kuderski spirv.mlir.merge 22301178654SLei Zhang } 2245ab6ef75SJakub Kuderski// CHECK: %[[ADD2:.*]] = spirv.IAdd %[[LP1_HDR_ARG]] 2255ab6ef75SJakub Kuderski %36 = spirv.IAdd %32, %31 : i32 2265ab6ef75SJakub Kuderski// CHECK: spirv.Branch ^[[LP1_HDR]](%[[ADD2]] : i32) 2275ab6ef75SJakub Kuderski spirv.Branch ^bb1(%36 : i32) 22801178654SLei Zhang// CHECK: ^[[LP1_MG]]: 22901178654SLei Zhang ^bb3: 2305ab6ef75SJakub Kuderski// CHECK: spirv.mlir.merge 2315ab6ef75SJakub Kuderski spirv.mlir.merge 23201178654SLei Zhang } 2335ab6ef75SJakub Kuderski spirv.Return 23401178654SLei Zhang } 23501178654SLei Zhang 2365ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @fmul_kernel, @__builtin_var_WorkgroupId__, @__builtin_var_NumWorkgroups__ 2375ab6ef75SJakub Kuderski spirv.ExecutionMode @fmul_kernel "LocalSize", 32, 1, 1 23801178654SLei Zhang} 23901178654SLei Zhang 24001178654SLei Zhang// ----- 24101178654SLei Zhang 24201178654SLei Zhang// Test back-to-back loops with block arguments 24301178654SLei Zhang 2445ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 2455ab6ef75SJakub Kuderski spirv.func @fmul_kernel() "None" { 2465ab6ef75SJakub Kuderski %cst4 = spirv.Constant 4 : i32 24701178654SLei Zhang 2485ab6ef75SJakub Kuderski %val1 = spirv.Constant 43 : i32 2495ab6ef75SJakub Kuderski %val2 = spirv.Constant 44 : i32 25001178654SLei Zhang 2515ab6ef75SJakub Kuderski// CHECK: spirv.Constant 43 2525ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^[[BB1:.+]](%{{.+}} : i32) 25301178654SLei Zhang// CHECK-NEXT: ^[[BB1]](%{{.+}}: i32): 2545ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.mlir.loop 2555ab6ef75SJakub Kuderski spirv.mlir.loop { // loop 1 2565ab6ef75SJakub Kuderski spirv.Branch ^bb1(%val1 : i32) 25701178654SLei Zhang ^bb1(%loop1_bb_arg: i32): 2585ab6ef75SJakub Kuderski %loop1_lt = spirv.SLessThan %loop1_bb_arg, %cst4 : i32 2595ab6ef75SJakub Kuderski spirv.BranchConditional %loop1_lt, ^bb2, ^bb3 26001178654SLei Zhang ^bb2: 2615ab6ef75SJakub Kuderski %loop1_add = spirv.IAdd %loop1_bb_arg, %cst4 : i32 2625ab6ef75SJakub Kuderski spirv.Branch ^bb1(%loop1_add : i32) 26301178654SLei Zhang ^bb3: 2645ab6ef75SJakub Kuderski spirv.mlir.merge 26501178654SLei Zhang } 26601178654SLei Zhang 2675ab6ef75SJakub Kuderski// CHECK: spirv.Constant 44 2685ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.Branch ^[[BB2:.+]](%{{.+}} : i32) 26901178654SLei Zhang// CHECK-NEXT: ^[[BB2]](%{{.+}}: i32): 2705ab6ef75SJakub Kuderski// CHECK-NEXT: spirv.mlir.loop 2715ab6ef75SJakub Kuderski spirv.mlir.loop { // loop 2 2725ab6ef75SJakub Kuderski spirv.Branch ^bb1(%val2 : i32) 27301178654SLei Zhang ^bb1(%loop2_bb_arg: i32): 2745ab6ef75SJakub Kuderski %loop2_lt = spirv.SLessThan %loop2_bb_arg, %cst4 : i32 2755ab6ef75SJakub Kuderski spirv.BranchConditional %loop2_lt, ^bb2, ^bb3 27601178654SLei Zhang ^bb2: 2775ab6ef75SJakub Kuderski %loop2_add = spirv.IAdd %loop2_bb_arg, %cst4 : i32 2785ab6ef75SJakub Kuderski spirv.Branch ^bb1(%loop2_add : i32) 27901178654SLei Zhang ^bb3: 2805ab6ef75SJakub Kuderski spirv.mlir.merge 28101178654SLei Zhang } 28201178654SLei Zhang 2835ab6ef75SJakub Kuderski spirv.Return 28401178654SLei Zhang } 28501178654SLei Zhang 2865ab6ef75SJakub Kuderski spirv.EntryPoint "GLCompute" @fmul_kernel 2875ab6ef75SJakub Kuderski spirv.ExecutionMode @fmul_kernel "LocalSize", 32, 1, 1 28801178654SLei Zhang} 289e4dee7e7SKareemErgawy-TomTom 290e4dee7e7SKareemErgawy-TomTom// ----- 291e4dee7e7SKareemErgawy-TomTom 2925ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 293e4dee7e7SKareemErgawy-TomTom// CHECK-LABEL: @cond_branch_true_argument 2945ab6ef75SJakub Kuderski spirv.func @cond_branch_true_argument() -> () "None" { 2955ab6ef75SJakub Kuderski %true = spirv.Constant true 2965ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 2975ab6ef75SJakub Kuderski %one = spirv.Constant 1 : i32 2985ab6ef75SJakub Kuderski// CHECK: spirv.BranchConditional %{{.*}}, ^[[true1:.*]](%{{.*}}, %{{.*}} : i32, i32), ^[[false1:.*]] 2995ab6ef75SJakub Kuderski spirv.BranchConditional %true, ^true1(%zero, %zero: i32, i32), ^false1 300e4dee7e7SKareemErgawy-TomTom// CHECK: [[true1]](%{{.*}}: i32, %{{.*}}: i32) 301e4dee7e7SKareemErgawy-TomTom ^true1(%arg0: i32, %arg1: i32): 3025ab6ef75SJakub Kuderski spirv.Return 303e4dee7e7SKareemErgawy-TomTom// CHECK: [[false1]]: 304e4dee7e7SKareemErgawy-TomTom ^false1: 3055ab6ef75SJakub Kuderski spirv.Return 306e4dee7e7SKareemErgawy-TomTom } 307e4dee7e7SKareemErgawy-TomTom} 308e4dee7e7SKareemErgawy-TomTom 309e4dee7e7SKareemErgawy-TomTom// ----- 310e4dee7e7SKareemErgawy-TomTom 3115ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 312e4dee7e7SKareemErgawy-TomTom// CHECK-LABEL: @cond_branch_false_argument 3135ab6ef75SJakub Kuderski spirv.func @cond_branch_false_argument() -> () "None" { 3145ab6ef75SJakub Kuderski %true = spirv.Constant true 3155ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 3165ab6ef75SJakub Kuderski %one = spirv.Constant 1 : i32 3175ab6ef75SJakub Kuderski// CHECK: spirv.BranchConditional %{{.*}}, ^[[true1:.*]], ^[[false1:.*]](%{{.*}}, %{{.*}} : i32, i32) 3185ab6ef75SJakub Kuderski spirv.BranchConditional %true, ^true1, ^false1(%zero, %zero: i32, i32) 319e4dee7e7SKareemErgawy-TomTom// CHECK: [[true1]]: 320e4dee7e7SKareemErgawy-TomTom ^true1: 3215ab6ef75SJakub Kuderski spirv.Return 322e4dee7e7SKareemErgawy-TomTom// CHECK: [[false1]](%{{.*}}: i32, %{{.*}}: i32): 323e4dee7e7SKareemErgawy-TomTom ^false1(%arg0: i32, %arg1: i32): 3245ab6ef75SJakub Kuderski spirv.Return 325e4dee7e7SKareemErgawy-TomTom } 326e4dee7e7SKareemErgawy-TomTom} 327e4dee7e7SKareemErgawy-TomTom 328e4dee7e7SKareemErgawy-TomTom// ----- 329e4dee7e7SKareemErgawy-TomTom 3305ab6ef75SJakub Kuderskispirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> { 331e4dee7e7SKareemErgawy-TomTom// CHECK-LABEL: @cond_branch_true_and_false_argument 3325ab6ef75SJakub Kuderski spirv.func @cond_branch_true_and_false_argument() -> () "None" { 3335ab6ef75SJakub Kuderski %true = spirv.Constant true 3345ab6ef75SJakub Kuderski %zero = spirv.Constant 0 : i32 3355ab6ef75SJakub Kuderski %one = spirv.Constant 1 : i32 3365ab6ef75SJakub Kuderski// CHECK: spirv.BranchConditional %{{.*}}, ^[[true1:.*]](%{{.*}} : i32), ^[[false1:.*]](%{{.*}}, %{{.*}} : i32, i32) 3375ab6ef75SJakub Kuderski spirv.BranchConditional %true, ^true1(%one: i32), ^false1(%zero, %zero: i32, i32) 338e4dee7e7SKareemErgawy-TomTom// CHECK: [[true1]](%{{.*}}: i32): 339e4dee7e7SKareemErgawy-TomTom ^true1(%arg0: i32): 3405ab6ef75SJakub Kuderski spirv.Return 341e4dee7e7SKareemErgawy-TomTom// CHECK: [[false1]](%{{.*}}: i32, %{{.*}}: i32): 342e4dee7e7SKareemErgawy-TomTom ^false1(%arg1: i32, %arg2: i32): 3435ab6ef75SJakub Kuderski spirv.Return 344e4dee7e7SKareemErgawy-TomTom } 345e4dee7e7SKareemErgawy-TomTom} 346