brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 9911b31 Raw
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