mnadeem updated this revision to Diff 369558. mnadeem retitled this revision from "[clang][driver] Honor the last -flto= flag even if an earlier -flto is present" to "[clang][driver] Honor the last -flto(=.*)? argument". mnadeem edited the summary of this revision. mnadeem added a comment. Herald added a subscriber: dang.
Update Options.td as suggested by steven_wu Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D108881/new/ https://reviews.llvm.org/D108881 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/amdgpu-toolchain.c clang/test/Driver/lto.c Index: clang/test/Driver/lto.c =================================================================== --- clang/test/Driver/lto.c +++ clang/test/Driver/lto.c @@ -85,3 +85,21 @@ // FLTO-AUTO: -flto=full // FLTO-JOBSERVER: -flto=full // + +// Pass the last -flto argument. +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -flto 2>&1 | \ +// RUN: FileCheck --check-prefix=FLTO-FULL %s +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -flto=full 2>&1 | \ +// RUN: FileCheck --check-prefix=FLTO-FULL %s +// RUN: %clang -target x86_64-unknown-linux -### %s -flto -flto=thin 2>&1 | \ +// RUN: FileCheck --check-prefix=FLTO-THIN %s +// +// FLTO-FULL-NOT: -flto=thin +// FLTO-FULL: -flto=full +// FLTO-FULL-NOT: -flto=thin +// +// FLTO-THIN-NOT: -flto=full +// FLTO-THIN-NOT: "-flto" +// FLTO-THIN: -flto=thin +// FLTO-THIN-NOT: "-flto" +// FLTO-THIN-NOT: -flto=full Index: clang/test/Driver/amdgpu-toolchain.c =================================================================== --- clang/test/Driver/amdgpu-toolchain.c +++ clang/test/Driver/amdgpu-toolchain.c @@ -12,5 +12,5 @@ // RUN: %clang -### -target amdgcn-amd-amdhsa -mcpu=gfx906 -nogpulib \ // RUN: -flto %s 2>&1 | FileCheck -check-prefix=LTO %s -// LTO: clang{{.*}} "-flto" +// LTO: clang{{.*}} "-flto=full" // LTO: ld.lld{{.*}} Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4491,18 +4491,8 @@ CmdArgs.push_back("-emit-llvm-uselists"); if (IsUsingLTO) { - if (!IsDeviceOffloadAction) { - if (Args.hasArg(options::OPT_flto)) - CmdArgs.push_back("-flto"); - else { - if (D.getLTOMode() == LTOK_Thin) - CmdArgs.push_back("-flto=thin"); - else - CmdArgs.push_back("-flto=full"); - } - CmdArgs.push_back("-flto-unit"); - } else if (Triple.isAMDGPU()) { - // Only AMDGPU supports device-side LTO + // Only AMDGPU supports device-side LTO. + if (!IsDeviceOffloadAction || Triple.isAMDGPU()) { assert(LTOMode == LTOK_Full || LTOMode == LTOK_Thin); CmdArgs.push_back(Args.MakeArgString( Twine("-flto=") + (LTOMode == LTOK_Thin ? "thin" : "full"))); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2025,13 +2025,13 @@ def flto_EQ_jobserver : Flag<["-"], "flto=jobserver">, Group<f_Group>; def flto_EQ_auto : Flag<["-"], "flto=auto">, Group<f_Group>; def flto : Flag<["-"], "flto">, Flags<[CoreOption, CC1Option]>, Group<f_Group>, - HelpText<"Enable LTO in 'full' mode">; + Alias<flto_EQ>, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode">; def fno_lto : Flag<["-"], "fno-lto">, Flags<[CoreOption, CC1Option]>, Group<f_Group>, HelpText<"Disable LTO mode (default)">; def foffload_lto_EQ : Joined<["-"], "foffload-lto=">, Flags<[CoreOption]>, Group<f_Group>, HelpText<"Set LTO mode to either 'full' or 'thin' for offload compilation">, Values<"thin,full">; def foffload_lto : Flag<["-"], "foffload-lto">, Flags<[CoreOption]>, Group<f_Group>, - HelpText<"Enable LTO in 'full' mode for offload compilation">; + Alias<foffload_lto_EQ>, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode for offload compilation">; def fno_offload_lto : Flag<["-"], "fno-offload-lto">, Flags<[CoreOption]>, Group<f_Group>, HelpText<"Disable LTO mode (default) for offload compilation">; def flto_jobs_EQ : Joined<["-"], "flto-jobs=">,
Index: clang/test/Driver/lto.c =================================================================== --- clang/test/Driver/lto.c +++ clang/test/Driver/lto.c @@ -85,3 +85,21 @@ // FLTO-AUTO: -flto=full // FLTO-JOBSERVER: -flto=full // + +// Pass the last -flto argument. +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -flto 2>&1 | \ +// RUN: FileCheck --check-prefix=FLTO-FULL %s +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -flto=full 2>&1 | \ +// RUN: FileCheck --check-prefix=FLTO-FULL %s +// RUN: %clang -target x86_64-unknown-linux -### %s -flto -flto=thin 2>&1 | \ +// RUN: FileCheck --check-prefix=FLTO-THIN %s +// +// FLTO-FULL-NOT: -flto=thin +// FLTO-FULL: -flto=full +// FLTO-FULL-NOT: -flto=thin +// +// FLTO-THIN-NOT: -flto=full +// FLTO-THIN-NOT: "-flto" +// FLTO-THIN: -flto=thin +// FLTO-THIN-NOT: "-flto" +// FLTO-THIN-NOT: -flto=full Index: clang/test/Driver/amdgpu-toolchain.c =================================================================== --- clang/test/Driver/amdgpu-toolchain.c +++ clang/test/Driver/amdgpu-toolchain.c @@ -12,5 +12,5 @@ // RUN: %clang -### -target amdgcn-amd-amdhsa -mcpu=gfx906 -nogpulib \ // RUN: -flto %s 2>&1 | FileCheck -check-prefix=LTO %s -// LTO: clang{{.*}} "-flto" +// LTO: clang{{.*}} "-flto=full" // LTO: ld.lld{{.*}} Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4491,18 +4491,8 @@ CmdArgs.push_back("-emit-llvm-uselists"); if (IsUsingLTO) { - if (!IsDeviceOffloadAction) { - if (Args.hasArg(options::OPT_flto)) - CmdArgs.push_back("-flto"); - else { - if (D.getLTOMode() == LTOK_Thin) - CmdArgs.push_back("-flto=thin"); - else - CmdArgs.push_back("-flto=full"); - } - CmdArgs.push_back("-flto-unit"); - } else if (Triple.isAMDGPU()) { - // Only AMDGPU supports device-side LTO + // Only AMDGPU supports device-side LTO. + if (!IsDeviceOffloadAction || Triple.isAMDGPU()) { assert(LTOMode == LTOK_Full || LTOMode == LTOK_Thin); CmdArgs.push_back(Args.MakeArgString( Twine("-flto=") + (LTOMode == LTOK_Thin ? "thin" : "full"))); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2025,13 +2025,13 @@ def flto_EQ_jobserver : Flag<["-"], "flto=jobserver">, Group<f_Group>; def flto_EQ_auto : Flag<["-"], "flto=auto">, Group<f_Group>; def flto : Flag<["-"], "flto">, Flags<[CoreOption, CC1Option]>, Group<f_Group>, - HelpText<"Enable LTO in 'full' mode">; + Alias<flto_EQ>, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode">; def fno_lto : Flag<["-"], "fno-lto">, Flags<[CoreOption, CC1Option]>, Group<f_Group>, HelpText<"Disable LTO mode (default)">; def foffload_lto_EQ : Joined<["-"], "foffload-lto=">, Flags<[CoreOption]>, Group<f_Group>, HelpText<"Set LTO mode to either 'full' or 'thin' for offload compilation">, Values<"thin,full">; def foffload_lto : Flag<["-"], "foffload-lto">, Flags<[CoreOption]>, Group<f_Group>, - HelpText<"Enable LTO in 'full' mode for offload compilation">; + Alias<foffload_lto_EQ>, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode for offload compilation">; def fno_offload_lto : Flag<["-"], "fno-offload-lto">, Flags<[CoreOption]>, Group<f_Group>, HelpText<"Disable LTO mode (default) for offload compilation">; def flto_jobs_EQ : Joined<["-"], "flto-jobs=">,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits