Files
clang-p2996/llvm/test/CodeGen/SPIRV/function/multiple-anonymous-functions.ll
Michal Paszkowski 99203241df [SPIR-V] Map IR function pointers to registers in ModuleAnalysis
SPIRVModuleAnalysis collects module and external function registers
(usually result of OpFunction) for use when emitting OpFunctionCall.
This patch makes the mapping between the functions and registers using
pointers (instead of name strings) to ensure anonymous functions and
calls can be resolved properly.

Differential Revision: https://reviews.llvm.org/D140548
2023-01-07 15:38:01 +01:00

37 lines
1.1 KiB
LLVM

; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
;; Types:
; CHECK-DAG: %[[#I32:]] = OpTypeInt 32
; CHECK-DAG: %[[#F32:]] = OpTypeFloat 32
; CHECK-DAG: %[[#FNI32:]] = OpTypeFunction %[[#I32]] %[[#I32]]
; CHECK-DAG: %[[#FNF32:]] = OpTypeFunction %[[#F32]] %[[#F32]]
;; Function declarations:
; CHECK: %[[#ANON0:]] = OpFunction %[[#I32]] None %[[#FNI32]]
; CHECK-NEXT: OpFunctionParameter %[[#I32]]
; CHECK-NEXT: OpLabel
; CHECK-NEXT: OpReturnValue
; CHECK-NEXT: OpFunctionEnd
define internal spir_func i32 @0(i32 %a) {
ret i32 %a
}
; CHECK: %[[#ANON1:]] = OpFunction %[[#F32]] None %[[#FNF32]]
; CHECK-NEXT: OpFunctionParameter %[[#F32]]
; CHECK-NEXT: OpLabel
; CHECK-NEXT: OpReturnValue
; CHECK-NEXT: OpFunctionEnd
define internal spir_func float @1(float %a) {
ret float %a
}
;; Calls:
; CHECK: OpFunctionCall %[[#I32]] %[[#ANON0]]
; CHECK: OpFunctionCall %[[#F32]] %[[#ANON1]]
define spir_kernel void @foo(i32 %a) {
%call1 = call spir_func i32 @0(i32 %a)
%b = sitofp i32 %a to float
%call2 = call spir_func float @1(float %b)
ret void
}