Re: [PATCH] D21066: Pass MCSubtargetInfo instead of CPU and Triple to createMCAsmBackend
aturetsk abandoned this revision. aturetsk added a comment. New version in https://reviews.llvm.org/D21374 https://reviews.llvm.org/D21066 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r274119 - Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.
Author: aturetsk Date: Wed Jun 29 05:57:17 2016 New Revision: 274119 URL: http://llvm.org/viewvc/llvm-project?rev=274119=rev Log: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC. Differential Revision: http://reviews.llvm.org/D21641 Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=274119=274118=274119=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Wed Jun 29 05:57:17 2016 @@ -280,9 +280,8 @@ DerivedArgList *Driver::TranslateInputAr } // Enforce -static if -miamcu is present. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) -if (Ar->getOption().matches(options::OPT_miamcu)) - DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -376,24 +375,22 @@ static llvm::Triple computeTargetTriple( } // Handle -miamcu flag. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (Ar->getOption().matches(options::OPT_miamcu)) { - if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) -D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - - if (A && !A->getOption().matches(options::OPT_m32)) -D.Diag(diag::err_drv_argument_not_allowed_with) -<< "-miamcu" << A->getBaseArg().getAsString(Args); - - Target.setArch(llvm::Triple::x86); - Target.setArchName("i586"); - Target.setEnvironment(llvm::Triple::UnknownEnvironment); - Target.setEnvironmentName(""); - Target.setOS(llvm::Triple::ELFIAMCU); - Target.setVendor(llvm::Triple::UnknownVendor); - Target.setVendorName("intel"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); } return Target; Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=274119=274118=274119=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Wed Jun 29 05:57:17 2016 @@ -2247,12 +2247,10 @@ void Clang::AddX86TargetArgs(const ArgLi } // Set flags to support MCU ABI. - if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (A->getOption().matches(options::OPT_miamcu)) { - CmdArgs.push_back("-mfloat-abi"); - CmdArgs.push_back("soft"); - CmdArgs.push_back("-mstack-alignment=4"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); } } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21641: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.
This revision was automatically updated to reflect the committed changes. Closed by commit rL274119: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC. (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D21641?vs=61662=62203#toc Repository: rL LLVM http://reviews.llvm.org/D21641 Files: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -2247,12 +2247,10 @@ } // Set flags to support MCU ABI. - if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (A->getOption().matches(options::OPT_miamcu)) { - CmdArgs.push_back("-mfloat-abi"); - CmdArgs.push_back("soft"); - CmdArgs.push_back("-mstack-alignment=4"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); } } Index: cfe/trunk/lib/Driver/Driver.cpp === --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -280,9 +280,8 @@ } // Enforce -static if -miamcu is present. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) -if (Ar->getOption().matches(options::OPT_miamcu)) - DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -376,24 +375,22 @@ } // Handle -miamcu flag. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (Ar->getOption().matches(options::OPT_miamcu)) { - if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) -D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - - if (A && !A->getOption().matches(options::OPT_m32)) -D.Diag(diag::err_drv_argument_not_allowed_with) -<< "-miamcu" << A->getBaseArg().getAsString(Args); - - Target.setArch(llvm::Triple::x86); - Target.setArchName("i586"); - Target.setEnvironment(llvm::Triple::UnknownEnvironment); - Target.setEnvironmentName(""); - Target.setOS(llvm::Triple::ELFIAMCU); - Target.setVendor(llvm::Triple::UnknownVendor); - Target.setVendorName("intel"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); } return Target; Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -2247,12 +2247,10 @@ } // Set flags to support MCU ABI. - if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (A->getOption().matches(options::OPT_miamcu)) { - CmdArgs.push_back("-mfloat-abi"); - CmdArgs.push_back("soft"); - CmdArgs.push_back("-mstack-alignment=4"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); } } Index: cfe/trunk/lib/Driver/Driver.cpp === --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -280,9 +280,8 @@ } // Enforce -static if -miamcu is present. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) -if (Ar->getOption().matches(options::OPT_miamcu)) - DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -376,24 +375,22 @@ } // Handle -miamcu flag. - if (Arg *Ar =
Re: [PATCH] D21641: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.
aturetsk added a comment. Hi Bruno, As you suggested I changed -miamcu/-mno-iamcu handling code to use hasFlag. http://reviews.llvm.org/D21641 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21641: Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC.
aturetsk created this revision. aturetsk added a reviewer: bruno. aturetsk added a subscriber: cfe-commits. Use ArgList::hasFlag to check if -miamcu/-mno-iamcu is passed. NFC. http://reviews.llvm.org/D21641 Files: lib/Driver/Driver.cpp lib/Driver/Tools.cpp Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2243,12 +2243,10 @@ } // Set flags to support MCU ABI. - if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (A->getOption().matches(options::OPT_miamcu)) { - CmdArgs.push_back("-mfloat-abi"); - CmdArgs.push_back("soft"); - CmdArgs.push_back("-mstack-alignment=4"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); } } Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -280,9 +280,8 @@ } // Enforce -static if -miamcu is present. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) -if (Ar->getOption().matches(options::OPT_miamcu)) - DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -376,24 +375,22 @@ } // Handle -miamcu flag. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (Ar->getOption().matches(options::OPT_miamcu)) { - if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) -D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - - if (A && !A->getOption().matches(options::OPT_m32)) -D.Diag(diag::err_drv_argument_not_allowed_with) -<< "-miamcu" << A->getBaseArg().getAsString(Args); - - Target.setArch(llvm::Triple::x86); - Target.setArchName("i586"); - Target.setEnvironment(llvm::Triple::UnknownEnvironment); - Target.setEnvironmentName(""); - Target.setOS(llvm::Triple::ELFIAMCU); - Target.setVendor(llvm::Triple::UnknownVendor); - Target.setVendorName("intel"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); } return Target; Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2243,12 +2243,10 @@ } // Set flags to support MCU ABI. - if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (A->getOption().matches(options::OPT_miamcu)) { - CmdArgs.push_back("-mfloat-abi"); - CmdArgs.push_back("soft"); - CmdArgs.push_back("-mstack-alignment=4"); -} + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); } } Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -280,9 +280,8 @@ } // Enforce -static if -miamcu is present. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) -if (Ar->getOption().matches(options::OPT_miamcu)) - DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -376,24 +375,22 @@ } // Handle -miamcu flag. - if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { -if (Ar->getOption().matches(options::OPT_miamcu)) { - if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) -D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" -
Re: [PATCH] D21469: Add -mno-iamcu option
This revision was automatically updated to reflect the committed changes. Closed by commit rL273147: [X86] Add -mno-iamcu option. (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D21469?vs=61088=61245#toc Repository: rL LLVM http://reviews.llvm.org/D21469 Files: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/miamcu-opt.c Index: cfe/trunk/include/clang/Driver/Options.td === --- cfe/trunk/include/clang/Driver/Options.td +++ cfe/trunk/include/clang/Driver/Options.td @@ -1311,6 +1311,7 @@ def mabi_EQ : Joined<["-"], "mabi=">, Group; def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, HelpText<"Use Intel MCU ABI">; +def mno_iamcu : Flag<["-"], "mno-iamcu">, Group, Flags<[DriverOption, CoreOption]>; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; Index: cfe/trunk/test/Driver/miamcu-opt.c === --- cfe/trunk/test/Driver/miamcu-opt.c +++ cfe/trunk/test/Driver/miamcu-opt.c @@ -4,16 +4,20 @@ // RUN: %clang -miamcu -no-canonical-prefixes %s -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -miamcu -no-canonical-prefixes -m32 %s -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -miamcu -no-canonical-prefixes -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -mno-iamcu -miamcu -no-canonical-prefixes %s -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -miamcu -no-canonical-prefixes -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64 // RUN: %clang -miamcu -no-canonical-prefixes -dynamic %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=DYNAMIC // RUN: %clang -miamcu -no-canonical-prefixes -target armv8-eabi %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=NOT-X86 +// RUN: %clang -miamcu -mno-iamcu -no-canonical-prefixes -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=MNOIAMCU // M64: error: invalid argument '-miamcu' not allowed with '-m64' // DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static' // NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi' +// MNOIAMCU-NOT: "-triple" "i586-intel-elfiamcu" + // CHECK: "{{.*}}clang{{.*}}" "-cc1" // CHECK: "-triple" "i586-intel-elfiamcu" // CHECK: "-static-define" Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -2243,10 +2243,12 @@ } // Set flags to support MCU ABI. - if (Args.hasArg(options::OPT_miamcu)) { -CmdArgs.push_back("-mfloat-abi"); -CmdArgs.push_back("soft"); -CmdArgs.push_back("-mstack-alignment=4"); + if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { +if (A->getOption().matches(options::OPT_miamcu)) { + CmdArgs.push_back("-mfloat-abi"); + CmdArgs.push_back("soft"); + CmdArgs.push_back("-mstack-alignment=4"); +} } } Index: cfe/trunk/lib/Driver/Driver.cpp === --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -280,8 +280,9 @@ } // Enforce -static if -miamcu is present. - if (Args.hasArg(options::OPT_miamcu)) -DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) +if (Ar->getOption().matches(options::OPT_miamcu)) + DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -375,22 +376,24 @@ } // Handle -miamcu flag. - if (Args.hasArg(options::OPT_miamcu)) { -if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) - D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - -if (A && !A->getOption().matches(options::OPT_m32)) - D.Diag(diag::err_drv_argument_not_allowed_with) - << "-miamcu" << A->getBaseArg().getAsString(Args); - -Target.setArch(llvm::Triple::x86); -Target.setArchName("i586"); -Target.setEnvironment(llvm::Triple::UnknownEnvironment); -Target.setEnvironmentName(""); -Target.setOS(llvm::Triple::ELFIAMCU); -Target.setVendor(llvm::Triple::UnknownVendor); -Target.setVendorName("intel"); + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { +if (Ar->getOption().matches(options::OPT_miamcu)) { + if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) +D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" +
r273147 - [X86] Add -mno-iamcu option.
Author: aturetsk Date: Mon Jun 20 05:31:39 2016 New Revision: 273147 URL: http://llvm.org/viewvc/llvm-project?rev=273147=rev Log: [X86] Add -mno-iamcu option. Add -mno-iamcu option to: 1) Countervail -miamcu option easily 2) Be compatible with GCC which supports this option Differential Revision: http://reviews.llvm.org/D21469 Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/miamcu-opt.c Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=273147=273146=273147=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Mon Jun 20 05:31:39 2016 @@ -1311,6 +1311,7 @@ def mx32 : Flag<["-"], "mx32">, Group, Group, Flags<[DriverOption, CoreOption]>, HelpText<"Use Intel MCU ABI">; +def mno_iamcu : Flag<["-"], "mno-iamcu">, Group, Flags<[DriverOption, CoreOption]>; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=273147=273146=273147=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Mon Jun 20 05:31:39 2016 @@ -280,8 +280,9 @@ DerivedArgList *Driver::TranslateInputAr } // Enforce -static if -miamcu is present. - if (Args.hasArg(options::OPT_miamcu)) -DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) +if (Ar->getOption().matches(options::OPT_miamcu)) + DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -375,22 +376,24 @@ static llvm::Triple computeTargetTriple( } // Handle -miamcu flag. - if (Args.hasArg(options::OPT_miamcu)) { -if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) - D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - -if (A && !A->getOption().matches(options::OPT_m32)) - D.Diag(diag::err_drv_argument_not_allowed_with) - << "-miamcu" << A->getBaseArg().getAsString(Args); - -Target.setArch(llvm::Triple::x86); -Target.setArchName("i586"); -Target.setEnvironment(llvm::Triple::UnknownEnvironment); -Target.setEnvironmentName(""); -Target.setOS(llvm::Triple::ELFIAMCU); -Target.setVendor(llvm::Triple::UnknownVendor); -Target.setVendorName("intel"); + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { +if (Ar->getOption().matches(options::OPT_miamcu)) { + if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) +D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + + if (A && !A->getOption().matches(options::OPT_m32)) +D.Diag(diag::err_drv_argument_not_allowed_with) +<< "-miamcu" << A->getBaseArg().getAsString(Args); + + Target.setArch(llvm::Triple::x86); + Target.setArchName("i586"); + Target.setEnvironment(llvm::Triple::UnknownEnvironment); + Target.setEnvironmentName(""); + Target.setOS(llvm::Triple::ELFIAMCU); + Target.setVendor(llvm::Triple::UnknownVendor); + Target.setVendorName("intel"); +} } return Target; Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=273147=273146=273147=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Mon Jun 20 05:31:39 2016 @@ -2243,10 +2243,12 @@ void Clang::AddX86TargetArgs(const ArgLi } // Set flags to support MCU ABI. - if (Args.hasArg(options::OPT_miamcu)) { -CmdArgs.push_back("-mfloat-abi"); -CmdArgs.push_back("soft"); -CmdArgs.push_back("-mstack-alignment=4"); + if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { +if (A->getOption().matches(options::OPT_miamcu)) { + CmdArgs.push_back("-mfloat-abi"); + CmdArgs.push_back("soft"); + CmdArgs.push_back("-mstack-alignment=4"); +} } } Modified: cfe/trunk/test/Driver/miamcu-opt.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/miamcu-opt.c?rev=273147=273146=273147=diff == ---
[PATCH] D21469: Add -mno-iamcu option
aturetsk created this revision. aturetsk added reviewers: bruno, echristo. aturetsk added subscribers: cfe-commits, zinovy.nis. Herald added a subscriber: mehdi_amini. Add -mno-iamcu option to: 1) Countervail -miamcu option easily 2) Be compatible with GCC which supports this option http://reviews.llvm.org/D21469 Files: include/clang/Driver/Options.td lib/Driver/Driver.cpp lib/Driver/Tools.cpp test/Driver/miamcu-opt.c Index: test/Driver/miamcu-opt.c === --- test/Driver/miamcu-opt.c +++ test/Driver/miamcu-opt.c @@ -4,16 +4,20 @@ // RUN: %clang -miamcu -no-canonical-prefixes %s -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -miamcu -no-canonical-prefixes -m32 %s -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -miamcu -no-canonical-prefixes -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -mno-iamcu -miamcu -no-canonical-prefixes %s -### -o %t.o 2>&1 | FileCheck %s // RUN: %clang -miamcu -no-canonical-prefixes -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64 // RUN: %clang -miamcu -no-canonical-prefixes -dynamic %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=DYNAMIC // RUN: %clang -miamcu -no-canonical-prefixes -target armv8-eabi %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=NOT-X86 +// RUN: %clang -miamcu -mno-iamcu -no-canonical-prefixes -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=MNOIAMCU // M64: error: invalid argument '-miamcu' not allowed with '-m64' // DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static' // NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi' +// MNOIAMCU-NOT: "-triple" "i586-intel-elfiamcu" + // CHECK: "{{.*}}clang{{.*}}" "-cc1" // CHECK: "-triple" "i586-intel-elfiamcu" // CHECK: "-static-define" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2236,10 +2236,12 @@ } // Set flags to support MCU ABI. - if (Args.hasArg(options::OPT_miamcu)) { -CmdArgs.push_back("-mfloat-abi"); -CmdArgs.push_back("soft"); -CmdArgs.push_back("-mstack-alignment=4"); + if (Arg *A = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { +if (A->getOption().matches(options::OPT_miamcu)) { + CmdArgs.push_back("-mfloat-abi"); + CmdArgs.push_back("soft"); + CmdArgs.push_back("-mstack-alignment=4"); +} } } Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -280,8 +280,9 @@ } // Enforce -static if -miamcu is present. - if (Args.hasArg(options::OPT_miamcu)) -DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) +if (Ar->getOption().matches(options::OPT_miamcu)) + DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. @@ -375,22 +376,24 @@ } // Handle -miamcu flag. - if (Args.hasArg(options::OPT_miamcu)) { -if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) - D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - -if (A && !A->getOption().matches(options::OPT_m32)) - D.Diag(diag::err_drv_argument_not_allowed_with) - << "-miamcu" << A->getBaseArg().getAsString(Args); - -Target.setArch(llvm::Triple::x86); -Target.setArchName("i586"); -Target.setEnvironment(llvm::Triple::UnknownEnvironment); -Target.setEnvironmentName(""); -Target.setOS(llvm::Triple::ELFIAMCU); -Target.setVendor(llvm::Triple::UnknownVendor); -Target.setVendorName("intel"); + if (Arg *Ar = Args.getLastArg(options::OPT_miamcu, options::OPT_mno_iamcu)) { +if (Ar->getOption().matches(options::OPT_miamcu)) { + if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) +D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + + if (A && !A->getOption().matches(options::OPT_m32)) +D.Diag(diag::err_drv_argument_not_allowed_with) +<< "-miamcu" << A->getBaseArg().getAsString(Args); + + Target.setArch(llvm::Triple::x86); + Target.setArchName("i586"); + Target.setEnvironment(llvm::Triple::UnknownEnvironment); + Target.setEnvironmentName(""); + Target.setOS(llvm::Triple::ELFIAMCU); + Target.setVendor(llvm::Triple::UnknownVendor); + Target.setVendorName("intel"); +} } return Target; Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++
r272887 - Patch "Compilation for Intel MCU (Part 2/3)" caused the clang-x64-ninja-win7
Author: aturetsk Date: Thu Jun 16 07:26:20 2016 New Revision: 272887 URL: http://llvm.org/viewvc/llvm-project?rev=272887=rev Log: Patch "Compilation for Intel MCU (Part 2/3)" caused the clang-x64-ninja-win7 buildbot to fail because of inaccurate CHECK in the test. This is a quick fix for the test to make it platform independent. Modified: cfe/trunk/test/Driver/miamcu-opt.c Modified: cfe/trunk/test/Driver/miamcu-opt.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/miamcu-opt.c?rev=272887=272886=272887=diff == --- cfe/trunk/test/Driver/miamcu-opt.c (original) +++ cfe/trunk/test/Driver/miamcu-opt.c Thu Jun 16 07:26:20 2016 @@ -11,13 +11,13 @@ // NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi' -// CHECK: "-cc1" +// CHECK: "{{.*}}clang{{.*}}" "-cc1" // CHECK: "-triple" "i586-intel-elfiamcu" // CHECK: "-static-define" // CHECK: "-mfloat-abi" "soft" // CHECK: "-mstack-alignment=4" -// CHECK: bin/ld +// CHECK: "{{.*}}ld{{(.exe)?}}" // CHECK: "-m" "elf_iamcu" // CHECK: "-static" // CHECK-NOT: crt1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r272885 - Compilation for Intel MCU (Part 3/3)
Author: aturetsk Date: Thu Jun 16 05:49:27 2016 New Revision: 272885 URL: http://llvm.org/viewvc/llvm-project?rev=272885=rev Log: Compilation for Intel MCU (Part 3/3) This is the last patch required to support compilation for Intel MCU target (e.g. Intel(R) Quark(TM) micro controller D 2000). When IAMCU triple is used: * Use IAMCU linker output format * Link with IAMCU crt objects * Link with IAMCU libraries Differential Revision: http://reviews.llvm.org/D20675 Modified: cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/miamcu-opt.c Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=272885=272884=272885=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Thu Jun 16 05:49:27 2016 @@ -9065,6 +9065,7 @@ static void AddLibgcc(const llvm::Triple ArgStringList , const ArgList ) { bool isAndroid = Triple.isAndroid(); bool isCygMing = Triple.isOSCygMing(); + bool IsIAMCU = Triple.isOSIAMCU(); bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) || Args.hasArg(options::OPT_static); if (!D.CCCIsCXX()) @@ -9081,7 +9082,7 @@ static void AddLibgcc(const llvm::Triple CmdArgs.push_back("--no-as-needed"); } - if (StaticLibgcc && !isAndroid) + if (StaticLibgcc && !isAndroid && !IsIAMCU) CmdArgs.push_back("-lgcc_eh"); else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX()) CmdArgs.push_back("-lgcc"); @@ -9129,6 +9130,8 @@ static void AddRunTimeLibs(const ToolCha static const char *getLDMOption(const llvm::Triple , const ArgList ) { switch (T.getArch()) { case llvm::Triple::x86: +if (T.isOSIAMCU()) + return "elf_iamcu"; return "elf_i386"; case llvm::Triple::aarch64: return "aarch64linux"; @@ -9188,6 +9191,7 @@ void gnutools::Linker::ConstructJob(Comp const llvm::Triple::ArchType Arch = ToolChain.getArch(); const bool isAndroid = ToolChain.getTriple().isAndroid(); + const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU(); const bool IsPIE = !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) && (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault()); @@ -9264,7 +9268,7 @@ void gnutools::Linker::ConstructJob(Comp CmdArgs.push_back(Output.getFilename()); if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { -if (!isAndroid) { +if (!isAndroid && !IsIAMCU) { const char *crt1 = nullptr; if (!Args.hasArg(options::OPT_shared)) { if (Args.hasArg(options::OPT_pg)) @@ -9280,18 +9284,22 @@ void gnutools::Linker::ConstructJob(Comp CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o"))); } -const char *crtbegin; -if (Args.hasArg(options::OPT_static)) - crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o"; -else if (Args.hasArg(options::OPT_shared)) - crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o"; -else if (IsPIE) - crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o"; -else - crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o"; +if (IsIAMCU) + CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o"))); +else { + const char *crtbegin; + if (Args.hasArg(options::OPT_static)) +crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o"; + else if (Args.hasArg(options::OPT_shared)) +crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o"; + else if (IsPIE) +crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o"; + else +crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o"; -if (HasCRTBeginEndFiles) - CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin))); + if (HasCRTBeginEndFiles) +CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin))); +} // Add crtfastmath.o if available and fast math is enabled. ToolChain.AddFastMathRuntimeIfAvailable(Args, CmdArgs); @@ -9375,13 +9383,24 @@ void gnutools::Linker::ConstructJob(Comp CmdArgs.push_back("-lc"); + // Add IAMCU specific libs, if needed. + if (IsIAMCU) +CmdArgs.push_back("-lgloss"); + if (Args.hasArg(options::OPT_static)) CmdArgs.push_back("--end-group"); else AddRunTimeLibs(ToolChain, D, CmdArgs, Args); + + // Add IAMCU specific libs (outside the group), if needed. + if (IsIAMCU) { +CmdArgs.push_back("--as-needed"); +CmdArgs.push_back("-lsoftfp"); +CmdArgs.push_back("--no-as-needed"); + } } -if (!Args.hasArg(options::OPT_nostartfiles)) { +if (!Args.hasArg(options::OPT_nostartfiles) && !IsIAMCU) { const char *crtend; if (Args.hasArg(options::OPT_shared)) crtend = isAndroid ?
r272883 - Compilation for Intel MCU (Part 2/3)
Author: aturetsk Date: Thu Jun 16 05:36:09 2016 New Revision: 272883 URL: http://llvm.org/viewvc/llvm-project?rev=272883=rev Log: Compilation for Intel MCU (Part 2/3) This is the second patch required to support compilation for Intel MCU target (e.g. Intel(R) Quark(TM) micro controller D 2000). When IAMCU triple is used: * Recognize and use IAMCU GCC toolchain * Set up include paths * Forbid C++ Differential Revision: http://reviews.llvm.org/D19274 Added: cfe/trunk/test/Driver/miamcu-opt.cpp (with props) Modified: cfe/trunk/include/clang/Driver/ToolChain.h cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/ToolChain.cpp cfe/trunk/lib/Driver/ToolChains.cpp cfe/trunk/lib/Driver/ToolChains.h cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/miamcu-opt.c Modified: cfe/trunk/include/clang/Driver/ToolChain.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=272883=272882=272883=diff == --- cfe/trunk/include/clang/Driver/ToolChain.h (original) +++ cfe/trunk/include/clang/Driver/ToolChain.h Thu Jun 16 05:36:09 2016 @@ -418,6 +418,10 @@ public: virtual void AddCudaIncludeArgs(const llvm::opt::ArgList , llvm::opt::ArgStringList ) const; + /// \brief Add arguments to use MCU GCC toolchain includes. + virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList , + llvm::opt::ArgStringList ) const; + /// \brief Return sanitizers which are available in this toolchain. virtual SanitizerMask getSupportedSanitizers() const; Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=272883=272882=272883=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Thu Jun 16 05:36:09 2016 @@ -2482,6 +2482,7 @@ const ToolChain ::getToolChain(co TC = new toolchains::Minix(*this, Target, Args); break; case llvm::Triple::Linux: +case llvm::Triple::ELFIAMCU: if (Target.getArch() == llvm::Triple::hexagon) TC = new toolchains::HexagonToolChain(*this, Target, Args); else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) && Modified: cfe/trunk/lib/Driver/ToolChain.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=272883=272882=272883=diff == --- cfe/trunk/lib/Driver/ToolChain.cpp (original) +++ cfe/trunk/lib/Driver/ToolChain.cpp Thu Jun 16 05:36:09 2016 @@ -696,3 +696,6 @@ SanitizerMask ToolChain::getSupportedSan void ToolChain::AddCudaIncludeArgs(const ArgList , ArgStringList ) const {} + +void ToolChain::AddIAMCUIncludeArgs(const ArgList , +ArgStringList ) const {} Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=272883=272882=272883=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Thu Jun 16 05:36:09 2016 @@ -1618,9 +1618,13 @@ bool Generic_GCC::GCCInstallationDetecto break; case llvm::Triple::x86: LibDirs.append(begin(X86LibDirs), end(X86LibDirs)); -TripleAliases.append(begin(X86Triples), end(X86Triples)); -BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); -BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples)); +// MCU toolchain is 32 bit only and its triple alias is TargetTriple +// itself, which will be appended below. +if (!TargetTriple.isOSIAMCU()) { + TripleAliases.append(begin(X86Triples), end(X86Triples)); + BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); + BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples)); +} break; case llvm::Triple::mips: LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs)); @@ -1770,14 +1774,14 @@ void Generic_GCC::CudaInstallationDetect namespace { // Filter to remove Multilibs that don't exist as a suffix to Path class FilterNonExistent { - StringRef Base; + StringRef Base, File; vfs::FileSystem public: - FilterNonExistent(StringRef Base, vfs::FileSystem ) - : Base(Base), VFS(VFS) {} + FilterNonExistent(StringRef Base, StringRef File, vfs::FileSystem ) + : Base(Base), File(File), VFS(VFS) {} bool operator()(const Multilib ) { -return !VFS.exists(Base + M.gccSuffix() + "/crtbegin.o"); +return !VFS.exists(Base + M.gccSuffix() + File); } }; } // end anonymous namespace @@ -1867,7 +1871,7 @@ static bool findMIPSMultilibs(const Driv // /usr // /lib <= crt*.o files compiled
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
This revision was automatically updated to reflect the committed changes. Closed by commit rL272883: Compilation for Intel MCU (Part 2/3) (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D19274?vs=57017=60958#toc Repository: rL LLVM http://reviews.llvm.org/D19274 Files: cfe/trunk/include/clang/Driver/ToolChain.h cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/ToolChain.cpp cfe/trunk/lib/Driver/ToolChains.cpp cfe/trunk/lib/Driver/ToolChains.h cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/miamcu-opt.c cfe/trunk/test/Driver/miamcu-opt.cpp Index: cfe/trunk/include/clang/Driver/ToolChain.h === --- cfe/trunk/include/clang/Driver/ToolChain.h +++ cfe/trunk/include/clang/Driver/ToolChain.h @@ -418,6 +418,10 @@ virtual void AddCudaIncludeArgs(const llvm::opt::ArgList , llvm::opt::ArgStringList ) const; + /// \brief Add arguments to use MCU GCC toolchain includes. + virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList , + llvm::opt::ArgStringList ) const; + /// \brief Return sanitizers which are available in this toolchain. virtual SanitizerMask getSupportedSanitizers() const; Index: cfe/trunk/test/Driver/miamcu-opt.c === --- cfe/trunk/test/Driver/miamcu-opt.c +++ cfe/trunk/test/Driver/miamcu-opt.c @@ -16,3 +16,6 @@ // CHECK: "-static-define" // CHECK: "-mfloat-abi" "soft" // CHECK: "-mstack-alignment=4" + +// CHECK: bin/ld +// CHECK: "-static" Index: cfe/trunk/test/Driver/miamcu-opt.cpp === --- cfe/trunk/test/Driver/miamcu-opt.cpp +++ cfe/trunk/test/Driver/miamcu-opt.cpp @@ -0,0 +1,3 @@ +// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s + +// CHECK: error: the clang compiler does not support 'C++ for IAMCU' Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -295,6 +295,7 @@ const InputInfoList , const ToolChain *AuxToolChain) const { Arg *A; + const bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); CheckPreprocessingOptions(D, Args); @@ -562,10 +563,15 @@ AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs); } - // Add system include arguments. - getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs); - if (AuxToolChain) + // Add system include arguments for all targets but IAMCU. + if (!IsIAMCU) { +getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs); +if (AuxToolChain) AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs); + } else { +// For IAMCU add special include arguments. +getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs); + } // Add CUDA include arguments, if needed. if (types::isCuda(Inputs[0].getType())) @@ -3742,6 +3748,7 @@ getToolChain().getTriple().isWindowsCygwinEnvironment(); bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment(); bool IsPS4CPU = getToolChain().getTriple().isPS4CPU(); + bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); // Check number of inputs for sanity. We need at least one input. assert(Inputs.size() >= 1 && "Must have at least one input."); @@ -3752,6 +3759,10 @@ bool IsCuda = types::isCuda(Input.getType()); assert((IsCuda || Inputs.size() == 1) && "Unable to handle multiple inputs."); + // C++ is not supported for IAMCU. + if (IsIAMCU && types::isCXX(Input.getType())) +D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU"; + // Invoke ourselves in -cc1 mode. // // FIXME: Implement custom jobs for internal actions. Index: cfe/trunk/lib/Driver/Driver.cpp === --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -2482,6 +2482,7 @@ TC = new toolchains::Minix(*this, Target, Args); break; case llvm::Triple::Linux: +case llvm::Triple::ELFIAMCU: if (Target.getArch() == llvm::Triple::hexagon) TC = new toolchains::HexagonToolChain(*this, Target, Args); else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) && Index: cfe/trunk/lib/Driver/ToolChain.cpp === --- cfe/trunk/lib/Driver/ToolChain.cpp +++ cfe/trunk/lib/Driver/ToolChain.cpp @@ -696,3 +696,6 @@ void ToolChain::AddCudaIncludeArgs(const ArgList , ArgStringList ) const {} + +void ToolChain::AddIAMCUIncludeArgs(const ArgList , +ArgStringList ) const {} Index: cfe/trunk/lib/Driver/ToolChains.h === ---
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk added inline comments. Comment at: lib/Driver/Tools.cpp:3657 @@ +3656,3 @@ + if (IsIAMCU && types::isCXX(Input.getType())) +D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str(); + aturetsk wrote: > bruno wrote: > > aturetsk wrote: > > > bruno wrote: > > > > Taking a look at this again I don't think there's a real need for a new > > > > diagnostic here; instead of adding diag::err_drv_cxx_not_supported, you > > > > can do something similar to: > > > > > > > > D.Diag(diag::err_drv_clang_unsupported) << "C++ is not supported with > > > > -miamcu" > > > > > > > > Otherwise, LGTM! > > > The best thing I could come up with is this: > > > ``` > > > D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU"; > > > ``` > > > This code makes the error message look like this: > > > ``` > > > error: the clang compiler does not support 'C++ for IAMCU' > > > ``` > > > As you can see the message is a bit crooked. Do you thinks it's better to > > > keep it this way? > > Sorry, but I didn't mean you should change the message. My only point here > > is that I don't see the need for adding a new diagnostic, you can still > > keep something more similar with your old intent, example: > > > > D.Diag(diag::err_drv_clang_unsupported) << "C++ for target" << > > getToolChain().getTriple().str(); > My concern is not the change in the message :) My concern is redundant > quotation marks which look a bit ugly and out of place. > But if you're OK with them, so would I. Bruno, are you ok if the message will be: ``` error: the clang compiler does not support 'C++ for IAMCU' ``` If so I'll proceed with committing the changes. http://reviews.llvm.org/D19274 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21066: Pass MCSubtargetInfo instead of CPU and Triple to createMCAsmBackend
aturetsk created this revision. aturetsk added reviewers: bruno, echristo, ahatanak, RKSimon. aturetsk added a subscriber: cfe-commits. Herald added a subscriber: mehdi_amini. Pass MCSubtargetInfo instead of CPU and Triple to AsmBackend in order to be able to reach feature bits there (e.g. for ckecking of long nop support). CPU and Triple are taken from MCSubtargetInfo. http://reviews.llvm.org/D21066 Files: tools/driver/cc1as_main.cpp Index: tools/driver/cc1as_main.cpp === --- tools/driver/cc1as_main.cpp +++ tools/driver/cc1as_main.cpp @@ -381,7 +381,7 @@ MCAsmBackend *MAB = nullptr; if (Opts.ShowEncoding) { CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); - MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple, Opts.CPU); + MAB = TheTarget->createMCAsmBackend(*STI, *MRI); } auto FOut = llvm::make_unique(*Out); Str.reset(TheTarget->createAsmStreamer( @@ -398,8 +398,8 @@ } MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); -MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple, - Opts.CPU); +MCAsmBackend *MAB = +TheTarget->createMCAsmBackend(*STI, *MRI); Triple T(Opts.Triple); Str.reset(TheTarget->createMCObjectStreamer( T, Ctx, *MAB, *Out, CE, *STI, Opts.RelaxAll, Index: tools/driver/cc1as_main.cpp === --- tools/driver/cc1as_main.cpp +++ tools/driver/cc1as_main.cpp @@ -381,7 +381,7 @@ MCAsmBackend *MAB = nullptr; if (Opts.ShowEncoding) { CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); - MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple, Opts.CPU); + MAB = TheTarget->createMCAsmBackend(*STI, *MRI); } auto FOut = llvm::make_unique(*Out); Str.reset(TheTarget->createAsmStreamer( @@ -398,8 +398,8 @@ } MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); -MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*MRI, Opts.Triple, - Opts.CPU); +MCAsmBackend *MAB = +TheTarget->createMCAsmBackend(*STI, *MRI); Triple T(Opts.Triple); Str.reset(TheTarget->createMCObjectStreamer( T, Ctx, *MAB, *Out, CE, *STI, Opts.RelaxAll, ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk added inline comments. Comment at: lib/Driver/Tools.cpp:3657 @@ +3656,3 @@ + if (IsIAMCU && types::isCXX(Input.getType())) +D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str(); + bruno wrote: > aturetsk wrote: > > bruno wrote: > > > Taking a look at this again I don't think there's a real need for a new > > > diagnostic here; instead of adding diag::err_drv_cxx_not_supported, you > > > can do something similar to: > > > > > > D.Diag(diag::err_drv_clang_unsupported) << "C++ is not supported with > > > -miamcu" > > > > > > Otherwise, LGTM! > > The best thing I could come up with is this: > > ``` > > D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU"; > > ``` > > This code makes the error message look like this: > > ``` > > error: the clang compiler does not support 'C++ for IAMCU' > > ``` > > As you can see the message is a bit crooked. Do you thinks it's better to > > keep it this way? > Sorry, but I didn't mean you should change the message. My only point here is > that I don't see the need for adding a new diagnostic, you can still keep > something more similar with your old intent, example: > > D.Diag(diag::err_drv_clang_unsupported) << "C++ for target" << > getToolChain().getTriple().str(); My concern is not the change in the message :) My concern is redundant quotation marks which look a bit ugly and out of place. But if you're OK with them, so would I. http://reviews.llvm.org/D19274 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D20675: Compilation for Intel MCU (Part 3/3)
aturetsk created this revision. aturetsk added reviewers: rsmith, bruno. aturetsk added subscribers: cfe-commits, zinovy.nis, DavidKreitzer. Herald added subscribers: srhines, danalbert, tberghammer. This is the last patch required to support compilation for Intel MCU target (e.g. Intel(R) Quark(TM) micro controller D 2000). When IAMCU triple is used: * Use IAMCU linker output format * Link with IAMCU crt objects * Link with IAMCU libraries http://reviews.llvm.org/D20675 Files: lib/Driver/Tools.cpp test/Driver/miamcu-opt.c Index: test/Driver/miamcu-opt.c === --- test/Driver/miamcu-opt.c +++ test/Driver/miamcu-opt.c @@ -18,4 +18,12 @@ // CHECK: "-mstack-alignment=4" // CHECK: bin/ld +// CHECK: "-m" "elf_iamcu" // CHECK: "-static" +// CHECK-NOT: crt1 +// CHECK-NOT: crti +// CHECK-NOT: ctrbegin +// CHECK: crt0 +// CHECK: "--start-group" "-lgcc" "-lc" "-lgloss" "--end-group" "--as-needed" "-lsoftfp" "--no-as-needed" +// CHECK-NOT: crtend +// CHECK-NOT: ctrn Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -9011,6 +9011,7 @@ ArgStringList , const ArgList ) { bool isAndroid = Triple.isAndroid(); bool isCygMing = Triple.isOSCygMing(); + bool IsIAMCU = Triple.isOSIAMCU(); bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) || Args.hasArg(options::OPT_static); if (!D.CCCIsCXX()) @@ -9027,7 +9028,7 @@ CmdArgs.push_back("--no-as-needed"); } - if (StaticLibgcc && !isAndroid) + if (StaticLibgcc && !isAndroid && !IsIAMCU) CmdArgs.push_back("-lgcc_eh"); else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX()) CmdArgs.push_back("-lgcc"); @@ -9075,6 +9076,8 @@ static const char *getLDMOption(const llvm::Triple , const ArgList ) { switch (T.getArch()) { case llvm::Triple::x86: +if (T.isOSIAMCU()) + return "elf_iamcu"; return "elf_i386"; case llvm::Triple::aarch64: return "aarch64linux"; @@ -9134,6 +9137,7 @@ const llvm::Triple::ArchType Arch = ToolChain.getArch(); const bool isAndroid = ToolChain.getTriple().isAndroid(); + const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU(); const bool IsPIE = !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) && (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault()); @@ -9210,7 +9214,7 @@ CmdArgs.push_back(Output.getFilename()); if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { -if (!isAndroid) { +if (!isAndroid && !IsIAMCU) { const char *crt1 = nullptr; if (!Args.hasArg(options::OPT_shared)) { if (Args.hasArg(options::OPT_pg)) @@ -9226,18 +9230,22 @@ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o"))); } -const char *crtbegin; -if (Args.hasArg(options::OPT_static)) - crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o"; -else if (Args.hasArg(options::OPT_shared)) - crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o"; -else if (IsPIE) - crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o"; -else - crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o"; +if (IsIAMCU) + CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o"))); +else { + const char *crtbegin; + if (Args.hasArg(options::OPT_static)) +crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o"; + else if (Args.hasArg(options::OPT_shared)) +crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o"; + else if (IsPIE) +crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbeginS.o"; + else +crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o"; -if (HasCRTBeginEndFiles) - CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin))); + if (HasCRTBeginEndFiles) +CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin))); +} // Add crtfastmath.o if available and fast math is enabled. ToolChain.AddFastMathRuntimeIfAvailable(Args, CmdArgs); @@ -9321,13 +9329,24 @@ CmdArgs.push_back("-lc"); + // Add IAMCU specific libs, if needed. + if (IsIAMCU) +CmdArgs.push_back("-lgloss"); + if (Args.hasArg(options::OPT_static)) CmdArgs.push_back("--end-group"); else AddRunTimeLibs(ToolChain, D, CmdArgs, Args); + + // Add IAMCU specific libs (outside the group), if needed. + if (IsIAMCU) { +CmdArgs.push_back("--as-needed"); +CmdArgs.push_back("-lsoftfp"); +CmdArgs.push_back("--no-as-needed"); + } } -if (!Args.hasArg(options::OPT_nostartfiles)) { +if (!Args.hasArg(options::OPT_nostartfiles) && !IsIAMCU) { const char *crtend; if (Args.hasArg(options::OPT_shared)) crtend =
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk added inline comments. Comment at: lib/Driver/Tools.cpp:3657 @@ +3656,3 @@ + if (IsIAMCU && types::isCXX(Input.getType())) +D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str(); + bruno wrote: > Taking a look at this again I don't think there's a real need for a new > diagnostic here; instead of adding diag::err_drv_cxx_not_supported, you can > do something similar to: > > D.Diag(diag::err_drv_clang_unsupported) << "C++ is not supported with -miamcu" > > Otherwise, LGTM! The best thing I could come up with is this: ``` D.Diag(diag::err_drv_clang_unsupported) << "C++ for IAMCU"; ``` This code makes the error message look like this: ``` error: the clang compiler does not support 'C++ for IAMCU' ``` As you can see the message is a bit crooked. Do you thinks it's better to keep it this way? http://reviews.llvm.org/D19274 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk added a comment. Ping. http://reviews.llvm.org/D19274 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk added a comment. Hi Bruno, Thanks for the review. Comment at: include/clang/Basic/DiagnosticDriverKinds.td:157 @@ -156,1 +156,3 @@ +def err_drv_cxx_not_supported : Error< + "C++ is not supported for target '%0'">; Yes. I've found nothing similar. Comment at: lib/Driver/Tools.cpp:301 @@ -299,3 +300,3 @@ CheckPreprocessingOptions(D, Args); Args.AddLastArg(CmdArgs, options::OPT_C); Done. Comment at: lib/Driver/Tools.cpp:574 @@ -569,1 +573,3 @@ +getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs); + } Done. http://reviews.llvm.org/D19274 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk updated this revision to Diff 57017. aturetsk added a comment. Fix the remarks. http://reviews.llvm.org/D19274 Files: include/clang/Basic/DiagnosticDriverKinds.td include/clang/Driver/ToolChain.h lib/Driver/Driver.cpp lib/Driver/ToolChain.cpp lib/Driver/ToolChains.cpp lib/Driver/ToolChains.h lib/Driver/Tools.cpp test/Driver/miamcu-opt.c test/Driver/miamcu-opt.cpp Index: test/Driver/miamcu-opt.cpp === --- /dev/null +++ test/Driver/miamcu-opt.cpp @@ -0,0 +1,3 @@ +// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s + +// CHECK: error: C++ is not supported for target 'i586-intel-elfiamcu' Index: test/Driver/miamcu-opt.c === --- test/Driver/miamcu-opt.c +++ test/Driver/miamcu-opt.c @@ -16,3 +16,6 @@ // CHECK: "-static-define" // CHECK: "-mfloat-abi" "soft" // CHECK: "-mstack-alignment=4" + +// CHECK: bin/ld +// CHECK: "-static" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -295,6 +295,7 @@ const InputInfoList , const ToolChain *AuxToolChain) const { Arg *A; + const bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); CheckPreprocessingOptions(D, Args); @@ -562,10 +563,15 @@ AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs); } - // Add system include arguments. - getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs); - if (AuxToolChain) + // Add system include arguments for all targets but IAMCU. + if (!IsIAMCU) { +getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs); +if (AuxToolChain) AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs); + } else { +// For IAMCU add special include arguments. +getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs); + } // Add CUDA include arguments, if needed. if (types::isCuda(Inputs[0].getType())) @@ -3635,6 +3641,7 @@ getToolChain().getTriple().isWindowsCygwinEnvironment(); bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment(); bool IsPS4CPU = getToolChain().getTriple().isPS4CPU(); + bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); // Check number of inputs for sanity. We need at least one input. assert(Inputs.size() >= 1 && "Must have at least one input."); @@ -3645,6 +3652,10 @@ bool IsCuda = types::isCuda(Input.getType()); assert((IsCuda || Inputs.size() == 1) && "Unable to handle multiple inputs."); + // C++ is not supported for IAMCU. + if (IsIAMCU && types::isCXX(Input.getType())) +D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str(); + // Invoke ourselves in -cc1 mode. // // FIXME: Implement custom jobs for internal actions. Index: lib/Driver/ToolChains.h === --- lib/Driver/ToolChains.h +++ lib/Driver/ToolChains.h @@ -808,6 +808,8 @@ llvm::opt::ArgStringList ) const override; void AddCudaIncludeArgs(const llvm::opt::ArgList , llvm::opt::ArgStringList ) const override; + void AddIAMCUIncludeArgs(const llvm::opt::ArgList , + llvm::opt::ArgStringList ) const override; bool isPIEDefault() const override; SanitizerMask getSupportedSanitizers() const override; void addProfileRTLibs(const llvm::opt::ArgList , Index: lib/Driver/ToolChains.cpp === --- lib/Driver/ToolChains.cpp +++ lib/Driver/ToolChains.cpp @@ -1610,9 +1610,13 @@ break; case llvm::Triple::x86: LibDirs.append(begin(X86LibDirs), end(X86LibDirs)); -TripleAliases.append(begin(X86Triples), end(X86Triples)); -BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); -BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples)); +// MCU toolchain is 32 bit only and its triple alias is TargetTriple +// itself, which will be appended below. +if (!TargetTriple.isOSIAMCU()) { + TripleAliases.append(begin(X86Triples), end(X86Triples)); + BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); + BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples)); +} break; case llvm::Triple::mips: LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs)); @@ -1758,14 +1762,14 @@ namespace { // Filter to remove Multilibs that don't exist as a suffix to Path class FilterNonExistent { - StringRef Base; + StringRef Base, File; vfs::FileSystem public: - FilterNonExistent(StringRef Base, vfs::FileSystem ) - : Base(Base), VFS(VFS) {} + FilterNonExistent(StringRef Base, StringRef File, vfs::FileSystem ) + : Base(Base), File(File), VFS(VFS) {} bool operator()(const Multilib ) { -return !VFS.exists(Base +
Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87
aturetsk added a comment. Hi, Thanks for the review. Committed: 1. Add a test for driver options from m_x86_Features_Group (http://reviews.llvm.org/rL268487) 2. Add missing -mno-cx16 driver option (http://reviews.llvm.org/rL268488) 3. Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87 (http://reviews.llvm.org/rL268489) Repository: rL LLVM http://reviews.llvm.org/D19658 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r268488 - Add missing -mno-cx16 driver option.
Author: aturetsk Date: Wed May 4 06:19:41 2016 New Revision: 268488 URL: http://llvm.org/viewvc/llvm-project?rev=268488=rev Log: Add missing -mno-cx16 driver option. Differential Revision: http://reviews.llvm.org/D19658 Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/test/Driver/x86-target-features.c Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=268488=268487=268488=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Wed May 4 06:19:41 2016 @@ -1410,6 +1410,7 @@ def mno_prfchw : Flag<["-"], "mno-prfchw def mno_rdseed : Flag<["-"], "mno-rdseed">, Group; def mno_adx : Flag<["-"], "mno-adx">, Group; def mno_sha : Flag<["-"], "mno-sha">, Group; +def mno_cx16 : Flag<["-"], "mno-cx16">, Group; def mno_fxsr : Flag<["-"], "mno-fxsr">, Group; def mno_xsave : Flag<["-"], "mno-xsave">, Group; def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group; Modified: cfe/trunk/test/Driver/x86-target-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/x86-target-features.c?rev=268488=268487=268488=diff == --- cfe/trunk/test/Driver/x86-target-features.c (original) +++ cfe/trunk/test/Driver/x86-target-features.c Wed May 4 06:19:41 2016 @@ -34,9 +34,9 @@ // NO-XOP: "-target-feature" "-xop" "-target-feature" "-f16c" "-target-feature" "-rtm" "-target-feature" "-prfchw" "-target-feature" "-rdseed" // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msha -mpku -madx -mcx16 -mfxsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SHA %s -// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sha -mno-pku -mno-adx -mno-fxsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SHA %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sha -mno-pku -mno-adx -mno-cx16 -mno-fxsr %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SHA %s // SHA: "-target-feature" "+sha" "-target-feature" "+pku" "-target-feature" "+adx" "-target-feature" "+cx16" "-target-feature" "+fxsr" -// NO-SHA: "-target-feature" "-sha" "-target-feature" "-pku" "-target-feature" "-adx" "-target-feature" "-fxsr" +// NO-SHA: "-target-feature" "-sha" "-target-feature" "-pku" "-target-feature" "-adx" "-target-feature" "-cx16" "-target-feature" "-fxsr" // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mxsave -mxsaveopt -mxsavec -mxsaves %s -### -o %t.o 2>&1 | FileCheck -check-prefix=XSAVE %s // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-xsave -mno-xsaveopt -mno-xsavec -mno-xsaves %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-XSAVE %s ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87
This revision was automatically updated to reflect the committed changes. Closed by commit rL268487: Add a test for driver options from m_x86_Features_Group. (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D19658?vs=55579=56125#toc Repository: rL LLVM http://reviews.llvm.org/D19658 Files: cfe/trunk/test/Driver/x86-target-features.c Index: cfe/trunk/test/Driver/x86-target-features.c === --- cfe/trunk/test/Driver/x86-target-features.c +++ cfe/trunk/test/Driver/x86-target-features.c @@ -0,0 +1,44 @@ +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mmmx -m3dnow -m3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=MMX %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-mmx -mno-3dnow -mno-3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-MMX %s +// MMX: "-target-feature" "+mmx" "-target-feature" "+3dnow" "-target-feature" "+3dnowa" +// NO-MMX: "-target-feature" "-mmx" "-target-feature" "-3dnow" "-target-feature" "-3dnowa" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse -msse2 -msse3 -mssse3 -msse4a -msse4.1 -msse4.2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SSE %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4a -mno-sse4.1 -mno-sse4.2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE %s +// SSE: "-target-feature" "+sse" "-target-feature" "+sse2" "-target-feature" "+sse3" "-target-feature" "+ssse3" "-target-feature" "+sse4a" "-target-feature" "+sse4.1" "-target-feature" "+sse4.2" +// NO-SSE: "-target-feature" "-sse" "-target-feature" "-sse2" "-target-feature" "-sse3" "-target-feature" "-ssse3" "-target-feature" "-sse4a" "-target-feature" "-sse4.1" "-target-feature" "-sse4.2" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse4 -maes %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SSE4-AES %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse4 -mno-aes %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE4-AES %s +// SSE4-AES: "-target-feature" "+sse4.2" "-target-feature" "+aes" +// NO-SSE4-AES: "-target-feature" "-sse4.1" "-target-feature" "-aes" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx -mavx2 -mavx512f -mavx512cd -mavx512er -mavx512pf -mavx512dq -mavx512bw -mavx512vl -mavx512vbmi -mavx512ifma %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-avx -mno-avx2 -mno-avx512f -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512vbmi -mno-avx512ifma %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-AVX %s +// AVX: "-target-feature" "+avx" "-target-feature" "+avx2" "-target-feature" "+avx512f" "-target-feature" "+avx512cd" "-target-feature" "+avx512er" "-target-feature" "+avx512pf" "-target-feature" "+avx512dq" "-target-feature" "+avx512bw" "-target-feature" "+avx512vl" "-target-feature" "+avx512vbmi" "-target-feature" "+avx512ifma" +// NO-AVX: "-target-feature" "-avx" "-target-feature" "-avx2" "-target-feature" "-avx512f" "-target-feature" "-avx512cd" "-target-feature" "-avx512er" "-target-feature" "-avx512pf" "-target-feature" "-avx512dq" "-target-feature" "-avx512bw" "-target-feature" "-avx512vl" "-target-feature" "-avx512vbmi" "-target-feature" "-avx512ifma" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mpclmul -mrdrnd -mfsgsbase -mbmi -mbmi2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BMI %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-pclmul -mno-rdrnd -mno-fsgsbase -mno-bmi -mno-bmi2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-BMI %s +// BMI: "-target-feature" "+pclmul" "-target-feature" "+rdrnd" "-target-feature" "+fsgsbase" "-target-feature" "+bmi" "-target-feature" "+bmi2" +// NO-BMI: "-target-feature" "-pclmul" "-target-feature" "-rdrnd" "-target-feature" "-fsgsbase" "-target-feature" "-bmi" "-target-feature" "-bmi2" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mlzcnt -mpopcnt -mtbm -mfma -mfma4 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=FMA %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-lzcnt -mno-popcnt -mno-tbm -mno-fma -mno-fma4 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-FMA %s +// FMA: "-target-feature" "+lzcnt" "-target-feature" "+popcnt" "-target-feature" "+tbm" "-target-feature" "+fma" "-target-feature" "+fma4" +// NO-FMA: "-target-feature" "-lzcnt" "-target-feature" "-popcnt" "-target-feature" "-tbm" "-target-feature" "-fma" "-target-feature" "-fma4" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mxop -mf16c -mrtm -mprfchw -mrdseed %s -### -o %t.o 2>&1 | FileCheck -check-prefix=XOP %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-xop -mno-f16c -mno-rtm -mno-prfchw -mno-rdseed %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-XOP %s +// XOP:
Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87
aturetsk added a comment. Hi, Thanks for the review. All m_x86_Features_Group options are handled in function handleTargetFeaturesGroup from lib/Driver/Tools.cpp, so there is no additional code needed. There was no test for this, so I added a new one trying to cover all options from m_x86_Features_Group. Comment at: include/clang/Driver/Options.td:1406 @@ -1403,2 +1405,3 @@ def mno_sha : Flag<["-"], "mno-sha">, Group; +def mno_cx16 : Flag<["-"], "mno-cx16">, Group; def mno_fxsr : Flag<["-"], "mno-fxsr">, Group; The test showed me that this flag is missing so I added it. http://reviews.llvm.org/D19658 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87
aturetsk updated this revision to Diff 55579. aturetsk added a comment. Add a missing option and a test. http://reviews.llvm.org/D19658 Files: include/clang/Driver/Options.td test/Driver/x86-target-features.c Index: test/Driver/x86-target-features.c === --- /dev/null +++ test/Driver/x86-target-features.c @@ -0,0 +1,51 @@ +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mx87 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=X87 %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-x87 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-X87 %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -m80387 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=X87 %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-80387 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-X87 %s +// X87: "-target-feature" "+x87" +// NO-X87: "-target-feature" "-x87" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mmmx -m3dnow -m3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=MMX %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-mmx -mno-3dnow -mno-3dnowa %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-MMX %s +// MMX: "-target-feature" "+mmx" "-target-feature" "+3dnow" "-target-feature" "+3dnowa" +// NO-MMX: "-target-feature" "-mmx" "-target-feature" "-3dnow" "-target-feature" "-3dnowa" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse -msse2 -msse3 -mssse3 -msse4a -msse4.1 -msse4.2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SSE %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4a -mno-sse4.1 -mno-sse4.2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE %s +// SSE: "-target-feature" "+sse" "-target-feature" "+sse2" "-target-feature" "+sse3" "-target-feature" "+ssse3" "-target-feature" "+sse4a" "-target-feature" "+sse4.1" "-target-feature" "+sse4.2" +// NO-SSE: "-target-feature" "-sse" "-target-feature" "-sse2" "-target-feature" "-sse3" "-target-feature" "-ssse3" "-target-feature" "-sse4a" "-target-feature" "-sse4.1" "-target-feature" "-sse4.2" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -msse4 -maes %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SSE4-AES %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-sse4 -mno-aes %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SSE4-AES %s +// SSE4-AES: "-target-feature" "+sse4.2" "-target-feature" "+aes" +// NO-SSE4-AES: "-target-feature" "-sse4.1" "-target-feature" "-aes" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mavx -mavx2 -mavx512f -mavx512cd -mavx512er -mavx512pf -mavx512dq -mavx512bw -mavx512vl -mavx512vbmi -mavx512ifma %s -### -o %t.o 2>&1 | FileCheck -check-prefix=AVX %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-avx -mno-avx2 -mno-avx512f -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512vbmi -mno-avx512ifma %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-AVX %s +// AVX: "-target-feature" "+avx" "-target-feature" "+avx2" "-target-feature" "+avx512f" "-target-feature" "+avx512cd" "-target-feature" "+avx512er" "-target-feature" "+avx512pf" "-target-feature" "+avx512dq" "-target-feature" "+avx512bw" "-target-feature" "+avx512vl" "-target-feature" "+avx512vbmi" "-target-feature" "+avx512ifma" +// NO-AVX: "-target-feature" "-avx" "-target-feature" "-avx2" "-target-feature" "-avx512f" "-target-feature" "-avx512cd" "-target-feature" "-avx512er" "-target-feature" "-avx512pf" "-target-feature" "-avx512dq" "-target-feature" "-avx512bw" "-target-feature" "-avx512vl" "-target-feature" "-avx512vbmi" "-target-feature" "-avx512ifma" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mpclmul -mrdrnd -mfsgsbase -mbmi -mbmi2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=BMI %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-pclmul -mno-rdrnd -mno-fsgsbase -mno-bmi -mno-bmi2 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-BMI %s +// BMI: "-target-feature" "+pclmul" "-target-feature" "+rdrnd" "-target-feature" "+fsgsbase" "-target-feature" "+bmi" "-target-feature" "+bmi2" +// NO-BMI: "-target-feature" "-pclmul" "-target-feature" "-rdrnd" "-target-feature" "-fsgsbase" "-target-feature" "-bmi" "-target-feature" "-bmi2" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mlzcnt -mpopcnt -mtbm -mfma -mfma4 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=FMA %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-lzcnt -mno-popcnt -mno-tbm -mno-fma -mno-fma4 %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-FMA %s +// FMA: "-target-feature" "+lzcnt" "-target-feature" "+popcnt" "-target-feature" "+tbm" "-target-feature" "+fma" "-target-feature" "+fma4" +// NO-FMA: "-target-feature" "-lzcnt" "-target-feature" "-popcnt" "-target-feature" "-tbm" "-target-feature" "-fma"
[PATCH] D19658: [X86] Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87
aturetsk created this revision. aturetsk added reviewers: rsmith, echristo. aturetsk added subscribers: cfe-commits, zinovy.nis. Herald added a subscriber: joker.eph. Add -m[no-]x87 and -m[no-]80387 options to control FeatureX87. -m[no-]80387 options is added for compatibility with GCC. http://reviews.llvm.org/D19658 Files: include/clang/Driver/Options.td Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1361,6 +1361,8 @@ def mno_rtd: Flag<["-"], "mno-rtd">, Group; def mno_soft_float : Flag<["-"], "mno-soft-float">, Group; def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group; +def mno_x87 : Flag<["-"], "mno-x87">, Group; +def mno_80387 : Flag<["-"], "mno-80387">, Alias; def mno_sse2 : Flag<["-"], "mno-sse2">, Group; def mno_sse3 : Flag<["-"], "mno-sse3">, Group; def mno_sse4a : Flag<["-"], "mno-sse4a">, Group; @@ -1527,6 +1529,8 @@ def mimplicit_float : Flag<["-"], "mimplicit-float">, Group; def mrecip : Flag<["-"], "mrecip">, Group; def mrecip_EQ : CommaJoined<["-"], "mrecip=">, Group, Flags<[CC1Option]>; +def mx87 : Flag<["-"], "mx87">, Group; +def m80387 : Flag<["-"], "m80387">, Alias; def msse2 : Flag<["-"], "msse2">, Group; def msse3 : Flag<["-"], "msse3">, Group; def msse4a : Flag<["-"], "msse4a">, Group; Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1361,6 +1361,8 @@ def mno_rtd: Flag<["-"], "mno-rtd">, Group; def mno_soft_float : Flag<["-"], "mno-soft-float">, Group; def mno_stackrealign : Flag<["-"], "mno-stackrealign">, Group; +def mno_x87 : Flag<["-"], "mno-x87">, Group; +def mno_80387 : Flag<["-"], "mno-80387">, Alias; def mno_sse2 : Flag<["-"], "mno-sse2">, Group; def mno_sse3 : Flag<["-"], "mno-sse3">, Group; def mno_sse4a : Flag<["-"], "mno-sse4a">, Group; @@ -1527,6 +1529,8 @@ def mimplicit_float : Flag<["-"], "mimplicit-float">, Group; def mrecip : Flag<["-"], "mrecip">, Group; def mrecip_EQ : CommaJoined<["-"], "mrecip=">, Group, Flags<[CC1Option]>; +def mx87 : Flag<["-"], "mx87">, Group; +def m80387 : Flag<["-"], "m80387">, Alias; def msse2 : Flag<["-"], "msse2">, Group; def msse3 : Flag<["-"], "msse3">, Group; def msse4a : Flag<["-"], "msse4a">, Group; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r266972 - Compilation for Intel MCU (Part 1/3)
Author: aturetsk Date: Thu Apr 21 05:16:48 2016 New Revision: 266972 URL: http://llvm.org/viewvc/llvm-project?rev=266972=rev Log: Compilation for Intel MCU (Part 1/3) Add -miamcu option which: * Sets IAMCU triple * Sets IAMCU ABI * Enforces static compilation Differential Revision: http://reviews.llvm.org/D18398 Added: cfe/trunk/test/Driver/miamcu-opt.c (with props) Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266972=266971=266972=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Thu Apr 21 05:16:48 2016 @@ -1292,6 +1292,8 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group; +def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=266972=266971=266972=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Thu Apr 21 05:16:48 2016 @@ -278,6 +278,10 @@ DerivedArgList *Driver::TranslateInputAr DAL->append(A); } + // Enforce -static if -miamcu is present. + if (Args.hasArg(options::OPT_miamcu)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. #if defined(HOST_LINK_VERSION) @@ -296,7 +300,8 @@ DerivedArgList *Driver::TranslateInputAr /// /// This routine provides the logic to compute a target triple from various /// args passed to the driver and the default triple string. -static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, +static llvm::Triple computeTargetTriple(const Driver , +StringRef DefaultTargetTriple, const ArgList , StringRef DarwinArchName = "") { // FIXME: Already done in Compilation *Driver::BuildCompilation @@ -341,8 +346,9 @@ static llvm::Triple computeTargetTriple( return Target; // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. - if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16)) { + Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, + options::OPT_m32, options::OPT_m16); + if (A) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; if (A->getOption().matches(options::OPT_m64)) { @@ -367,6 +373,25 @@ static llvm::Triple computeTargetTriple( Target.setArch(AT); } + // Handle -miamcu flag. + if (Args.hasArg(options::OPT_miamcu)) { +if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); + } + return Target; } @@ -501,8 +526,8 @@ Compilation *Driver::BuildCompilation(Ar DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain = - getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs)); + const ToolChain = getToolChain( + *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs)); // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs); @@ -1981,9 +2006,9 @@ InputInfo Driver::BuildJobsForActionNoCa const char *ArchName = BAA->getArchName(); if (ArchName) - TC = ( - C.getArgs(), - computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName)); + TC = (C.getArgs(), +
[PATCH] D19274: Compilation for Intel MCU (Part 2/3)
aturetsk created this revision. aturetsk added reviewers: rsmith, bruno, bkramer. aturetsk added subscribers: cfe-commits, DavidKreitzer, zinovy.nis. This is the second patch required to support compilation for Intel MCU target (e.g. Intel(R) Quark(TM) micro controller D 2000). When IAMCU triple is used: * Recognize and use IAMCU GCC toolchain * Set up include paths * Forbid C++ The linker-related changes will be in the last part. http://reviews.llvm.org/D19274 Files: include/clang/Basic/DiagnosticDriverKinds.td include/clang/Driver/ToolChain.h lib/Driver/Driver.cpp lib/Driver/ToolChain.cpp lib/Driver/ToolChains.cpp lib/Driver/ToolChains.h lib/Driver/Tools.cpp test/Driver/miamcu-opt.c test/Driver/miamcu-opt.cpp Index: test/Driver/miamcu-opt.cpp === --- /dev/null +++ test/Driver/miamcu-opt.cpp @@ -0,0 +1,3 @@ +// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s + +// CHECK: error: C++ is not supported for target 'i586-intel-elfiamcu' Index: test/Driver/miamcu-opt.c === --- test/Driver/miamcu-opt.c +++ test/Driver/miamcu-opt.c @@ -17,5 +17,5 @@ // CHECK: "-mfloat-abi" "soft" // CHECK: "-mstack-alignment=4" -// CHECK: bin/gcc +// CHECK: bin/ld // CHECK: "-static" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -296,6 +296,8 @@ const ToolChain *AuxToolChain) const { Arg *A; + const bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); + CheckPreprocessingOptions(D, Args); Args.AddLastArg(CmdArgs, options::OPT_C); @@ -562,14 +564,20 @@ AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs); } - // Add system include arguments. - getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs); - if (AuxToolChain) + // Add system include arguments for all targets but IAMCU. + if (!IsIAMCU) { +getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs); +if (AuxToolChain) AuxToolChain->AddClangCXXStdlibIncludeArgs(Args, CmdArgs); + } // Add CUDA include arguments, if needed. if (types::isCuda(Inputs[0].getType())) getToolChain().AddCudaIncludeArgs(Args, CmdArgs); + + // Add IAMCU include arguments, if needed. + if (IsIAMCU) +getToolChain().AddIAMCUIncludeArgs(Args, CmdArgs); } // FIXME: Move to target hook. @@ -3602,6 +3610,7 @@ getToolChain().getTriple().isWindowsCygwinEnvironment(); bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment(); bool IsPS4CPU = getToolChain().getTriple().isPS4CPU(); + bool IsIAMCU = getToolChain().getTriple().isOSIAMCU(); // Check number of inputs for sanity. We need at least one input. assert(Inputs.size() >= 1 && "Must have at least one input."); @@ -3612,6 +3621,10 @@ bool IsCuda = types::isCuda(Input.getType()); assert((IsCuda || Inputs.size() == 1) && "Unable to handle multiple inputs."); + // C++ is not supported for IAMCU. + if(IsIAMCU && types::isCXX(Input.getType())) +D.Diag(diag::err_drv_cxx_not_supported) << getToolChain().getTriple().str(); + // Invoke ourselves in -cc1 mode. // // FIXME: Implement custom jobs for internal actions. Index: lib/Driver/ToolChains.h === --- lib/Driver/ToolChains.h +++ lib/Driver/ToolChains.h @@ -806,6 +806,8 @@ llvm::opt::ArgStringList ) const override; void AddCudaIncludeArgs(const llvm::opt::ArgList , llvm::opt::ArgStringList ) const override; + void AddIAMCUIncludeArgs(const llvm::opt::ArgList , + llvm::opt::ArgStringList ) const override; bool isPIEDefault() const override; SanitizerMask getSupportedSanitizers() const override; void addProfileRTLibs(const llvm::opt::ArgList , Index: lib/Driver/ToolChains.cpp === --- lib/Driver/ToolChains.cpp +++ lib/Driver/ToolChains.cpp @@ -1570,9 +1570,13 @@ break; case llvm::Triple::x86: LibDirs.append(begin(X86LibDirs), end(X86LibDirs)); -TripleAliases.append(begin(X86Triples), end(X86Triples)); -BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); -BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples)); +// MCU toolchain is 32 bit only and its triple alias is TargetTriple +// itself, which will be appended below. +if (!TargetTriple.isOSIAMCU()) { + TripleAliases.append(begin(X86Triples), end(X86Triples)); + BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); + BiarchTripleAliases.append(begin(X86_64Triples), end(X86_64Triples)); +} break; case llvm::Triple::mips: LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs)); @@ -1718,14 +1722,14 @@ namespace { // Filter to
r266753 - Revert r266747 (Compilation for Intel MCU (Part 1/3)) since it breaks a few buildbots.
Author: aturetsk Date: Tue Apr 19 11:25:30 2016 New Revision: 266753 URL: http://llvm.org/viewvc/llvm-project?rev=266753=rev Log: Revert r266747 (Compilation for Intel MCU (Part 1/3)) since it breaks a few buildbots. Removed: cfe/trunk/test/Driver/miamcu-opt.c Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266753=266752=266753=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Tue Apr 19 11:25:30 2016 @@ -1292,8 +1292,6 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group; -def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, - HelpText<"Use Intel MCU ABI">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=266753=266752=266753=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Apr 19 11:25:30 2016 @@ -278,10 +278,6 @@ DerivedArgList *Driver::TranslateInputAr DAL->append(A); } - // Enforce -static if -miamcu is present. - if (Args.hasArg(options::OPT_miamcu)) -DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); - // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. #if defined(HOST_LINK_VERSION) @@ -300,8 +296,7 @@ DerivedArgList *Driver::TranslateInputAr /// /// This routine provides the logic to compute a target triple from various /// args passed to the driver and the default triple string. -static llvm::Triple computeTargetTriple(const Driver , -StringRef DefaultTargetTriple, +static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, const ArgList , StringRef DarwinArchName = "") { // FIXME: Already done in Compilation *Driver::BuildCompilation @@ -346,9 +341,8 @@ static llvm::Triple computeTargetTriple( return Target; // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. - Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16); - if (A) { + if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, + options::OPT_m32, options::OPT_m16)) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; if (A->getOption().matches(options::OPT_m64)) { @@ -373,25 +367,6 @@ static llvm::Triple computeTargetTriple( Target.setArch(AT); } - // Handle -miamcu flag. - if (Args.hasArg(options::OPT_miamcu)) { -if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) - D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" - << Target.str(); - -if (A && !A->getOption().matches(options::OPT_m32)) - D.Diag(diag::err_drv_argument_not_allowed_with) - << "-miamcu" << A->getBaseArg().getAsString(Args); - -Target.setArch(llvm::Triple::x86); -Target.setArchName("i586"); -Target.setEnvironment(llvm::Triple::UnknownEnvironment); -Target.setEnvironmentName(""); -Target.setOS(llvm::Triple::ELFIAMCU); -Target.setVendor(llvm::Triple::UnknownVendor); -Target.setVendorName("intel"); - } - return Target; } @@ -526,8 +501,8 @@ Compilation *Driver::BuildCompilation(Ar DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain = getToolChain( - *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs)); + const ToolChain = + getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs)); // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs); @@ -2006,9 +1981,9 @@ InputInfo Driver::BuildJobsForActionNoCa const char *ArchName = BAA->getArchName(); if (ArchName) - TC = (C.getArgs(), - computeTargetTriple(*this, DefaultTargetTriple, - C.getArgs(), ArchName)); + TC = ( + C.getArgs(), + computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName));
r266747 - Compilation for Intel MCU (Part 1/3)
Author: aturetsk Date: Tue Apr 19 10:50:57 2016 New Revision: 266747 URL: http://llvm.org/viewvc/llvm-project?rev=266747=rev Log: Compilation for Intel MCU (Part 1/3) Add -miamcu option which: * Sets IAMCU triple * Sets IAMCU ABI * Enforces static compilation Differential Revision: http://reviews.llvm.org/D18398 Added: cfe/trunk/test/Driver/miamcu-opt.c (with props) Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/Tools.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=266747=266746=266747=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Tue Apr 19 10:50:57 2016 @@ -1292,6 +1292,8 @@ def m3dnow : Flag<["-"], "m3dnow">, Grou def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group; +def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=266747=266746=266747=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Apr 19 10:50:57 2016 @@ -278,6 +278,10 @@ DerivedArgList *Driver::TranslateInputAr DAL->append(A); } + // Enforce -static if -miamcu is present. + if (Args.hasArg(options::OPT_miamcu)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. #if defined(HOST_LINK_VERSION) @@ -296,7 +300,8 @@ DerivedArgList *Driver::TranslateInputAr /// /// This routine provides the logic to compute a target triple from various /// args passed to the driver and the default triple string. -static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, +static llvm::Triple computeTargetTriple(const Driver , +StringRef DefaultTargetTriple, const ArgList , StringRef DarwinArchName = "") { // FIXME: Already done in Compilation *Driver::BuildCompilation @@ -341,8 +346,9 @@ static llvm::Triple computeTargetTriple( return Target; // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. - if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16)) { + Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, + options::OPT_m32, options::OPT_m16); + if (A) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; if (A->getOption().matches(options::OPT_m64)) { @@ -367,6 +373,25 @@ static llvm::Triple computeTargetTriple( Target.setArch(AT); } + // Handle -miamcu flag. + if (Args.hasArg(options::OPT_miamcu)) { +if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); + } + return Target; } @@ -501,8 +526,8 @@ Compilation *Driver::BuildCompilation(Ar DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain = - getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs)); + const ToolChain = getToolChain( + *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs)); // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs); @@ -1981,9 +2006,9 @@ InputInfo Driver::BuildJobsForActionNoCa const char *ArchName = BAA->getArchName(); if (ArchName) - TC = ( - C.getArgs(), - computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName)); + TC = (C.getArgs(), +
Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)
aturetsk added a comment. Ping. http://reviews.llvm.org/D18398 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)
aturetsk added a comment. Hi Bruno, Thanks for the review. Comment at: include/clang/Driver/Options.td:1281 @@ -1280,1 +1280,3 @@ +def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; Fixed. Comment at: lib/Driver/Driver.cpp:282 @@ +281,3 @@ + // Enforce -static if -miamcu is present. + if (Args.hasArg(options::OPT_miamcu)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); You're right. The warning was removed and the test was updated. Comment at: lib/Driver/Driver.cpp:380 @@ +379,3 @@ + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + I made driver to show an error if '-miamcu' is used with anything but x86. The corresponding test was added. Comment at: lib/Driver/Tools.cpp:2130 @@ -2122,3 +2129,3 @@ } void Clang::AddHexagonTargetArgs(const ArgList , No, the idea is for -miamcu to specify only ABI and it shouldn't be bound to Lakemont at all. Which target CPU to use is the choice of the user and it should be explicitly specified through -march. I believe GCC does the same. http://reviews.llvm.org/D18398 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)
aturetsk updated this revision to Diff 52789. aturetsk added a comment. Fix remarks, http://reviews.llvm.org/D18398 Files: include/clang/Driver/Options.td lib/Driver/Driver.cpp lib/Driver/Tools.cpp test/Driver/miamcu-opt.c Index: test/Driver/miamcu-opt.c === --- /dev/null +++ test/Driver/miamcu-opt.c @@ -0,0 +1,21 @@ +// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -m32 %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64 +// RUN: %clang -miamcu -dynamic %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=DYNAMIC +// RUN: %clang -miamcu -target armv8-eabi %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=NOT-X86 + +// M64: error: invalid argument '-miamcu' not allowed with '-m64' + +// DYNAMIC: error: invalid argument '-dynamic' not allowed with '-static' + +// NOT-X86: error: unsupported option '-miamcu' for target 'armv8---eabi' + +// CHECK: "-cc1" +// CHECK: "-triple" "i586-intel-elfiamcu" +// CHECK: "-static-define" +// CHECK: "-mfloat-abi" "soft" +// CHECK: "-mstack-alignment=4" + +// CHECK: bin/gcc +// CHECK: "-static" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2119,6 +2119,13 @@ << A->getOption().getName() << Value; } } + + // Set flags to support MCU ABI. + if (Args.hasArg(options::OPT_miamcu)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); + } } void Clang::AddHexagonTargetArgs(const ArgList , Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -278,6 +278,10 @@ DAL->append(A); } + // Enforce -static if -miamcu is present. + if (Args.hasArg(options::OPT_miamcu)) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. #if defined(HOST_LINK_VERSION) @@ -296,7 +300,8 @@ /// /// This routine provides the logic to compute a target triple from various /// args passed to the driver and the default triple string. -static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, +static llvm::Triple computeTargetTriple(const Driver , +StringRef DefaultTargetTriple, const ArgList , StringRef DarwinArchName = "") { // FIXME: Already done in Compilation *Driver::BuildCompilation @@ -341,8 +346,9 @@ return Target; // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. - if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16)) { + Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, + options::OPT_m32, options::OPT_m16); + if (A) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; if (A->getOption().matches(options::OPT_m64)) { @@ -367,6 +373,25 @@ Target.setArch(AT); } + // Handle -miamcu flag. + if (Args.hasArg(options::OPT_miamcu)) { +if (Target.get32BitArchVariant().getArch() != llvm::Triple::x86) + D.Diag(diag::err_drv_unsupported_opt_for_target) << "-miamcu" + << Target.str(); + +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); + } + return Target; } @@ -501,8 +526,8 @@ DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain = - getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs)); + const ToolChain = getToolChain( + *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs)); // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs); @@ -1957,9 +1982,9 @@ const char *ArchName = BAA->getArchName(); if (ArchName) - TC = ( - C.getArgs(), - computeTargetTriple(DefaultTargetTriple, C.getArgs(), ArchName)); + TC = (C.getArgs(), + computeTargetTriple(*this, DefaultTargetTriple, +
r265405 - [X86] Introduction of -march=lakemont.
Author: aturetsk Date: Tue Apr 5 10:04:26 2016 New Revision: 265405 URL: http://llvm.org/viewvc/llvm-project?rev=265405=rev Log: [X86] Introduction of -march=lakemont. Differential Revision: http://reviews.llvm.org/D18651 Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/attr-target-x86.c cfe/trunk/test/Preprocessor/predefined-arch-macros.c Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=265405=265404=265405=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Tue Apr 5 10:04:26 2016 @@ -2239,6 +2239,10 @@ class X86TargetInfo : public TargetInfo /// Knights Landing processor. CK_KNL, +/// \name Lakemont +/// Lakemont microarchitecture based processors. +CK_Lakemont, + /// \name K6 /// K6 architecture processors. //@{ @@ -2343,6 +2347,7 @@ class X86TargetInfo : public TargetInfo .Case("skx", CK_SkylakeServer) // Legacy name. .Case("cannonlake", CK_Cannonlake) .Case("knl", CK_KNL) +.Case("lakemont", CK_Lakemont) .Case("k6", CK_K6) .Case("k6-2", CK_K6_2) .Case("k6-3", CK_K6_3) @@ -2490,6 +2495,7 @@ public: case CK_C3_2: case CK_Pentium4: case CK_Pentium4M: +case CK_Lakemont: case CK_Prescott: case CK_K6: case CK_K6_2: @@ -2588,10 +2594,13 @@ bool X86TargetInfo::initFeatureMap( if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); - // Enable X87 for all X86 processors. - setFeatureEnabledImpl(Features, "x87", true); + const CPUKind Kind = getCPUKind(CPU); + + // Enable X87 for all X86 processors but Lakemont. + if (Kind != CK_Lakemont) +setFeatureEnabledImpl(Features, "x87", true); - switch (getCPUKind(CPU)) { + switch (Kind) { case CK_Generic: case CK_i386: case CK_i486: @@ -2599,6 +2608,7 @@ bool X86TargetInfo::initFeatureMap( case CK_Pentium: case CK_i686: case CK_PentiumPro: + case CK_Lakemont: break; case CK_PentiumMMX: case CK_Pentium2: @@ -3253,6 +3263,9 @@ void X86TargetInfo::getTargetDefines(con case CK_KNL: defineCPUMacros(Builder, "knl"); break; + case CK_Lakemont: +Builder.defineMacro("__tune_lakemont__"); +break; case CK_K6_2: Builder.defineMacro("__k6_2__"); Builder.defineMacro("__tune_k6_2__"); Modified: cfe/trunk/test/CodeGen/attr-target-x86.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86.c?rev=265405=265404=265405=diff == --- cfe/trunk/test/CodeGen/attr-target-x86.c (original) +++ cfe/trunk/test/CodeGen/attr-target-x86.c Tue Apr 5 10:04:26 2016 @@ -18,6 +18,8 @@ int __attribute__((target("no-aes, arch= int __attribute__((target("no-mmx"))) qq(int a) { return 40; } +int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; } + // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar. // CHECK: baz{{.*}} #0 // CHECK: foo{{.*}} #1 @@ -31,9 +33,11 @@ int __attribute__((target("no-mmx"))) qq // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 +// CHECK: lake{{.*}} #6 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" // CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" // CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" // CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" // CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" +// CHECK: #6 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx,+sse,+sse2" Modified: cfe/trunk/test/Preprocessor/predefined-arch-macros.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/predefined-arch-macros.c?rev=265405=265404=265405=diff == --- cfe/trunk/test/Preprocessor/predefined-arch-macros.c (original) +++ cfe/trunk/test/Preprocessor/predefined-arch-macros.c Tue Apr 5 10:04:26 2016 @@ -1004,6 +1004,18 @@ // CHECK_SLM_M64: #define __x86_64 1 // CHECK_SLM_M64:
Re: [PATCH] D18651: [X86] Introduction of -march=lakemont
This revision was automatically updated to reflect the committed changes. Closed by commit rL265405: [X86] Introduction of -march=lakemont. (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D18651?vs=52220=52692#toc Repository: rL LLVM http://reviews.llvm.org/D18651 Files: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/attr-target-x86.c cfe/trunk/test/Preprocessor/predefined-arch-macros.c Index: cfe/trunk/test/CodeGen/attr-target-x86.c === --- cfe/trunk/test/CodeGen/attr-target-x86.c +++ cfe/trunk/test/CodeGen/attr-target-x86.c @@ -18,6 +18,8 @@ int __attribute__((target("no-mmx"))) qq(int a) { return 40; } +int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; } + // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar. // CHECK: baz{{.*}} #0 // CHECK: foo{{.*}} #1 @@ -31,9 +33,11 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 +// CHECK: lake{{.*}} #6 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" // CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" // CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" // CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" // CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" +// CHECK: #6 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx,+sse,+sse2" Index: cfe/trunk/test/Preprocessor/predefined-arch-macros.c === --- cfe/trunk/test/Preprocessor/predefined-arch-macros.c +++ cfe/trunk/test/Preprocessor/predefined-arch-macros.c @@ -1004,6 +1004,18 @@ // CHECK_SLM_M64: #define __x86_64 1 // CHECK_SLM_M64: #define __x86_64__ 1 // +// RUN: %clang -march=lakemont -m32 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck %s -check-prefix=CHECK_LMT_M32 +// CHECK_LMT_M32: #define __i386 1 +// CHECK_LMT_M32: #define __i386__ 1 +// CHECK_LMT_M32: #define __tune_lakemont__ 1 +// CHECK_LMT_M32: #define i386 1 +// RUN: not %clang -march=lakemont -m64 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck %s -check-prefix=CHECK_LMT_M64 +// CHECK_LMT_M64: error: +// // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_GEODE_M32 Index: cfe/trunk/lib/Basic/Targets.cpp === --- cfe/trunk/lib/Basic/Targets.cpp +++ cfe/trunk/lib/Basic/Targets.cpp @@ -2239,6 +2239,10 @@ /// Knights Landing processor. CK_KNL, +/// \name Lakemont +/// Lakemont microarchitecture based processors. +CK_Lakemont, + /// \name K6 /// K6 architecture processors. //@{ @@ -2343,6 +2347,7 @@ .Case("skx", CK_SkylakeServer) // Legacy name. .Case("cannonlake", CK_Cannonlake) .Case("knl", CK_KNL) +.Case("lakemont", CK_Lakemont) .Case("k6", CK_K6) .Case("k6-2", CK_K6_2) .Case("k6-3", CK_K6_3) @@ -2490,6 +2495,7 @@ case CK_C3_2: case CK_Pentium4: case CK_Pentium4M: +case CK_Lakemont: case CK_Prescott: case CK_K6: case CK_K6_2: @@ -2588,17 +2594,21 @@ if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); - // Enable X87 for all X86 processors. - setFeatureEnabledImpl(Features, "x87", true); + const CPUKind Kind = getCPUKind(CPU); + + // Enable X87 for all X86 processors but Lakemont. + if (Kind != CK_Lakemont) +setFeatureEnabledImpl(Features, "x87", true); - switch (getCPUKind(CPU)) { + switch (Kind) { case CK_Generic: case CK_i386: case CK_i486: case CK_i586: case CK_Pentium: case CK_i686: case CK_PentiumPro: + case CK_Lakemont: break; case CK_PentiumMMX: case CK_Pentium2: @@ -3253,6 +3263,9 @@ case CK_KNL: defineCPUMacros(Builder, "knl"); break; + case CK_Lakemont: +Builder.defineMacro("__tune_lakemont__"); +break; case CK_K6_2: Builder.defineMacro("__k6_2__"); Builder.defineMacro("__tune_k6_2__");
Re: [PATCH] D18398: Compilation for Intel MCU (Part 1/3)
aturetsk added a comment. Ping. http://reviews.llvm.org/D18398 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18651: [X86] Introduction of -march=lakemont
aturetsk added a comment. I used existing test "test/CodeGen/attr-target-x86.c" to check Lakemont's target features. However the test is actually run with 64-bit triple "x86_64-linux-gnu", so "+mmx,+sse,+sse2" are included in target features. The same thing happens with Pentium and other 32-bit-only CPUs. I wonder if we should have some check so that 32-bit-only CPUs couldn't be used with 64-bit triple. What do you think? http://reviews.llvm.org/D18651 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D18651: [X86] Introduction of -march=lakemont
aturetsk created this revision. aturetsk added reviewers: rsmith, echristo. aturetsk added subscribers: cfe-commits, zinovy.nis. Add a new CPU - Lakemont. http://reviews.llvm.org/D18651 Files: lib/Basic/Targets.cpp test/CodeGen/attr-target-x86.c test/Preprocessor/predefined-arch-macros.c Index: test/Preprocessor/predefined-arch-macros.c === --- test/Preprocessor/predefined-arch-macros.c +++ test/Preprocessor/predefined-arch-macros.c @@ -1004,6 +1004,18 @@ // CHECK_SLM_M64: #define __x86_64 1 // CHECK_SLM_M64: #define __x86_64__ 1 // +// RUN: %clang -march=lakemont -m32 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck %s -check-prefix=CHECK_LMT_M32 +// CHECK_LMT_M32: #define __i386 1 +// CHECK_LMT_M32: #define __i386__ 1 +// CHECK_LMT_M32: #define __tune_lakemont__ 1 +// CHECK_LMT_M32: #define i386 1 +// RUN: not %clang -march=lakemont -m64 -E -dM %s -o - 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: | FileCheck %s -check-prefix=CHECK_LMT_M64 +// CHECK_LMT_M64: error: +// // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: | FileCheck %s -check-prefix=CHECK_GEODE_M32 Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -18,6 +18,8 @@ int __attribute__((target("no-mmx"))) qq(int a) { return 40; } +int __attribute__((target("arch=lakemont"))) lake(int a) { return 4; } + // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar. // CHECK: baz{{.*}} #0 // CHECK: foo{{.*}} #1 @@ -31,9 +33,11 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 +// CHECK: lake{{.*}} #6 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" // CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" // CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" // CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" // CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" +// CHECK: #6 = {{.*}}"target-cpu"="lakemont" "target-features"="+mmx,+sse,+sse2" Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2236,6 +2236,10 @@ /// Knights Landing processor. CK_KNL, +/// \name Lakemont +/// Lakemont microarchitecture based processors. +CK_Lakemont, + /// \name K6 /// K6 architecture processors. //@{ @@ -2340,6 +2344,7 @@ .Case("skx", CK_SkylakeServer) // Legacy name. .Case("cannonlake", CK_Cannonlake) .Case("knl", CK_KNL) +.Case("lakemont", CK_Lakemont) .Case("k6", CK_K6) .Case("k6-2", CK_K6_2) .Case("k6-3", CK_K6_3) @@ -2487,6 +2492,7 @@ case CK_C3_2: case CK_Pentium4: case CK_Pentium4M: +case CK_Lakemont: case CK_Prescott: case CK_K6: case CK_K6_2: @@ -2585,17 +2591,21 @@ if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); - // Enable X87 for all X86 processors. - setFeatureEnabledImpl(Features, "x87", true); + const CPUKind Kind = getCPUKind(CPU); + + // Enable X87 for all X86 processors but Lakemont. + if (Kind != CK_Lakemont) +setFeatureEnabledImpl(Features, "x87", true); - switch (getCPUKind(CPU)) { + switch (Kind) { case CK_Generic: case CK_i386: case CK_i486: case CK_i586: case CK_Pentium: case CK_i686: case CK_PentiumPro: + case CK_Lakemont: break; case CK_PentiumMMX: case CK_Pentium2: @@ -3250,6 +3260,9 @@ case CK_KNL: defineCPUMacros(Builder, "knl"); break; + case CK_Lakemont: +Builder.defineMacro("__tune_lakemont__"); +break; case CK_K6_2: Builder.defineMacro("__k6_2__"); Builder.defineMacro("__tune_k6_2__"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D18398: Compilation for Intel MCU (Part 1/3)
aturetsk created this revision. aturetsk added reviewers: rsmith, tra, thakis, ddunbar, bob.wilson, dougk. aturetsk added subscribers: cfe-commits, zinovy.nis, DavidKreitzer. Add -miamcu option which: * Sets IAMCU triple * Sets IAMCU ABI * Enforces static compilation http://reviews.llvm.org/D18398 Files: include/clang/Driver/Options.td lib/Driver/Driver.cpp lib/Driver/Tools.cpp test/Driver/miamcu-opt.c Index: test/Driver/miamcu-opt.c === --- /dev/null +++ test/Driver/miamcu-opt.c @@ -0,0 +1,18 @@ +// RUN: %clang -miamcu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -m32 %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -target x86_64-unknown-linux-gnu %s -### -o %t.o 2>&1 | FileCheck %s +// RUN: %clang -miamcu -m64 %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=ERROR +// RUN: %clang -miamcu -dynamic %s -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK -check-prefix=DYNAMIC %s + +// ERROR: error: invalid argument '-miamcu' not allowed with '-m64' + +// DYNAMIC: warning: argument unused during compilation: '-dynamic' + +// CHECK: "-cc1" +// CHECK: "-triple" "i586-intel-elfiamcu" +// CHECK: "-static-define" +// CHECK: "-mfloat-abi" "soft" +// CHECK: "-mstack-alignment=4" + +// CHECK: bin/gcc +// CHECK: "-static" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2119,6 +2119,13 @@ << A->getOption().getName() << Value; } } + + // Set flags to support MCU ABI. + if (Args.hasArg(options::OPT_miamcu)) { +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); + } } void Clang::AddHexagonTargetArgs(const ArgList , Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -210,6 +210,7 @@ DerivedArgList *Driver::TranslateInputArgs(const InputArgList ) const { DerivedArgList *DAL = new DerivedArgList(Args); + bool HasMiamcu = Args.hasArg(options::OPT_miamcu); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { @@ -275,9 +276,19 @@ continue; } +// Ignore -dynamic if -miamcu is present. +if (A->getOption().matches(options::OPT_dynamic) && HasMiamcu) { + Diag(diag::warn_drv_unused_argument) << "-dynamic"; + continue; +} + DAL->append(A); } + // Enforce -static if -miamcu is present. + if (HasMiamcu) +DAL->AddFlagArg(0, Opts->getOption(options::OPT_static)); + // Add a default value of -mlinker-version=, if one was given and the user // didn't specify one. #if defined(HOST_LINK_VERSION) @@ -296,7 +307,8 @@ /// /// This routine provides the logic to compute a target triple from various /// args passed to the driver and the default triple string. -static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple, +static llvm::Triple computeTargetTriple(const Driver , +StringRef DefaultTargetTriple, const ArgList , StringRef DarwinArchName = "") { // FIXME: Already done in Compilation *Driver::BuildCompilation @@ -341,8 +353,9 @@ return Target; // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'. - if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, - options::OPT_m32, options::OPT_m16)) { + Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32, + options::OPT_m32, options::OPT_m16); + if (A) { llvm::Triple::ArchType AT = llvm::Triple::UnknownArch; if (A->getOption().matches(options::OPT_m64)) { @@ -367,6 +380,21 @@ Target.setArch(AT); } + // Handle -miamcu flag. + if (Args.hasArg(options::OPT_miamcu)) { +if (A && !A->getOption().matches(options::OPT_m32)) + D.Diag(diag::err_drv_argument_not_allowed_with) + << "-miamcu" << A->getBaseArg().getAsString(Args); + +Target.setArch(llvm::Triple::x86); +Target.setArchName("i586"); +Target.setEnvironment(llvm::Triple::UnknownEnvironment); +Target.setEnvironmentName(""); +Target.setOS(llvm::Triple::ELFIAMCU); +Target.setVendor(llvm::Triple::UnknownVendor); +Target.setVendorName("intel"); + } + return Target; } @@ -501,8 +529,8 @@ DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain = - getToolChain(*UArgs, computeTargetTriple(DefaultTargetTriple, *UArgs)); + const ToolChain = getToolChain( + *UArgs, computeTargetTriple(*this, DefaultTargetTriple, *UArgs)); // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC,
Re: [PATCH] D13980: Add "x87" in x86 target feature map
This revision was automatically updated to reflect the committed changes. Closed by commit rL264149: [X86] Add "x87" in x86 target feature map. (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D13980?vs=48904=51398#toc Repository: rL LLVM http://reviews.llvm.org/D13980 Files: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/attr-target-x86-mmx.c cfe/trunk/test/CodeGen/attr-target-x86.c cfe/trunk/test/CodeGen/attr-target-x87-softfp.c Index: cfe/trunk/test/CodeGen/attr-target-x86.c === --- cfe/trunk/test/CodeGen/attr-target-x86.c +++ cfe/trunk/test/CodeGen/attr-target-x86.c @@ -31,9 +31,9 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" +// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" +// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" Index: cfe/trunk/test/CodeGen/attr-target-x87-softfp.c === --- cfe/trunk/test/CodeGen/attr-target-x87-softfp.c +++ cfe/trunk/test/CodeGen/attr-target-x87-softfp.c @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=HARD +// RUN: %clang_cc1 -msoft-float -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=SOFT + +int __attribute__((target("x87"))) foo(int a) { return 4; } +int __attribute__((target("no-x87"))) bar(int a) { return 4; } + +// CHECK: foo{{.*}} #0 +// CHECK: bar{{.*}} #1 + +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// HARD: "use-soft-float"="false" +// SOFT: "use-soft-float"="true" + +// CHECK: #1 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,-x87" +// HARD: "use-soft-float"="false" +// SOFT: "use-soft-float"="true" Index: cfe/trunk/test/CodeGen/attr-target-x86-mmx.c === --- cfe/trunk/test/CodeGen/attr-target-x86-mmx.c +++ cfe/trunk/test/CodeGen/attr-target-x86-mmx.c @@ -19,4 +19,4 @@ _mm_srai_pi32(a, c); } -// CHECK: "target-features"="+mmx,+sse" +// CHECK: "target-features"="+mmx,+sse,+x87" Index: cfe/trunk/lib/Basic/Targets.cpp === --- cfe/trunk/lib/Basic/Targets.cpp +++ cfe/trunk/lib/Basic/Targets.cpp @@ -2585,6 +2585,9 @@ if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); + // Enable X87 for all X86 processors. + setFeatureEnabledImpl(Features, "x87", true); + switch (getCPUKind(CPU)) { case CK_Generic: case CK_i386: Index: cfe/trunk/test/CodeGen/attr-target-x86.c === --- cfe/trunk/test/CodeGen/attr-target-x86.c +++ cfe/trunk/test/CodeGen/attr-target-x86.c @@ -31,9 +31,9 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64"
r264149 - [X86] Add "x87" in x86 target feature map.
Author: aturetsk Date: Wed Mar 23 06:15:10 2016 New Revision: 264149 URL: http://llvm.org/viewvc/llvm-project?rev=264149=rev Log: [X86] Add "x87" in x86 target feature map. Differential Revision: http://reviews.llvm.org/D13980 Added: cfe/trunk/test/CodeGen/attr-target-x87-softfp.c (with props) Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/attr-target-x86-mmx.c cfe/trunk/test/CodeGen/attr-target-x86.c Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=264149=264148=264149=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Wed Mar 23 06:15:10 2016 @@ -2585,6 +2585,9 @@ bool X86TargetInfo::initFeatureMap( if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); + // Enable X87 for all X86 processors. + setFeatureEnabledImpl(Features, "x87", true); + switch (getCPUKind(CPU)) { case CK_Generic: case CK_i386: Modified: cfe/trunk/test/CodeGen/attr-target-x86-mmx.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86-mmx.c?rev=264149=264148=264149=diff == --- cfe/trunk/test/CodeGen/attr-target-x86-mmx.c (original) +++ cfe/trunk/test/CodeGen/attr-target-x86-mmx.c Wed Mar 23 06:15:10 2016 @@ -19,4 +19,4 @@ void __attribute__((target("sse"))) shif _mm_srai_pi32(a, c); } -// CHECK: "target-features"="+mmx,+sse" +// CHECK: "target-features"="+mmx,+sse,+x87" Modified: cfe/trunk/test/CodeGen/attr-target-x86.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86.c?rev=264149=264148=264149=diff == --- cfe/trunk/test/CodeGen/attr-target-x86.c (original) +++ cfe/trunk/test/CodeGen/attr-target-x86.c Wed Mar 23 06:15:10 2016 @@ -31,9 +31,9 @@ int __attribute__((target("no-mmx"))) qq // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512ifma,-avx512pf,-avx512vbmi,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" +// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" +// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" Added: cfe/trunk/test/CodeGen/attr-target-x87-softfp.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x87-softfp.c?rev=264149=auto == --- cfe/trunk/test/CodeGen/attr-target-x87-softfp.c (added) +++ cfe/trunk/test/CodeGen/attr-target-x87-softfp.c Wed Mar 23 06:15:10 2016 @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=HARD +// RUN: %clang_cc1 -msoft-float -triple x86_64-linux-gnu -target-cpu x86-64 -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=SOFT + +int __attribute__((target("x87"))) foo(int a) { return 4; } +int __attribute__((target("no-x87"))) bar(int a) { return 4; } + +// CHECK: foo{{.*}} #0 +//
Re: [PATCH] D14146: Introduction of -miamcu option
aturetsk abandoned this revision. aturetsk added a comment. The patch will be completely reworked and extended to support compilation for MCU. http://reviews.llvm.org/D14146 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r263422 - [Driver] Enable --rtlib option for MSVC target
Author: aturetsk Date: Mon Mar 14 06:19:43 2016 New Revision: 263422 URL: http://llvm.org/viewvc/llvm-project?rev=263422=rev Log: [Driver] Enable --rtlib option for MSVC target This enables "--rtlib compiler-rt" option under MSVC environment. Patch by Roman Shirokiy. Differential Revision: http://reviews.llvm.org/D17453 Added: cfe/trunk/test/Driver/msvc-compiler-rt.c (with props) Modified: cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/nostdlib.c Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=263422=263421=263422=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Mon Mar 14 06:19:43 2016 @@ -8948,7 +8948,16 @@ static void AddRunTimeLibs(const ToolCha } break; case ToolChain::RLT_Libgcc: -AddLibgcc(TC.getTriple(), D, CmdArgs, Args); +// Make sure libgcc is not used under MSVC environment by default +if (TC.getTriple().isKnownWindowsMSVCEnvironment()) { + // Issue error diagnostic if libgcc is explicitly specified + // through command line as --rtlib option argument. + if (Args.hasArg(options::OPT_rtlib_EQ)) { +TC.getDriver().Diag(diag::err_drv_unsupported_rtlib_for_platform) +<< Args.getLastArg(options::OPT_rtlib_EQ)->getValue() << "MSVC"; + } +} else + AddLibgcc(TC.getTriple(), D, CmdArgs, Args); break; } } @@ -9754,6 +9763,12 @@ void visualstudio::Linker::ConstructJob( } } + // Add compiler-rt lib in case if it was explicitly + // specified as an argument for --rtlib option. + if (!Args.hasArg(options::OPT_nostdlib)) { +AddRunTimeLibs(TC, TC.getDriver(), CmdArgs, Args); + } + // Add filenames, libraries, and other linker inputs. for (const auto : Inputs) { if (Input.isFilename()) { Added: cfe/trunk/test/Driver/msvc-compiler-rt.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/msvc-compiler-rt.c?rev=263422=auto == --- cfe/trunk/test/Driver/msvc-compiler-rt.c (added) +++ cfe/trunk/test/Driver/msvc-compiler-rt.c Mon Mar 14 06:19:43 2016 @@ -0,0 +1,5 @@ +// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix MSVC-COMPILER-RT +// RUN: not %clang %s -target x86_64-pc-windows-msvc --rtlib=libgcc 2>&1 | FileCheck %s -check-prefix CHECK-ERROR + +// MSVC-COMPILER-RT: "{{.*}}clang_rt.builtins{{.*}}" +// CHECK-ERROR: unsupported runtime library 'libgcc' for platform 'MSVC' Propchange: cfe/trunk/test/Driver/msvc-compiler-rt.c -- svn:eol-style = native Propchange: cfe/trunk/test/Driver/msvc-compiler-rt.c -- svn:keywords = Author Date Id Rev URL Propchange: cfe/trunk/test/Driver/msvc-compiler-rt.c -- svn:mime-type = text/plain Modified: cfe/trunk/test/Driver/nostdlib.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/nostdlib.c?rev=263422=263421=263422=diff == --- cfe/trunk/test/Driver/nostdlib.c (original) +++ cfe/trunk/test/Driver/nostdlib.c Mon Mar 14 06:19:43 2016 @@ -22,6 +22,10 @@ // RUN: -resource-dir=%S/Inputs/resource_dir -lclang_rt.builtins-i686 \ // RUN: | FileCheck --check-prefix=CHECK-LINUX-NOSTDLIB %s // +// RUN: %clang -target x86_64-pc-windows-msvc -nostdlib --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB +// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -nostdlib -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB +// // CHECK-LINUX-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt' // CHECK-LINUX-NOSTDLIB: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" // CHECK-LINUX-NOSTDLIB-NOT: "{{.*}}/Inputs/resource_dir{{/|}}lib{{/|}}linux{{/|}}libclang_rt.builtins-i686.a" +// CHECK-MSVC-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt' ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D17453: [Driver] Enable --rtlib option for MSVC target
This revision was automatically updated to reflect the committed changes. Closed by commit rL263422: [Driver] Enable --rtlib option for MSVC target (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D17453?vs=50260=50579#toc Repository: rL LLVM http://reviews.llvm.org/D17453 Files: cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/msvc-compiler-rt.c cfe/trunk/test/Driver/nostdlib.c Index: cfe/trunk/test/Driver/nostdlib.c === --- cfe/trunk/test/Driver/nostdlib.c +++ cfe/trunk/test/Driver/nostdlib.c @@ -22,6 +22,10 @@ // RUN: -resource-dir=%S/Inputs/resource_dir -lclang_rt.builtins-i686 \ // RUN: | FileCheck --check-prefix=CHECK-LINUX-NOSTDLIB %s // +// RUN: %clang -target x86_64-pc-windows-msvc -nostdlib --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB +// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -nostdlib -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB +// // CHECK-LINUX-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt' // CHECK-LINUX-NOSTDLIB: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" // CHECK-LINUX-NOSTDLIB-NOT: "{{.*}}/Inputs/resource_dir{{/|}}lib{{/|}}linux{{/|}}libclang_rt.builtins-i686.a" +// CHECK-MSVC-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt' Index: cfe/trunk/test/Driver/msvc-compiler-rt.c === --- cfe/trunk/test/Driver/msvc-compiler-rt.c +++ cfe/trunk/test/Driver/msvc-compiler-rt.c @@ -0,0 +1,5 @@ +// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix MSVC-COMPILER-RT +// RUN: not %clang %s -target x86_64-pc-windows-msvc --rtlib=libgcc 2>&1 | FileCheck %s -check-prefix CHECK-ERROR + +// MSVC-COMPILER-RT: "{{.*}}clang_rt.builtins{{.*}}" +// CHECK-ERROR: unsupported runtime library 'libgcc' for platform 'MSVC' Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++ cfe/trunk/lib/Driver/Tools.cpp @@ -8948,7 +8948,16 @@ } break; case ToolChain::RLT_Libgcc: -AddLibgcc(TC.getTriple(), D, CmdArgs, Args); +// Make sure libgcc is not used under MSVC environment by default +if (TC.getTriple().isKnownWindowsMSVCEnvironment()) { + // Issue error diagnostic if libgcc is explicitly specified + // through command line as --rtlib option argument. + if (Args.hasArg(options::OPT_rtlib_EQ)) { +TC.getDriver().Diag(diag::err_drv_unsupported_rtlib_for_platform) +<< Args.getLastArg(options::OPT_rtlib_EQ)->getValue() << "MSVC"; + } +} else + AddLibgcc(TC.getTriple(), D, CmdArgs, Args); break; } } @@ -9754,6 +9763,12 @@ } } + // Add compiler-rt lib in case if it was explicitly + // specified as an argument for --rtlib option. + if (!Args.hasArg(options::OPT_nostdlib)) { +AddRunTimeLibs(TC, TC.getDriver(), CmdArgs, Args); + } + // Add filenames, libraries, and other linker inputs. for (const auto : Inputs) { if (Input.isFilename()) { Index: cfe/trunk/test/Driver/nostdlib.c === --- cfe/trunk/test/Driver/nostdlib.c +++ cfe/trunk/test/Driver/nostdlib.c @@ -22,6 +22,10 @@ // RUN: -resource-dir=%S/Inputs/resource_dir -lclang_rt.builtins-i686 \ // RUN: | FileCheck --check-prefix=CHECK-LINUX-NOSTDLIB %s // +// RUN: %clang -target x86_64-pc-windows-msvc -nostdlib --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB +// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -nostdlib -### %s 2>&1 | FileCheck %s -check-prefix CHECK-MSVC-NOSTDLIB +// // CHECK-LINUX-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt' // CHECK-LINUX-NOSTDLIB: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" // CHECK-LINUX-NOSTDLIB-NOT: "{{.*}}/Inputs/resource_dir{{/|}}lib{{/|}}linux{{/|}}libclang_rt.builtins-i686.a" +// CHECK-MSVC-NOSTDLIB: warning: argument unused during compilation: '--rtlib=compiler-rt' Index: cfe/trunk/test/Driver/msvc-compiler-rt.c === --- cfe/trunk/test/Driver/msvc-compiler-rt.c +++ cfe/trunk/test/Driver/msvc-compiler-rt.c @@ -0,0 +1,5 @@ +// RUN: %clang -target x86_64-pc-windows-msvc --rtlib=compiler-rt -### %s 2>&1 | FileCheck %s -check-prefix MSVC-COMPILER-RT +// RUN: not %clang %s -target x86_64-pc-windows-msvc --rtlib=libgcc 2>&1 | FileCheck %s -check-prefix CHECK-ERROR + +// MSVC-COMPILER-RT: "{{.*}}clang_rt.builtins{{.*}}" +// CHECK-ERROR: unsupported runtime library 'libgcc' for platform 'MSVC' Index: cfe/trunk/lib/Driver/Tools.cpp === --- cfe/trunk/lib/Driver/Tools.cpp +++
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk added a comment. Hi, The related LLVM patch (http://reviews.llvm.org/D13979) was approved. Is this patch ok for commit? http://reviews.llvm.org/D13980 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r260376 - [X86] Fix stack alignment for MCU target (Clang part), by Anton Nadolskiy.
Author: aturetsk Date: Wed Feb 10 05:58:46 2016 New Revision: 260376 URL: http://llvm.org/viewvc/llvm-project?rev=260376=rev Log: [X86] Fix stack alignment for MCU target (Clang part), by Anton Nadolskiy. This patch fixes stack alignments for MCU (should be aligned to 4 bytes). Differential Revision: http://reviews.llvm.org/D15647 Added: cfe/trunk/test/CodeGen/iamcu-abi.c (with props) Modified: cfe/trunk/include/clang/Basic/TargetInfo.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/Basic/Targets.cpp Modified: cfe/trunk/include/clang/Basic/TargetInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=260376=260375=260376=diff == --- cfe/trunk/include/clang/Basic/TargetInfo.h (original) +++ cfe/trunk/include/clang/Basic/TargetInfo.h Wed Feb 10 05:58:46 2016 @@ -940,6 +940,9 @@ public: return false; } + /// \brief Whether target allows to overalign ABI-specified prefered alignment + virtual bool allowsLargerPreferedTypeAlignment() const { return true; } + protected: virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return PointerWidth; Modified: cfe/trunk/lib/AST/ASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=260376=260375=260376=diff == --- cfe/trunk/lib/AST/ASTContext.cpp (original) +++ cfe/trunk/lib/AST/ASTContext.cpp Wed Feb 10 05:58:46 2016 @@ -1904,8 +1904,8 @@ unsigned ASTContext::getPreferredTypeAli if (T->isMemberPointerType()) return getPreferredTypeAlign(getPointerDiffType().getTypePtr()); - if (Target->getTriple().getArch() == llvm::Triple::xcore) -return ABIAlign; // Never overalign on XCore. + if (!Target->allowsLargerPreferedTypeAlignment()) +return ABIAlign; // Double and long long should be naturally aligned if possible. if (const ComplexType *CT = T->getAs()) Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=260376=260375=260376=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Wed Feb 10 05:58:46 2016 @@ -3807,6 +3807,8 @@ public: : WindowsX86_32TargetInfo(Triple) { LongDoubleWidth = LongDoubleAlign = 64; LongDoubleFormat = ::APFloat::IEEEdouble; +DataLayoutString = +"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32"; } void getTargetDefines(const LangOptions , MacroBuilder ) const override { @@ -3926,6 +3928,10 @@ public: Builder.defineMacro("__iamcu"); Builder.defineMacro("__iamcu__"); } + + bool allowsLargerPreferedTypeAlignment() const override { +return false; + } }; // RTEMS Target @@ -7491,6 +7497,9 @@ public: // R0=ExceptionPointerRegister R1=ExceptionSelectorRegister return (RegNo < 2)? RegNo : -1; } + bool allowsLargerPreferedTypeAlignment() const override { +return false; + } }; const Builtin::Info XCoreTargetInfo::BuiltinInfo[] = { Added: cfe/trunk/test/CodeGen/iamcu-abi.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/iamcu-abi.c?rev=260376=auto == --- cfe/trunk/test/CodeGen/iamcu-abi.c (added) +++ cfe/trunk/test/CodeGen/iamcu-abi.c Wed Feb 10 05:58:46 2016 @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple i386-pc-elfiamcu -emit-llvm -o - %s | FileCheck %s + +// CHECK: target datalayout = "e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32" +// CHECK: target triple = "i386-pc-elfiamcu" + + +void food(double *d); +void fooll(long long *ll); +void fooull(unsigned long long *ull); +void foold(long double *ld); + +// CHECK-LABEL: define void @testdouble() +// CHECK: alloca double, align 4 +void testdouble() { + double d = 2.0; + food(); +} + +// CHECK-LABEL: define void @testlonglong() +// CHECK: alloca i64, align 4 +void testlonglong() { + long long ll = 2; + fooll(); +} + +// CHECK-LABEL: define void @testunsignedlonglong() +// CHECK: alloca i64, align 4 +void testunsignedlonglong() { + unsigned long long ull = 2; + fooull(); +} + +// CHECK-LABEL: define void @testlongdouble() +// CHECK: alloca double, align 4 +void testlongdouble() { + long double ld = 2.0; + foold(); +} Propchange: cfe/trunk/test/CodeGen/iamcu-abi.c -- svn:eol-style = native Propchange: cfe/trunk/test/CodeGen/iamcu-abi.c -- svn:keywords = Author Date Id Rev URL Propchange: cfe/trunk/test/CodeGen/iamcu-abi.c -- svn:mime-type = text/plain
Re: [PATCH] D15647: [X86] Fix stack alignment for MCU target (Clang part)
This revision was automatically updated to reflect the committed changes. Closed by commit rL260376: [X86] Fix stack alignment for MCU target (Clang part), by Anton Nadolskiy. (authored by aturetsk). Changed prior to commit: http://reviews.llvm.org/D15647?vs=43788=47440#toc Repository: rL LLVM http://reviews.llvm.org/D15647 Files: cfe/trunk/include/clang/Basic/TargetInfo.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/iamcu-abi.c Index: cfe/trunk/include/clang/Basic/TargetInfo.h === --- cfe/trunk/include/clang/Basic/TargetInfo.h +++ cfe/trunk/include/clang/Basic/TargetInfo.h @@ -940,6 +940,9 @@ return false; } + /// \brief Whether target allows to overalign ABI-specified prefered alignment + virtual bool allowsLargerPreferedTypeAlignment() const { return true; } + protected: virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return PointerWidth; Index: cfe/trunk/test/CodeGen/iamcu-abi.c === --- cfe/trunk/test/CodeGen/iamcu-abi.c +++ cfe/trunk/test/CodeGen/iamcu-abi.c @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple i386-pc-elfiamcu -emit-llvm -o - %s | FileCheck %s + +// CHECK: target datalayout = "e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32" +// CHECK: target triple = "i386-pc-elfiamcu" + + +void food(double *d); +void fooll(long long *ll); +void fooull(unsigned long long *ull); +void foold(long double *ld); + +// CHECK-LABEL: define void @testdouble() +// CHECK: alloca double, align 4 +void testdouble() { + double d = 2.0; + food(); +} + +// CHECK-LABEL: define void @testlonglong() +// CHECK: alloca i64, align 4 +void testlonglong() { + long long ll = 2; + fooll(); +} + +// CHECK-LABEL: define void @testunsignedlonglong() +// CHECK: alloca i64, align 4 +void testunsignedlonglong() { + unsigned long long ull = 2; + fooull(); +} + +// CHECK-LABEL: define void @testlongdouble() +// CHECK: alloca double, align 4 +void testlongdouble() { + long double ld = 2.0; + foold(); +} Index: cfe/trunk/lib/Basic/Targets.cpp === --- cfe/trunk/lib/Basic/Targets.cpp +++ cfe/trunk/lib/Basic/Targets.cpp @@ -3807,6 +3807,8 @@ : WindowsX86_32TargetInfo(Triple) { LongDoubleWidth = LongDoubleAlign = 64; LongDoubleFormat = ::APFloat::IEEEdouble; +DataLayoutString = +"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32"; } void getTargetDefines(const LangOptions , MacroBuilder ) const override { @@ -3926,6 +3928,10 @@ Builder.defineMacro("__iamcu"); Builder.defineMacro("__iamcu__"); } + + bool allowsLargerPreferedTypeAlignment() const override { +return false; + } }; // RTEMS Target @@ -7491,6 +7497,9 @@ // R0=ExceptionPointerRegister R1=ExceptionSelectorRegister return (RegNo < 2)? RegNo : -1; } + bool allowsLargerPreferedTypeAlignment() const override { +return false; + } }; const Builtin::Info XCoreTargetInfo::BuiltinInfo[] = { Index: cfe/trunk/lib/AST/ASTContext.cpp === --- cfe/trunk/lib/AST/ASTContext.cpp +++ cfe/trunk/lib/AST/ASTContext.cpp @@ -1904,8 +1904,8 @@ if (T->isMemberPointerType()) return getPreferredTypeAlign(getPointerDiffType().getTypePtr()); - if (Target->getTriple().getArch() == llvm::Triple::xcore) -return ABIAlign; // Never overalign on XCore. + if (!Target->allowsLargerPreferedTypeAlignment()) +return ABIAlign; // Double and long long should be naturally aligned if possible. if (const ComplexType *CT = T->getAs()) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r260379 - Reapply the patch of r260376.
Author: aturetsk Date: Wed Feb 10 06:56:10 2016 New Revision: 260379 URL: http://llvm.org/viewvc/llvm-project?rev=260379=rev Log: Reapply the patch of r260376. Modified: cfe/trunk/lib/Basic/Targets.cpp Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=260379=260378=260379=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Wed Feb 10 06:56:10 2016 @@ -3807,8 +3807,6 @@ public: : WindowsX86_32TargetInfo(Triple) { LongDoubleWidth = LongDoubleAlign = 64; LongDoubleFormat = ::APFloat::IEEEdouble; -DataLayoutString = -"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32"; } void getTargetDefines(const LangOptions , MacroBuilder ) const override { @@ -3913,6 +3911,8 @@ public: MCUX86_32TargetInfo(const llvm::Triple ) : X86_32TargetInfo(Triple) { LongDoubleWidth = 64; LongDoubleFormat = ::APFloat::IEEEdouble; +DataLayoutString = +"e-m:e-p:32:32-i64:32-f64:32-f128:32-n8:16:32-a:0:32-S32"; UserLabelPrefix = ""; WIntType = UnsignedInt; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk updated this revision to Diff 41511. aturetsk added a comment. Enable X87 back for all X86 processors. http://reviews.llvm.org/D13980 Files: lib/Basic/Targets.cpp test/CodeGen/attr-target-x86-mmx.c test/CodeGen/attr-target-x86.c Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -31,9 +31,9 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" +// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" +// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" Index: test/CodeGen/attr-target-x86-mmx.c === --- test/CodeGen/attr-target-x86-mmx.c +++ test/CodeGen/attr-target-x86-mmx.c @@ -19,4 +19,4 @@ _mm_srai_pi32(a, c); } -// CHECK: "target-features"="+mmx,+sse" +// CHECK: "target-features"="+mmx,+sse,+x87" Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2542,6 +2542,9 @@ if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); + // Enable X87 for all X86 processors. + setFeatureEnabledImpl(Features, "x87", true); + switch (getCPUKind(CPU)) { case CK_Generic: case CK_i386: Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -31,9 +31,9 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #3 =
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk added inline comments. Comment at: lib/Basic/Targets.cpp:2551 @@ -2547,3 +2550,3 @@ case CK_i386: case CK_i486: case CK_i586: "x87 instructions probably work" is more like it, and having feature x87 disabled would mean "x87 instructions definitely don't work". That's what I intended. If feature soft float is specified it takes precedence over feature x87 causing compiler to generate calls instead of X87 instructions. Support of -m80387/-mno-80387 seems to be a good thing to have in Clang to be compatible with GCC (although briefly looking at GCC's sources these options just seem to be synonyms to -mhard-float/-msoft-float). I can add the flags, but I think that's better to be done in a separate patch. http://reviews.llvm.org/D13980 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk added inline comments. Comment at: lib/Basic/Targets.cpp:2548 @@ +2547,3 @@ + // All X86 processors but i386 have X87. + if (Kind != CK_i386) +setFeatureEnabledImpl(Features, "x87", true); rsmith wrote: > What about `CK_Generic`? Also, if `CK_i486` can be used for the 486SX, we > need to exclude it here too. It looks (from wikipedia) like all the "WinChip" > flavours of 486 have an x87 unit, but it'd be nice if someone could confirm > that. Maybe we should have separate `CPUKind`s for 486 SX versus 486 DX. Before this changeset clang would generate x87 instructions for Generic, i386 and i486. So one can say they had FeatureX87 enabled implicitly. If that was ok formerly why do we want to change that now? Wouldn't it be better to keep clang's behavior unchanged? http://reviews.llvm.org/D13980 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14146: Introduction of -miamcu option
aturetsk updated this revision to Diff 41309. aturetsk added a comment. Extended to take into account recent MCU related changes http://reviews.llvm.org/D14146 Files: include/clang/Driver/Options.td lib/Driver/Tools.cpp lib/Driver/Tools.h test/Driver/miamcu-opt.c test/Driver/miamcu-opt.s Index: test/Driver/miamcu-opt.s === --- /dev/null +++ test/Driver/miamcu-opt.s @@ -0,0 +1,9 @@ +// RUN: %clang -m32 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M32 +// RUN: %clang -m64 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64 + +// M32-NOT: error: unsupported option '-miamcu' +// M32: "-cc1as" +// M32: "-triple" "i586-intel-elfiamcu" + +// M64: error: unsupported option '-miamcu' +// M64: "-cc1as" Index: test/Driver/miamcu-opt.c === --- /dev/null +++ test/Driver/miamcu-opt.c @@ -0,0 +1,11 @@ +// RUN: %clang -m32 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M32 +// RUN: %clang -m64 -miamcu %s -### -o %t.o 2>&1 | FileCheck %s -check-prefix=M64 + +// M32-NOT: error: unsupported option '-miamcu' +// M32: "-cc1" +// M32: "-triple" "i586-intel-elfiamcu" +// M32: "-mfloat-abi" "soft" +// M32: "-mstack-alignment=4" + +// M64: error: unsupported option '-miamcu' +// M64: "-cc1" Index: lib/Driver/Tools.h === --- lib/Driver/Tools.h +++ lib/Driver/Tools.h @@ -122,6 +122,8 @@ : Tool("clang::as", "clang integrated assembler", TC, RF_Full) {} void AddMIPSTargetArgs(const llvm::opt::ArgList , llvm::opt::ArgStringList ) const; + void AddX86TargetArgs(const llvm::opt::ArgList , +llvm::opt::ArgStringList ) const; bool hasGoodDiagnostics() const override { return true; } bool hasIntegratedAssembler() const override { return false; } bool hasIntegratedCPP() const override { return false; } Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -1994,6 +1994,18 @@ << A->getOption().getName() << Value; } } + + // If -miamcu is set then set flags to support MCU ABI and use MCU triple. + if (Args.getLastArg(options::OPT_miamcu)) { +if (getToolChain().getArch() != llvm::Triple::x86) + getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt) + << "-miamcu"; +CmdArgs.push_back("-triple"); +CmdArgs.push_back("i586-intel-elfiamcu"); +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); + } } void Clang::AddHexagonTargetArgs(const ArgList , @@ -5707,6 +5719,18 @@ CmdArgs.push_back(ABIName.data()); } +void ClangAs::AddX86TargetArgs(const ArgList , + ArgStringList ) const { + // If -miamcu is set then use MCU triple. + if (Args.getLastArg(options::OPT_miamcu)) { +if (getToolChain().getArch() != llvm::Triple::x86) + getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt) + << "-miamcu"; +CmdArgs.push_back("-triple"); +CmdArgs.push_back("i586-intel-elfiamcu"); + } +} + void ClangAs::ConstructJob(Compilation , const JobAction , const InputInfo , const InputInfoList , const ArgList , @@ -5847,6 +5871,11 @@ case llvm::Triple::mips64el: AddMIPSTargetArgs(Args, CmdArgs); break; + + case llvm::Triple::x86: + case llvm::Triple::x86_64: +AddX86TargetArgs(Args, CmdArgs); +break; } // Consume all the warning flags. Usually this would be handled more Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1226,6 +1226,8 @@ def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group; +def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI.">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk updated this revision to Diff 41137. aturetsk added a comment. Use getCPUKind once http://reviews.llvm.org/D13980 Files: lib/Basic/Targets.cpp test/CodeGen/attr-target-x86-mmx.c test/CodeGen/attr-target-x86.c Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -18,6 +18,8 @@ int __attribute__((target("no-mmx"))) qq(int a) { return 40; } +int __attribute__((target("arch=i386"))) qix(int a) { return 4; } + // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar. // CHECK: baz{{.*}} #0 // CHECK: foo{{.*}} #1 @@ -31,9 +33,11 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: qix{{.*}} #6 +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" +// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" +// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" +// CHECK: #6 = {{.*}}"target-cpu"="i386" "target-features"="+mmx,+sse,+sse2" Index: test/CodeGen/attr-target-x86-mmx.c === --- test/CodeGen/attr-target-x86-mmx.c +++ test/CodeGen/attr-target-x86-mmx.c @@ -19,4 +19,4 @@ _mm_srai_pi32(a, c); } -// CHECK: "target-features"="+mmx,+sse" +// CHECK: "target-features"="+mmx,+sse,+x87" Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2542,7 +2542,13 @@ if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); - switch (getCPUKind(CPU)) { + CPUKind Kind = getCPUKind(CPU); + + // All X86 processors but i386 have X87. + if (Kind != CK_i386) +setFeatureEnabledImpl(Features, "x87", true); + + switch (Kind) { case CK_Generic: case CK_i386: case CK_i486: Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -18,6 +18,8 @@ int __attribute__((target("no-mmx"))) qq(int a) { return 40; } +int __attribute__((target("arch=i386"))) qix(int a) { return 4; } + // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar. // CHECK: baz{{.*}} #0 // CHECK: foo{{.*}} #1 @@ -31,9 +33,11 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge"
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk added a comment. > Are there any of the intrinsics in the headers that also depend on x87? Not that I could find. Comment at: lib/Basic/Targets.cpp:2545-2546 @@ -2544,2 +2544,4 @@ - switch (getCPUKind(CPU)) { + CPUKind Kind = getCPUKind(CPU); + + // All X86 processors but i386 have X87. Done. http://reviews.llvm.org/D13980 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13980: Add "x87" in x86 target feature map
aturetsk added a comment. Hello Richard, Thank for the review. Comment at: lib/Basic/Targets.cpp:2538-2539 @@ -2537,1 +2537,4 @@ + // All X86 processors but i386 have X87. + if (getCPUKind(CPU) != CK_i386) +setFeatureEnabledImpl(Features, "x87", true); You are right. Fixed. http://reviews.llvm.org/D13980 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D14146: Introduction of -miamcu option
aturetsk created this revision. aturetsk added a reviewer: rsmith. aturetsk added subscribers: cfe-commits, mkuper, DavidKreitzer, anadolskiy, zansari. Add initial support of -miamcu option which triggers MCU ABI. http://reviews.llvm.org/D14146 Files: include/clang/Driver/Options.td lib/Driver/Tools.cpp test/Driver/iamcu-abi.c Index: test/Driver/iamcu-abi.c === --- /dev/null +++ test/Driver/iamcu-abi.c @@ -0,0 +1,5 @@ +// RUN: %clang -target i386-unknown-linux -m32 -miamcu %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck %s + +// CHECK: "-mfloat-abi" "soft" +// CHECK: "-mstack-alignment=4" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -1907,6 +1907,16 @@ << A->getOption().getName() << Value; } } + + // If -miamcu is set then set flags to support MCU ABI. + if (Args.getLastArg(options::OPT_miamcu)) { +if (getToolChain().getArch() != llvm::Triple::x86) + getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt) + << "-miamcu"; +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); + } } void Clang::AddHexagonTargetArgs(const ArgList , Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1223,6 +1223,8 @@ def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group; +def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI.">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; Index: test/Driver/iamcu-abi.c === --- /dev/null +++ test/Driver/iamcu-abi.c @@ -0,0 +1,5 @@ +// RUN: %clang -target i386-unknown-linux -m32 -miamcu %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck %s + +// CHECK: "-mfloat-abi" "soft" +// CHECK: "-mstack-alignment=4" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -1907,6 +1907,16 @@ << A->getOption().getName() << Value; } } + + // If -miamcu is set then set flags to support MCU ABI. + if (Args.getLastArg(options::OPT_miamcu)) { +if (getToolChain().getArch() != llvm::Triple::x86) + getToolChain().getDriver().Diag(diag::err_drv_unsupported_opt) + << "-miamcu"; +CmdArgs.push_back("-mfloat-abi"); +CmdArgs.push_back("soft"); +CmdArgs.push_back("-mstack-alignment=4"); + } } void Clang::AddHexagonTargetArgs(const ArgList , Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1223,6 +1223,8 @@ def m64 : Flag<["-"], "m64">, Group, Flags<[DriverOption, CoreOption]>; def mx32 : Flag<["-"], "mx32">, Group, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group; +def miamcu : Flag<["-"], "miamcu">, Group, Flags<[DriverOption, CoreOption]>, + HelpText<"Use Intel MCU ABI.">; def malign_functions_EQ : Joined<["-"], "malign-functions=">, Group; def malign_loops_EQ : Joined<["-"], "malign-loops=">, Group; def malign_jumps_EQ : Joined<["-"], "malign-jumps=">, Group; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D13980: Add "x87" in x86 target feature map
aturetsk created this revision. aturetsk added a reviewer: rsmith. aturetsk added a subscriber: cfe-commits. Add 'x87' in x86 target feature map http://reviews.llvm.org/D13980 Files: lib/Basic/Targets.cpp test/CodeGen/attr-target-x86-mmx.c test/CodeGen/attr-target-x86.c Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -31,9 +31,9 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" +// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87" +// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt,-aes" +// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,+x87,-3dnow,-3dnowa,-mmx" Index: test/CodeGen/attr-target-x86-mmx.c === --- test/CodeGen/attr-target-x86-mmx.c +++ test/CodeGen/attr-target-x86-mmx.c @@ -19,4 +19,4 @@ _mm_srai_pi32(a, c); } -// CHECK: "target-features"="+mmx,+sse" +// CHECK: "target-features"="+mmx,+sse,+x87" Index: lib/Basic/Targets.cpp === --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2513,6 +2513,9 @@ if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); + // X86 always has X87. + setFeatureEnabledImpl(Features, "x87", true); + switch (getCPUKind(CPU)) { case CK_Generic: case CK_i386: Index: test/CodeGen/attr-target-x86.c === --- test/CodeGen/attr-target-x86.c +++ test/CodeGen/attr-target-x86.c @@ -31,9 +31,9 @@ // CHECK: qux{{.*}} #1 // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 -// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" -// CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" -// CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+sse,+sse2,-3dnow,-3dnowa,-mmx" +// CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+fxsr,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+x87,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt"