From 1e3124c9aee71aac51cef4db13b10a7112466629 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Thu, 5 Mar 2020 11:53:33 -0800 Subject: [PATCH 1/4] [Driver][SYCL][FPGA] Adjust the output location for the project report When no output specifier is given on the command line, create the output project report location in the $CWD as opposed to matching the source location if it was specified with a directory. Signed-off-by: Michael D Toguchi --- clang/lib/Driver/ToolChains/SYCL.cpp | 11 ++++++++--- clang/test/Driver/sycl-offload-intelfpga.cpp | 10 ++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index ebe4aeb024eee..4564f18ffd619 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -278,9 +278,14 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C, if (Ty == types::TY_INVALID) continue; if (types::isSrcFile(Ty) || Ty == types::TY_Object) { - llvm::sys::path::replace_extension(AN, "prj"); - ReportOptArg += Args.MakeArgString(AN); - break; + // Output is based on the filename only so strip off any directory + // information if provided with the source/object file. + AN = llvm::sys::path::filename(AN); + if (!AN.empty()) { + llvm::sys::path::replace_extension(AN, "prj"); + ReportOptArg += Args.MakeArgString(AN); + break; + } } } } diff --git a/clang/test/Driver/sycl-offload-intelfpga.cpp b/clang/test/Driver/sycl-offload-intelfpga.cpp index abf49128d948f..e8d1176820250 100644 --- a/clang/test/Driver/sycl-offload-intelfpga.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga.cpp @@ -171,6 +171,16 @@ // RUN: | FileCheck -DOUTDIR=%t_dir -check-prefix=CHK-FPGA-REPORT-OPT %s // CHK-FPGA-REPORT-OPT: aoc{{.*}} "-sycl" {{.*}} "-output-report-folder=[[OUTDIR]]{{/|\\\\}}file.prj" +/// -fintelfpga output report file from dir/source +// RUN: mkdir -p %t_dir +// RUN: touch %t_dir/dummy.cpp +// RUN: %clangxx -### -fsycl -fintelfpga %t_dir/dummy.cpp 2>&1 \ +// RUN: | FileCheck -DOUTDIR=%t_dir -check-prefix=CHK-FPGA-REPORT-OPT2 %s +// RUN: %clang_cl -### -fsycl -fintelfpga %t_dir/dummy.cpp 2>&1 \ +// RUN: | FileCheck -DOUTDIR=%t_dir -check-prefix=CHK-FPGA-REPORT-OPT2 %s +// CHK-FPGA-REPORT-OPT2: aoc{{.*}} "-sycl" {{.*}} "-output-report-folder=dummy.prj" +// CHK-FPGA-REPORT-OPT2-NOT: aoc{{.*}} "-sycl" {{.*}} "-output-report-folder=[[OUTDIR]]{{.*}}" + /// -fintelfpga static lib (aoco) // RUN: echo "Dummy AOCO image" > %t.aoco // RUN: echo "void foo() {}" > %t.c From c1794ed4cbbf7b6137b3e942d11260555de278ba Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Tue, 10 Mar 2020 17:03:54 -0700 Subject: [PATCH 2/4] [Driver] Address review comments, improved var names and arg checks Signed-off-by: Michael D Toguchi --- clang/lib/Driver/ToolChains/SYCL.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 4564f18ffd619..aa63a6545a5c4 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -271,19 +271,20 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C, } else { // Output directory is based off of the first object name for (Arg * Cur : Args) { - SmallString<128> AN = Cur->getSpelling(); - StringRef Ext(llvm::sys::path::extension(AN)); - if (!Ext.empty()) { - types::ID Ty = getToolChain().LookupTypeForExtension(Ext.drop_front()); - if (Ty == types::TY_INVALID) - continue; - if (types::isSrcFile(Ty) || Ty == types::TY_Object) { - // Output is based on the filename only so strip off any directory - // information if provided with the source/object file. - AN = llvm::sys::path::filename(AN); - if (!AN.empty()) { - llvm::sys::path::replace_extension(AN, "prj"); - ReportOptArg += Args.MakeArgString(AN); + if (Cur->getOption().getKind() == Option::InputClass) { + SmallString<128> ArgName = Cur->getSpelling(); + StringRef Ext(llvm::sys::path::extension(ArgName)); + if (!Ext.empty()) { + types::ID Ty = + getToolChain().LookupTypeForExtension(Ext.drop_front()); + if (Ty == types::TY_INVALID) + continue; + if (types::isSrcFile(Ty) || Ty == types::TY_Object) { + // Project report should be saved into CWD, so strip off any + // directory information if provided with the input file. + ArgName = llvm::sys::path::filename(ArgName); + llvm::sys::path::replace_extension(ArgName, "prj"); + ReportOptArg += Args.MakeArgString(ArgName); break; } } From 765d88a78127543be2a4f7bfae468d21db6f2300 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Wed, 11 Mar 2020 09:15:56 -0700 Subject: [PATCH 3/4] [NFC] remove unneeded invalid type check Signed-off-by: Michael D Toguchi --- clang/lib/Driver/ToolChains/SYCL.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index aa63a6545a5c4..ffa7935b56a3b 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -277,8 +277,6 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C, if (!Ext.empty()) { types::ID Ty = getToolChain().LookupTypeForExtension(Ext.drop_front()); - if (Ty == types::TY_INVALID) - continue; if (types::isSrcFile(Ty) || Ty == types::TY_Object) { // Project report should be saved into CWD, so strip off any // directory information if provided with the input file. From 09689dd93e58794e97952373ac726c800f7b29bc Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Wed, 11 Mar 2020 11:28:55 -0700 Subject: [PATCH 4/4] [NFC] Applied suggested changes, and add back in invalid type check Invalid type check needed as the check was for an extension type and not directly associated with the validity of it being an input. Signed-off-by: Michael D Toguchi --- clang/lib/Driver/ToolChains/SYCL.cpp | 31 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index ffa7935b56a3b..d3cc294078099 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -271,21 +271,22 @@ void SYCL::fpga::BackendCompiler::ConstructJob(Compilation &C, } else { // Output directory is based off of the first object name for (Arg * Cur : Args) { - if (Cur->getOption().getKind() == Option::InputClass) { - SmallString<128> ArgName = Cur->getSpelling(); - StringRef Ext(llvm::sys::path::extension(ArgName)); - if (!Ext.empty()) { - types::ID Ty = - getToolChain().LookupTypeForExtension(Ext.drop_front()); - if (types::isSrcFile(Ty) || Ty == types::TY_Object) { - // Project report should be saved into CWD, so strip off any - // directory information if provided with the input file. - ArgName = llvm::sys::path::filename(ArgName); - llvm::sys::path::replace_extension(ArgName, "prj"); - ReportOptArg += Args.MakeArgString(ArgName); - break; - } - } + if (Cur->getOption().getKind() != Option::InputClass) + continue; + SmallString<128> ArgName = Cur->getSpelling(); + StringRef Ext(llvm::sys::path::extension(ArgName)); + if (Ext.empty()) + continue; + types::ID Ty = getToolChain().LookupTypeForExtension(Ext.drop_front()); + if (Ty == types::TY_INVALID) + continue; + if (types::isSrcFile(Ty) || Ty == types::TY_Object) { + // Project report should be saved into CWD, so strip off any + // directory information if provided with the input file. + ArgName = llvm::sys::path::filename(ArgName); + llvm::sys::path::replace_extension(ArgName, "prj"); + ReportOptArg += Args.MakeArgString(ArgName); + break; } } }