1*380bb51bSjoaosaffran; RUN: llc -O0 -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s 2*380bb51bSjoaosaffran; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-unknown %s -o - -filetype=obj | spirv-val %} 3*380bb51bSjoaosaffran 4*380bb51bSjoaosaffran 5*380bb51bSjoaosaffrandefine spir_func noundef i32 @test_branch(i32 noundef %X) { 6*380bb51bSjoaosaffranentry: 7*380bb51bSjoaosaffran; CHECK-LABEL: ; -- Begin function test_branch 8*380bb51bSjoaosaffran; OpSelectionMerge %[[#]] DontFlatten 9*380bb51bSjoaosaffran %X.addr = alloca i32, align 4 10*380bb51bSjoaosaffran %resp = alloca i32, align 4 11*380bb51bSjoaosaffran store i32 %X, ptr %X.addr, align 4 12*380bb51bSjoaosaffran %0 = load i32, ptr %X.addr, align 4 13*380bb51bSjoaosaffran %cmp = icmp sgt i32 %0, 0 14*380bb51bSjoaosaffran br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !0 15*380bb51bSjoaosaffran 16*380bb51bSjoaosaffranif.then: ; preds = %entry 17*380bb51bSjoaosaffran %1 = load i32, ptr %X.addr, align 4 18*380bb51bSjoaosaffran %sub = sub nsw i32 0, %1 19*380bb51bSjoaosaffran store i32 %sub, ptr %resp, align 4 20*380bb51bSjoaosaffran br label %if.end 21*380bb51bSjoaosaffran 22*380bb51bSjoaosaffranif.else: ; preds = %entry 23*380bb51bSjoaosaffran %2 = load i32, ptr %X.addr, align 4 24*380bb51bSjoaosaffran %mul = mul nsw i32 %2, 2 25*380bb51bSjoaosaffran store i32 %mul, ptr %resp, align 4 26*380bb51bSjoaosaffran br label %if.end 27*380bb51bSjoaosaffran 28*380bb51bSjoaosaffranif.end: ; preds = %if.else, %if.then 29*380bb51bSjoaosaffran %3 = load i32, ptr %resp, align 4 30*380bb51bSjoaosaffran ret i32 %3 31*380bb51bSjoaosaffran} 32*380bb51bSjoaosaffran 33*380bb51bSjoaosaffran 34*380bb51bSjoaosaffrandefine spir_func noundef i32 @test_flatten(i32 noundef %X) { 35*380bb51bSjoaosaffranentry: 36*380bb51bSjoaosaffran; CHECK-LABEL: ; -- Begin function test_flatten 37*380bb51bSjoaosaffran; OpSelectionMerge %[[#]] Flatten 38*380bb51bSjoaosaffran %X.addr = alloca i32, align 4 39*380bb51bSjoaosaffran %resp = alloca i32, align 4 40*380bb51bSjoaosaffran store i32 %X, ptr %X.addr, align 4 41*380bb51bSjoaosaffran %0 = load i32, ptr %X.addr, align 4 42*380bb51bSjoaosaffran %cmp = icmp sgt i32 %0, 0 43*380bb51bSjoaosaffran br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !1 44*380bb51bSjoaosaffran 45*380bb51bSjoaosaffranif.then: ; preds = %entry 46*380bb51bSjoaosaffran %1 = load i32, ptr %X.addr, align 4 47*380bb51bSjoaosaffran %sub = sub nsw i32 0, %1 48*380bb51bSjoaosaffran store i32 %sub, ptr %resp, align 4 49*380bb51bSjoaosaffran br label %if.end 50*380bb51bSjoaosaffran 51*380bb51bSjoaosaffranif.else: ; preds = %entry 52*380bb51bSjoaosaffran %2 = load i32, ptr %X.addr, align 4 53*380bb51bSjoaosaffran %mul = mul nsw i32 %2, 2 54*380bb51bSjoaosaffran store i32 %mul, ptr %resp, align 4 55*380bb51bSjoaosaffran br label %if.end 56*380bb51bSjoaosaffran 57*380bb51bSjoaosaffranif.end: ; preds = %if.else, %if.then 58*380bb51bSjoaosaffran %3 = load i32, ptr %resp, align 4 59*380bb51bSjoaosaffran ret i32 %3 60*380bb51bSjoaosaffran} 61*380bb51bSjoaosaffran 62*380bb51bSjoaosaffrandefine spir_func noundef i32 @test_no_attr(i32 noundef %X) { 63*380bb51bSjoaosaffranentry: 64*380bb51bSjoaosaffran; CHECK-LABEL: ; -- Begin function test_no_attr 65*380bb51bSjoaosaffran; OpSelectionMerge %[[#]] None 66*380bb51bSjoaosaffran %X.addr = alloca i32, align 4 67*380bb51bSjoaosaffran %resp = alloca i32, align 4 68*380bb51bSjoaosaffran store i32 %X, ptr %X.addr, align 4 69*380bb51bSjoaosaffran %0 = load i32, ptr %X.addr, align 4 70*380bb51bSjoaosaffran %cmp = icmp sgt i32 %0, 0 71*380bb51bSjoaosaffran br i1 %cmp, label %if.then, label %if.else 72*380bb51bSjoaosaffran 73*380bb51bSjoaosaffranif.then: ; preds = %entry 74*380bb51bSjoaosaffran %1 = load i32, ptr %X.addr, align 4 75*380bb51bSjoaosaffran %sub = sub nsw i32 0, %1 76*380bb51bSjoaosaffran store i32 %sub, ptr %resp, align 4 77*380bb51bSjoaosaffran br label %if.end 78*380bb51bSjoaosaffran 79*380bb51bSjoaosaffranif.else: ; preds = %entry 80*380bb51bSjoaosaffran %2 = load i32, ptr %X.addr, align 4 81*380bb51bSjoaosaffran %mul = mul nsw i32 %2, 2 82*380bb51bSjoaosaffran store i32 %mul, ptr %resp, align 4 83*380bb51bSjoaosaffran br label %if.end 84*380bb51bSjoaosaffran 85*380bb51bSjoaosaffranif.end: ; preds = %if.else, %if.then 86*380bb51bSjoaosaffran %3 = load i32, ptr %resp, align 4 87*380bb51bSjoaosaffran ret i32 %3 88*380bb51bSjoaosaffran} 89*380bb51bSjoaosaffran 90*380bb51bSjoaosaffran!0 = !{!"hlsl.controlflow.hint", i32 1} 91*380bb51bSjoaosaffran!1 = !{!"hlsl.controlflow.hint", i32 2} 92