https://github.com/omarahmed1111 updated 
https://github.com/llvm/llvm-project/pull/141036

>From 0eb754713a8c2994144417f9d5ce12cbfefe19d0 Mon Sep 17 00:00:00 2001
From: omarahmed1111 <omar.ah...@codeplay.com>
Date: Thu, 22 May 2025 11:19:53 +0100
Subject: [PATCH] [Clang] Move opt level in clang toolchain to beginning

---
 clang/lib/Driver/ToolChains/Clang.cpp | 30 +++++++++------------------
 clang/test/Driver/Ofast.c             | 10 ++++-----
 clang/test/Driver/cl-options.c        | 12 +++++------
 clang/test/Driver/clang-translation.c |  2 +-
 clang/test/Driver/offload-Xarch.c     |  4 ++--
 5 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 355a48be9f493..30ecbf865d261 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -5202,6 +5202,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
     }
   }
 
+  // Optimization level for CodeGen.
+  if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {
+    if (A->getOption().matches(options::OPT_O4)) {
+      CmdArgs.push_back("-O3");
+      D.Diag(diag::warn_O4_is_O3);
+    } else {
+      A->render(Args, CmdArgs);
+    }
+  }
+
   // Unconditionally claim the printf option now to avoid unused diagnostic.
   if (const Arg *PF = Args.getLastArg(options::OPT_mprintf_kind_EQ))
     PF->claim();
@@ -5573,16 +5583,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
       break;
     }
 
-    // Optimization level for CodeGen.
-    if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {
-      if (A->getOption().matches(options::OPT_O4)) {
-        CmdArgs.push_back("-O3");
-        D.Diag(diag::warn_O4_is_O3);
-      } else {
-        A->render(Args, CmdArgs);
-      }
-    }
-
     // Input/Output file.
     if (Output.getType() == types::TY_Dependencies) {
       // Handled with other dependency code.
@@ -6463,16 +6463,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
   // preprocessed inputs and configure concludes that -fPIC is not supported.
   Args.ClaimAllArgs(options::OPT_D);
 
-  // Manually translate -O4 to -O3; let clang reject others.
-  if (Arg *A = Args.getLastArg(options::OPT_O_Group)) {
-    if (A->getOption().matches(options::OPT_O4)) {
-      CmdArgs.push_back("-O3");
-      D.Diag(diag::warn_O4_is_O3);
-    } else {
-      A->render(Args, CmdArgs);
-    }
-  }
-
   // Warn about ignored options to clang.
   for (const Arg *A :
        Args.filtered(options::OPT_clang_ignored_gcc_optimization_f_Group)) {
diff --git a/clang/test/Driver/Ofast.c b/clang/test/Driver/Ofast.c
index b5189e951cc68..612478cc89558 100644
--- a/clang/test/Driver/Ofast.c
+++ b/clang/test/Driver/Ofast.c
@@ -12,36 +12,36 @@
 
 // CHECK-OFAST: use '-O3 -ffast-math' for the same behavior, or '-O3' to 
enable only conforming optimizations
 // CHECK-OFAST: -cc1
+// CHECK-OFAST: -Ofast
 // CHECK-OFAST-NOT: -relaxed-aliasing
 // CHECK-OFAST: -ffast-math
-// CHECK-OFAST: -Ofast
 // CHECK-OFAST: -vectorize-loops
 
 // Lack of warning about '-Ofast' deprecation is checked via -Werror
 // CHECK-OFAST-O2: -cc1
+// CHECK-OFAST-O2-NOT: -Ofast
 // CHECK-OFAST-O2-ALIASING-NOT: -relaxed-aliasing
 // CHECK-OFAST-O2-ALIASING-MSVC: -relaxed-aliasing
 // CHECK-OFAST-O2-NOT: -ffast-math
-// CHECK-OFAST-O2-NOT: -Ofast
 // CHECK-OFAST-O2: -vectorize-loops
 
 // CHECK-OFAST-NO-FAST-MATH: use '-O3 -ffast-math' for the same behavior, or 
'-O3' to enable only conforming optimizations
 // CHECK-OFAST-NO-FAST-MATH: -cc1
+// CHECK-OFAST-NO-FAST-MATH: -Ofast
 // CHECK-OFAST-NO-FAST-MATH-NOT: -relaxed-aliasing
 // CHECK-OFAST-NO-FAST-MATH-NOT: -ffast-math
-// CHECK-OFAST-NO-FAST-MATH: -Ofast
 // CHECK-OFAST-NO-FAST-MATH: -vectorize-loops
 
 // CHECK-OFAST-NO-STRICT-ALIASING: use '-O3 -ffast-math' for the same 
behavior, or '-O3' to enable only conforming optimizations
 // CHECK-OFAST-NO-STRICT-ALIASING: -cc1
+// CHECK-OFAST-NO-STRICT-ALIASING: -Ofast
 // CHECK-OFAST-NO-STRICT-ALIASING: -relaxed-aliasing
 // CHECK-OFAST-NO-STRICT-ALIASING: -ffast-math
-// CHECK-OFAST-NO-STRICT-ALIASING: -Ofast
 // CHECK-OFAST-NO-STRICT-ALIASING: -vectorize-loops
 
 // CHECK-OFAST-NO-VECTORIZE: use '-O3 -ffast-math' for the same behavior, or 
'-O3' to enable only conforming optimizations
 // CHECK-OFAST-NO-VECTORIZE: -cc1
+// CHECK-OFAST-NO-VECTORIZE: -Ofast
 // CHECK-OFAST-NO-VECTORIZE-NOT: -relaxed-aliasing
 // CHECK-OFAST-NO-VECTORIZE: -ffast-math
-// CHECK-OFAST-NO-VECTORIZE: -Ofast
 // CHECK-OFAST-NO-VECTORIZE-NOT: -vectorize-loops
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index c32b6a7f68c8c..0535285862b9f 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -185,30 +185,30 @@
 
 // RUN: %clang_cl /Os --target=i686-pc-windows-msvc -### -- %s 2>&1 | 
FileCheck -check-prefix=Os %s
 // RUN: %clang_cl /Os --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | 
FileCheck -check-prefix=Os %s
-// Os: -mframe-pointer=none
 // Os: -Os
+// Os: -mframe-pointer=none
 
 // RUN: %clang_cl /Ot --target=i686-pc-windows-msvc -### -- %s 2>&1 | 
FileCheck -check-prefix=Ot %s
 // RUN: %clang_cl /Ot --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | 
FileCheck -check-prefix=Ot %s
-// Ot: -mframe-pointer=none
 // Ot: -O3
+// Ot: -mframe-pointer=none
 
 // RUN: %clang_cl /Ox --target=i686-pc-windows-msvc -### -- %s 2>&1 | 
FileCheck -check-prefix=Ox %s
 // RUN: %clang_cl /Ox --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | 
FileCheck -check-prefix=Ox %s
-// Ox: -mframe-pointer=none
 // Ox: -O3
+// Ox: -mframe-pointer=none
 
 // RUN: %clang_cl --target=i686-pc-win32 /O2sy- -### -- %s 2>&1 | FileCheck 
-check-prefix=PR24003 %s
-// PR24003: -mframe-pointer=all
 // PR24003: -Os
+// PR24003: -mframe-pointer=all
 
 // RUN: %clang_cl --target=i686-pc-win32 -Werror -Wno-msvc-not-found /Oy- /O2 
-### -- %s 2>&1 | FileCheck -check-prefix=Oy_2 %s
-// Oy_2: -mframe-pointer=all
 // Oy_2: -O3
+// Oy_2: -mframe-pointer=all
 
 // RUN: %clang_cl --target=aarch64-pc-windows-msvc -Werror -Wno-msvc-not-found 
/Oy- /O2 -### -- %s 2>&1 | FileCheck -check-prefix=Oy_aarch64 %s
-// Oy_aarch64: -mframe-pointer=non-leaf
 // Oy_aarch64: -O3
+// Oy_aarch64: -mframe-pointer=non-leaf
 
 // RUN: %clang_cl --target=i686-pc-win32 -Werror -Wno-msvc-not-found /O2 /O2 
-### -- %s 2>&1 | FileCheck -check-prefix=O2O2 %s
 // O2O2: "-O3"
diff --git a/clang/test/Driver/clang-translation.c 
b/clang/test/Driver/clang-translation.c
index 7fc41ff46ed28..5ec052a7aaa11 100644
--- a/clang/test/Driver/clang-translation.c
+++ b/clang/test/Driver/clang-translation.c
@@ -1,11 +1,11 @@
 // RUN: %clang -target i386-unknown-unknown -### -S -O0 -Os %s -o %t.s 
-fverbose-asm -fvisibility=hidden 2>&1 | FileCheck -check-prefix=I386 %s
 // I386: "-triple" "i386-unknown-unknown"
+// I386: "-Os"
 // I386: "-S"
 // I386: "-disable-free"
 // I386: "-mrelocation-model" "static"
 // I386: "-mframe-pointer=all"
 // I386: "-funwind-tables=2"
-// I386: "-Os"
 // I386: "-fvisibility=hidden"
 // I386: "-o"
 // I386: clang-translation
diff --git a/clang/test/Driver/offload-Xarch.c 
b/clang/test/Driver/offload-Xarch.c
index 8106dcfcd1354..73943f3e9c7f8 100644
--- a/clang/test/Driver/offload-Xarch.c
+++ b/clang/test/Driver/offload-Xarch.c
@@ -33,8 +33,8 @@
 // RUN: %clang -x cuda %s --offload-arch=sm_52,sm_60 -Xarch_sm_52 -O3 
-Xarch_sm_60 -O0 \
 // RUN:   --target=x86_64-unknown-linux-gnu -Xarch_host -O3 -S -nogpulib 
-nogpuinc -### 2>&1 \
 // RUN: | FileCheck -check-prefix=CUDA %s
-// CUDA: "-cc1" "-triple" "nvptx64-nvidia-cuda" {{.*}}"-target-cpu" "sm_52" 
{{.*}}"-O3"
-// CUDA: "-cc1" "-triple" "nvptx64-nvidia-cuda" {{.*}}"-target-cpu" "sm_60" 
{{.*}}"-O0"
+// CUDA: "-cc1" "-triple" "nvptx64-nvidia-cuda" {{.*}}"-O3" 
{{.*}}"-target-cpu" "sm_52" {{.*}}
+// CUDA: "-cc1" "-triple" "nvptx64-nvidia-cuda" {{.*}}"-O0" 
{{.*}}"-target-cpu" "sm_60" {{.*}}
 // CUDA: "-cc1" "-triple" "x86_64-unknown-linux-gnu" {{.*}}"-O3"
 
 // Make sure that `-Xarch_amdgcn` forwards libraries to the device linker.

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to