91 lines · plain
1; RUN: opt -passes='spirv-structurizer' -S -mtriple=spirv-unknown-unknown %s | FileCheck %s2 3; CHECK-LABEL: define spir_func noundef i32 @test_branch4; CHECK: call void @llvm.spv.selection.merge.p0(ptr blockaddress(@test_branch, %if.end), i32 1)5; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !{{[0-9]+}}6define spir_func noundef i32 @test_branch(i32 noundef %X) {7entry:8 %X.addr = alloca i32, align 49 %resp = alloca i32, align 410 store i32 %X, ptr %X.addr, align 411 %0 = load i32, ptr %X.addr, align 412 %cmp = icmp sgt i32 %0, 013 br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !014 15if.then: ; preds = %entry16 %1 = load i32, ptr %X.addr, align 417 %sub = sub nsw i32 0, %118 store i32 %sub, ptr %resp, align 419 br label %if.end20 21if.else: ; preds = %entry22 %2 = load i32, ptr %X.addr, align 423 %mul = mul nsw i32 %2, 224 store i32 %mul, ptr %resp, align 425 br label %if.end26 27if.end: ; preds = %if.else, %if.then28 %3 = load i32, ptr %resp, align 429 ret i32 %330}31 32; CHECK-LABEL: define spir_func noundef i32 @test_flatten33; CHECK: call void @llvm.spv.selection.merge.p0(ptr blockaddress(@test_flatten, %if.end), i32 2)34; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !{{[0-9]+}}35define spir_func noundef i32 @test_flatten(i32 noundef %X) {36entry:37 %X.addr = alloca i32, align 438 %resp = alloca i32, align 439 store i32 %X, ptr %X.addr, align 440 %0 = load i32, ptr %X.addr, align 441 %cmp = icmp sgt i32 %0, 042 br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !143 44if.then: ; preds = %entry45 %1 = load i32, ptr %X.addr, align 446 %sub = sub nsw i32 0, %147 store i32 %sub, ptr %resp, align 448 br label %if.end49 50if.else: ; preds = %entry51 %2 = load i32, ptr %X.addr, align 452 %mul = mul nsw i32 %2, 253 store i32 %mul, ptr %resp, align 454 br label %if.end55 56if.end: ; preds = %if.else, %if.then57 %3 = load i32, ptr %resp, align 458 ret i32 %359}60; CHECK-LABEL: define spir_func noundef i32 @test_no_attr61; CHECK: call void @llvm.spv.selection.merge.p0(ptr blockaddress(@test_no_attr, %if.end), i32 0)62; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else63define spir_func noundef i32 @test_no_attr(i32 noundef %X) {64entry:65 %X.addr = alloca i32, align 466 %resp = alloca i32, align 467 store i32 %X, ptr %X.addr, align 468 %0 = load i32, ptr %X.addr, align 469 %cmp = icmp sgt i32 %0, 070 br i1 %cmp, label %if.then, label %if.else71 72if.then: ; preds = %entry73 %1 = load i32, ptr %X.addr, align 474 %sub = sub nsw i32 0, %175 store i32 %sub, ptr %resp, align 476 br label %if.end77 78if.else: ; preds = %entry79 %2 = load i32, ptr %X.addr, align 480 %mul = mul nsw i32 %2, 281 store i32 %mul, ptr %resp, align 482 br label %if.end83 84if.end: ; preds = %if.else, %if.then85 %3 = load i32, ptr %resp, align 486 ret i32 %387}88 89!0 = !{!"hlsl.controlflow.hint", i32 1}90!1 = !{!"hlsl.controlflow.hint", i32 2}91