Author: Fangrui Song Date: 2023-04-24T22:59:54-07:00 New Revision: 68dd51421f16f1e17cd453cb1730fcca99a6cfb7
URL: https://github.com/llvm/llvm-project/commit/68dd51421f16f1e17cd453cb1730fcca99a6cfb7 DIFF: https://github.com/llvm/llvm-project/commit/68dd51421f16f1e17cd453cb1730fcca99a6cfb7.diff LOG: [Driver] Simplify handling of -mabi=vec-default -mabi=vec-extabi And fix a minor issue that -mabi=vec-extabi -mabi=vec-default should not pass "-bplugin_opt:-vec-extabi" to ld. Added: Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/CodeGen/PowerPC/altivec.c clang/test/Driver/aix-vec_extabi.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ceab53171eaee..bbdde9ada222a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3832,11 +3832,6 @@ def mno_prefixed: Flag<["-"], "mno-prefixed">, Group<m_ppc_Features_Group>; def mspe : Flag<["-"], "mspe">, Group<m_ppc_Features_Group>; def mno_spe : Flag<["-"], "mno-spe">, Group<m_ppc_Features_Group>; def mefpu2 : Flag<["-"], "mefpu2">, Group<m_ppc_Features_Group>; -def mabi_EQ_vec_extabi : Flag<["-"], "mabi=vec-extabi">, Group<m_Group>, Flags<[CC1Option]>, - HelpText<"Enable the extended Altivec ABI on AIX (AIX only). Uses volatile and nonvolatile vector registers">, - MarshallingInfoFlag<LangOpts<"EnableAIXExtendedAltivecABI">>; -def mabi_EQ_vec_default : Flag<["-"], "mabi=vec-default">, Group<m_Group>, Flags<[CC1Option]>, - HelpText<"Enable the default Altivec ABI on AIX (AIX only). Uses only volatile vector registers.">; def mabi_EQ_quadword_atomics : Flag<["-"], "mabi=quadword-atomics">, Group<m_Group>, Flags<[CC1Option]>, HelpText<"Enable quadword atomics ABI on AIX (AIX PPC64 only). Uses lqarx/stqcx. instructions.">, @@ -5633,6 +5628,9 @@ def mframe_pointer_EQ : Joined<["-"], "mframe-pointer=">, def mabi_EQ_ieeelongdouble : Flag<["-"], "mabi=ieeelongdouble">, HelpText<"Use IEEE 754 quadruple-precision for long double">, MarshallingInfoFlag<LangOpts<"PPCIEEELongDouble">>; +def mabi_EQ_vec_extabi : Flag<["-"], "mabi=vec-extabi">, + HelpText<"Enable the extended Altivec ABI on AIX. Use volatile and nonvolatile vector registers">, + MarshallingInfoFlag<LangOpts<"EnableAIXExtendedAltivecABI">>; def mfloat_abi : Separate<["-"], "mfloat-abi">, HelpText<"The float ABI to use">, MarshallingInfoString<CodeGenOpts<"FloatABI">>; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 95ef79416acff..e3633c0e60cea 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1976,6 +1976,7 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args, void Clang::AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const { + const Driver &D = getToolChain().getDriver(); const llvm::Triple &T = getToolChain().getTriple(); if (Args.getLastArg(options::OPT_mtune_EQ)) { CmdArgs.push_back("-tune-cpu"); @@ -2003,13 +2004,22 @@ void Clang::AddPPCTargetArgs(const ArgList &Args, } bool IEEELongDouble = getToolChain().defaultToIEEELongDouble(); + bool VecExtabi = false; for (const Arg *A : Args.filtered(options::OPT_mabi_EQ)) { StringRef V = A->getValue(); - if (V == "ieeelongdouble") + if (V == "ieeelongdouble") { IEEELongDouble = true; - else if (V == "ibmlongdouble") + A->claim(); + } else if (V == "ibmlongdouble") { IEEELongDouble = false; - else if (V != "altivec") + A->claim(); + } else if (V == "vec-default") { + VecExtabi = false; + A->claim(); + } else if (V == "vec-extabi") { + VecExtabi = true; + A->claim(); + } else if (V != "altivec") // The ppc64 linux abis are all "altivec" abis by default. Accept and ignore // the option if given as we don't have backend support for any targets // that don't use the altivec abi. @@ -2017,10 +2027,14 @@ void Clang::AddPPCTargetArgs(const ArgList &Args, } if (IEEELongDouble) CmdArgs.push_back("-mabi=ieeelongdouble"); + if (VecExtabi) { + if (!T.isOSAIX()) + D.Diag(diag::err_drv_unsupported_opt_for_target) + << "-mabi=vec-extabi" << T.str(); + CmdArgs.push_back("-mabi=vec-extabi"); + } - ppc::FloatABI FloatABI = - ppc::getPPCFloatABI(getToolChain().getDriver(), Args); - + ppc::FloatABI FloatABI = ppc::getPPCFloatABI(D, Args); if (FloatABI == ppc::FloatABI::Soft) { // Floating point operations and argument passing are soft. CmdArgs.push_back("-msoft-float"); @@ -5203,17 +5217,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } } - if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ_vec_extabi, - options::OPT_mabi_EQ_vec_default)) { - if (!Triple.isOSAIX()) - D.Diag(diag::err_drv_unsupported_opt_for_target) - << A->getSpelling() << RawTriple.str(); - if (A->getOption().getID() == options::OPT_mabi_EQ_vec_extabi) - CmdArgs.push_back("-mabi=vec-extabi"); - else - CmdArgs.push_back("-mabi=vec-default"); - } - if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ_quadword_atomics)) { if (!Triple.isOSAIX() || Triple.isPPC32()) D.Diag(diag::err_drv_unsupported_opt_for_target) diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 315cf6325d396..cf21d6243b180 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -683,9 +683,16 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, CmdArgs.push_back( Args.MakeArgString(Twine(PluginOptPrefix) + "-strict-dwarf=true")); - if (Args.getLastArg(options::OPT_mabi_EQ_vec_extabi)) - CmdArgs.push_back( - Args.MakeArgString(Twine(PluginOptPrefix) + "-vec-extabi")); + for (const Arg *A : Args.filtered_reverse(options::OPT_mabi_EQ)) { + StringRef V = A->getValue(); + if (V == "vec-default") + break; + if (V == "vec-extabi") { + CmdArgs.push_back( + Args.MakeArgString(Twine(PluginOptPrefix) + "-vec-extabi")); + break; + } + } } bool UseSeparateSections = diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 34e0e8d53e50e..71204debce13d 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1935,16 +1935,6 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, } } - if (Arg *A = - Args.getLastArg(OPT_mabi_EQ_vec_default, OPT_mabi_EQ_vec_extabi)) { - if (!T.isOSAIX()) - Diags.Report(diag::err_drv_unsupported_opt_for_target) - << A->getSpelling() << T.str(); - - const Option &O = A->getOption(); - Opts.EnableAIXExtendedAltivecABI = O.matches(OPT_mabi_EQ_vec_extabi); - } - if (Arg *A = Args.getLastArg(OPT_mabi_EQ_quadword_atomics)) { if (!T.isOSAIX() || T.isPPC32()) Diags.Report(diag::err_drv_unsupported_opt_for_target) diff --git a/clang/test/CodeGen/PowerPC/altivec.c b/clang/test/CodeGen/PowerPC/altivec.c index 1d4980bd0d7ef..808135de00ea6 100644 --- a/clang/test/CodeGen/PowerPC/altivec.c +++ b/clang/test/CodeGen/PowerPC/altivec.c @@ -4,8 +4,8 @@ // RUN: %clang_cc1 -target-feature +altivec -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LE // RUN: %clang_cc1 -target-feature +altivec -mabi=vec-extabi -target-cpu pwr8 -triple powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE // RUN: %clang_cc1 -target-feature +altivec -mabi=vec-extabi -target-cpu pwr8 -triple powerpc64-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE -// RUN: %clang_cc1 -target-feature +altivec -mabi=vec-default -target-cpu pwr8 -triple powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE -// RUN: %clang_cc1 -target-feature +altivec -mabi=vec-default -target-cpu pwr8 -triple powerpc64-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE +// RUN: %clang_cc1 -target-feature +altivec -target-cpu pwr8 -triple powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE +// RUN: %clang_cc1 -target-feature +altivec -target-cpu pwr8 -triple powerpc64-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE // RUN: %clang -S -emit-llvm -maltivec -mabi=vec-extabi -mcpu=pwr8 --target=powerpc-unknown-aix %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE // RUN: %clang -S -emit-llvm -maltivec -mabi=vec-extabi -mcpu=pwr8 --target=powerpc64-unknown-aix %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE // RUN: %clang -S -emit-llvm -maltivec -mabi=vec-default -mcpu=pwr8 --target=powerpc-unknown-aix -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE diff --git a/clang/test/Driver/aix-vec_extabi.c b/clang/test/Driver/aix-vec_extabi.c index 93de4a25e3e76..83c37979f28d7 100644 --- a/clang/test/Driver/aix-vec_extabi.c +++ b/clang/test/Driver/aix-vec_extabi.c @@ -13,4 +13,4 @@ // EXTABI-SAME: "-mabi=vec-extabi" // DFLTABI: "-cc1" -// DFLTABI-SAME: "-mabi=vec-default" +// DFLTABI-NOT: "-mabi=vec-extabi" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits