| ; Test to ensure the SPIR-V constructor/destructor lowering pass is not run |
| ; when OpenMP offload metadata is absent. |
| |
| ; RUN: llc -mtriple=spirv64-intel-unknown --spirv-ext=+SPV_INTEL_function_pointers %s -o /dev/null -print-after=spirv-lower-ctor-dtor 2>&1 | FileCheck %s |
| |
| define void @my_ctor() addrspace(9) { |
| entry: |
| ret void |
| } |
| |
| define void @my_dtor() addrspace(9) { |
| entry: |
| ret void |
| } |
| |
| @llvm.global_ctors = appending global [1 x { i32, ptr addrspace(9), ptr addrspace(9) }] [ |
| { i32, ptr addrspace(9), ptr addrspace(9) } { i32 100, ptr addrspace(9) @my_ctor, ptr addrspace(9) null } |
| ] |
| |
| @llvm.global_dtors = appending global [1 x { i32, ptr addrspace(9), ptr addrspace(9) }] [ |
| { i32, ptr addrspace(9), ptr addrspace(9) } { i32 100, ptr addrspace(9) @my_dtor, ptr addrspace(9) null } |
| ] |
| |
| ; Verify that NO init/fini kernels or symbols are created |
| ; CHECK-NOT: @__init_array_object_high_priority_{{[a-f0-9]+}}_100 |
| ; CHECK-NOT: @__init_array_object_low_priority_{{[a-f0-9]+}}_50 |
| ; CHECK-NOT: @__init_array_start = weak protected addrspace(1) |
| ; CHECK-NOT: @__init_array_end = weak protected addrspace(1) |
| |
| ; CHECK-NOT: @__fini_array_object_high_priority_{{[a-f0-9]+}}_100 |
| ; CHECK-NOT: @__fini_array_object_low_priority_{{[a-f0-9]+}}_50 |
| ; CHECK-NOT: @__fini_array_start = weak protected addrspace(1) |
| ; CHECK-NOT: @__fini_array_end = weak protected addrspace(1) |
| |
| ; CHECK-NOT: define weak_odr spir_kernel void @"spirv$device$init"() |
| ; CHECK-NOT: define weak_odr spir_kernel void @"spirv$device$fini"() |