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