From 315a535cb3d0fe960fd149c2d1df4f15a69cdeca Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Thu, 1 Apr 2021 17:51:18 -0700 Subject: [PATCH 1/4] [Driver][SYCL] Improve integration header usage when performing offload When generating the integration header, we were performing an additional compilation step which is not needed, as we can create the output file and the integration header at the same time. Improve this behavior by tracking the integration files based on given input files, creating and using the files accordingly when needed during the compilation flow. --- clang/include/clang/Driver/Driver.h | 16 ++ clang/include/clang/Driver/Types.def | 1 - clang/lib/Driver/Driver.cpp | 25 ++- clang/lib/Driver/ToolChains/Clang.cpp | 29 +-- clang/test/Driver/sycl-intelfpga-aoco-win.cpp | 35 ++-- clang/test/Driver/sycl-intelfpga-aoco.cpp | 66 +++---- clang/test/Driver/sycl-offload-intelfpga.cpp | 19 +- clang/test/Driver/sycl-offload-nvptx.cpp | 27 ++- .../test/Driver/sycl-offload-static-lib-2.cpp | 25 ++- clang/test/Driver/sycl-offload-static-lib.cpp | 25 ++- clang/test/Driver/sycl-offload-win.c | 25 ++- clang/test/Driver/sycl-offload-with-split.c | 125 ++++++------ clang/test/Driver/sycl-offload.c | 182 ++++++++---------- 13 files changed, 294 insertions(+), 306 deletions(-) diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 5eb42b68134d9..2108bb496c002 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -648,6 +648,11 @@ class Driver { /// Track filename used for the FPGA dependency info. mutable llvm::StringMap FPGATempDepFiles; + /// A list of inputs and their corresponding integration headers. These + /// files are generated during the device compilation and are consumed + /// by the host compilation. + mutable llvm::StringMap IntegrationFileList; + public: /// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and /// return the grouped values as integers. Numbers which are not @@ -684,6 +689,17 @@ class Driver { const std::string getFPGATempDepFile(const std::string &FileName) const { return FPGATempDepFiles[FileName]; } + + /// addIntegrationFiles - Add the integration files that will be populated + /// by the device compilation and used by the host compile. + void addIntegrationFiles(const char *IntHeaderName, + const std::string &FileName) const { + IntegrationFileList.insert({FileName, IntHeaderName}); + } + /// getIntegrationHeader - Get the integration header file + const char *getIntegrationHeader(const std::string &FileName) const { + return IntegrationFileList[FileName]; + } }; /// \return True if the last defined optimization level is -Ofast. diff --git a/clang/include/clang/Driver/Types.def b/clang/include/clang/Driver/Types.def index c7d6d2377bba7..3b1529061ab74 100644 --- a/clang/include/clang/Driver/Types.def +++ b/clang/include/clang/Driver/Types.def @@ -101,7 +101,6 @@ TYPE("dependencies", Dependencies, INVALID, "d", phases TYPE("cuda-fatbin", CUDA_FATBIN, INVALID, "fatbin", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("hip-fatbin", HIP_FATBIN, INVALID, "hipfb", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("spirv", SPIRV, INVALID, "spv", phases::Compile, phases::Backend, phases::Assemble, phases::Link) -TYPE("sycl-header", SYCL_Header, INVALID, "h", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("sycl-fatbin", SYCL_FATBIN, INVALID, nullptr, phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("tempfilelist", Tempfilelist, INVALID, "txt", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("tempfiletable", Tempfiletable,INVALID, "table", phases::Compile, phases::Backend, phases::Assemble, phases::Link) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 8c2afdf092f87..183a11e357108 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -3854,17 +3854,10 @@ class OffloadingActionBuilder final { } } - // FIXME: This adds the integration header generation pass before the - // Host compilation pass so the Host can use the header generated. This - // can be improved upon to where the header generation and spv generation - // is done in the same step. Currently, its not too efficient. - // The host depends on the generated integrated header from the device - // compilation. + // Device compilation generates LLVM BC. if (CurPhase == phases::Compile) { bool SYCLDeviceOnly = Args.hasArg(options::OPT_fsycl_device_only); for (Action *&A : SYCLDeviceActions) { - DeviceCompilerInput = - C.MakeAction(A, types::TY_SYCL_Header); types::ID OutputType = types::TY_LLVM_BC; if (SYCLDeviceOnly) { if (Args.hasArg(options::OPT_S)) @@ -3879,6 +3872,7 @@ class OffloadingActionBuilder final { } } A = C.MakeAction(A, OutputType); + DeviceCompilerInput = A; } const auto *TC = ToolChains.front(); const char *BoundArch = nullptr; @@ -5113,6 +5107,21 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, handleArguments(C, Args, Inputs, Actions); + // When compiling for -fsycl, generate the integration header files that + // will be used during the compilation. + if (Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false)) { + for (auto &I : Inputs) { + if (!types::isSrcFile(I.first)) + continue; + std::string SrcFileName(I.second->getAsString(Args)); + std::string TmpFileNameHeader = C.getDriver().GetTemporaryPath( + llvm::sys::path::stem(SrcFileName + "-header"), "h"); + const char *TmpFileHeader = + C.addTempFile(C.getArgs().MakeArgString(TmpFileNameHeader)); + addIntegrationFiles(TmpFileHeader, SrcFileName); + } + } + // Builder to be used to build offloading actions. OffloadingActionBuilder OffloadBuilder(C, Args, Inputs); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index bf1bf17f93cae..d8a15669dce3d 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4517,8 +4517,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } else { assert((isa(JA) || isa(JA)) && "Invalid action for clang tool."); - if (JA.getType() == types::TY_Nothing || - JA.getType() == types::TY_SYCL_Header) { + if (JA.getType() == types::TY_Nothing) { CmdArgs.push_back("-fsyntax-only"); } else if (JA.getType() == types::TY_LLVM_IR || JA.getType() == types::TY_LTO_IR) { @@ -6622,17 +6621,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // Add any options that are needed specific to SYCL offload while // performing the host side compilation. if (!IsSYCLOffloadDevice) { - // Host-side SYCL compilation receives the integration header file as - // Inputs[1]. Include the header with -include - if (SYCLDeviceInput) { - const char *IntHeaderPath = - Args.MakeArgString(SYCLDeviceInput->getFilename()); + // Add the integration header option to generate the header. + const char *Header = D.getIntegrationHeader(Input.getBaseInput()); + if (types::getPreprocessedType(InputType) != types::TY_INVALID && + Header) { CmdArgs.push_back("-include"); - CmdArgs.push_back(IntHeaderPath); + CmdArgs.push_back(Header); // When creating dependency information, filter out the generated // header file. CmdArgs.push_back("-dependency-filter"); - CmdArgs.push_back(IntHeaderPath); + CmdArgs.push_back(Header); } // Let the FE know we are doing a SYCL offload compilation, but we are // doing the host pass. @@ -6653,12 +6651,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } } } - if (IsSYCLOffloadDevice && JA.getType() == types::TY_SYCL_Header) { - // Generating a SYCL Header - SmallString<128> HeaderOpt("-fsycl-int-header="); - HeaderOpt += Output.getFilename(); - CmdArgs.push_back(Args.MakeArgString(HeaderOpt)); + if (IsSYCLOffloadDevice) { + // Add the integration header option to generate the header. + if (const char *Header = D.getIntegrationHeader(Input.getBaseInput())) { + SmallString<128> HeaderOpt("-fsycl-int-header="); + HeaderOpt.append(Header); + CmdArgs.push_back(Args.MakeArgString(HeaderOpt)); + } } + if (Args.hasArg(options::OPT_fsycl_unnamed_lambda)) CmdArgs.push_back("-fsycl-unnamed-lambda"); diff --git a/clang/test/Driver/sycl-intelfpga-aoco-win.cpp b/clang/test/Driver/sycl-intelfpga-aoco-win.cpp index 9bed6523e9ecf..04e5c0e1f807e 100755 --- a/clang/test/Driver/sycl-intelfpga-aoco-win.cpp +++ b/clang/test/Driver/sycl-intelfpga-aoco-win.cpp @@ -7,36 +7,35 @@ // RUN: clang-offload-wrapper -o %t-aoco.bc -host=x86_64-pc-windows-msvc -kind=sycl -target=fpga_aoco-intel-unknown-sycldevice %t.aoco // RUN: llc -filetype=obj -o %t-aoco.o %t-aoco.bc // RUN: llvm-ar crv %t_aoco.a %t.o %t2.o %t-aoco.o -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s -// RUN: %clangxx -target x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clangxx -target x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s // CHK-FPGA-AOCO-PHASES-WIN: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 3: input, "[[INPUTSRC]]", c++, (device-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, ir, (device-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 6: offload, "host-sycl (x86_64-pc-windows-msvc)" {2}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-FPGA-AOCO-PHASES-WIN: 7: compiler, {6}, ir, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 8: backend, {7}, assembler, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 9: assembler, {8}, object, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 10: linker, {0, 9}, image, (host-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 11: compiler, {4}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 12: linker, {0, 9}, image, (host-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 13: clang-offload-deps, {12}, ir, (host-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 14: input, "[[INPUTA]]", archive -// CHK-FPGA-AOCO-PHASES-WIN: 15: clang-offload-unbundler, {14}, archive -// CHK-FPGA-AOCO-PHASES-WIN: 16: linker, {11, 13, 15}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 17: sycl-post-link, {16}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 18: llvm-spirv, {17}, spirv, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 19: input, "[[INPUTA]]", archive -// CHK-FPGA-AOCO-PHASES-WIN: 20: clang-offload-unbundler, {19}, fpga_dependencies_list -// CHK-FPGA-AOCO-PHASES-WIN: 21: input, "[[INPUTA]]", fpga_aoco -// CHK-FPGA-AOCO-PHASES-WIN: 22: clang-offload-unbundler, {21}, fpga_aoco -// CHK-FPGA-AOCO-PHASES-WIN: 23: backend-compiler, {18, 20, 22}, fpga_aocx, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 24: clang-offload-wrapper, {23}, object, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 25: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image +// CHK-FPGA-AOCO-PHASES-WIN: 11: linker, {0, 9}, image, (host-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 12: clang-offload-deps, {11}, ir, (host-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 13: input, "[[INPUTA]]", archive +// CHK-FPGA-AOCO-PHASES-WIN: 14: clang-offload-unbundler, {13}, archive +// CHK-FPGA-AOCO-PHASES-WIN: 15: linker, {5, 12, 14}, ir, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 16: sycl-post-link, {15}, ir, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 17: llvm-spirv, {16}, spirv, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 18: input, "[[INPUTA]]", archive +// CHK-FPGA-AOCO-PHASES-WIN: 19: clang-offload-unbundler, {18}, fpga_dependencies_list +// CHK-FPGA-AOCO-PHASES-WIN: 20: input, "[[INPUTA]]", fpga_aoco +// CHK-FPGA-AOCO-PHASES-WIN: 21: clang-offload-unbundler, {20}, fpga_aoco +// CHK-FPGA-AOCO-PHASES-WIN: 22: backend-compiler, {17, 19, 21}, fpga_aocx, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 23: clang-offload-wrapper, {22}, object, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 24: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {23}, image /// aoco test, checking tools // RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \ diff --git a/clang/test/Driver/sycl-intelfpga-aoco.cpp b/clang/test/Driver/sycl-intelfpga-aoco.cpp index f14b3cb3b3313..c1abbfa4c9425 100755 --- a/clang/test/Driver/sycl-intelfpga-aoco.cpp +++ b/clang/test/Driver/sycl-intelfpga-aoco.cpp @@ -20,57 +20,55 @@ // CHK-FPGA-AOCO-PHASES: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-FPGA-AOCO-PHASES: 3: input, "[[INPUTCPP]]", c++, (device-sycl) // CHK-FPGA-AOCO-PHASES: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-FPGA-AOCO-PHASES: 5: compiler, {4}, ir, (device-sycl) // CHK-FPGA-AOCO-PHASES: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-FPGA-AOCO-PHASES: 7: compiler, {6}, ir, (host-sycl) // CHK-FPGA-AOCO-PHASES: 8: backend, {7}, assembler, (host-sycl) // CHK-FPGA-AOCO-PHASES: 9: assembler, {8}, object, (host-sycl) // CHK-FPGA-AOCO-PHASES: 10: linker, {0, 9}, image, (host-sycl) -// CHK-FPGA-AOCO-PHASES: 11: compiler, {4}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 12: linker, {0, 9}, image, (host-sycl) -// CHK-FPGA-AOCO-PHASES: 13: clang-offload-deps, {12}, ir, (host-sycl) -// CHK-FPGA-AOCO-PHASES: 14: input, "[[INPUTA]]", archive -// CHK-FPGA-AOCO-PHASES: 15: clang-offload-unbundler, {14}, archive -// CHK-FPGA-AOCO-PHASES: 16: linker, {11, 13, 15}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 17: sycl-post-link, {16}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 18: llvm-spirv, {17}, spirv, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 19: input, "[[INPUTA]]", archive -// CHK-FPGA-AOCO-PHASES: 20: clang-offload-unbundler, {19}, fpga_dependencies_list -// CHK-FPGA-AOCO-PHASES: 21: input, "[[INPUTA]]", fpga_aoco -// CHK-FPGA-AOCO-PHASES: 22: clang-offload-unbundler, {21}, fpga_aoco -// CHK-FPGA-AOCO-PHASES: 23: backend-compiler, {18, 20, 22}, fpga_aocx, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 24: clang-offload-wrapper, {23}, object, (device-sycl) -// CHK-FPGA-AOCO-PHASES: 25: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image +// CHK-FPGA-AOCO-PHASES: 11: linker, {0, 9}, image, (host-sycl) +// CHK-FPGA-AOCO-PHASES: 12: clang-offload-deps, {11}, ir, (host-sycl) +// CHK-FPGA-AOCO-PHASES: 13: input, "[[INPUTA]]", archive +// CHK-FPGA-AOCO-PHASES: 14: clang-offload-unbundler, {13}, archive +// CHK-FPGA-AOCO-PHASES: 15: linker, {5, 12, 14}, ir, (device-sycl) +// CHK-FPGA-AOCO-PHASES: 16: sycl-post-link, {15}, ir, (device-sycl) +// CHK-FPGA-AOCO-PHASES: 17: llvm-spirv, {16}, spirv, (device-sycl) +// CHK-FPGA-AOCO-PHASES: 18: input, "[[INPUTA]]", archive +// CHK-FPGA-AOCO-PHASES: 19: clang-offload-unbundler, {18}, fpga_dependencies_list +// CHK-FPGA-AOCO-PHASES: 20: input, "[[INPUTA]]", fpga_aoco +// CHK-FPGA-AOCO-PHASES: 21: clang-offload-unbundler, {20}, fpga_aoco +// CHK-FPGA-AOCO-PHASES: 22: backend-compiler, {17, 19, 21}, fpga_aocx, (device-sycl) +// CHK-FPGA-AOCO-PHASES: 23: clang-offload-wrapper, {22}, object, (device-sycl) +// CHK-FPGA-AOCO-PHASES: 24: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {23}, image /// FPGA AOCO Windows phases check -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s -// CHK-FPGA-AOCO-PHASES-WIN: 0: input, "{{.*}}", object, (host-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 3: input, "[[INPUTSRC]]", c++, (device-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, ir, (device-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 6: offload, "host-sycl (x86_64-pc-windows-msvc)" {2}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-FPGA-AOCO-PHASES-WIN: 7: compiler, {6}, ir, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 8: backend, {7}, assembler, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 9: assembler, {8}, object, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 10: linker, {0, 9}, image, (host-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 11: compiler, {4}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 12: linker, {0, 9}, image, (host-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 13: clang-offload-deps, {12}, ir, (host-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 14: input, "[[INPUTA:.+\.a]]", archive -// CHK-FPGA-AOCO-PHASES-WIN: 15: clang-offload-unbundler, {14}, archive -// CHK-FPGA-AOCO-PHASES-WIN: 16: linker, {11, 13, 15}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 17: sycl-post-link, {16}, ir, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 18: llvm-spirv, {17}, spirv, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 19: input, "[[INPUTA]]", archive -// CHK-FPGA-AOCO-PHASES-WIN: 20: clang-offload-unbundler, {19}, fpga_dependencies_list -// CHK-FPGA-AOCO-PHASES-WIN: 21: input, "[[INPUTA]]", fpga_aoco -// CHK-FPGA-AOCO-PHASES-WIN: 22: clang-offload-unbundler, {21}, fpga_aoco -// CHK-FPGA-AOCO-PHASES-WIN: 23: backend-compiler, {18, 20, 22}, fpga_aocx, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 24: clang-offload-wrapper, {23}, object, (device-sycl) -// CHK-FPGA-AOCO-PHASES-WIN: 25: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image +// CHK-FPGA-AOCO-PHASES-WIN: 11: linker, {0, 9}, image, (host-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 12: clang-offload-deps, {11}, ir, (host-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 13: input, "[[INPUTA]]", archive +// CHK-FPGA-AOCO-PHASES-WIN: 14: clang-offload-unbundler, {13}, archive +// CHK-FPGA-AOCO-PHASES-WIN: 15: linker, {5, 12, 14}, ir, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 16: sycl-post-link, {15}, ir, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 17: llvm-spirv, {16}, spirv, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 18: input, "[[INPUTA]]", archive +// CHK-FPGA-AOCO-PHASES-WIN: 19: clang-offload-unbundler, {18}, fpga_dependencies_list +// CHK-FPGA-AOCO-PHASES-WIN: 20: input, "[[INPUTA]]", fpga_aoco +// CHK-FPGA-AOCO-PHASES-WIN: 21: clang-offload-unbundler, {20}, fpga_aoco +// CHK-FPGA-AOCO-PHASES-WIN: 22: backend-compiler, {17, 19, 21}, fpga_aocx, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 23: clang-offload-wrapper, {22}, object, (device-sycl) +// CHK-FPGA-AOCO-PHASES-WIN: 24: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {23}, image /// aoco test, checking tools // RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \ diff --git a/clang/test/Driver/sycl-offload-intelfpga.cpp b/clang/test/Driver/sycl-offload-intelfpga.cpp index 684db2af61cc1..e7e6cd1fec3c4 100644 --- a/clang/test/Driver/sycl-offload-intelfpga.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga.cpp @@ -220,15 +220,15 @@ /// -fintelfpga -fsycl-link from source // RUN: touch %t.cpp -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-SRC %s -// RUN: %clang_cl -### --target=x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ +// RUN: %clang_cl --target=x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-SRC %s // CHK-FPGA-LINK-SRC: 0: input, "[[INPUT:.+\.cpp]]", c++, (host-sycl) // CHK-FPGA-LINK-SRC: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-FPGA-LINK-SRC: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-FPGA-LINK-SRC: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-FPGA-LINK-SRC: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-FPGA-LINK-SRC: 4: compiler, {3}, ir, (device-sycl) // CHK-FPGA-LINK-SRC: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-FPGA-LINK-SRC: 6: compiler, {5}, ir, (host-sycl) // CHK-FPGA-LINK-SRC: 7: backend, {6}, assembler, (host-sycl) @@ -237,13 +237,12 @@ // CHK-FPGA-LINK-SRC: 10: backend, {9}, assembler, (host-sycl) // CHK-FPGA-LINK-SRC: 11: assembler, {10}, object, (host-sycl) // CHK-FPGA-LINK-SRC: 12: linker, {11}, archive, (host-sycl) -// CHK-FPGA-LINK-SRC: 13: compiler, {3}, ir, (device-sycl) -// CHK-FPGA-LINK-SRC: 14: linker, {13}, ir, (device-sycl) -// CHK-FPGA-LINK-SRC: 15: sycl-post-link, {14}, ir, (device-sycl) -// CHK-FPGA-LINK-SRC: 16: llvm-spirv, {15}, spirv, (device-sycl) -// CHK-FPGA-LINK-SRC: 17: backend-compiler, {16}, fpga_aocr, (device-sycl) -// CHK-FPGA-LINK-SRC: 18: clang-offload-wrapper, {17}, object, (device-sycl) -// CHK-FPGA-LINK-SRC: 19: offload, "host-sycl (x86_64-unknown-linux-gnu)" {12}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {18}, archive +// CHK-FPGA-LINK-SRC: 13: linker, {4}, ir, (device-sycl) +// CHK-FPGA-LINK-SRC: 14: sycl-post-link, {13}, ir, (device-sycl) +// CHK-FPGA-LINK-SRC: 15: llvm-spirv, {14}, spirv, (device-sycl) +// CHK-FPGA-LINK-SRC: 16: backend-compiler, {15}, fpga_aocr, (device-sycl) +// CHK-FPGA-LINK-SRC: 17: clang-offload-wrapper, {16}, object, (device-sycl) +// CHK-FPGA-LINK-SRC: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {12}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {17}, archive /// -fintelfpga with -reuse-exe= // RUN: touch %t.cpp diff --git a/clang/test/Driver/sycl-offload-nvptx.cpp b/clang/test/Driver/sycl-offload-nvptx.cpp index e267e5d5c25dc..8b4f9dc09eaf4 100644 --- a/clang/test/Driver/sycl-offload-nvptx.cpp +++ b/clang/test/Driver/sycl-offload-nvptx.cpp @@ -11,7 +11,6 @@ // CHK-ACTIONS: "-cc1" "-triple" "nvptx64-nvidia-nvcl-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}} "-Wno-sycl-strict" "-sycl-std=2020" {{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libspirv.bc"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libdevice{{.*}}.10.bc"{{.*}} "-target-feature" "+ptx42"{{.*}} "-target-sdk-version=[[CUDA_VERSION:[0-9.]+]]"{{.*}} "-target-cpu" "sm_50"{{.*}} "-std=c++11"{{.*}} // CHK-ACTIONS-NOT: "-mllvm -sycl-opt" // CHK-ACTIONS: clang-offload-wrapper"{{.*}} "-host=x86_64-unknown-linux-gnu" "-target=nvptx64" "-kind=sycl"{{.*}} -// CHK-ACTIONS: "-cc1" "-triple" "nvptx64-nvidia-nvcl-sycldevice"{{.*}} "-fsycl-is-device"{{.*}} "-aux-triple" "x86_64-unknown-linux-gnu"{{.*}} "-Wno-sycl-strict" "-sycl-std=2020" {{.*}} "-internal-isystem" "{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include{{[/\\]+}}sycl"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libspirv.bc"{{.*}} "-mlink-builtin-bitcode" "{{.*}}libdevice{{.*}}.10.bc"{{.*}} "-target-feature" "+ptx42"{{.*}} "-target-sdk-version=[[CUDA_VERSION]]"{{.*}} "-target-cpu" "sm_50"{{.*}} "-std=c++11"{{.*}} /// Check phases w/out specifying a compute capability. // RUN: %clangxx -ccc-print-phases -std=c++11 -target x86_64-unknown-linux-gnu -fsycl \ @@ -21,18 +20,17 @@ // CHK-PHASES-NO-CC: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASES-NO-CC: 2: input, "{{.*}}", c++, (device-sycl, sm_50) // CHK-PHASES-NO-CC: 3: preprocessor, {2}, c++-cpp-output, (device-sycl, sm_50) -// CHK-PHASES-NO-CC: 4: compiler, {3}, sycl-header, (device-sycl, sm_50) +// CHK-PHASES-NO-CC: 4: compiler, {3}, ir, (device-sycl, sm_50) // CHK-PHASES-NO-CC: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (nvptx64-nvidia-nvcl-sycldevice:sm_50)" {4}, c++-cpp-output // CHK-PHASES-NO-CC: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASES-NO-CC: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASES-NO-CC: 8: assembler, {7}, object, (host-sycl) // CHK-PHASES-NO-CC: 9: linker, {8}, image, (host-sycl) -// CHK-PHASES-NO-CC: 10: compiler, {3}, ir, (device-sycl, sm_50) -// CHK-PHASES-NO-CC: 11: linker, {10}, ir, (device-sycl, sm_50) -// CHK-PHASES-NO-CC: 12: sycl-post-link, {11}, ir, (device-sycl, sm_50) -// CHK-PHASES-NO-CC: 13: backend, {12}, assembler, (device-sycl, sm_50) -// CHK-PHASES-NO-CC: 14: clang-offload-wrapper, {13}, object, (device-sycl, sm_50) -// CHK-PHASES-NO-CC: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (nvptx64-nvidia-nvcl-sycldevice:sm_50)" {14}, image +// CHK-PHASES-NO-CC: 10: linker, {4}, ir, (device-sycl, sm_50) +// CHK-PHASES-NO-CC: 11: sycl-post-link, {10}, ir, (device-sycl, sm_50) +// CHK-PHASES-NO-CC: 12: backend, {11}, assembler, (device-sycl, sm_50) +// CHK-PHASES-NO-CC: 13: clang-offload-wrapper, {12}, object, (device-sycl, sm_50) +// CHK-PHASES-NO-CC: 14: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (nvptx64-nvidia-nvcl-sycldevice:sm_50)" {13}, image /// Check phases specifying a compute capability. // RUN: %clangxx -ccc-print-phases -std=c++11 -target x86_64-unknown-linux-gnu -fsycl \ @@ -43,15 +41,14 @@ // CHK-PHASES: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASES: 2: input, "{{.*}}", c++, (device-sycl, sm_35) // CHK-PHASES: 3: preprocessor, {2}, c++-cpp-output, (device-sycl, sm_35) -// CHK-PHASES: 4: compiler, {3}, sycl-header, (device-sycl, sm_35) +// CHK-PHASES: 4: compiler, {3}, ir, (device-sycl, sm_35) // CHK-PHASES: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (nvptx64-nvidia-nvcl-sycldevice:sm_35)" {4}, c++-cpp-output // CHK-PHASES: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASES: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASES: 8: assembler, {7}, object, (host-sycl) // CHK-PHASES: 9: linker, {8}, image, (host-sycl) -// CHK-PHASES: 10: compiler, {3}, ir, (device-sycl, sm_35) -// CHK-PHASES: 11: linker, {10}, ir, (device-sycl, sm_35) -// CHK-PHASES: 12: sycl-post-link, {11}, ir, (device-sycl, sm_35) -// CHK-PHASES: 13: backend, {12}, assembler, (device-sycl, sm_35) -// CHK-PHASES: 14: clang-offload-wrapper, {13}, object, (device-sycl, sm_35) -// CHK-PHASES: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (nvptx64-nvidia-nvcl-sycldevice:sm_35)" {14}, image +// CHK-PHASES: 10: linker, {4}, ir, (device-sycl, sm_35) +// CHK-PHASES: 11: sycl-post-link, {10}, ir, (device-sycl, sm_35) +// CHK-PHASES: 12: backend, {11}, assembler, (device-sycl, sm_35) +// CHK-PHASES: 13: clang-offload-wrapper, {12}, object, (device-sycl, sm_35) +// CHK-PHASES: 14: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (nvptx64-nvidia-nvcl-sycldevice:sm_35)" {13}, image diff --git a/clang/test/Driver/sycl-offload-static-lib-2.cpp b/clang/test/Driver/sycl-offload-static-lib-2.cpp index fcaf1d9df1fd9..98ac279bb78a9 100644 --- a/clang/test/Driver/sycl-offload-static-lib-2.cpp +++ b/clang/test/Driver/sycl-offload-static-lib-2.cpp @@ -52,24 +52,23 @@ // STATIC_LIB_SRC: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // STATIC_LIB_SRC: 3: input, "[[INPUTC]]", c++, (device-sycl) // STATIC_LIB_SRC: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// STATIC_LIB_SRC: 5: compiler, {4}, sycl-header, (device-sycl) +// STATIC_LIB_SRC: 5: compiler, {4}, ir, (device-sycl) // STATIC_LIB_SRC: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // STATIC_LIB_SRC: 7: compiler, {6}, ir, (host-sycl) // STATIC_LIB_SRC: 8: backend, {7}, assembler, (host-sycl) // STATIC_LIB_SRC: 9: assembler, {8}, object, (host-sycl) // STATIC_LIB_SRC: 10: linker, {0, 9}, image, (host-sycl) -// STATIC_LIB_SRC: 11: compiler, {4}, ir, (device-sycl) -// STATIC_LIB_SRC: 12: linker, {0, 9}, image, (host-sycl) -// STATIC_LIB_SRC: 13: clang-offload-deps, {12}, ir, (host-sycl) -// STATIC_LIB_SRC: 14: input, "[[INPUTA]]", archive -// STATIC_LIB_SRC: 15: clang-offload-unbundler, {14}, archive -// STATIC_LIB_SRC: 16: linker, {11, 13, 15}, ir, (device-sycl) -// STATIC_LIB_SRC: 17: sycl-post-link, {16}, tempfiletable, (device-sycl) -// STATIC_LIB_SRC: 18: file-table-tform, {17}, tempfilelist, (device-sycl) -// STATIC_LIB_SRC: 19: llvm-spirv, {18}, tempfilelist, (device-sycl) -// STATIC_LIB_SRC: 20: file-table-tform, {17, 19}, tempfiletable, (device-sycl) -// STATIC_LIB_SRC: 21: clang-offload-wrapper, {20}, object, (device-sycl) -// STATIC_LIB_SRC: 22: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {21}, image +// STATIC_LIB_SRC: 11: linker, {0, 9}, image, (host-sycl) +// STATIC_LIB_SRC: 12: clang-offload-deps, {11}, ir, (host-sycl) +// STATIC_LIB_SRC: 13: input, "[[INPUTA]]", archive +// STATIC_LIB_SRC: 14: clang-offload-unbundler, {13}, archive +// STATIC_LIB_SRC: 15: linker, {5, 12, 14}, ir, (device-sycl) +// STATIC_LIB_SRC: 16: sycl-post-link, {15}, tempfiletable, (device-sycl) +// STATIC_LIB_SRC: 17: file-table-tform, {16}, tempfilelist, (device-sycl) +// STATIC_LIB_SRC: 18: llvm-spirv, {17}, tempfilelist, (device-sycl) +// STATIC_LIB_SRC: 19: file-table-tform, {16, 18}, tempfiletable, (device-sycl) +// STATIC_LIB_SRC: 20: clang-offload-wrapper, {19}, object, (device-sycl) +// STATIC_LIB_SRC: 21: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {20}, image /// ########################################################################### diff --git a/clang/test/Driver/sycl-offload-static-lib.cpp b/clang/test/Driver/sycl-offload-static-lib.cpp index b253efc1984a2..bde5145f49153 100644 --- a/clang/test/Driver/sycl-offload-static-lib.cpp +++ b/clang/test/Driver/sycl-offload-static-lib.cpp @@ -56,24 +56,23 @@ // FOFFLOAD_STATIC_LIB_SRC: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 3: input, "[[INPUTC]]", c++, (device-sycl) // FOFFLOAD_STATIC_LIB_SRC: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 5: compiler, {4}, sycl-header, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 5: compiler, {4}, ir, (device-sycl) // FOFFLOAD_STATIC_LIB_SRC: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // FOFFLOAD_STATIC_LIB_SRC: 7: compiler, {6}, ir, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 8: backend, {7}, assembler, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 9: assembler, {8}, object, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 10: linker, {0, 9}, image, (host-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 11: compiler, {4}, ir, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 12: linker, {0, 9}, image, (host-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 13: clang-offload-deps, {12}, ir, (host-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 14: input, "[[INPUTA]]", archive -// FOFFLOAD_STATIC_LIB_SRC: 15: clang-offload-unbundler, {14}, archive -// FOFFLOAD_STATIC_LIB_SRC: 16: linker, {11, 13, 15}, ir, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 17: sycl-post-link, {16}, tempfiletable, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 18: file-table-tform, {17}, tempfilelist, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 19: llvm-spirv, {18}, tempfilelist, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 20: file-table-tform, {17, 19}, tempfiletable, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 21: clang-offload-wrapper, {20}, object, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 22: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {21}, image +// FOFFLOAD_STATIC_LIB_SRC: 11: linker, {0, 9}, image, (host-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 12: clang-offload-deps, {11}, ir, (host-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 13: input, "[[INPUTA]]", archive +// FOFFLOAD_STATIC_LIB_SRC: 14: clang-offload-unbundler, {13}, archive +// FOFFLOAD_STATIC_LIB_SRC: 15: linker, {5, 12, 14}, ir, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 16: sycl-post-link, {15}, tempfiletable, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 17: file-table-tform, {16}, tempfilelist, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 18: llvm-spirv, {17}, tempfilelist, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 19: file-table-tform, {16, 18}, tempfiletable, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 20: clang-offload-wrapper, {19}, object, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 21: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {20}, image /// ########################################################################### diff --git a/clang/test/Driver/sycl-offload-win.c b/clang/test/Driver/sycl-offload-win.c index 73762622b900d..f2619a1563af4 100644 --- a/clang/test/Driver/sycl-offload-win.c +++ b/clang/test/Driver/sycl-offload-win.c @@ -66,24 +66,23 @@ // FOFFLOAD_STATIC_LIB_SRC: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 3: input, "[[INPUTC]]", c++, (device-sycl) // FOFFLOAD_STATIC_LIB_SRC: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 5: compiler, {4}, sycl-header, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 5: compiler, {4}, ir, (device-sycl) // FOFFLOAD_STATIC_LIB_SRC: 6: offload, "host-sycl (x86_64-pc-windows-msvc)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // FOFFLOAD_STATIC_LIB_SRC: 7: compiler, {6}, ir, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 8: backend, {7}, assembler, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 9: assembler, {8}, object, (host-sycl) // FOFFLOAD_STATIC_LIB_SRC: 10: linker, {0, 9}, image, (host-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 11: compiler, {4}, ir, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 12: linker, {0, 9}, image, (host-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 13: clang-offload-deps, {12}, ir, (host-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 14: input, "[[INPUTLIB]]", archive -// FOFFLOAD_STATIC_LIB_SRC: 15: clang-offload-unbundler, {14}, archive -// FOFFLOAD_STATIC_LIB_SRC: 16: linker, {11, 13, 15}, ir, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 17: sycl-post-link, {16}, tempfiletable, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 18: file-table-tform, {17}, tempfilelist, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 19: llvm-spirv, {18}, tempfilelist, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 20: file-table-tform, {17, 19}, tempfiletable, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 21: clang-offload-wrapper, {20}, object, (device-sycl) -// FOFFLOAD_STATIC_LIB_SRC: 22: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {21}, image +// FOFFLOAD_STATIC_LIB_SRC: 11: linker, {0, 9}, image, (host-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 12: clang-offload-deps, {11}, ir, (host-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 13: input, "[[INPUTLIB]]", archive +// FOFFLOAD_STATIC_LIB_SRC: 14: clang-offload-unbundler, {13}, archive +// FOFFLOAD_STATIC_LIB_SRC: 15: linker, {5, 12, 14}, ir, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 16: sycl-post-link, {15}, tempfiletable, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 17: file-table-tform, {16}, tempfilelist, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 18: llvm-spirv, {17}, tempfilelist, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 19: file-table-tform, {16, 18}, tempfiletable, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 20: clang-offload-wrapper, {19}, object, (device-sycl) +// FOFFLOAD_STATIC_LIB_SRC: 21: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {20}, image /// ########################################################################### diff --git a/clang/test/Driver/sycl-offload-with-split.c b/clang/test/Driver/sycl-offload-with-split.c index 9bc40055d5448..b16e350ec0a96 100644 --- a/clang/test/Driver/sycl-offload-with-split.c +++ b/clang/test/Driver/sycl-offload-with-split.c @@ -28,22 +28,21 @@ // CHK-PHASES: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASES: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASES: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-PHASES: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-PHASES: 4: compiler, {3}, ir, (device-sycl) // CHK-PHASES-DEFAULT-MODE: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES-CL-MODE: 5: offload, "host-sycl (x86_64-pc-windows-msvc)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASES: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASES: 8: assembler, {7}, object, (host-sycl) // CHK-PHASES: 9: linker, {8}, image, (host-sycl) -// CHK-PHASES: 10: compiler, {3}, ir, (device-sycl) -// CHK-PHASES: 11: linker, {10}, ir, (device-sycl) -// CHK-PHASES: 12: sycl-post-link, {11}, tempfiletable, (device-sycl) -// CHK-PHASES: 13: file-table-tform, {12}, tempfilelist, (device-sycl) -// CHK-PHASES: 14: llvm-spirv, {13}, tempfilelist, (device-sycl) -// CHK-PHASES: 15: file-table-tform, {12, 14}, tempfiletable, (device-sycl) -// CHK-PHASES: 16: clang-offload-wrapper, {15}, object, (device-sycl) -// CHK-PHASES-DEFAULT-MODE: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, image -// CHK-PHASES-CL-MODE: 17: offload, "host-sycl (x86_64-pc-windows-msvc)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, image +// CHK-PHASES: 10: linker, {4}, ir, (device-sycl) +// CHK-PHASES: 11: sycl-post-link, {10}, tempfiletable, (device-sycl) +// CHK-PHASES: 12: file-table-tform, {11}, tempfilelist, (device-sycl) +// CHK-PHASES: 13: llvm-spirv, {12}, tempfilelist, (device-sycl) +// CHK-PHASES: 14: file-table-tform, {11, 13}, tempfiletable, (device-sycl) +// CHK-PHASES: 15: clang-offload-wrapper, {14}, object, (device-sycl) +// CHK-PHASES-DEFAULT-MODE: 16: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {15}, image +// CHK-PHASES-CL-MODE: 16: offload, "host-sycl (x86_64-pc-windows-msvc)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {15}, image /// ########################################################################### @@ -56,20 +55,19 @@ // CHK-PHASES-LIB: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-PHASES-LIB: 3: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASES-LIB: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-PHASES-LIB: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-PHASES-LIB: 5: compiler, {4}, ir, (device-sycl) // CHK-PHASES-LIB: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-PHASES-LIB: 7: compiler, {6}, ir, (host-sycl) // CHK-PHASES-LIB: 8: backend, {7}, assembler, (host-sycl) // CHK-PHASES-LIB: 9: assembler, {8}, object, (host-sycl) // CHK-PHASES-LIB: 10: linker, {0, 9}, image, (host-sycl) -// CHK-PHASES-LIB: 11: compiler, {4}, ir, (device-sycl) -// CHK-PHASES-LIB: 12: linker, {11}, ir, (device-sycl) -// CHK-PHASES-LIB: 13: sycl-post-link, {12}, tempfiletable, (device-sycl) -// CHK-PHASES-LIB: 14: file-table-tform, {13}, tempfilelist, (device-sycl) -// CHK-PHASES-LIB: 15: llvm-spirv, {14}, tempfilelist, (device-sycl) -// CHK-PHASES-LIB: 16: file-table-tform, {13, 15}, tempfiletable, (device-sycl) -// CHK-PHASES-LIB: 17: clang-offload-wrapper, {16}, object, (device-sycl) -// CHK-PHASES-LIB: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {17}, image +// CHK-PHASES-LIB: 11: linker, {5}, ir, (device-sycl) +// CHK-PHASES-LIB: 12: sycl-post-link, {11}, tempfiletable, (device-sycl) +// CHK-PHASES-LIB: 13: file-table-tform, {12}, tempfilelist, (device-sycl) +// CHK-PHASES-LIB: 14: llvm-spirv, {13}, tempfilelist, (device-sycl) +// CHK-PHASES-LIB: 15: file-table-tform, {12, 14}, tempfiletable, (device-sycl) +// CHK-PHASES-LIB: 16: clang-offload-wrapper, {15}, object, (device-sycl) +// CHK-PHASES-LIB: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, image /// ########################################################################### @@ -83,7 +81,7 @@ // CHK-PHASES-FILES: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-PHASES-FILES: 3: input, "[[INPUT1]]", c++, (device-sycl) // CHK-PHASES-FILES: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-PHASES-FILES: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-PHASES-FILES: 5: compiler, {4}, ir, (device-sycl) // CHK-PHASES-FILES: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-PHASES-FILES: 7: compiler, {6}, ir, (host-sycl) // CHK-PHASES-FILES: 8: backend, {7}, assembler, (host-sycl) @@ -92,21 +90,19 @@ // CHK-PHASES-FILES: 11: preprocessor, {10}, c++-cpp-output, (host-sycl) // CHK-PHASES-FILES: 12: input, "[[INPUT2]]", c++, (device-sycl) // CHK-PHASES-FILES: 13: preprocessor, {12}, c++-cpp-output, (device-sycl) -// CHK-PHASES-FILES: 14: compiler, {13}, sycl-header, (device-sycl) +// CHK-PHASES-FILES: 14: compiler, {13}, ir, (device-sycl) // CHK-PHASES-FILES: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {11}, "device-sycl (spir64-unknown-unknown-sycldevice)" {14}, c++-cpp-output // CHK-PHASES-FILES: 16: compiler, {15}, ir, (host-sycl) // CHK-PHASES-FILES: 17: backend, {16}, assembler, (host-sycl) // CHK-PHASES-FILES: 18: assembler, {17}, object, (host-sycl) // CHK-PHASES-FILES: 19: linker, {0, 9, 18}, image, (host-sycl) -// CHK-PHASES-FILES: 20: compiler, {4}, ir, (device-sycl) -// CHK-PHASES-FILES: 21: compiler, {13}, ir, (device-sycl) -// CHK-PHASES-FILES: 22: linker, {20, 21}, ir, (device-sycl) -// CHK-PHASES-FILES: 23: sycl-post-link, {22}, tempfiletable, (device-sycl) -// CHK-PHASES-FILES: 24: file-table-tform, {23}, tempfilelist, (device-sycl) -// CHK-PHASES-FILES: 25: llvm-spirv, {24}, tempfilelist, (device-sycl) -// CHK-PHASES-FILES: 26: file-table-tform, {23, 25}, tempfiletable, (device-sycl) -// CHK-PHASES-FILES: 27: clang-offload-wrapper, {26}, object, (device-sycl) -// CHK-PHASES-FILES: 28: offload, "host-sycl (x86_64-unknown-linux-gnu)" {19}, "device-sycl (spir64-unknown-unknown-sycldevice)" {27}, image +// CHK-PHASES-FILES: 20: linker, {5, 14}, ir, (device-sycl) +// CHK-PHASES-FILES: 21: sycl-post-link, {20}, tempfiletable, (device-sycl) +// CHK-PHASES-FILES: 22: file-table-tform, {21}, tempfilelist, (device-sycl) +// CHK-PHASES-FILES: 23: llvm-spirv, {22}, tempfilelist, (device-sycl) +// CHK-PHASES-FILES: 24: file-table-tform, {21, 23}, tempfiletable, (device-sycl) +// CHK-PHASES-FILES: 25: clang-offload-wrapper, {24}, object, (device-sycl) +// CHK-PHASES-FILES: 26: offload, "host-sycl (x86_64-unknown-linux-gnu)" {19}, "device-sycl (spir64-unknown-unknown-sycldevice)" {25}, image /// ########################################################################### @@ -143,20 +139,19 @@ // CHK-UBUACTIONS: 4: preprocessor, {3}, c++-cpp-output, (host-sycl) // CHK-UBUACTIONS: 5: input, "[[INPUT2]]", c++, (device-sycl) // CHK-UBUACTIONS: 6: preprocessor, {5}, c++-cpp-output, (device-sycl) -// CHK-UBUACTIONS: 7: compiler, {6}, sycl-header, (device-sycl) +// CHK-UBUACTIONS: 7: compiler, {6}, ir, (device-sycl) // CHK-UBUACTIONS: 8: offload, "host-sycl (x86_64-unknown-linux-gnu)" {4}, "device-sycl (spir64-unknown-unknown-sycldevice)" {7}, c++-cpp-output // CHK-UBUACTIONS: 9: compiler, {8}, ir, (host-sycl) // CHK-UBUACTIONS: 10: backend, {9}, assembler, (host-sycl) // CHK-UBUACTIONS: 11: assembler, {10}, object, (host-sycl) // CHK-UBUACTIONS: 12: linker, {0, 2, 11}, image, (host-sycl) -// CHK-UBUACTIONS: 13: compiler, {6}, ir, (device-sycl) -// CHK-UBUACTIONS: 14: linker, {2, 13}, ir, (device-sycl) -// CHK-UBUACTIONS: 15: sycl-post-link, {14}, tempfiletable, (device-sycl) -// CHK-UBUACTIONS: 16: file-table-tform, {15}, tempfilelist, (device-sycl) -// CHK-UBUACTIONS: 17: llvm-spirv, {16}, tempfilelist, (device-sycl) -// CHK-UBUACTIONS: 18: file-table-tform, {15, 17}, tempfiletable, (device-sycl) -// CHK-UBUACTIONS: 19: clang-offload-wrapper, {18}, object, (device-sycl) -// CHK-UBUACTIONS: 20: offload, "host-sycl (x86_64-unknown-linux-gnu)" {12}, "device-sycl (spir64-unknown-unknown-sycldevice)" {19}, image +// CHK-UBUACTIONS: 13: linker, {2, 7}, ir, (device-sycl) +// CHK-UBUACTIONS: 14: sycl-post-link, {13}, tempfiletable, (device-sycl) +// CHK-UBUACTIONS: 15: file-table-tform, {14}, tempfilelist, (device-sycl) +// CHK-UBUACTIONS: 16: llvm-spirv, {15}, tempfilelist, (device-sycl) +// CHK-UBUACTIONS: 17: file-table-tform, {14, 16}, tempfiletable, (device-sycl) +// CHK-UBUACTIONS: 18: clang-offload-wrapper, {17}, object, (device-sycl) +// CHK-UBUACTIONS: 19: offload, "host-sycl (x86_64-unknown-linux-gnu)" {12}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, image /// ########################################################################### @@ -171,7 +166,7 @@ // CHK-PHASES-AOT: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASES-AOT: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASES-AOT: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-PHASES-AOT: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-PHASES-AOT: 4: compiler, {3}, ir, (device-sycl) // CHK-PHASES-FPGA: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES-GEN: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES-CPU: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_x86_64-unknown-unknown-sycldevice)" {4}, c++-cpp-output @@ -179,19 +174,16 @@ // CHK-PHASES-AOT: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASES-AOT: 8: assembler, {7}, object, (host-sycl) // CHK-PHASES-AOT: 9: linker, {8}, image, (host-sycl) -// CHK-PHASES-AOT: 10: compiler, {3}, ir, (device-sycl) -// CHK-PHASES-AOT: 11: linker, {10}, ir, (device-sycl) -// CHK-PHASES-AOT: 12: sycl-post-link, {11}, tempfiletable, (device-sycl) -// CHK-PHASES-AOT: 13: file-table-tform, {12}, tempfilelist, (device-sycl) -// CHK-PHASES-AOT: 14: llvm-spirv, {13}, tempfilelist, (device-sycl) -// CHK-PHASES-GEN: 15: backend-compiler, {14}, tempfilelist, (device-sycl) -// CHK-PHASES-FPGA: 15: backend-compiler, {14}, tempfilelist, (device-sycl) -// CHK-PHASES-CPU: 15: backend-compiler, {14}, tempfilelist, (device-sycl) -// CHK-PHASES-AOT: 16: file-table-tform, {12, 15}, tempfiletable, (device-sycl) -// CHK-PHASES-AOT: 17: clang-offload-wrapper, {16}, object, (device-sycl) -// CHK-PHASES-FPGA: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {17}, image -// CHK-PHASES-GEN: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {17}, image -// CHK-PHASES-CPU: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_x86_64-unknown-unknown-sycldevice)" {17}, image +// CHK-PHASES-AOT: 10: linker, {4}, ir, (device-sycl) +// CHK-PHASES-AOT: 11: sycl-post-link, {10}, tempfiletable, (device-sycl) +// CHK-PHASES-AOT: 12: file-table-tform, {11}, tempfilelist, (device-sycl) +// CHK-PHASES-AOT: 13: llvm-spirv, {12}, tempfilelist, (device-sycl) +// CHK-PHASES-AOT: 14: backend-compiler, {13}, tempfilelist, (device-sycl) +// CHK-PHASES-AOT: 15: file-table-tform, {11, 14}, tempfiletable, (device-sycl) +// CHK-PHASES-AOT: 16: clang-offload-wrapper, {15}, object, (device-sycl) +// CHK-PHASES-FPGA: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {16}, image +// CHK-PHASES-GEN: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {16}, image +// CHK-PHASES-CPU: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_x86_64-unknown-unknown-sycldevice)" {16}, image /// ########################################################################### @@ -204,7 +196,7 @@ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-device-code-split -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU -// CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device" {{.*}} "-o" "[[OUTPUT1:.+\.bc]]" +// CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // CHK-TOOLS-AOT: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2:.+\.bc]]" // CHK-TOOLS-AOT: sycl-post-link{{.*}} "-split=auto" {{.*}} "-spec-const=default" "-o" "[[OUTPUT3:.+\.table]]" "[[OUTPUT2]]" // CHK-TOOLS-AOT: file-table-tform{{.*}} "-o" "[[OUTPUT4:.+\.txt]]" "[[OUTPUT3]]" @@ -217,9 +209,6 @@ // CHK-TOOLS-GEN: clang-offload-wrapper{{.*}} "-o=[[OUTPUT8:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_gen" "-kind=sycl" "-batch" "[[OUTPUT7]]" // CHK-TOOLS-CPU: clang-offload-wrapper{{.*}} "-o=[[OUTPUT8:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_x86_64" "-kind=sycl" "-batch" "[[OUTPUT7]]" // CHK-TOOLS-AOT: llc{{.*}} "-filetype=obj" "-o" "[[OUTPUT9:.+\.o]]" "[[OUTPUT8]]" -// CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-D__ENABLE_USM_ADDR_SPACE__" "-faddrsig" -// CHK-TOOLS-GEN: clang{{.*}} "-triple" "spir64_gen-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig" -// CHK-TOOLS-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig" // CHK-TOOLS-AOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT10:.+\.o]]" // CHK-TOOLS-AOT: ld{{.*}} "[[OUTPUT10]]" "[[OUTPUT9]]" {{.*}} "-lsycl" @@ -233,13 +222,12 @@ // CHK-PHASE-MULTI-TARG: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASE-MULTI-TARG: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-PHASE-MULTI-TARG: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-PHASE-MULTI-TARG: 4: compiler, {3}, ir, (device-sycl) // CHK-PHASE-MULTI-TARG: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASE-MULTI-TARG: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASE-MULTI-TARG: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASE-MULTI-TARG: 8: assembler, {7}, object, (host-sycl) // CHK-PHASE-MULTI-TARG: 9: linker, {8}, image, (host-sycl) - // CHK-PHASE-MULTI-TARG: 10: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASE-MULTI-TARG: 11: preprocessor, {10}, c++-cpp-output, (device-sycl) // CHK-PHASE-MULTI-TARG: 12: compiler, {11}, ir, (device-sycl) @@ -249,7 +237,6 @@ // CHK-PHASE-MULTI-TARG: 16: llvm-spirv, {15}, tempfilelist, (device-sycl) // CHK-PHASE-MULTI-TARG: 17: file-table-tform, {14, 16}, tempfiletable, (device-sycl) // CHK-PHASE-MULTI-TARG: 18: clang-offload-wrapper, {17}, object, (device-sycl) - // CHK-PHASE-MULTI-TARG: 19: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASE-MULTI-TARG: 20: preprocessor, {19}, c++-cpp-output, (device-sycl) // CHK-PHASE-MULTI-TARG: 21: compiler, {20}, ir, (device-sycl) @@ -260,16 +247,14 @@ // CHK-PHASE-MULTI-TARG: 26: backend-compiler, {25}, tempfilelist, (device-sycl) // CHK-PHASE-MULTI-TARG: 27: file-table-tform, {23, 26}, tempfiletable, (device-sycl) // CHK-PHASE-MULTI-TARG: 28: clang-offload-wrapper, {27}, object, (device-sycl) - -// CHK-PHASE-MULTI-TARG: 29: compiler, {3}, ir, (device-sycl) -// CHK-PHASE-MULTI-TARG: 30: linker, {29}, ir, (device-sycl) -// CHK-PHASE-MULTI-TARG: 31: sycl-post-link, {30}, tempfiletable, (device-sycl) -// CHK-PHASE-MULTI-TARG: 32: file-table-tform, {31}, tempfilelist, (device-sycl) -// CHK-PHASE-MULTI-TARG: 33: llvm-spirv, {32}, tempfilelist, (device-sycl) -// CHK-PHASE-MULTI-TARG: 34: backend-compiler, {33}, tempfilelist, (device-sycl) -// CHK-PHASE-MULTI-TARG: 35: file-table-tform, {31, 34}, tempfiletable, (device-sycl) -// CHK-PHASE-MULTI-TARG: 36: clang-offload-wrapper, {35}, object, (device-sycl) -// CHK-PHASE-MULTI-TARG: 37: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {28}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {36}, image +// CHK-PHASE-MULTI-TARG: 29: linker, {4}, ir, (device-sycl) +// CHK-PHASE-MULTI-TARG: 30: sycl-post-link, {29}, tempfiletable, (device-sycl) +// CHK-PHASE-MULTI-TARG: 31: file-table-tform, {30}, tempfilelist, (device-sycl) +// CHK-PHASE-MULTI-TARG: 32: llvm-spirv, {31}, tempfilelist, (device-sycl) +// CHK-PHASE-MULTI-TARG: 33: backend-compiler, {32}, tempfilelist, (device-sycl) +// CHK-PHASE-MULTI-TARG: 34: file-table-tform, {30, 33}, tempfiletable, (device-sycl) +// CHK-PHASE-MULTI-TARG: 35: clang-offload-wrapper, {34}, object, (device-sycl) +// CHK-PHASE-MULTI-TARG: 36: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {28}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {35}, image // Check -fsycl-device-code-split=per_kernel option passing. // RUN: %clang -### -fsycl -fsycl-device-code-split=per_kernel %s 2>&1 \ diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index c2dd64231fe7a..59c53d143219a 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -177,30 +177,28 @@ // CHK-PHASES: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASES: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASES: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-PHASES: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-PHASES: 4: compiler, {3}, ir, (device-sycl) // CHK-PHASES-DEFAULT-MODE: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES-CL-MODE: 5: offload, "host-sycl (x86_64-pc-windows-msvc)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASES: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASES: 8: assembler, {7}, object, (host-sycl) // CHK-PHASES: 9: linker, {8}, image, (host-sycl) -// CHK-PHASES: 10: compiler, {3}, ir, (device-sycl) -// CHK-PHASES: 11: linker, {10}, ir, (device-sycl) -// CHK-PHASES: 12: sycl-post-link, {11}, tempfiletable, (device-sycl) -// CHK-PHASES: 13: file-table-tform, {12}, tempfilelist, (device-sycl) -// CHK-PHASES: 14: llvm-spirv, {13}, tempfilelist, (device-sycl) -// CHK-PHASES: 15: file-table-tform, {12, 14}, tempfiletable, (device-sycl) -// CHK-PHASES: 16: clang-offload-wrapper, {15}, object, (device-sycl) -// CHK-PHASES-DEFAULT-MODE: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, image -// CHK-PHASES-CL-MODE: 17: offload, "host-sycl (x86_64-pc-windows-msvc)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, image +// CHK-PHASES: 10: linker, {4}, ir, (device-sycl) +// CHK-PHASES: 11: sycl-post-link, {10}, tempfiletable, (device-sycl) +// CHK-PHASES: 12: file-table-tform, {11}, tempfilelist, (device-sycl) +// CHK-PHASES: 13: llvm-spirv, {12}, tempfilelist, (device-sycl) +// CHK-PHASES: 14: file-table-tform, {11, 13}, tempfiletable, (device-sycl) +// CHK-PHASES: 15: clang-offload-wrapper, {14}, object, (device-sycl) +// CHK-PHASES-DEFAULT-MODE: 16: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {15}, image +// CHK-PHASES-CL-MODE: 16: offload, "host-sycl (x86_64-pc-windows-msvc)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {15}, image /// ########################################################################### /// Check the compilation flow to verify that the integrated header is filtered // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -c %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHK-INT-HEADER -// CHK-INT-HEADER: clang{{.*}} "-fsycl-is-device" {{.*}} "-o" "[[OUTPUT1:.+\.bc]]" -// CHK-INT-HEADER: clang{{.*}} "-triple" "spir64-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig" +// CHK-INT-HEADER: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // CHK-INT-HEADER: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" "-dependency-filter" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT2:.+.o]]" // CHK-INT-HEADER: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown-sycldevice,host-x86_64-unknown-linux-gnu" {{.*}} "-inputs=[[OUTPUT1]],[[OUTPUT2]]" @@ -215,20 +213,19 @@ // CHK-PHASES-LIB: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-PHASES-LIB: 3: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASES-LIB: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-PHASES-LIB: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-PHASES-LIB: 5: compiler, {4}, ir, (device-sycl) // CHK-PHASES-LIB: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-PHASES-LIB: 7: compiler, {6}, ir, (host-sycl) // CHK-PHASES-LIB: 8: backend, {7}, assembler, (host-sycl) // CHK-PHASES-LIB: 9: assembler, {8}, object, (host-sycl) // CHK-PHASES-LIB: 10: linker, {0, 9}, image, (host-sycl) -// CHK-PHASES-LIB: 11: compiler, {4}, ir, (device-sycl) -// CHK-PHASES-LIB: 12: linker, {11}, ir, (device-sycl) -// CHK-PHASES-LIB: 13: sycl-post-link, {12}, tempfiletable, (device-sycl) -// CHK-PHASES-LIB: 14: file-table-tform, {13}, tempfilelist, (device-sycl) -// CHK-PHASES-LIB: 15: llvm-spirv, {14}, tempfilelist, (device-sycl) -// CHK-PHASES-LIB: 16: file-table-tform, {13, 15}, tempfiletable, (device-sycl) -// CHK-PHASES-LIB: 17: clang-offload-wrapper, {16}, object, (device-sycl) -// CHK-PHASES-LIB: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {17}, image +// CHK-PHASES-LIB: 11: linker, {5}, ir, (device-sycl) +// CHK-PHASES-LIB: 12: sycl-post-link, {11}, tempfiletable, (device-sycl) +// CHK-PHASES-LIB: 13: file-table-tform, {12}, tempfilelist, (device-sycl) +// CHK-PHASES-LIB: 14: llvm-spirv, {13}, tempfilelist, (device-sycl) +// CHK-PHASES-LIB: 15: file-table-tform, {12, 14}, tempfiletable, (device-sycl) +// CHK-PHASES-LIB: 16: clang-offload-wrapper, {15}, object, (device-sycl) +// CHK-PHASES-LIB: 17: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, image /// Compilation check with -lstdc++ (treated differently than regular lib) // RUN: %clang -### -target x86_64-unknown-linux-gnu -lstdc++ -fsycl %s 2>&1 \ @@ -249,7 +246,7 @@ // CHK-PHASES-FILES: 2: preprocessor, {1}, c++-cpp-output, (host-sycl) // CHK-PHASES-FILES: 3: input, "[[INPUT1]]", c++, (device-sycl) // CHK-PHASES-FILES: 4: preprocessor, {3}, c++-cpp-output, (device-sycl) -// CHK-PHASES-FILES: 5: compiler, {4}, sycl-header, (device-sycl) +// CHK-PHASES-FILES: 5: compiler, {4}, ir, (device-sycl) // CHK-PHASES-FILES: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64-unknown-unknown-sycldevice)" {5}, c++-cpp-output // CHK-PHASES-FILES: 7: compiler, {6}, ir, (host-sycl) // CHK-PHASES-FILES: 8: backend, {7}, assembler, (host-sycl) @@ -258,26 +255,24 @@ // CHK-PHASES-FILES: 11: preprocessor, {10}, c++-cpp-output, (host-sycl) // CHK-PHASES-FILES: 12: input, "[[INPUT2]]", c++, (device-sycl) // CHK-PHASES-FILES: 13: preprocessor, {12}, c++-cpp-output, (device-sycl) -// CHK-PHASES-FILES: 14: compiler, {13}, sycl-header, (device-sycl) +// CHK-PHASES-FILES: 14: compiler, {13}, ir, (device-sycl) // CHK-PHASES-FILES: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {11}, "device-sycl (spir64-unknown-unknown-sycldevice)" {14}, c++-cpp-output // CHK-PHASES-FILES: 16: compiler, {15}, ir, (host-sycl) // CHK-PHASES-FILES: 17: backend, {16}, assembler, (host-sycl) // CHK-PHASES-FILES: 18: assembler, {17}, object, (host-sycl) // CHK-PHASES-FILES: 19: linker, {0, 9, 18}, image, (host-sycl) -// CHK-PHASES-FILES: 20: compiler, {4}, ir, (device-sycl) -// CHK-PHASES-FILES: 21: compiler, {13}, ir, (device-sycl) -// CHK-PHASES-FILES: 22: linker, {20, 21}, ir, (device-sycl) -// CHK-PHASES-FILES: 23: sycl-post-link, {22}, tempfiletable, (device-sycl) -// CHK-PHASES-FILES: 24: file-table-tform, {23}, tempfilelist, (device-sycl) -// CHK-PHASES-FILES: 25: llvm-spirv, {24}, tempfilelist, (device-sycl) -// CHK-PHASES-FILES: 26: file-table-tform, {23, 25}, tempfiletable, (device-sycl) -// CHK-PHASES-FILES: 27: clang-offload-wrapper, {26}, object, (device-sycl) -// CHK-PHASES-FILES: 28: offload, "host-sycl (x86_64-unknown-linux-gnu)" {19}, "device-sycl (spir64-unknown-unknown-sycldevice)" {27}, image +// CHK-PHASES-FILES: 20: linker, {5, 14}, ir, (device-sycl) +// CHK-PHASES-FILES: 21: sycl-post-link, {20}, tempfiletable, (device-sycl) +// CHK-PHASES-FILES: 22: file-table-tform, {21}, tempfilelist, (device-sycl) +// CHK-PHASES-FILES: 23: llvm-spirv, {22}, tempfilelist, (device-sycl) +// CHK-PHASES-FILES: 24: file-table-tform, {21, 23}, tempfiletable, (device-sycl) +// CHK-PHASES-FILES: 25: clang-offload-wrapper, {24}, object, (device-sycl) +// CHK-PHASES-FILES: 26: offload, "host-sycl (x86_64-unknown-linux-gnu)" {19}, "device-sycl (spir64-unknown-unknown-sycldevice)" {25}, image /// ########################################################################### /// Check separate compilation with offloading - bundling actions -// RUN: %clang -### -ccc-print-phases -target x86_64-unknown-linux-gnu -fsycl -c -o %t.o -lsomelib -fsycl-targets=spir64-unknown-unknown-sycldevice %s 2>&1 \ +// RUN: %clang -ccc-print-phases -target x86_64-unknown-linux-gnu -fsycl -c -o %t.o -lsomelib -fsycl-targets=spir64-unknown-unknown-sycldevice %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-BUACTIONS %s // CHK-BUACTIONS: 0: input, "[[INPUT:.+\.c]]", c++, (device-sycl) // CHK-BUACTIONS: 1: preprocessor, {0}, c++-cpp-output, (device-sycl) @@ -285,12 +280,11 @@ // CHK-BUACTIONS: 3: offload, "device-sycl (spir64-unknown-unknown-sycldevice)" {2}, ir // CHK-BUACTIONS: 4: input, "[[INPUT]]", c++, (host-sycl) // CHK-BUACTIONS: 5: preprocessor, {4}, c++-cpp-output, (host-sycl) -// CHK-BUACTIONS: 6: compiler, {1}, sycl-header, (device-sycl) -// CHK-BUACTIONS: 7: offload, "host-sycl (x86_64-unknown-linux-gnu)" {5}, "device-sycl (spir64-unknown-unknown-sycldevice)" {6}, c++-cpp-output -// CHK-BUACTIONS: 8: compiler, {7}, ir, (host-sycl) -// CHK-BUACTIONS: 9: backend, {8}, assembler, (host-sycl) -// CHK-BUACTIONS: 10: assembler, {9}, object, (host-sycl) -// CHK-BUACTIONS: 11: clang-offload-bundler, {3, 10}, object, (host-sycl) +// CHK-BUACTIONS: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {5}, "device-sycl (spir64-unknown-unknown-sycldevice)" {2}, c++-cpp-output +// CHK-BUACTIONS: 7: compiler, {6}, ir, (host-sycl) +// CHK-BUACTIONS: 8: backend, {7}, assembler, (host-sycl) +// CHK-BUACTIONS: 9: assembler, {8}, object, (host-sycl) +// CHK-BUACTIONS: 10: clang-offload-bundler, {3, 9}, object, (host-sycl) /// ########################################################################### @@ -318,7 +312,7 @@ /// Check separate compilation with offloading - unbundling with source // RUN: touch %t.o -// RUN: %clang -### -ccc-print-phases -target x86_64-unknown-linux-gnu -lsomelib -fsycl -fno-sycl-device-lib=all %t.o -fsycl-targets=spir64-unknown-unknown-sycldevice %s 2>&1 \ +// RUN: %clang -ccc-print-phases -target x86_64-unknown-linux-gnu -lsomelib -fsycl -fno-sycl-device-lib=all %t.o -fsycl-targets=spir64-unknown-unknown-sycldevice %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-UBUACTIONS %s // CHK-UBUACTIONS: 0: input, "somelib", object, (host-sycl) // CHK-UBUACTIONS: 1: input, "[[INPUT1:.+\.o]]", object, (host-sycl) @@ -327,20 +321,19 @@ // CHK-UBUACTIONS: 4: preprocessor, {3}, c++-cpp-output, (host-sycl) // CHK-UBUACTIONS: 5: input, "[[INPUT2]]", c++, (device-sycl) // CHK-UBUACTIONS: 6: preprocessor, {5}, c++-cpp-output, (device-sycl) -// CHK-UBUACTIONS: 7: compiler, {6}, sycl-header, (device-sycl) +// CHK-UBUACTIONS: 7: compiler, {6}, ir, (device-sycl) // CHK-UBUACTIONS: 8: offload, "host-sycl (x86_64-unknown-linux-gnu)" {4}, "device-sycl (spir64-unknown-unknown-sycldevice)" {7}, c++-cpp-output // CHK-UBUACTIONS: 9: compiler, {8}, ir, (host-sycl) // CHK-UBUACTIONS: 10: backend, {9}, assembler, (host-sycl) // CHK-UBUACTIONS: 11: assembler, {10}, object, (host-sycl) // CHK-UBUACTIONS: 12: linker, {0, 2, 11}, image, (host-sycl) -// CHK-UBUACTIONS: 13: compiler, {6}, ir, (device-sycl) -// CHK-UBUACTIONS: 14: linker, {2, 13}, ir, (device-sycl) -// CHK-UBUACTIONS: 15: sycl-post-link, {14}, tempfiletable, (device-sycl) -// CHK-UBUACTIONS: 16: file-table-tform, {15}, tempfilelist, (device-sycl) -// CHK-UBUACTIONS: 17: llvm-spirv, {16}, tempfilelist, (device-sycl) -// CHK-UBUACTIONS: 18: file-table-tform, {15, 17}, tempfiletable, (device-sycl) -// CHK-UBUACTIONS: 19: clang-offload-wrapper, {18}, object, (device-sycl) -// CHK-UBUACTIONS: 20: offload, "host-sycl (x86_64-unknown-linux-gnu)" {12}, "device-sycl (spir64-unknown-unknown-sycldevice)" {19}, image +// CHK-UBUACTIONS: 13: linker, {2, 7}, ir, (device-sycl) +// CHK-UBUACTIONS: 14: sycl-post-link, {13}, tempfiletable, (device-sycl) +// CHK-UBUACTIONS: 15: file-table-tform, {14}, tempfilelist, (device-sycl) +// CHK-UBUACTIONS: 16: llvm-spirv, {15}, tempfilelist, (device-sycl) +// CHK-UBUACTIONS: 17: file-table-tform, {14, 16}, tempfiletable, (device-sycl) +// CHK-UBUACTIONS: 18: clang-offload-wrapper, {17}, object, (device-sycl) +// CHK-UBUACTIONS: 19: offload, "host-sycl (x86_64-unknown-linux-gnu)" {12}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, image /// ########################################################################### @@ -467,7 +460,7 @@ // CHK-ADD-TARGETS-MUL: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-ADD-TARGETS-MUL: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-ADD-TARGETS-MUL: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-ADD-TARGETS-MUL: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-ADD-TARGETS-MUL: 4: compiler, {3}, ir, (device-sycl) // CHK-ADD-TARGETS-MUL: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-ADD-TARGETS-MUL: 6: compiler, {5}, ir, (host-sycl) // CHK-ADD-TARGETS-MUL: 7: backend, {6}, assembler, (host-sycl) @@ -480,6 +473,7 @@ // CHK-ADD-TARGETS-MUL: 14: input, "dummy_Gen9core.bin", sycl-fatbin, (device-sycl) // CHK-ADD-TARGETS-MUL: 15: clang-offload-wrapper, {14}, object, (device-sycl) // CHK-ADD-TARGETS-MUL: 16: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {11}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {13}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {15}, image + /// ########################################################################### /// Check offload with single triple, multiple binaries passed through -fsycl-add-targets @@ -490,7 +484,7 @@ // CHK-ADD-TARGETS-MUL-BINS: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-ADD-TARGETS-MUL-BINS: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-ADD-TARGETS-MUL-BINS: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-ADD-TARGETS-MUL-BINS: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-ADD-TARGETS-MUL-BINS: 4: compiler, {3}, ir, (device-sycl) // CHK-ADD-TARGETS-MUL-BINS: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-ADD-TARGETS-MUL-BINS: 6: compiler, {5}, ir, (host-sycl) // CHK-ADD-TARGETS-MUL-BINS: 7: backend, {6}, assembler, (host-sycl) @@ -514,22 +508,21 @@ // CHK-ADD-TARGETS-REG: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-ADD-TARGETS-REG: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-ADD-TARGETS-REG: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-ADD-TARGETS-REG: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-ADD-TARGETS-REG: 4: compiler, {3}, ir, (device-sycl) // CHK-ADD-TARGETS-REG: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-ADD-TARGETS-REG: 6: compiler, {5}, ir, (host-sycl) // CHK-ADD-TARGETS-REG: 7: backend, {6}, assembler, (host-sycl) // CHK-ADD-TARGETS-REG: 8: assembler, {7}, object, (host-sycl) // CHK-ADD-TARGETS-REG: 9: linker, {8}, image, (host-sycl) -// CHK-ADD-TARGETS-REG: 10: compiler, {3}, ir, (device-sycl) -// CHK-ADD-TARGETS-REG: 11: linker, {10}, ir, (device-sycl) -// CHK-ADD-TARGETS-REG: 12: sycl-post-link, {11}, tempfiletable, (device-sycl) -// CHK-ADD-TARGETS-REG: 13: file-table-tform, {12}, tempfilelist, (device-sycl) -// CHK-ADD-TARGETS-REG: 14: llvm-spirv, {13}, tempfilelist, (device-sycl) -// CHK-ADD-TARGETS-REG: 15: file-table-tform, {12, 14}, tempfiletable, (device-sycl) -// CHK-ADD-TARGETS-REG: 16: clang-offload-wrapper, {15}, object, (device-sycl) -// CHK-ADD-TARGETS-REG: 17: input, "dummy.spv", sycl-fatbin, (device-sycl) -// CHK-ADD-TARGETS-REG: 18: clang-offload-wrapper, {17}, object, (device-sycl) -// CHK-ADD-TARGETS-REG: 19: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {16}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, image +// CHK-ADD-TARGETS-REG: 10: linker, {4}, ir, (device-sycl) +// CHK-ADD-TARGETS-REG: 11: sycl-post-link, {10}, tempfiletable, (device-sycl) +// CHK-ADD-TARGETS-REG: 12: file-table-tform, {11}, tempfilelist, (device-sycl) +// CHK-ADD-TARGETS-REG: 13: llvm-spirv, {12}, tempfilelist, (device-sycl) +// CHK-ADD-TARGETS-REG: 14: file-table-tform, {11, 13}, tempfiletable, (device-sycl) +// CHK-ADD-TARGETS-REG: 15: clang-offload-wrapper, {14}, object, (device-sycl) +// CHK-ADD-TARGETS-REG: 16: input, "dummy.spv", sycl-fatbin, (device-sycl) +// CHK-ADD-TARGETS-REG: 17: clang-offload-wrapper, {16}, object, (device-sycl) +// CHK-ADD-TARGETS-REG: 18: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {15}, "device-sycl (spir64-unknown-unknown-sycldevice)" {17}, image /// ########################################################################### @@ -540,8 +533,8 @@ // CHK-ADD-TARGETS-REG-MUL: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-ADD-TARGETS-REG-MUL: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-ADD-TARGETS-REG-MUL: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-ADD-TARGETS-REG-MUL: 4: compiler, {3}, sycl-header, (device-sycl) -// CHK-ADD-TARGETS-REG-MUL: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64{{.*}}-unknown-unknown-sycldevice)" {4}, c++-cpp-output +// CHK-ADD-TARGETS-REG-MUL: 4: compiler, {3}, ir, (device-sycl) +// CHK-ADD-TARGETS-REG-MUL: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-ADD-TARGETS-REG-MUL: 6: compiler, {5}, ir, (host-sycl) // CHK-ADD-TARGETS-REG-MUL: 7: backend, {6}, assembler, (host-sycl) // CHK-ADD-TARGETS-REG-MUL: 8: assembler, {7}, object, (host-sycl) @@ -620,25 +613,24 @@ // CHK-PHASES-AOT: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASES-AOT: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASES-AOT: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-PHASES-AOT: 4: compiler, {3}, sycl-header, (device-sycl) -// CHK-PHASES-FPGA: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {4}, c++-cpp-output +// CHK-PHASES-AOT: 4: compiler, {3}, ir, (device-sycl) // CHK-PHASES-GEN: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES-CPU: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_x86_64-unknown-unknown-sycldevice)" {4}, c++-cpp-output +// CHK-PHASES-FPGA: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASES-AOT: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASES-AOT: 7: backend, {6}, assembler, (host-sycl) // CHK-PHASES-AOT: 8: assembler, {7}, object, (host-sycl) // CHK-PHASES-AOT: 9: linker, {8}, image, (host-sycl) -// CHK-PHASES-AOT: 10: compiler, {3}, ir, (device-sycl) -// CHK-PHASES-AOT: 11: linker, {10}, ir, (device-sycl) -// CHK-PHASES-AOT: 12: sycl-post-link, {11}, ir, (device-sycl) -// CHK-PHASES-AOT: 13: llvm-spirv, {12}, spirv, (device-sycl) -// CHK-PHASES-CPU: 14: backend-compiler, {13}, image, (device-sycl) -// CHK-PHASES-GEN: 14: backend-compiler, {13}, image, (device-sycl) -// CHK-PHASES-FPGA: 14: backend-compiler, {13}, fpga_aocx, (device-sycl) -// CHK-PHASES-AOT: 15: clang-offload-wrapper, {14}, object, (device-sycl) -// CHK-PHASES-FPGA: 16: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {15}, image -// CHK-PHASES-GEN: 16: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {15}, image -// CHK-PHASES-CPU: 16: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_x86_64-unknown-unknown-sycldevice)" {15}, image +// CHK-PHASES-AOT: 10: linker, {4}, ir, (device-sycl) +// CHK-PHASES-AOT: 11: sycl-post-link, {10}, ir, (device-sycl) +// CHK-PHASES-AOT: 12: llvm-spirv, {11}, spirv, (device-sycl) +// CHK-PHASES-FPGA: 13: backend-compiler, {12}, fpga_aocx, (device-sycl) +// CHK-PHASES-CPU: 13: backend-compiler, {12}, image, (device-sycl) +// CHK-PHASES-GEN: 13: backend-compiler, {12}, image, (device-sycl) +// CHK-PHASES-AOT: 14: clang-offload-wrapper, {13}, object, (device-sycl) +// CHK-PHASES-FPGA: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {14}, image +// CHK-PHASES-GEN: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {14}, image +// CHK-PHASES-CPU: 15: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64_x86_64-unknown-unknown-sycldevice)" {14}, image /// ########################################################################### @@ -667,7 +659,11 @@ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU -// CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device" {{.*}} "-o" "[[OUTPUT1:.+\.bc]]" +// CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" +// CHK-TOOLS-GEN: clang{{.*}} "-triple" "spir64_gen-unknown-unknown-sycldevice" +// CHK-TOOLS-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown-sycldevice" +// CHK-TOOLS-AOT: "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" +// CHK-TOOLS-AOTx: "-o" "[[OUTPUT1:.+\.bc]]" // CHK-TOOLS-AOT: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2:.+\.bc]]" // CHK-TOOLS-AOT: sycl-post-link{{.*}} "-o" "[[OUTPUT2_1:.+\.bc]]" "[[OUTPUT2]]" // CHK-TOOLS-CPU: llvm-spirv{{.*}} "-o" "[[OUTPUT3:.+\.spv]]" "-spirv-max-version=1.3" "-spirv-debug-info-version=legacy" "-spirv-allow-extra-diexpressions" "-spirv-ext=+all,-SPV_INTEL_usm_storage_classes,-SPV_INTEL_optnone" "[[OUTPUT2_1]]" @@ -681,9 +677,6 @@ // CHK-TOOLS-GEN: clang-offload-wrapper{{.*}} "-o=[[OUTPUT5:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_gen{{.*}}" "-kind=sycl" "[[OUTPUT4]]" // CHK-TOOLS-CPU: clang-offload-wrapper{{.*}} "-o=[[OUTPUT5:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_x86_64{{.*}}" "-kind=sycl" "[[OUTPUT4]]" // CHK-TOOLS-AOT: llc{{.*}} "-filetype=obj" "-o" "[[OUTPUT6:.+\.o]]" "[[OUTPUT5]]" -// CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-D__ENABLE_USM_ADDR_SPACE__" "-faddrsig" -// CHK-TOOLS-GEN: clang{{.*}} "-triple" "spir64_gen-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig" -// CHK-TOOLS-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig" // CHK-TOOLS-AOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT7:.+\.o]]" // CHK-TOOLS-AOT: ld{{.*}} "[[OUTPUT7]]" "[[OUTPUT6]]" {{.*}} "-lsycl" @@ -792,13 +785,13 @@ /// ########################################################################### /// offload with multiple targets, including AOT -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64-unknown-unknown-sycldevice,spir64_fpga-unknown-unknown-sycldevice,spir64_gen-unknown-unknown-sycldevice -### -ccc-print-phases %s 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64-unknown-unknown-sycldevice,spir64_fpga-unknown-unknown-sycldevice,spir64_gen-unknown-unknown-sycldevice -ccc-print-phases %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-PHASE-MULTI-TARG %s // CHK-PHASE-MULTI-TARG: 0: input, "[[INPUT:.+\.c]]", c++, (host-sycl) // CHK-PHASE-MULTI-TARG: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) // CHK-PHASE-MULTI-TARG: 2: input, "[[INPUT]]", c++, (device-sycl) // CHK-PHASE-MULTI-TARG: 3: preprocessor, {2}, c++-cpp-output, (device-sycl) -// CHK-PHASE-MULTI-TARG: 4: compiler, {3}, sycl-header, (device-sycl) +// CHK-PHASE-MULTI-TARG: 4: compiler, {3}, ir, (device-sycl) // CHK-PHASE-MULTI-TARG: 5: offload, "host-sycl (x86_64-unknown-linux-gnu)" {1}, "device-sycl (spir64-unknown-unknown-sycldevice)" {4}, c++-cpp-output // CHK-PHASE-MULTI-TARG: 6: compiler, {5}, ir, (host-sycl) // CHK-PHASE-MULTI-TARG: 7: backend, {6}, assembler, (host-sycl) @@ -821,13 +814,12 @@ // CHK-PHASE-MULTI-TARG: 24: llvm-spirv, {23}, spirv, (device-sycl) // CHK-PHASE-MULTI-TARG: 25: backend-compiler, {24}, fpga_aocx, (device-sycl) // CHK-PHASE-MULTI-TARG: 26: clang-offload-wrapper, {25}, object, (device-sycl) -// CHK-PHASE-MULTI-TARG: 27: compiler, {3}, ir, (device-sycl) -// CHK-PHASE-MULTI-TARG: 28: linker, {27}, ir, (device-sycl) -// CHK-PHASE-MULTI-TARG: 29: sycl-post-link, {28}, ir, (device-sycl) -// CHK-PHASE-MULTI-TARG: 30: llvm-spirv, {29}, spirv, (device-sycl) -// CHK-PHASE-MULTI-TARG: 31: backend-compiler, {30}, image, (device-sycl) -// CHK-PHASE-MULTI-TARG: 32: clang-offload-wrapper, {31}, object, (device-sycl) -// CHK-PHASE-MULTI-TARG: 33: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {26}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {32}, image +// CHK-PHASE-MULTI-TARG: 27: linker, {4}, ir, (device-sycl) +// CHK-PHASE-MULTI-TARG: 28: sycl-post-link, {27}, ir, (device-sycl) +// CHK-PHASE-MULTI-TARG: 29: llvm-spirv, {28}, spirv, (device-sycl) +// CHK-PHASE-MULTI-TARG: 30: backend-compiler, {29}, image, (device-sycl) +// CHK-PHASE-MULTI-TARG: 31: clang-offload-wrapper, {30}, object, (device-sycl) +// CHK-PHASE-MULTI-TARG: 32: offload, "host-sycl (x86_64-unknown-linux-gnu)" {9}, "device-sycl (spir64-unknown-unknown-sycldevice)" {18}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {26}, "device-sycl (spir64_gen-unknown-unknown-sycldevice)" {31}, image /// ########################################################################### /// Verify that -save-temps does not crash @@ -836,7 +828,7 @@ // RUN: %clangxx -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64-unknown-unknown-sycldevice -target x86_64-unknown-linux-gnu -save-temps %s -### 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHK-FSYCL-SAVE-TEMPS,CHK-FSYCL-SAVE-TEMPS-CONFL // CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-o" "[[DEVICE_BASE_NAME:[a-z0-9-]+]].ii" -// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-o" "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].ii" +// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[HEADER_NAME:.+\.h]]{{.*}} "-o" "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].ii" // CHK-FSYCL-SAVE-TEMPS: llvm-link{{.*}} "[[DEVICE_BASE_NAME]].bc"{{.*}} "-o" "[[LINKED_DEVICE_BC:.*\.bc]]" // CHK-FSYCL-SAVE-TEMPS-CONFL-NOT: "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].bc" // CHK-FSYCL-SAVE-TEMPS: sycl-post-link{{.*}} "-o" "[[DEVICE_BASE_NAME]].table" "[[LINKED_DEVICE_BC]]" @@ -847,8 +839,7 @@ // CHK-FSYCL-SAVE-TEMPS-CONFL-NOT: "-o" "[[DEVICE_BASE_NAME]].table"{{.*}} "[[DEVICE_BASE_NAME]].table" // CHK-FSYCL-SAVE-TEMPS: clang-offload-wrapper{{.*}} "-o=[[WRAPPER_TEMPFILE_NAME:.+]].bc"{{.*}} "-batch" "[[PRE_WRAPPER_TABLE]]" // CHK-FSYCL-SAVE-TEMPS: llc{{.*}} "-o" "[[DEVICE_OBJ_NAME:.*\.o]]"{{.*}} "[[WRAPPER_TEMPFILE_NAME]].bc" -// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[DEVICE_BASE_NAME]].h"{{.*}} "[[DEVICE_BASE_NAME]].ii" -// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-include" "[[DEVICE_BASE_NAME]].h"{{.*}} "-fsycl-is-host"{{.*}} "-o" "[[HOST_BASE_NAME:[a-z0-9_-]+]].ii" +// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-include" "[[HEADER_NAME]]"{{.*}} "-fsycl-is-host"{{.*}} "-o" "[[HOST_BASE_NAME:[a-z0-9_-]+]].ii" // CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-o" "[[HOST_BASE_NAME:.*]].bc"{{.*}} "[[HOST_BASE_NAME]].ii" // CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-o" "[[HOST_BASE_NAME:.*]].s"{{.*}} "[[HOST_BASE_NAME]].bc" // CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-o" "[[HOST_BASE_NAME:.*]].o"{{.*}} "[[HOST_BASE_NAME]].s" @@ -857,8 +848,7 @@ /// -fsycl with /Fo testing // RUN: %clang_cl -fsycl /Fosomefile.obj -c %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=FO-CHECK %s -// FO-CHECK: clang{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" -// FO-CHECK: clang{{.*}} "-fsycl-int-header=[[HEADER:.+\.h]]" {{.*}} "-o" +// FO-CHECK: clang{{.*}} "-fsycl-int-header=[[HEADER:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // FO-CHECK: clang{{.*}} "-include" "[[HEADER]]" {{.*}} "-o" "[[OUTPUT2:.+\.obj]]" // FO-CHECK: clang-offload-bundler{{.*}} "-outputs=somefile.obj" "-inputs=[[OUTPUT1]],[[OUTPUT2]]" @@ -893,14 +883,12 @@ // RUN: %clangxx -### -c -fsycl -xc++ %s 2>&1 | FileCheck -check-prefix=CHECK-STD %s // RUN: %clang_cl -### -c -fsycl -TP %s 2>&1 | FileCheck -check-prefix=CHECK-STD %s // CHECK-STD: clang{{.*}} "-emit-llvm-bc" {{.*}} "-std=c++17" -// CHECK-STD: clang{{.*}} "-fsyntax-only" {{.*}} "-std=c++17" // CHECK-STD: clang{{.*}} "-emit-obj" {{.*}} "-std=c++17" // -std=c++17 override check // RUN: %clangxx -### -c -fsycl -std=c++14 -xc++ %s 2>&1 | FileCheck -check-prefix=CHECK-STD-OVR %s // RUN: %clang_cl -### -c -fsycl /std:c++14 -TP %s 2>&1 | FileCheck -check-prefix=CHECK-STD-OVR %s // CHECK-STD-OVR: clang{{.*}} "-emit-llvm-bc" {{.*}} "-std=c++14" -// CHECK-STD-OVR: clang{{.*}} "-fsyntax-only" {{.*}} "-std=c++14" // CHECK-STD-OVR: clang{{.*}} "-emit-obj" {{.*}} "-std=c++14" // CHECK-STD-OVR-NOT: clang{{.*}} "-std=c++17" From 2bae7b41e494b6aa3374aed7fd0b145ce383480a Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 2 Apr 2021 17:49:52 -0700 Subject: [PATCH 2/4] Address review comment and update failing tests stdcpp_compat.cpp was malformed with the options used layout_accessors_host.cpp was expecting output from 3 compilations, which is now down to 2. --- clang/include/clang/Driver/Driver.h | 4 ++-- clang/lib/Driver/ToolChains/Clang.cpp | 11 ++++++----- sycl/test/abi/layout_accessors_host.cpp | 2 +- sycl/test/basic_tests/stdcpp_compat.cpp | 6 +++--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 2108bb496c002..6f1636561c0b5 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -651,7 +651,7 @@ class Driver { /// A list of inputs and their corresponding integration headers. These /// files are generated during the device compilation and are consumed /// by the host compilation. - mutable llvm::StringMap IntegrationFileList; + mutable llvm::StringMap IntegrationFileList; public: /// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and @@ -697,7 +697,7 @@ class Driver { IntegrationFileList.insert({FileName, IntHeaderName}); } /// getIntegrationHeader - Get the integration header file - const char *getIntegrationHeader(const std::string &FileName) const { + StringRef getIntegrationHeader(const std::string &FileName) const { return IntegrationFileList[FileName]; } }; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index d8a15669dce3d..4c09402e0c5a3 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6622,15 +6622,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // performing the host side compilation. if (!IsSYCLOffloadDevice) { // Add the integration header option to generate the header. - const char *Header = D.getIntegrationHeader(Input.getBaseInput()); + StringRef Header = D.getIntegrationHeader(Input.getBaseInput()); if (types::getPreprocessedType(InputType) != types::TY_INVALID && - Header) { + !Header.empty()) { CmdArgs.push_back("-include"); - CmdArgs.push_back(Header); + CmdArgs.push_back(Args.MakeArgString(Header)); // When creating dependency information, filter out the generated // header file. CmdArgs.push_back("-dependency-filter"); - CmdArgs.push_back(Header); + CmdArgs.push_back(Args.MakeArgString(Header)); } // Let the FE know we are doing a SYCL offload compilation, but we are // doing the host pass. @@ -6653,7 +6653,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } if (IsSYCLOffloadDevice) { // Add the integration header option to generate the header. - if (const char *Header = D.getIntegrationHeader(Input.getBaseInput())) { + StringRef Header(D.getIntegrationHeader(Input.getBaseInput())); + if (!Header.empty()) { SmallString<128> HeaderOpt("-fsycl-int-header="); HeaderOpt.append(Header); CmdArgs.push_back(Args.MakeArgString(HeaderOpt)); diff --git a/sycl/test/abi/layout_accessors_host.cpp b/sycl/test/abi/layout_accessors_host.cpp index 5001390040f04..e9225b58f07e4 100644 --- a/sycl/test/abi/layout_accessors_host.cpp +++ b/sycl/test/abi/layout_accessors_host.cpp @@ -56,7 +56,7 @@ void hostAcc(accessor A (void)Acc.get_size(); } -// CHECK-COUNT-3: 0 | class sycl::accessor +// CHECK-COUNT-2: 0 | class sycl::accessor // CHECK-NEXT: 0 | class sycl::detail::AccessorBaseHost (base) // CHECK-NEXT: 0 | class std::shared_ptr impl // CHECK-NEXT: 0 | class std::__shared_ptr (base) diff --git a/sycl/test/basic_tests/stdcpp_compat.cpp b/sycl/test/basic_tests/stdcpp_compat.cpp index 33852c8bfcff5..87db5f4c51a8c 100644 --- a/sycl/test/basic_tests/stdcpp_compat.cpp +++ b/sycl/test/basic_tests/stdcpp_compat.cpp @@ -1,7 +1,7 @@ // RUN: %clangxx -fsycl -fsyntax-only -Xclang -verify -Xclang -verify-ignore-unexpected=note,warning %s -c -o %t.out -// RUN: %clangxx -std=c++14 -fsyntax-only -Xclang -verify -I %sycl_include -Xclang -verify-ignore-unexpected=note,warning %s -o -c %t.out -// RUN: %clangxx -std=c++17 -fsyntax-only -Xclang -verify -I %sycl_include -Xclang -verify-ignore-unexpected=note,warning %s -o -c %t.out -// RUN: %clangxx -std=c++20 -fsyntax-only -Xclang -verify -I %sycl_include -Xclang -verify-ignore-unexpected=note,warning %s -o -c %t.out +// RUN: %clangxx -std=c++14 -fsyntax-only -Xclang -verify -I %sycl_include -Xclang -verify-ignore-unexpected=note,warning %s -c -o %t.out +// RUN: %clangxx -std=c++17 -fsyntax-only -Xclang -verify -I %sycl_include -Xclang -verify-ignore-unexpected=note,warning %s -c -o %t.out +// RUN: %clangxx -std=c++20 -fsyntax-only -Xclang -verify -I %sycl_include -Xclang -verify-ignore-unexpected=note,warning %s -c -o %t.out // expected-no-diagnostics #include From b4ae4ce7b854b35473d9fc1d80f718188edd63a2 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Mon, 5 Apr 2021 10:22:17 -0700 Subject: [PATCH 3/4] Address review comments using StringRef --- clang/include/clang/Driver/Driver.h | 5 ++--- clang/lib/Driver/Driver.cpp | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 6f1636561c0b5..6d7f148bc0ac2 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -692,12 +692,11 @@ class Driver { /// addIntegrationFiles - Add the integration files that will be populated /// by the device compilation and used by the host compile. - void addIntegrationFiles(const char *IntHeaderName, - const std::string &FileName) const { + void addIntegrationFiles(StringRef IntHeaderName, StringRef FileName) const { IntegrationFileList.insert({FileName, IntHeaderName}); } /// getIntegrationHeader - Get the integration header file - StringRef getIntegrationHeader(const std::string &FileName) const { + StringRef getIntegrationHeader(StringRef FileName) const { return IntegrationFileList[FileName]; } }; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 183a11e357108..c1b42c9273e9e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5116,7 +5116,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, std::string SrcFileName(I.second->getAsString(Args)); std::string TmpFileNameHeader = C.getDriver().GetTemporaryPath( llvm::sys::path::stem(SrcFileName + "-header"), "h"); - const char *TmpFileHeader = + StringRef TmpFileHeader = C.addTempFile(C.getArgs().MakeArgString(TmpFileNameHeader)); addIntegrationFiles(TmpFileHeader, SrcFileName); } From d26d93a2192c2e36b022c864605ad47e7634c31a Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Tue, 6 Apr 2021 09:47:48 -0700 Subject: [PATCH 4/4] Address review comments for test improvement --- clang/lib/Driver/Driver.cpp | 2 +- clang/test/Driver/sycl-offload-with-split.c | 2 +- clang/test/Driver/sycl-offload.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index c1b42c9273e9e..45f3efae0fcd0 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5115,7 +5115,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, continue; std::string SrcFileName(I.second->getAsString(Args)); std::string TmpFileNameHeader = C.getDriver().GetTemporaryPath( - llvm::sys::path::stem(SrcFileName + "-header"), "h"); + llvm::sys::path::stem(SrcFileName).str() + "-header", "h"); StringRef TmpFileHeader = C.addTempFile(C.getArgs().MakeArgString(TmpFileNameHeader)); addIntegrationFiles(TmpFileHeader, SrcFileName); diff --git a/clang/test/Driver/sycl-offload-with-split.c b/clang/test/Driver/sycl-offload-with-split.c index b16e350ec0a96..4975b6983f793 100644 --- a/clang/test/Driver/sycl-offload-with-split.c +++ b/clang/test/Driver/sycl-offload-with-split.c @@ -196,7 +196,7 @@ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-device-code-split -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU -// CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" +// CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\-header.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // CHK-TOOLS-AOT: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2:.+\.bc]]" // CHK-TOOLS-AOT: sycl-post-link{{.*}} "-split=auto" {{.*}} "-spec-const=default" "-o" "[[OUTPUT3:.+\.table]]" "[[OUTPUT2]]" // CHK-TOOLS-AOT: file-table-tform{{.*}} "-o" "[[OUTPUT4:.+\.txt]]" "[[OUTPUT3]]" diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index bf4c9bf9f6146..7d338f7932c4e 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -198,7 +198,7 @@ /// Check the compilation flow to verify that the integrated header is filtered // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -c %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHK-INT-HEADER -// CHK-INT-HEADER: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" +// CHK-INT-HEADER: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\-header.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // CHK-INT-HEADER: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" "-dependency-filter" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT2:.+.o]]" // CHK-INT-HEADER: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64-unknown-unknown-sycldevice,host-x86_64-unknown-linux-gnu" {{.*}} "-inputs=[[OUTPUT1]],[[OUTPUT2]]" @@ -663,7 +663,7 @@ // CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" // CHK-TOOLS-GEN: clang{{.*}} "-triple" "spir64_gen-unknown-unknown-sycldevice" // CHK-TOOLS-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown-sycldevice" -// CHK-TOOLS-AOT: "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" +// CHK-TOOLS-AOT: "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[INPUT1:.+\-header.+\.h]]"{{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // CHK-TOOLS-AOTx: "-o" "[[OUTPUT1:.+\.bc]]" // CHK-TOOLS-AOT: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2:.+\.bc]]" // CHK-TOOLS-AOT: sycl-post-link{{.*}} "-o" "[[OUTPUT2_1:.+\.bc]]" "[[OUTPUT2]]" @@ -829,7 +829,7 @@ // RUN: %clangxx -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64-unknown-unknown-sycldevice -target x86_64-unknown-linux-gnu -save-temps %s -### 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHK-FSYCL-SAVE-TEMPS,CHK-FSYCL-SAVE-TEMPS-CONFL // CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-o" "[[DEVICE_BASE_NAME:[a-z0-9-]+]].ii" -// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[HEADER_NAME:.+\.h]]{{.*}} "-o" "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].ii" +// CHK-FSYCL-SAVE-TEMPS: clang{{.*}} "-fsycl-is-device"{{.*}} "-fsycl-int-header=[[HEADER_NAME:.+\-header.+\.h]]{{.*}} "-o" "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].ii" // CHK-FSYCL-SAVE-TEMPS: llvm-link{{.*}} "[[DEVICE_BASE_NAME]].bc"{{.*}} "-o" "[[LINKED_DEVICE_BC:.*\.bc]]" // CHK-FSYCL-SAVE-TEMPS-CONFL-NOT: "[[DEVICE_BASE_NAME]].bc"{{.*}} "[[DEVICE_BASE_NAME]].bc" // CHK-FSYCL-SAVE-TEMPS: sycl-post-link{{.*}} "-o" "[[DEVICE_BASE_NAME]].table" "[[LINKED_DEVICE_BC]]"