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; CHECK-NOT: DAG-FENCE
17
18; Types:
19; CHECK: [[VOID:%.+]] = OpTypeVoid
20; CHECK: [[FN:%.+]] = OpTypeFunction [[VOID]]
21
22
23; Functions:
24
25define void @fn1() noinline {
26  ret void
27}
28; CHECK: [[FN1]] = OpFunction [[VOID]] DontInline [[FN]]
29; CHECK-NOT: OpFunctionParameter
30; CHECK: OpFunctionEnd
31
32
33attributes #0 = { noinline }
34define void @fn2() #0 {
35  ret void
36}
37; CHECK: [[FN2]] = OpFunction [[VOID]] DontInline [[FN]]
38; CHECK: OpFunctionEnd
39
40
41define void @fn3() alwaysinline {
42  ret void
43}
44; CHECK: [[FN3]] = OpFunction [[VOID]] Inline [[FN]]
45; CHECK: OpFunctionEnd
46
47
48; NOTE: inlinehint is not an actual requirement.
49define void @fn4() inlinehint {
50  ret void
51}
52; CHECK: [[FN4]] = OpFunction [[VOID]] None [[FN]]
53; CHECK: OpFunctionEnd
54
55
56define void @fn5() readnone {
57  ret void
58}
59; CHECK: [[FN5]] = OpFunction [[VOID]] Pure [[FN]]
60; CHECK: OpFunctionEnd
61
62
63define void @fn6() readonly {
64  ret void
65}
66; CHECK: [[FN6]] = OpFunction [[VOID]] Const [[FN]]
67; CHECK: OpFunctionEnd
68
69
70define void @fn7() alwaysinline readnone {
71  ret void
72}
73; CHECK: [[FN7]] = OpFunction [[VOID]] Inline|Pure [[FN]]
74; CHECK: OpFunctionEnd
75