|
1 | 1 | // REQUIRES: x86-registered-target
|
2 | 2 | // REQUIRES: nvptx-registered-target
|
3 | 3 | // REQUIRES: amdgpu-registered-target
|
| 4 | +// REQUIRES: spirv-registered-target |
4 | 5 |
|
5 | 6 | // RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.elf.o
|
6 | 7 |
|
|
263 | 264 | // HIP: while.end:
|
264 | 265 | // HIP-NEXT: ret void
|
265 | 266 | // HIP-NEXT: }
|
| 267 | + |
| 268 | +// RUN: clang-offload-packager -o %t.out --image=file=%t.elf.o,kind=sycl,triple=spirv64-unknown-unknown,arch=generic |
| 269 | +// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.o \ |
| 270 | +// RUN: -fembed-offload-object=%t.out |
| 271 | +// RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-linux-gnu \ |
| 272 | +// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=SYCL |
| 273 | +// RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-linux-gnu -r \ |
| 274 | +// RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=SYCL |
| 275 | + |
| 276 | +// SYCL: %__sycl.tgt_device_image = type { i16, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } |
| 277 | +// SYCL-NEXT: %__sycl.tgt_bin_desc = type { i16, i16, ptr, ptr, ptr } |
| 278 | + |
| 279 | +// SYCL: @.sycl_offloading.target.0 = internal unnamed_addr constant [1 x i8] zeroinitializer |
| 280 | +// SYCL-NEXT: @.sycl_offloading.opts.compile.0 = internal unnamed_addr constant [1 x i8] zeroinitializer |
| 281 | +// SYCL-NEXT: @.sycl_offloading.opts.link.0 = internal unnamed_addr constant [1 x i8] zeroinitializer |
| 282 | +// SYCL-NEXT: @.sycl_offloading.0.data = internal unnamed_addr constant [0 x i8] zeroinitializer, section ".llvm.offloading" |
| 283 | +// SYCL-NEXT: @.offloading.entry_name = internal unnamed_addr constant [5 x i8] c"stub\00", section ".llvm.rodata.offloading", align 1 |
| 284 | +// SYCL-NEXT: @.offloading.entry.stub = weak constant %struct.__tgt_offload_entry { i64 0, i16 1, i16 8, i32 0, ptr null, ptr @.offloading.entry_name, i64 0, i64 0, ptr null }, section "llvm_offload_entries", align 8 |
| 285 | +// SYCL-NEXT: @.sycl_offloading.entries_arr = internal constant [1 x %struct.__tgt_offload_entry] [%struct.__tgt_offload_entry { i64 0, i16 1, i16 8, i32 0, ptr null, ptr @.offloading.entry_name, i64 0, i64 0, ptr null }] |
| 286 | +// SYCL-NEXT: @.sycl_offloading.device_images = internal unnamed_addr constant [1 x %__sycl.tgt_device_image] [%__sycl.tgt_device_image { i16 3, i8 8, i8 0, ptr @.sycl_offloading.target.0, ptr @.sycl_offloading.opts.compile.0, ptr @.sycl_offloading.opts.link.0, ptr @.sycl_offloading.0.data, ptr @.sycl_offloading.0.data, ptr @.sycl_offloading.entries_arr, ptr getelementptr ([1 x %struct.__tgt_offload_entry], ptr @.sycl_offloading.entries_arr, i64 0, i64 1), ptr null, ptr null }] |
| 287 | +// SYCL-NEXT: @.sycl_offloading.descriptor = internal constant %__sycl.tgt_bin_desc { i16 1, i16 1, ptr @.sycl_offloading.device_images, ptr null, ptr null } |
| 288 | + |
| 289 | +// SYCL: define internal void @sycl.descriptor_reg() section ".text.startup" { |
| 290 | +// SYCL-NEXT: entry: |
| 291 | +// SYCL-NEXT: call void @__sycl_register_lib(ptr @.sycl_offloading.descriptor) |
| 292 | +// SYCL-NEXT: ret void |
| 293 | +// SYCL-NEXT: } |
| 294 | + |
| 295 | +// SYCL: define internal void @sycl.descriptor_unreg() section ".text.startup" { |
| 296 | +// SYCL-NEXT: entry: |
| 297 | +// SYCL-NEXT: call void @__sycl_unregister_lib(ptr @.sycl_offloading.descriptor) |
| 298 | +// SYCL-NEXT: ret void |
| 299 | +// SYCL-NEXT: } |
0 commit comments