| ; 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} |