xref: /llvm-project/llvm/test/CodeGen/SPIRV/function/multiple-anonymous-functions.ll (revision 67d3ef74b31e1517d4f679e754cc2b3041c95901)
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
2
3;; Types:
4; CHECK-DAG:  %[[#I32:]] = OpTypeInt 32
5; CHECK-DAG:  %[[#F32:]] = OpTypeFloat 32
6; CHECK-DAG:  %[[#FNI32:]] = OpTypeFunction %[[#I32]] %[[#I32]]
7; CHECK-DAG:  %[[#FNF32:]] = OpTypeFunction %[[#F32]] %[[#F32]]
8
9;; Function declarations:
10; CHECK:      %[[#ANON0:]] = OpFunction %[[#I32]] None %[[#FNI32]]
11; CHECK-NEXT: OpFunctionParameter %[[#I32]]
12; CHECK-NEXT: OpLabel
13; CHECK-NEXT: OpReturnValue
14; CHECK-NEXT: OpFunctionEnd
15define internal spir_func i32 @0(i32 %a) {
16  ret i32 %a
17}
18
19; CHECK:      %[[#ANON1:]] = OpFunction %[[#F32]] None %[[#FNF32]]
20; CHECK-NEXT: OpFunctionParameter %[[#F32]]
21; CHECK-NEXT: OpLabel
22; CHECK-NEXT: OpReturnValue
23; CHECK-NEXT: OpFunctionEnd
24define internal spir_func float @1(float %a) {
25  ret float %a
26}
27
28;; Calls:
29; CHECK:      OpFunctionCall %[[#I32]] %[[#ANON0]]
30; CHECK:      OpFunctionCall %[[#F32]] %[[#ANON1]]
31define spir_kernel void @foo(i32 %a) {
32  %call1 = call spir_func i32 @0(i32 %a)
33  %b = sitofp i32 %a to float
34  %call2 = call spir_func float @1(float %b)
35  ret void
36}
37