blob: b59cf39c433dc17905f7dedb7beb329d40bd9a49 [file] [edit]
; RUN: opt < %s -S -passes=openmp-opt | FileCheck %s
; Check that the call to __cxx_global_var_init is not incorrectly optimized out.
target triple = "spirv64-intel"
%struct.S = type { i32 }
@s = addrspace(1) global %struct.S zeroinitializer
@llvm.global_ctors = appending global [1 x { i32, ptr addrspace(9), ptr addrspace(9) }] [{ i32, ptr addrspace(9), ptr addrspace(9) } { i32 65535, ptr addrspace(9) @_GLOBAL__sub_I_ctor_dtor.cpp, ptr addrspace(9) null }]
define spir_func void @__cxx_global_var_init() addrspace(9) {
entry:
call spir_func addrspace(9) void @_ZN1SC2Ev(ptr addrspace(4) addrspacecast (ptr addrspace(1) @s to ptr addrspace(4)))
ret void
}
define spir_func void @_ZN1SC2Ev(ptr addrspace(4) %this) addrspace(9) {
entry:
%this.addr = alloca ptr addrspace(4)
%this.addr.ascast = addrspacecast ptr %this.addr to ptr addrspace(4)
store ptr addrspace(4) %this, ptr addrspace(4) %this.addr.ascast
%this1 = load ptr addrspace(4), ptr addrspace(4) %this.addr.ascast
%i = getelementptr %struct.S, ptr addrspace(4) %this1, i32 0, i32 0
store i32 7, ptr addrspace(4) %i
ret void
}
; CHECK-LABEL: define internal spir_func void @_GLOBAL__sub_I_ctor_dtor.cpp()
; CHECK-NEXT: entry:
; CHECK-NEXT: call spir_func addrspace(9) void @__cxx_global_var_init{{.*}}()
; CHECK-NEXT: ret void
define internal spir_func void @_GLOBAL__sub_I_ctor_dtor.cpp() addrspace(9) {
entry:
call spir_func addrspace(9) void @__cxx_global_var_init()
ret void
}
!llvm.module.flags = !{!2, !3}
!2 = !{i32 7, !"openmp", i32 51}
!3 = !{i32 7, !"openmp-device", i32 51}