1; RUN: llc -O0 %s -o - | FileCheck %s
2
3target triple = "spirv32-unknown-unknown"
4
5; FIXME: Are there any attributes that would make the IR invalid for SPIR-V?
6
7; Names:
8; CHECK-DAG: OpName [[FN1:%.+]] "fn1"
9; CHECK-DAG: OpName [[FN2:%.+]] "fn2"
10; CHECK-DAG: OpName [[FN3:%.+]] "fn3"
11; CHECK-DAG: OpName [[FN4:%.+]] "fn4"
12; CHECK-DAG: OpName [[FN5:%.+]] "fn5"
13; CHECK-DAG: OpName [[FN6:%.+]] "fn6"
14; CHECK-DAG: OpName [[FN7:%.+]] "fn7"
15
16; Types:
17; CHECK: [[VOID:%.+]] = OpTypeVoid
18; CHECK: [[FN:%.+]] = OpTypeFunction [[VOID]]
19
20
21; Functions:
22
23define void @fn1() noinline {
24  ret void
25}
26; CHECK: [[FN1]] = OpFunction [[VOID]] DontInline [[FN]]
27; CHECK-NOT: OpFunctionParameter
28; CHECK: OpFunctionEnd
29
30
31attributes #0 = { noinline }
32define void @fn2() #0 {
33  ret void
34}
35; CHECK: [[FN2]] = OpFunction [[VOID]] DontInline [[FN]]
36; CHECK: OpFunctionEnd
37
38
39define void @fn3() alwaysinline {
40  ret void
41}
42; CHECK: [[FN3]] = OpFunction [[VOID]] Inline [[FN]]
43; CHECK: OpFunctionEnd
44
45
46; NOTE: inlinehint is not an actual requirement.
47define void @fn4() inlinehint {
48  ret void
49}
50; CHECK: [[FN4]] = OpFunction [[VOID]] None [[FN]]
51; CHECK: OpFunctionEnd
52
53
54define void @fn5() readnone {
55  ret void
56}
57; CHECK: [[FN5]] = OpFunction [[VOID]] Pure [[FN]]
58; CHECK: OpFunctionEnd
59
60
61define void @fn6() readonly {
62  ret void
63}
64; CHECK: [[FN6]] = OpFunction [[VOID]] Const [[FN]]
65; CHECK: OpFunctionEnd
66
67
68define void @fn7() alwaysinline readnone {
69  ret void
70}
71; CHECK: [[FN7]] = OpFunction [[VOID]] Inline|Pure [[FN]]
72; CHECK: OpFunctionEnd
73