https://github.com/nilanjana87 updated https://github.com/llvm/llvm-project/pull/145957
>From f0893f3b64661fc5a6ab39e7bdcc86a9142221a1 Mon Sep 17 00:00:00 2001 From: Nilanjana Basu <n_b...@apple.com> Date: Thu, 26 Jun 2025 11:54:14 -0700 Subject: [PATCH 1/3] [Clang][Driver][SamplePGO] Enable -fsample-profile-use-profi for SamplePGO in clang --- clang/include/clang/Driver/Options.td | 2 ++ clang/lib/Driver/ToolChains/Clang.cpp | 3 ++- clang/test/Driver/pgo-sample-use-profi.c | 19 +++++++++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 0822df2640d23..ef6bcfe296a80 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1698,6 +1698,8 @@ def fsample_profile_use_profi : Flag<["-"], "fsample-profile-use-profi">, basic block counts to branch probabilities to fix them by extended and re-engineered classic MCMF (min-cost max-flow) approach.}]>; def fno_profile_sample_accurate : Flag<["-"], "fno-profile-sample-accurate">, Group<f_Group>; +def fno_sample_profile_use_profi : Flag<["-"], "fno-sample-profile-use-profi">, + Group<f_Group>; def fno_auto_profile : Flag<["-"], "fno-auto-profile">, Group<f_Group>, Alias<fno_profile_sample_use>; def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 8a18865b899d2..7898c0a6a899c 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6283,7 +6283,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.AddLastArg(CmdArgs, options::OPT_fclang_abi_compat_EQ); if (getLastProfileSampleUseArg(Args) && - Args.hasArg(options::OPT_fsample_profile_use_profi)) { + Args.hasFlag(options::OPT_fsample_profile_use_profi, + options::OPT_fno_sample_profile_use_profi, true)) { CmdArgs.push_back("-mllvm"); CmdArgs.push_back("-sample-profile-use-profi"); } diff --git a/clang/test/Driver/pgo-sample-use-profi.c b/clang/test/Driver/pgo-sample-use-profi.c index 0370d947ce590..9d7c7af983508 100644 --- a/clang/test/Driver/pgo-sample-use-profi.c +++ b/clang/test/Driver/pgo-sample-use-profi.c @@ -1,4 +1,19 @@ -/// Test if profi flat is enabled in frontend as user-facing feature. -// RUN: %clang --target=x86_64 -c -fsample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s +/// Ensure that profi flag is enabled by default in frontend for SamplePGO + +// Target specific checks: +// RUN: %clang --target=x86_64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s +// RUN: %clang --target=AArch64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s + +// Target agnostic checks: +// RUN: %clang -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s +// RUN: %clang -c -fsample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s +// RUN: %clang -c -fno-sample-profile-use-profi -fsample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s + +// Cases where profi flag is disabled: +// RUN: %clang -c -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI +// RUN: %clang -c -fno-sample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI +// RUN: %clang -c -fsample-profile-use-profi -fno-sample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI + // CHECK: "-mllvm" "-sample-profile-use-profi" +// CHECK-NO-PROFI-NOT: "-sample-profile-use-profi" >From c683445558e766964ded16fbafc963c9f02edbd8 Mon Sep 17 00:00:00 2001 From: Nilanjana Basu <n_b...@apple.com> Date: Tue, 1 Jul 2025 15:56:51 -0700 Subject: [PATCH 2/3] part 1: introducing -fno_sample_profile_use_profi flag Breaking down the patch into 2 parts: Keeping part1: introducing -fno_sample_profile_use_profi flag Reverting part2: enabling -fsample_profile_use_profi flag by default --- clang/lib/Driver/ToolChains/Clang.cpp | 2 +- clang/test/Driver/pgo-sample-use-profi.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 7898c0a6a899c..bfc731a1d113a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6284,7 +6284,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (getLastProfileSampleUseArg(Args) && Args.hasFlag(options::OPT_fsample_profile_use_profi, - options::OPT_fno_sample_profile_use_profi, true)) { + options::OPT_fno_sample_profile_use_profi, false)) { CmdArgs.push_back("-mllvm"); CmdArgs.push_back("-sample-profile-use-profi"); } diff --git a/clang/test/Driver/pgo-sample-use-profi.c b/clang/test/Driver/pgo-sample-use-profi.c index 9d7c7af983508..81cef58cff6b5 100644 --- a/clang/test/Driver/pgo-sample-use-profi.c +++ b/clang/test/Driver/pgo-sample-use-profi.c @@ -1,15 +1,15 @@ /// Ensure that profi flag is enabled by default in frontend for SamplePGO // Target specific checks: -// RUN: %clang --target=x86_64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s -// RUN: %clang --target=AArch64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s +// RUN: %clang --target=x86_64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI +// RUN: %clang --target=AArch64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI // Target agnostic checks: -// RUN: %clang -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s +// RUN: %clang -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI // RUN: %clang -c -fsample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s // RUN: %clang -c -fno-sample-profile-use-profi -fsample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s -// Cases where profi flag is disabled: +// Cases where profi flag is explicitly disabled: // RUN: %clang -c -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI // RUN: %clang -c -fno-sample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI // RUN: %clang -c -fsample-profile-use-profi -fno-sample-profile-use-profi -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI >From 43b764c7ccf509220d347558adcd399f85da06b2 Mon Sep 17 00:00:00 2001 From: Nilanjana Basu <n_b...@apple.com> Date: Wed, 2 Jul 2025 12:46:10 -0700 Subject: [PATCH 3/3] nit: Updated comment --- clang/test/Driver/pgo-sample-use-profi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/test/Driver/pgo-sample-use-profi.c b/clang/test/Driver/pgo-sample-use-profi.c index 81cef58cff6b5..a8c8e81f96dcb 100644 --- a/clang/test/Driver/pgo-sample-use-profi.c +++ b/clang/test/Driver/pgo-sample-use-profi.c @@ -1,4 +1,5 @@ -/// Ensure that profi flag is enabled by default in frontend for SamplePGO +/// Test if profi flag is enabled/disabled correctly based on user-specified configuration. +/// Ensure that profi flag is disabled by default // Target specific checks: // RUN: %clang --target=x86_64 -c -fprofile-sample-use=/dev/null -### %s 2>&1 | FileCheck %s --check-prefixes=CHECK-NO-PROFI _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits