xref: /llvm-project/clang/test/Driver/sycl-offload-jit.cpp (revision ec58ad6149fb8813521973d8ba9690276e282373)
1d00f65c6SMichael Toguchi /// Perform several driver tests for SYCL offloading for JIT
2d00f65c6SMichael Toguchi 
3d00f65c6SMichael Toguchi /// Check the phases graph with -fsycl. Use of -fsycl enables offload
4d00f65c6SMichael Toguchi // RUN: %clang -ccc-print-phases --target=x86_64-unknown-linux-gnu -fsycl %s 2>&1 \
5d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefixes=CHK-PHASES %s
6*ec58ad61SMichael Toguchi // RUN: %clang_cl -ccc-print-phases --target=x86_64-pc-windows-msvc -fsycl -- %s 2>&1 \
7d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefixes=CHK-PHASES %s
8d00f65c6SMichael Toguchi // CHK-PHASES: 0: input, "[[INPUT:.+\.cpp]]", c++, (host-sycl)
9d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 1: preprocessor, {0}, c++-cpp-output, (host-sycl)
10d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 2: compiler, {1}, ir, (host-sycl)
11d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 3: input, "[[INPUT]]", c++, (device-sycl)
12d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 4: preprocessor, {3}, c++-cpp-output, (device-sycl)
13d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 5: compiler, {4}, ir, (device-sycl)
14d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 6: backend, {5}, ir, (device-sycl)
15d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 7: offload, "device-sycl (spirv64-unknown-unknown)" {6}, ir
16d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 8: clang-offload-packager, {7}, image, (device-sycl)
17d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 9: offload, "host-sycl (x86_64{{.*}})" {2}, "device-sycl (x86_64{{.*}})" {8}, ir
18d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 10: backend, {9}, assembler, (host-sycl)
19d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 11: assembler, {10}, object, (host-sycl)
20d00f65c6SMichael Toguchi // CHK-PHASES-NEXT: 12: clang-linker-wrapper, {11}, image, (host-sycl)
21d00f65c6SMichael Toguchi 
22d00f65c6SMichael Toguchi /// Check expected default values for device compilation when using -fsycl as
23d00f65c6SMichael Toguchi /// well as clang-offload-packager inputs.
24d00f65c6SMichael Toguchi // RUN: %clang -### -fsycl -c --target=x86_64-unknown-linux-gnu %s 2>&1 \
25d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefix=CHK-DEVICE-TRIPLE %s
26d00f65c6SMichael Toguchi // CHK-DEVICE-TRIPLE: "-cc1"{{.*}} "-triple" "spirv64-unknown-unknown"
27d00f65c6SMichael Toguchi // CHK-DEVICE-TRIPLE-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
28d00f65c6SMichael Toguchi // CHK-DEVICE-TRIPLE-SAME: "-fsycl-is-device"
29d00f65c6SMichael Toguchi // CHK-DEVICE-TRIPLE-SAME: "-O2"
30d00f65c6SMichael Toguchi // CHK-DEVICE-TRIPLE: clang-offload-packager{{.*}} "--image=file={{.*}}.bc,triple=spirv64-unknown-unknown,arch=,kind=sycl"
31d00f65c6SMichael Toguchi 
32d00f65c6SMichael Toguchi /// Check -fsycl-is-device is passed when compiling for the device.
33d00f65c6SMichael Toguchi /// Check -fsycl-is-host is passed when compiling for host.
34d00f65c6SMichael Toguchi // RUN: %clang -### -fsycl -c %s 2>&1 \
35d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefixes=CHK-FSYCL-IS-DEVICE,CHK-FSYCL-IS-HOST %s
36d00f65c6SMichael Toguchi // RUN: %clang -### -fsycl -fsycl-device-only %s 2>&1 \
37d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefix=CHK-FSYCL-IS-DEVICE %s
38*ec58ad61SMichael Toguchi // RUN: %clang_cl -### -fsycl -c -- %s 2>&1 \
39d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefixes=CHK-FSYCL-IS-DEVICE,CHK-FSYCL-IS-HOST %s
40d00f65c6SMichael Toguchi // RUN: %clang -### -fsycl -fsycl-host-only %s 2>&1 \
41d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefix=CHK-FSYCL-IS-HOST %s
42d00f65c6SMichael Toguchi // CHK-FSYCL-IS-DEVICE: "-cc1"{{.*}} "-fsycl-is-device" {{.*}} "-emit-llvm-bc"
43d00f65c6SMichael Toguchi // CHK-FSYCL-IS-HOST: "-cc1"{{.*}} "-fsycl-is-host"
44d00f65c6SMichael Toguchi 
45d00f65c6SMichael Toguchi /// Check for option incompatibility with -fsycl
46d00f65c6SMichael Toguchi // RUN: not %clang -### -fsycl -ffreestanding %s 2>&1 \
47d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefix=CHK-INCOMPATIBILITY %s -DINCOMPATOPT=-ffreestanding
48d00f65c6SMichael Toguchi // RUN: not %clang -### -fsycl --offload-new-driver -static-libstdc++ %s 2>&1 \
49d00f65c6SMichael Toguchi // RUN:   | FileCheck -check-prefix=CHK-INCOMPATIBILITY %s -DINCOMPATOPT=-static-libstdc++
50d00f65c6SMichael Toguchi // CHK-INCOMPATIBILITY: error: invalid argument '[[INCOMPATOPT]]' not allowed with '-fsycl'
51