Skip to content

Commit ea16e0e

Browse files
author
joaosaffran
committed
adding requested test
1 parent 97a0825 commit ea16e0e

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
; RUN: opt -passes='spirv-structurizer' -S -mtriple=spirv-unknown-unknown %s | FileCheck %s
2+
3+
; CHECK-LABEL: define spir_func noundef i32 @test_branch
4+
; 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]+}}
6+
define spir_func noundef i32 @test_branch(i32 noundef %X) {
7+
entry:
8+
%X.addr = alloca i32, align 4
9+
%resp = alloca i32, align 4
10+
store i32 %X, ptr %X.addr, align 4
11+
%0 = load i32, ptr %X.addr, align 4
12+
%cmp = icmp sgt i32 %0, 0
13+
br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !0
14+
15+
if.then: ; preds = %entry
16+
%1 = load i32, ptr %X.addr, align 4
17+
%sub = sub nsw i32 0, %1
18+
store i32 %sub, ptr %resp, align 4
19+
br label %if.end
20+
21+
if.else: ; preds = %entry
22+
%2 = load i32, ptr %X.addr, align 4
23+
%mul = mul nsw i32 %2, 2
24+
store i32 %mul, ptr %resp, align 4
25+
br label %if.end
26+
27+
if.end: ; preds = %if.else, %if.then
28+
%3 = load i32, ptr %resp, align 4
29+
ret i32 %3
30+
}
31+
32+
; CHECK-LABEL: define spir_func noundef i32 @test_flatten
33+
; 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]+}}
35+
define spir_func noundef i32 @test_flatten(i32 noundef %X) {
36+
entry:
37+
%X.addr = alloca i32, align 4
38+
%resp = alloca i32, align 4
39+
store i32 %X, ptr %X.addr, align 4
40+
%0 = load i32, ptr %X.addr, align 4
41+
%cmp = icmp sgt i32 %0, 0
42+
br i1 %cmp, label %if.then, label %if.else, !hlsl.controlflow.hint !1
43+
44+
if.then: ; preds = %entry
45+
%1 = load i32, ptr %X.addr, align 4
46+
%sub = sub nsw i32 0, %1
47+
store i32 %sub, ptr %resp, align 4
48+
br label %if.end
49+
50+
if.else: ; preds = %entry
51+
%2 = load i32, ptr %X.addr, align 4
52+
%mul = mul nsw i32 %2, 2
53+
store i32 %mul, ptr %resp, align 4
54+
br label %if.end
55+
56+
if.end: ; preds = %if.else, %if.then
57+
%3 = load i32, ptr %resp, align 4
58+
ret i32 %3
59+
}
60+
; CHECK-LABEL: define spir_func noundef i32 @test_no_attr
61+
; 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.else
63+
define spir_func noundef i32 @test_no_attr(i32 noundef %X) {
64+
entry:
65+
%X.addr = alloca i32, align 4
66+
%resp = alloca i32, align 4
67+
store i32 %X, ptr %X.addr, align 4
68+
%0 = load i32, ptr %X.addr, align 4
69+
%cmp = icmp sgt i32 %0, 0
70+
br i1 %cmp, label %if.then, label %if.else
71+
72+
if.then: ; preds = %entry
73+
%1 = load i32, ptr %X.addr, align 4
74+
%sub = sub nsw i32 0, %1
75+
store i32 %sub, ptr %resp, align 4
76+
br label %if.end
77+
78+
if.else: ; preds = %entry
79+
%2 = load i32, ptr %X.addr, align 4
80+
%mul = mul nsw i32 %2, 2
81+
store i32 %mul, ptr %resp, align 4
82+
br label %if.end
83+
84+
if.end: ; preds = %if.else, %if.then
85+
%3 = load i32, ptr %resp, align 4
86+
ret i32 %3
87+
}
88+
89+
!0 = !{!"hlsl.controlflow.hint", i32 1}
90+
!1 = !{!"hlsl.controlflow.hint", i32 2}

0 commit comments

Comments
 (0)