[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-20 Thread LLVM Continuous Integration via cfe-commits

llvm-ci wrote:

LLVM Buildbot has detected a new failure on builder 
`clang-cmake-x86_64-avx512-win` running on `avx512-intel64-win` while building 
`clang,flang` at step 4 "cmake stage 1".

Full details are available at: 
https://lab.llvm.org/buildbot/#/builders/81/builds/4943


Here is the relevant piece of the build log for the reference

```
Step 4 (cmake stage 1) failure: 'cmake -G ...' (failure)
'cmake' is not recognized as an internal or external command,
operable program or batch file.

```



https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-20 Thread David Truby via cfe-commits

https://github.com/DavidTruby closed 
https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-19 Thread Tom Eccles via cfe-commits

https://github.com/tblah approved this pull request.

LGTM, thanks!

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-18 Thread Tarun Prabhu via cfe-commits


@@ -3986,11 +3986,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {

tarunprabhu wrote:

> You'd hope that if this did change visibility for cl-mode and dxc-mode, and 
> someone was relying on it, it would break a test somewhere 😅

Hope springs eternal ... 😆 

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-18 Thread Tarun Prabhu via cfe-commits

https://github.com/tarunprabhu approved this pull request.

LGTM. Thanks.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-18 Thread Tarun Prabhu via cfe-commits

https://github.com/tarunprabhu edited 
https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-18 Thread David Truby via cfe-commits

https://github.com/DavidTruby edited 
https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-18 Thread David Truby via cfe-commits


@@ -6980,3 +6980,37 @@ void driver::applyOverrideOptions(SmallVectorImpl &Args,
   ++S;
   }
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool driver::shouldEnableVectorizerAtOLevel(const ArgList &Args,

DavidTruby wrote:

I should clarify that I decided to move them to `CommonArgs.cpp` as requested 
because these checks really are only relevant to the _compiler_ driver, and so 
shouldn't really be in the shared Frontend driver parts of `llvm`.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-18 Thread David Truby via cfe-commits


@@ -3986,11 +3986,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {

DavidTruby wrote:

The docs 
[here](https://clang.llvm.org/docs/InternalsManual.html#adding-new-command-line-option)
 say that the default visibility is _only_ `ClangOption`, so this should only 
have the effect of adding FlangOption to that. I was basing this off of that 
documentation.

You'd hope that if this did change visibility for cl-mode and dxc-mode, and 
someone was relying on it, it would break a test somewhere :sweat_smile: 

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-17 Thread Tarun Prabhu via cfe-commits


@@ -3986,11 +3986,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {

tarunprabhu wrote:

Do you know if this makes `-fvectorize` unavailable in `cl-mode` and 
`dxc-mode`? Did the previous default visibility imply `CLOption` and 
`DXCOption`? 

There was a PR some time ago where the options became unavailable for those 
drivers because of some changes to the visibility. I can't remember what the 
defaults are now, but I am on holiday today, so I can look into it when I am 
back tomorrow.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-17 Thread David Truby via cfe-commits

DavidTruby wrote:

It looks like the force push has worked this time. Sorry it took so long to do, 
I was on holiday.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-17 Thread David Truby via cfe-commits

https://github.com/DavidTruby updated 
https://github.com/llvm/llvm-project/pull/119718

>From af135a1a4156be9076931ceeb92f75171a0cb7ad Mon Sep 17 00:00:00 2001
From: David Truby 
Date: Thu, 12 Dec 2024 14:50:19 +
Subject: [PATCH] [flang] Add -f[no-]vectorize flags

---
 clang/include/clang/Driver/Options.td | 11 +--
 clang/lib/Driver/ToolChains/Clang.cpp | 33 ---
 clang/lib/Driver/ToolChains/CommonArgs.cpp| 33 +++
 clang/lib/Driver/ToolChains/CommonArgs.h  |  2 ++
 clang/lib/Driver/ToolChains/Flang.cpp | 10 ++
 .../include/flang/Frontend/CodeGenOptions.def |  1 +
 flang/lib/Frontend/CompilerInvocation.cpp |  4 +++
 flang/lib/Frontend/FrontendActions.cpp|  2 ++
 flang/test/Driver/optimization-remark.f90 | 22 ++---
 flang/test/Integration/unroll-loops.f90   |  4 +--
 flang/test/Lower/HLFIR/unroll-loops.fir   |  4 +--
 11 files changed, 75 insertions(+), 51 deletions(-)

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 5ad187926e710..6824ffb8828d4 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3986,11 +3986,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {
 def fvectorize : Flag<["-"], "fvectorize">, Group,
   HelpText<"Enable the loop vectorization passes">;
 def fno_vectorize : Flag<["-"], "fno-vectorize">, Group;
 def : Flag<["-"], "ftree-vectorize">, Alias;
 def : Flag<["-"], "fno-tree-vectorize">, Alias;
+}
+
 def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group,
   HelpText<"Enable the superword-level parallelism vectorization passes">;
 def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group;
@@ -7332,6 +7336,10 @@ def mlink_builtin_bitcode : Separate<["-"], 
"mlink-builtin-bitcode">,
 def mlink_bitcode_file
 : Separate<["-"], "mlink-bitcode-file">,
   HelpText<"Link the given bitcode file before performing optimizations.">;
+
+def vectorize_loops : Flag<["-"], "vectorize-loops">,
+  HelpText<"Run the Loop vectorization passes">,
+  MarshallingInfoFlag>;
 } // let Visibility = [CC1Option, FC1Option]
 
 let Visibility = [CC1Option] in {
@@ -7447,9 +7455,6 @@ defm link_builtin_bitcode_postopt: 
BoolMOption<"link-builtin-bitcode-postopt",
   PosFlag,
   NegFlag>;
-def vectorize_loops : Flag<["-"], "vectorize-loops">,
-  HelpText<"Run the Loop vectorization passes">,
-  MarshallingInfoFlag>;
 def vectorize_slp : Flag<["-"], "vectorize-slp">,
   HelpText<"Run the SLP vectorization passes">,
   MarshallingInfoFlag>;
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 96af466e067a8..7c50970068fa9 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -511,39 +511,6 @@ static void addCoveragePrefixMapArg(const Driver &D, const 
ArgList &Args,
   }
 }
 
-/// Vectorize at all optimization levels greater than 1 except for -Oz.
-/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
-/// enabled.
-static bool shouldEnableVectorizerAtOLevel(const ArgList &Args, bool isSlpVec) 
{
-  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
-if (A->getOption().matches(options::OPT_O4) ||
-A->getOption().matches(options::OPT_Ofast))
-  return true;
-
-if (A->getOption().matches(options::OPT_O0))
-  return false;
-
-assert(A->getOption().matches(options::OPT_O) && "Must have a -O flag");
-
-// Vectorize -Os.
-StringRef S(A->getValue());
-if (S == "s")
-  return true;
-
-// Don't vectorize -Oz, unless it's the slp vectorizer.
-if (S == "z")
-  return isSlpVec;
-
-unsigned OptLevel = 0;
-if (S.getAsInteger(10, OptLevel))
-  return false;
-
-return OptLevel > 1;
-  }
-
-  return false;
-}
-
 /// Add -x lang to \p CmdArgs for \p Input.
 static void addDashXForInput(const ArgList &Args, const InputInfo &Input,
  ArgStringList &CmdArgs) {
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 2d01943ca1ac4..1a2299a92c54e 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -3133,3 +3133,36 @@ void tools::renderCommonIntegerOverflowOptions(const 
ArgList &Args,
   if (use_fwrapv_pointer)
 CmdArgs.push_back("-fwrapv-pointer");
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool tools::shouldEnableVectorizerAtOLevel(const ArgList &Args, bool isSlpVec) 
{
+  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+if (A->getOption().matches(options::OPT_O4) ||
+A->getOption().matches(options::OPT_Ofast))
+

[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-10 Thread Tarun Prabhu via cfe-commits

tarunprabhu wrote:

I don't see a "processing updates" message, but the diffs look like the ones 
where the entire file was formatted. I'll take a look again when this gets 
sorted out.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-10 Thread via cfe-commits

jeanPerier wrote:

> A rebase to main head and force push helped in another instance of 
> "Processing updates"

I had that twice on my PRs last week. The "Processing updates" was still stuck 
after a day. A rebase and force push also "solved" the issue. I do not recall 
facing that before, maybe there is a degradation of service on Github side.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-07 Thread Slava Zakharin via cfe-commits

vzakhari wrote:

> I have force pushed this to my branch but github doesn't seem to be picking 
> it up on this review?? I don't really know how to fix this.

A rebase to main head and force push helped in another instance of "Processing 
updates"

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-06 Thread David Truby via cfe-commits

DavidTruby wrote:

I have force pushed this to my branch but github doesn't seem to be picking it 
up on this review?? I don't really know how to fix this.

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-06 Thread David Truby via cfe-commits

DavidTruby wrote:

Ugh it looks like my editor just clang-formatted everything instead of only 
changes...

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-02-06 Thread David Truby via cfe-commits

https://github.com/DavidTruby updated 
https://github.com/llvm/llvm-project/pull/119718

>From 0dc613d94560cbe4e8a57eed35d985e9d6dae752 Mon Sep 17 00:00:00 2001
From: David Truby 
Date: Thu, 12 Dec 2024 14:50:19 +
Subject: [PATCH] [flang] Add -f[no-]vectorize flags

---
 clang/include/clang/Driver/Driver.h   |  38 ++---
 clang/include/clang/Driver/Options.td |  11 +-
 clang/lib/Driver/Driver.cpp   | 133 +-
 clang/lib/Driver/ToolChains/Clang.cpp |  33 -
 clang/lib/Driver/ToolChains/CommonArgs.cpp|  87 
 clang/lib/Driver/ToolChains/CommonArgs.h  |   2 +
 clang/lib/Driver/ToolChains/Flang.cpp |  10 ++
 .../include/flang/Frontend/CodeGenOptions.def |   1 +
 flang/lib/Frontend/CompilerInvocation.cpp |   4 +
 flang/lib/Frontend/FrontendActions.cpp|   2 +
 flang/test/Driver/optimization-remark.f90 |  22 +--
 flang/test/Integration/unroll-loops.f90   |   4 +-
 flang/test/Lower/HLFIR/unroll-loops.fir   |   4 +-
 13 files changed, 175 insertions(+), 176 deletions(-)

diff --git a/clang/include/clang/Driver/Driver.h 
b/clang/include/clang/Driver/Driver.h
index f4a52cc529b79cd..bca9cfd85c367cd 100644
--- a/clang/include/clang/Driver/Driver.h
+++ b/clang/include/clang/Driver/Driver.h
@@ -55,12 +55,7 @@ class JobAction;
 class ToolChain;
 
 /// Describes the kind of LTO mode selected via -f(no-)?lto(=.*)? options.
-enum LTOKind {
-  LTOK_None,
-  LTOK_Full,
-  LTOK_Thin,
-  LTOK_Unknown
-};
+enum LTOKind { LTOK_None, LTOK_Full, LTOK_Thin, LTOK_Unknown };
 
 /// Whether headers used to construct C++20 module units should be looked
 /// up by the path supplied on the command line, or in the user or system
@@ -110,17 +105,9 @@ class Driver {
 DXCMode
   } Mode;
 
-  enum SaveTempsMode {
-SaveTempsNone,
-SaveTempsCwd,
-SaveTempsObj
-  } SaveTemps;
+  enum SaveTempsMode { SaveTempsNone, SaveTempsCwd, SaveTempsObj } SaveTemps;
 
-  enum BitcodeEmbedMode {
-EmbedNone,
-EmbedMarker,
-EmbedBitcode
-  } BitcodeEmbed;
+  enum BitcodeEmbedMode { EmbedNone, EmbedMarker, EmbedBitcode } BitcodeEmbed;
 
   enum OffloadMode {
 OffloadHostDevice,
@@ -166,9 +153,7 @@ class Driver {
   };
 
   // Diag - Forwarding function for diagnostics.
-  DiagnosticBuilder Diag(unsigned DiagID) const {
-return Diags.Report(DiagID);
-  }
+  DiagnosticBuilder Diag(unsigned DiagID) const { return Diags.Report(DiagID); 
}
 
   // FIXME: Privatize once interface is stable.
 public:
@@ -404,7 +389,6 @@ class Driver {
   SmallString<128> &CrashDiagDir);
 
 public:
-
   /// Takes the path to a binary that's either in bin/ or lib/ and returns
   /// the path to clang's resource directory.
   static std::string GetResourcesPath(StringRef BinaryPath);
@@ -419,9 +403,7 @@ class Driver {
   /// Name to use when invoking gcc/g++.
   const std::string &getCCCGenericGCCName() const { return CCCGenericGCCName; }
 
-  llvm::ArrayRef getConfigFiles() const {
-return ConfigFiles;
-  }
+  llvm::ArrayRef getConfigFiles() const { return ConfigFiles; }
 
   const llvm::opt::OptTable &getOpts() const { return getDriverOptTable(); }
 
@@ -447,9 +429,7 @@ class Driver {
   std::string getTargetTriple() const { return TargetTriple; }
 
   /// Get the path to the main clang executable.
-  const char *getClangProgramPath() const {
-return ClangExecutable.c_str();
-  }
+  const char *getClangProgramPath() const { return ClangExecutable.c_str(); }
 
   bool isSaveTempsEnabled() const { return SaveTemps != SaveTempsNone; }
   bool isSaveTempsObj() const { return SaveTemps == SaveTempsObj; }
@@ -561,8 +541,9 @@ class Driver {
   /// This routine handles additional processing that must be done in addition
   /// to just running the subprocesses, for example reporting errors, setting
   /// up response files, removing temporary files, etc.
-  int ExecuteCompilation(Compilation &C,
- SmallVectorImpl< std::pair > &FailingCommands);
+  int ExecuteCompilation(
+  Compilation &C,
+  SmallVectorImpl> &FailingCommands);
 
   /// Contains the files in the compilation diagnostic report generated by
   /// generateCompilationDiagnostics.
@@ -758,7 +739,6 @@ class Driver {
   const CUIDOptions &getCUIDOpts() const { return CUIDOpts; }
 
 private:
-
   /// Tries to load options from configuration files.
   ///
   /// \returns true if error occurred.
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 77ca2d2aac31be1..3cc9492eac1c200 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3981,11 +3981,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {
 def fvectorize : Flag<["-"], "fvectorize">, Group,
   HelpText<"Enable the loop vectorization passes">;
 def f

[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-01-23 Thread Tarun Prabhu via cfe-commits

https://github.com/tarunprabhu requested changes to this pull request.

Please move code to be shared between `clang` and `flang` to 
`clang/lib/Driver/ToolChains/CommonArgs.cpp`

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2025-01-08 Thread Tarun Prabhu via cfe-commits


@@ -6980,3 +6980,37 @@ void driver::applyOverrideOptions(SmallVectorImpl &Args,
   ++S;
   }
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool driver::shouldEnableVectorizerAtOLevel(const ArgList &Args,

tarunprabhu wrote:

Since this was originally in the clang toolchain file, it may be better to move 
it to `clang/lib/Driver/ToolChains/CommonArgs.cpp`. This [has been 
done](https://github.com/llvm/llvm-project/pull/110132) for other code that is 
now shared between clang and flang. 

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2024-12-16 Thread David Truby via cfe-commits


@@ -6980,3 +6980,37 @@ void driver::applyOverrideOptions(SmallVectorImpl &Args,
   ++S;
   }
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool driver::shouldEnableVectorizerAtOLevel(const ArgList &Args,

DavidTruby wrote:

This should be able to go there I think; I'll move it if the RFC makes progress

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2024-12-13 Thread Tom Eccles via cfe-commits


@@ -6980,3 +6980,37 @@ void driver::applyOverrideOptions(SmallVectorImpl &Args,
   ++S;
   }
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool driver::shouldEnableVectorizerAtOLevel(const ArgList &Args,

tblah wrote:

We have made some attempts to move shared logic out of `clang/` into 
`llvm/lib/Frontend/Driver`. Maybe this should go there too?

https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2024-12-12 Thread David Truby via cfe-commits

https://github.com/DavidTruby converted_to_draft 
https://github.com/llvm/llvm-project/pull/119718
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2024-12-12 Thread via cfe-commits

llvmbot wrote:



@llvm/pr-subscribers-flang-driver

@llvm/pr-subscribers-clang

Author: David Truby (DavidTruby)


Changes

This patch adds the -fvectorize and -fno-vectorize flags to flang. 

Note that this also changes the behaviour of `flang -fc1` to match that of 
`clang -cc1`, which is that vectorization is only enabled in the presence of 
the `-vectorize-loops` flag.

Additionally, this patch changes the behaviour of the default optimisation 
levels to match clang, such that vectorization only happens at the same levels 
as it does there. 

This patch is in draft while I write an RFC to discuss the above two changes.

---
Full diff: https://github.com/llvm/llvm-project/pull/119718.diff


9 Files Affected:

- (modified) clang/include/clang/Driver/Driver.h (+3) 
- (modified) clang/include/clang/Driver/Options.td (+8-3) 
- (modified) clang/lib/Driver/Driver.cpp (+34) 
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (-33) 
- (modified) clang/lib/Driver/ToolChains/Flang.cpp (+10) 
- (modified) flang/include/flang/Frontend/CodeGenOptions.def (+1) 
- (modified) flang/lib/Frontend/CompilerInvocation.cpp (+4) 
- (modified) flang/lib/Frontend/FrontendActions.cpp (+3) 
- (modified) flang/test/Driver/optimization-remark.f90 (+11-11) 


``diff
diff --git a/clang/include/clang/Driver/Driver.h 
b/clang/include/clang/Driver/Driver.h
index c23d037e725bb9..4c4375b25902c4 100644
--- a/clang/include/clang/Driver/Driver.h
+++ b/clang/include/clang/Driver/Driver.h
@@ -856,6 +856,9 @@ void applyOverrideOptions(SmallVectorImpl 
&Args,
   llvm::StringSet<> &SavedStrings,
   raw_ostream *OS = nullptr);
 
+bool shouldEnableVectorizerAtOLevel(const llvm::opt::ArgList &Args,
+bool isSlpVec);
+
 } // end namespace driver
 } // end namespace clang
 
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 88862ae9edb29d..bc3c1e4a0045ff 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -4038,11 +4038,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {
 def fvectorize : Flag<["-"], "fvectorize">, Group,
   HelpText<"Enable the loop vectorization passes">;
 def fno_vectorize : Flag<["-"], "fno-vectorize">, Group;
 def : Flag<["-"], "ftree-vectorize">, Alias;
 def : Flag<["-"], "fno-tree-vectorize">, Alias;
+}
+
 def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group,
   HelpText<"Enable the superword-level parallelism vectorization passes">;
 def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group;
@@ -7323,6 +7327,10 @@ let Visibility = [CC1Option, FC1Option] in {
 def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">,
   HelpText<"Link and internalize needed symbols from the given bitcode file "
"before performing optimizations.">;
+
+def vectorize_loops : Flag<["-"], "vectorize-loops">,
+  HelpText<"Run the Loop vectorization passes">,
+  MarshallingInfoFlag>;
 } // let Visibility = [CC1Option, FC1Option]
 
 let Visibility = [CC1Option] in {
@@ -7439,9 +7447,6 @@ defm link_builtin_bitcode_postopt: 
BoolMOption<"link-builtin-bitcode-postopt",
   PosFlag,
   NegFlag>;
-def vectorize_loops : Flag<["-"], "vectorize-loops">,
-  HelpText<"Run the Loop vectorization passes">,
-  MarshallingInfoFlag>;
 def vectorize_slp : Flag<["-"], "vectorize-slp">,
   HelpText<"Run the SLP vectorization passes">,
   MarshallingInfoFlag>;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index fb73b62cf2daed..1510af0047fc47 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -6980,3 +6980,37 @@ void driver::applyOverrideOptions(SmallVectorImpl &Args,
   ++S;
   }
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool driver::shouldEnableVectorizerAtOLevel(const ArgList &Args,
+bool isSlpVec) {
+  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+if (A->getOption().matches(options::OPT_O4) ||
+A->getOption().matches(options::OPT_Ofast))
+  return true;
+
+if (A->getOption().matches(options::OPT_O0))
+  return false;
+
+assert(A->getOption().matches(options::OPT_O) && "Must have a -O flag");
+
+// Vectorize -Os.
+StringRef S(A->getValue());
+if (S == "s")
+  return true;
+
+// Don't vectorize -Oz, unless it's the slp vectorizer.
+if (S == "z")
+  return isSlpVec;
+
+unsigned OptLevel = 0;
+if (S.getAsInteger(10, OptLevel))
+  return false;
+
+return OptLevel > 1;
+  }
+
+  return false;
+}
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index d3206c3e8e25e

[clang] [flang] [flang] Add -f[no-]vectorize flags (PR #119718)

2024-12-12 Thread David Truby via cfe-commits

https://github.com/DavidTruby created 
https://github.com/llvm/llvm-project/pull/119718

This patch adds the -fvectorize and -fno-vectorize flags to flang. 

Note that this also changes the behaviour of `flang -fc1` to match that of 
`clang -cc1`, which is that vectorization is only enabled in the presence of 
the `-vectorize-loops` flag.

Additionally, this patch changes the behaviour of the default optimisation 
levels to match clang, such that vectorization only happens at the same levels 
as it does there. 

This patch is in draft while I write an RFC to discuss the above two changes.

>From 0b9cbef8073cdfc511087c315deb82a90c408640 Mon Sep 17 00:00:00 2001
From: David Truby 
Date: Thu, 12 Dec 2024 14:50:19 +
Subject: [PATCH] [flang] Add -f[no-]vectorize flags

---
 clang/include/clang/Driver/Driver.h   |  3 ++
 clang/include/clang/Driver/Options.td | 11 --
 clang/lib/Driver/Driver.cpp   | 34 +++
 clang/lib/Driver/ToolChains/Clang.cpp | 33 --
 clang/lib/Driver/ToolChains/Flang.cpp | 10 ++
 .../include/flang/Frontend/CodeGenOptions.def |  1 +
 flang/lib/Frontend/CompilerInvocation.cpp |  4 +++
 flang/lib/Frontend/FrontendActions.cpp|  3 ++
 flang/test/Driver/optimization-remark.f90 | 22 ++--
 9 files changed, 74 insertions(+), 47 deletions(-)

diff --git a/clang/include/clang/Driver/Driver.h 
b/clang/include/clang/Driver/Driver.h
index c23d037e725bb9..4c4375b25902c4 100644
--- a/clang/include/clang/Driver/Driver.h
+++ b/clang/include/clang/Driver/Driver.h
@@ -856,6 +856,9 @@ void applyOverrideOptions(SmallVectorImpl 
&Args,
   llvm::StringSet<> &SavedStrings,
   raw_ostream *OS = nullptr);
 
+bool shouldEnableVectorizerAtOLevel(const llvm::opt::ArgList &Args,
+bool isSlpVec);
+
 } // end namespace driver
 } // end namespace clang
 
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 88862ae9edb29d..bc3c1e4a0045ff 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -4038,11 +4038,15 @@ defm assumptions : BoolFOption<"assumptions",
   "Disable codegen and compile-time checks for C++23's [[assume]] 
attribute">,
   PosFlag>;
 
+
+let Visibility = [ClangOption, FlangOption] in {
 def fvectorize : Flag<["-"], "fvectorize">, Group,
   HelpText<"Enable the loop vectorization passes">;
 def fno_vectorize : Flag<["-"], "fno-vectorize">, Group;
 def : Flag<["-"], "ftree-vectorize">, Alias;
 def : Flag<["-"], "fno-tree-vectorize">, Alias;
+}
+
 def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group,
   HelpText<"Enable the superword-level parallelism vectorization passes">;
 def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group;
@@ -7323,6 +7327,10 @@ let Visibility = [CC1Option, FC1Option] in {
 def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">,
   HelpText<"Link and internalize needed symbols from the given bitcode file "
"before performing optimizations.">;
+
+def vectorize_loops : Flag<["-"], "vectorize-loops">,
+  HelpText<"Run the Loop vectorization passes">,
+  MarshallingInfoFlag>;
 } // let Visibility = [CC1Option, FC1Option]
 
 let Visibility = [CC1Option] in {
@@ -7439,9 +7447,6 @@ defm link_builtin_bitcode_postopt: 
BoolMOption<"link-builtin-bitcode-postopt",
   PosFlag,
   NegFlag>;
-def vectorize_loops : Flag<["-"], "vectorize-loops">,
-  HelpText<"Run the Loop vectorization passes">,
-  MarshallingInfoFlag>;
 def vectorize_slp : Flag<["-"], "vectorize-slp">,
   HelpText<"Run the SLP vectorization passes">,
   MarshallingInfoFlag>;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index fb73b62cf2daed..1510af0047fc47 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -6980,3 +6980,37 @@ void driver::applyOverrideOptions(SmallVectorImpl &Args,
   ++S;
   }
 }
+
+/// Vectorize at all optimization levels greater than 1 except for -Oz.
+/// For -Oz the loop vectorizer is disabled, while the slp vectorizer is
+/// enabled.
+bool driver::shouldEnableVectorizerAtOLevel(const ArgList &Args,
+bool isSlpVec) {
+  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+if (A->getOption().matches(options::OPT_O4) ||
+A->getOption().matches(options::OPT_Ofast))
+  return true;
+
+if (A->getOption().matches(options::OPT_O0))
+  return false;
+
+assert(A->getOption().matches(options::OPT_O) && "Must have a -O flag");
+
+// Vectorize -Os.
+StringRef S(A->getValue());
+if (S == "s")
+  return true;
+
+// Don't vectorize -Oz, unless it's the slp vectorizer.
+if (S == "z")
+  return isSlpVec;
+
+unsigned OptLevel = 0;
+if (S.getAsInteger(10, OptLevel))
+  return false;
+
+return OptLevel > 1;
+  }
+
+  return false;
+