From 5d5acf4e52bf544180901b9c89a7d0956ef1b068 Mon Sep 17 00:00:00 2001 From: Premanand M Rao Date: Tue, 29 Nov 2022 11:21:15 -0800 Subject: [PATCH 1/5] [SYCL] Disable inlining kernel lambda operator at -O0 PR #6977 enabled always inliling kernel lambda operators. This PR disables this at -O0 as it was leading to a poor debugging experience. --- clang/lib/Driver/ToolChains/Clang.cpp | 8 +++++++- clang/test/Driver/sycl.c | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 94e65f55341e..4d903833d913 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5095,8 +5095,14 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-sycl-std=2020"); } + bool DisableSYCLForceInlineKernelLambda = false; + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) + DisableSYCLForceInlineKernelLambda = A->getOption().matches( + options::OPT_O0); + // At -O0, disable the inlining for debugging purposes. if (!Args.hasFlag(options::OPT_fsycl_force_inline_kernel_lambda, - options::OPT_fno_sycl_force_inline_kernel_lambda, true)) + options::OPT_fno_sycl_force_inline_kernel_lambda, + !DisableSYCLForceInlineKernelLambda)) CmdArgs.push_back("-fno-sycl-force-inline-kernel-lambda"); if (!Args.hasFlag(options::OPT_fsycl_unnamed_lambda, diff --git a/clang/test/Driver/sycl.c b/clang/test/Driver/sycl.c index ed63d4de9898..09d100d5b6b7 100644 --- a/clang/test/Driver/sycl.c +++ b/clang/test/Driver/sycl.c @@ -75,6 +75,8 @@ // -fsycl-force-inline-kernel-lambda // RUN: %clangxx -### -fsycl-device-only -fno-sycl-force-inline-kernel-lambda %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE // RUN: %clang_cl -### -fsycl-device-only -fno-sycl-force-inline-kernel-lambda %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE +// RUN: %clangxx -### -fsycl-device-only -O0 %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE +// RUN: %clang_cl -### -fsycl-device-only -Od %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE // CHECK-NOT-INLINE: "-fno-sycl-force-inline-kernel-lambda" /// -fsycl-device-only triple checks From bf5ba59a6d51bc47c35a4f565e10d2b4808f39a0 Mon Sep 17 00:00:00 2001 From: Premanand M Rao Date: Tue, 29 Nov 2022 11:30:01 -0800 Subject: [PATCH 2/5] Fix documentation to reflect this change. --- sycl/doc/UsersManual.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sycl/doc/UsersManual.md b/sycl/doc/UsersManual.md index 608e8a519210..0f57eabb32db 100644 --- a/sycl/doc/UsersManual.md +++ b/sycl/doc/UsersManual.md @@ -112,7 +112,8 @@ and not recommended to use in production environment. Enables/Disables inlining of the kernel lambda operator into the compiler generated entry point function. This flag does not apply to ESIMD kernels. - Enabled by default. + Enabled by default; disabled when optimizations are disabled (-O0 or + equivalent). **`-fgpu-inline-threshold=`** From 1e4cb972edf58ffb6ae086f584c4af19bf3ba04f Mon Sep 17 00:00:00 2001 From: Premanand M Rao Date: Wed, 30 Nov 2022 11:10:32 -0800 Subject: [PATCH 3/5] clang-format changes --- clang/lib/Driver/ToolChains/Clang.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index a748feebcb1d..3c50da82a669 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5097,8 +5097,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, bool DisableSYCLForceInlineKernelLambda = false; if (Arg *A = Args.getLastArg(options::OPT_O_Group)) - DisableSYCLForceInlineKernelLambda = A->getOption().matches( - options::OPT_O0); + DisableSYCLForceInlineKernelLambda = + A->getOption().matches(options::OPT_O0); // At -O0, disable the inlining for debugging purposes. if (!Args.hasFlag(options::OPT_fsycl_force_inline_kernel_lambda, options::OPT_fno_sycl_force_inline_kernel_lambda, From 4c0a5021d2939809e7e403764485f47f2e902f7a Mon Sep 17 00:00:00 2001 From: Premanand M Rao Date: Thu, 1 Dec 2022 09:04:27 -0800 Subject: [PATCH 4/5] Address code-review comments; check at non-O0 levels --- clang/test/Driver/sycl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/test/Driver/sycl.c b/clang/test/Driver/sycl.c index 09d100d5b6b7..8f1a36d3820e 100644 --- a/clang/test/Driver/sycl.c +++ b/clang/test/Driver/sycl.c @@ -77,7 +77,10 @@ // RUN: %clang_cl -### -fsycl-device-only -fno-sycl-force-inline-kernel-lambda %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE // RUN: %clangxx -### -fsycl-device-only -O0 %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE // RUN: %clang_cl -### -fsycl-device-only -Od %s 2>&1 | FileCheck %s --check-prefix=CHECK-NOT-INLINE +// RUN: %clangxx -### -fsycl-device-only -O1 %s 2>&1 | FileCheck %s --check-prefix=CHECK-INLINE +// RUN: %clang_cl -### -fsycl-device-only -O2 %s 2>&1 | FileCheck %s --check-prefix=CHECK-INLINE // CHECK-NOT-INLINE: "-fno-sycl-force-inline-kernel-lambda" +// CHECK-INLINE-NOT: "-fno-sycl-force-inline-kernel-lambda" /// -fsycl-device-only triple checks // RUN: %clang -fsycl-device-only -target x86_64-unknown-linux-gnu -### %s 2>&1 \ From 56bc24b9631c0f4f0123fbe57f645ed33e20ebd9 Mon Sep 17 00:00:00 2001 From: Premanand M Rao Date: Fri, 2 Dec 2022 07:49:28 -0800 Subject: [PATCH 5/5] Fix doc --- sycl/doc/UsersManual.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/doc/UsersManual.md b/sycl/doc/UsersManual.md index 0f57eabb32db..4185b1538ee8 100644 --- a/sycl/doc/UsersManual.md +++ b/sycl/doc/UsersManual.md @@ -112,8 +112,8 @@ and not recommended to use in production environment. Enables/Disables inlining of the kernel lambda operator into the compiler generated entry point function. This flag does not apply to ESIMD kernels. - Enabled by default; disabled when optimizations are disabled (-O0 or - equivalent). + Disabled when optimizations are disabled (-O0 or equivalent). Enabled + otherwise. **`-fgpu-inline-threshold=`**