r331856 - [driver] Add mips_Features_Group to Options to improve documentation sorting
Author: atanasyan Date: Wed May 9 01:42:30 2018 New Revision: 331856 URL: http://llvm.org/viewvc/llvm-project?rev=331856&view=rev Log: [driver] Add mips_Features_Group to Options to improve documentation sorting Move all of the MIPS-only options into a new m_mips_Features_Group. Nearly all other targets have most target-specific options grouped, but MIPS does not. The primary benefits are that the options will be listed together (and thus identifiable as MIPS-specific even if they have no help string) in the ClangCommandLineReference, and that Options.td is a bit more organized. A secondary benefit is that a custom version of clang can more easily hide/disable groups of options for unsupported targets. Patch by Vince Del Vecchio Differential Revision: https://reviews.llvm.org/D46450 Modified: cfe/trunk/include/clang/Driver/Options.td Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=331856&r1=331855&r2=331856&view=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Wed May 9 01:42:30 2018 @@ -143,6 +143,8 @@ def m_hexagon_Features_Group : OptionGro // These are explicitly handled. def m_hexagon_Features_HVX_Group : OptionGroup<"">, Group, DocName<"Hexagon">; +def m_mips_Features_Group : OptionGroup<"">, +Group, DocName<"MIPS">; def m_ppc_Features_Group : OptionGroup<"">, Group, DocName<"PowerPC">; def m_wasm_Features_Group : OptionGroup<"">, @@ -150,7 +152,7 @@ def m_wasm_Features_Group : OptionGroup< def m_x86_Features_Group : OptionGroup<"">, Group, Flags<[CoreOption]>, DocName<"X86">; -def m_libc_Group : OptionGroup<"">, Group, +def m_libc_Group : OptionGroup<"">, Group, Flags<[HelpHidden]>; def O_Group : OptionGroup<"">, Group, @@ -2094,127 +2096,135 @@ def mpie_copy_relocations : Flag<["-"], def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group; def mfentry : Flag<["-"], "mfentry">, HelpText<"Insert calls to fentry at function entry (x86 only)">, Flags<[CC1Option]>, Group; -def mips16 : Flag<["-"], "mips16">, Group; -def mno_mips16 : Flag<["-"], "mno-mips16">, Group; -def mmicromips : Flag<["-"], "mmicromips">, Group; -def mno_micromips : Flag<["-"], "mno-micromips">, Group; -def mxgot : Flag<["-"], "mxgot">, Group; -def mno_xgot : Flag<["-"], "mno-xgot">, Group; -def mldc1_sdc1 : Flag<["-"], "mldc1-sdc1">, Group; -def mno_ldc1_sdc1 : Flag<["-"], "mno-ldc1-sdc1">, Group; -def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">, Group; +def mips16 : Flag<["-"], "mips16">, Group; +def mno_mips16 : Flag<["-"], "mno-mips16">, Group; +def mmicromips : Flag<["-"], "mmicromips">, Group; +def mno_micromips : Flag<["-"], "mno-micromips">, Group; +def mxgot : Flag<["-"], "mxgot">, Group; +def mno_xgot : Flag<["-"], "mno-xgot">, Group; +def mldc1_sdc1 : Flag<["-"], "mldc1-sdc1">, Group; +def mno_ldc1_sdc1 : Flag<["-"], "mno-ldc1-sdc1">, Group; +def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">, + Group; def mno_check_zero_division : Flag<["-"], "mno-check-zero-division">, - Group; -def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">, Group; + Group; +def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">, + Group; def mbranch_likely : Flag<["-"], "mbranch-likely">, Group, IgnoredGCCCompat; def mno_branch_likely : Flag<["-"], "mno-branch-likely">, Group, IgnoredGCCCompat; def mindirect_jump_EQ : Joined<["-"], "mindirect-jump=">, - Group, + Group, HelpText<"Change indirect jump instructions to inhibit speculation">; -def mdsp : Flag<["-"], "mdsp">, Group; -def mno_dsp : Flag<["-"], "mno-dsp">, Group; -def mdspr2 : Flag<["-"], "mdspr2">, Group; -def mno_dspr2 : Flag<["-"], "mno-dspr2">, Group; -def msingle_float : Flag<["-"], "msingle-float">, Group; -def mdouble_float : Flag<["-"], "mdouble-float">, Group; -def mmadd4 : Flag<["-"], "mmadd4">, Group, +def mdsp : Flag<["-"], "mdsp">, Group; +def mno_dsp : Flag<["-"], "mno-dsp">, Group; +def mdspr2 : Flag<["-"], "mdspr2">, Group; +def mno_dspr2 : Flag<["-"], "mno-dspr2">, Group; +def msingle_float : Flag<["-"], "msingle-float">, Group; +def mdouble_float : Flag<["-"], "mdouble-float">, Group; +def mmadd4 : Flag<["-"], "mmadd4">, Group, HelpText<"Enable the generation of 4-operand madd.s, madd.d and related instructions.">; -def mno_madd4 : Flag<["-"], "mno-madd4">, Group, +def mno_madd4 : Flag<["-"], "mno-madd4">, Group, HelpText<"Disable the generation of 4-operand madd.s, madd.d and related instructions.">; -def mmsa : Flag<["-"], "mmsa">, Group, +def mmsa : Flag<["-"], "mmsa">, Group
r344570 - [mips] Fix handling of GNUABIN32 environment in a target triple
Author: atanasyan Date: Mon Oct 15 15:43:23 2018 New Revision: 344570 URL: http://llvm.org/viewvc/llvm-project?rev=344570&view=rev Log: [mips] Fix handling of GNUABIN32 environment in a target triple The `GNUABIN32` environment in a target triple implies using the N32 ABI. This patch adds support for this environment and switches on N32 ABI if necessary. Patch by Patch by YunQiang Su. Differential revision: https://reviews.llvm.org/D51464 Modified: cfe/trunk/lib/Basic/Targets/Mips.h cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/Linux.cpp cfe/trunk/test/CodeGen/atomics-inlining.c cfe/trunk/test/CodeGen/mips-zero-sized-struct.c cfe/trunk/test/CodeGen/target-data.c cfe/trunk/test/CodeGen/xray-attributes-supported.cpp cfe/trunk/test/Driver/clang-translation.c cfe/trunk/test/Driver/linux-ld.c Modified: cfe/trunk/lib/Basic/Targets/Mips.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/Mips.h?rev=344570&r1=344569&r2=344570&view=diff == --- cfe/trunk/lib/Basic/Targets/Mips.h (original) +++ cfe/trunk/lib/Basic/Targets/Mips.h Mon Oct 15 15:43:23 2018 @@ -69,7 +69,12 @@ public: UseIndirectJumpHazard(false), FPMode(FPXX) { TheCXXABI.set(TargetCXXABI::GenericMIPS); -setABI(getTriple().isMIPS32() ? "o32" : "n64"); +if (Triple.isMIPS32()) + setABI("o32"); +else if (Triple.getEnvironment() == llvm::Triple::GNUABIN32) + setABI("n32"); +else + setABI("n64"); CPU = ABI == "o32" ? "mips32r2" : "mips64r2"; Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=344570&r1=344569&r2=344570&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Mon Oct 15 15:43:23 2018 @@ -82,6 +82,9 @@ void mips::getMipsCPUAndABI(const ArgLis } } + if (ABIName.empty() && (Triple.getEnvironment() == llvm::Triple::GNUABIN32)) +ABIName = "n32"; + if (ABIName.empty() && (Triple.getVendor() == llvm::Triple::MipsTechnologies || Triple.getVendor() == llvm::Triple::ImaginationTechnologies)) { Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=344570&r1=344569&r2=344570&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Mon Oct 15 15:43:23 2018 @@ -264,11 +264,13 @@ static const char *getLDMOption(const ll case llvm::Triple::mipsel: return "elf32ltsmip"; case llvm::Triple::mips64: -if (tools::mips::hasMipsAbiArg(Args, "n32")) +if (tools::mips::hasMipsAbiArg(Args, "n32") || +T.getEnvironment() == llvm::Triple::GNUABIN32) return "elf32btsmipn32"; return "elf64btsmip"; case llvm::Triple::mips64el: -if (tools::mips::hasMipsAbiArg(Args, "n32")) +if (tools::mips::hasMipsAbiArg(Args, "n32") || +T.getEnvironment() == llvm::Triple::GNUABIN32) return "elf32ltsmipn32"; return "elf64ltsmip"; case llvm::Triple::systemz: @@ -1855,6 +1857,10 @@ void Generic_GCC::GCCInstallationDetecto "mips64el-linux-gnu", "mips-mti-linux-gnu", "mips-img-linux-gnu", "mips64el-linux-gnuabi64"}; + static const char *const MIPSN32LibDirs[] = {"/lib32"}; + static const char *const MIPSN32Triples[] = {"mips64-linux-gnuabin32"}; + static const char *const MIPSN32ELLibDirs[] = {"/lib32"}; + static const char *const MIPSN32ELTriples[] = {"mips64el-linux-gnuabin32"}; static const char *const PPCLibDirs[] = {"/lib32", "/lib"}; static const char *const PPCTriples[] = { @@ -2051,6 +2057,8 @@ void Generic_GCC::GCCInstallationDetecto TripleAliases.append(begin(MIPSTriples), end(MIPSTriples)); BiarchLibDirs.append(begin(MIPS64LibDirs), end(MIPS64LibDirs)); BiarchTripleAliases.append(begin(MIPS64Triples), end(MIPS64Triples)); +BiarchLibDirs.append(begin(MIPSN32LibDirs), end(MIPSN32LibDirs)); +BiarchTripleAliases.append(begin(MIPSN32Triples), end(MIPSN32Triples)); break; case llvm::Triple::mipsel: LibDirs.append(begin(MIPSELLibDirs), end(MIPSELLibDirs)); @@ -2058,18 +2066,24 @@ void Generic_GCC::GCCInstallationDetecto TripleAliases.append(begin(MIPSTriples), end(MIPSTriples)); BiarchLibDirs.append(begin(MIPS64ELLibDirs), end(MIPS64ELLibDirs)); BiarchTripleAliases.append(begin(MIPS64ELTriples), end(MIPS64ELTriples)); +BiarchLibDirs.append(begin(MIPSN32ELLibDirs), end(MIPSN32ELLibDirs)); +BiarchTripleAliases.append(begin(MIPSN32ELTriples), end(MIPSN32ELTriples)); break; case llvm::Triple:
r344583 - [mips] Group similar commands in the test case. NFC
Author: atanasyan Date: Mon Oct 15 22:18:36 2018 New Revision: 344583 URL: http://llvm.org/viewvc/llvm-project?rev=344583&view=rev Log: [mips] Group similar commands in the test case. NFC Modified: cfe/trunk/test/CodeGen/target-data.c Modified: cfe/trunk/test/CodeGen/target-data.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/target-data.c?rev=344583&r1=344582&r2=344583&view=diff == --- cfe/trunk/test/CodeGen/target-data.c (original) +++ cfe/trunk/test/CodeGen/target-data.c Mon Oct 15 22:18:36 2018 @@ -40,31 +40,27 @@ // RUN: %clang_cc1 -triple mips64el-linux-gnu -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=MIPS-64EL -// MIPS-64EL: target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" - // RUN: %clang_cc1 -triple mips64el-linux-gnuabi64 -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=MIPS-64EL +// MIPS-64EL: target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" // RUN: %clang_cc1 -triple mips64el-linux-gnu -o - -emit-llvm -target-abi n32 \ // RUN: %s | FileCheck %s -check-prefix=MIPS-64EL-N32 -// MIPS-64EL-N32: target datalayout = "e-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128" - // RUN: %clang_cc1 -triple mips64el-linux-gnuabin32 -o - -emit-llvm \ // RUN: %s | FileCheck %s -check-prefix=MIPS-64EL-N32 +// MIPS-64EL-N32: target datalayout = "e-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128" // RUN: %clang_cc1 -triple mips64-linux-gnu -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=MIPS-64EB -// MIPS-64EB: target datalayout = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" - // RUN: %clang_cc1 -triple mips64-linux-gnuabi64 -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=MIPS-64EB +// MIPS-64EB: target datalayout = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" // RUN: %clang_cc1 -triple mips64-linux-gnu -o - -emit-llvm %s -target-abi n32 \ // RUN: | FileCheck %s -check-prefix=MIPS-64EB-N32 -// MIPS-64EB-N32: target datalayout = "E-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128" - // RUN: %clang_cc1 -triple mips64-linux-gnuabin32 -o - -emit-llvm %s \ // RUN: | FileCheck %s -check-prefix=MIPS-64EB-N32 +// MIPS-64EB-N32: target datalayout = "E-m:e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128" // RUN: %clang_cc1 -triple powerpc64-lv2 -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=PS3 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r344603 - [driver][mips] Adjust target triple's environment accordingly to provided ABI name
Author: atanasyan Date: Tue Oct 16 03:19:06 2018 New Revision: 344603 URL: http://llvm.org/viewvc/llvm-project?rev=344603&view=rev Log: [driver][mips] Adjust target triple's environment accordingly to provided ABI name For MIPS we need to adjust not only architecture name accordingly to ABI provided by the `-mabi` command line option, but also modify triple's environment. For example, for `mips-linux-gnu` triple and `-mabi=n32` option a correct final triple is `mips64-linux-gnuabin32`. Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/test/Driver/mips-abi.c Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=344603&r1=344602&r2=344603&view=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Oct 16 03:19:06 2018 @@ -486,12 +486,25 @@ static llvm::Triple computeTargetTriple( // If target is MIPS adjust the target triple // accordingly to provided ABI name. A = Args.getLastArg(options::OPT_mabi_EQ); - if (A && Target.isMIPS()) -Target = llvm::StringSwitch(A->getValue()) - .Case("32", Target.get32BitArchVariant()) - .Case("n32", Target.get64BitArchVariant()) - .Case("64", Target.get64BitArchVariant()) - .Default(Target); + if (A && Target.isMIPS()) { +StringRef ABIName = A->getValue(); +if (ABIName == "32") { + Target = Target.get32BitArchVariant(); + if (Target.getEnvironment() == llvm::Triple::GNUABI64 || + Target.getEnvironment() == llvm::Triple::GNUABIN32) +Target.setEnvironment(llvm::Triple::GNU); +} else if (ABIName == "n32") { + Target = Target.get64BitArchVariant(); + if (Target.getEnvironment() == llvm::Triple::GNU || + Target.getEnvironment() == llvm::Triple::GNUABI64) +Target.setEnvironment(llvm::Triple::GNUABIN32); +} else if (ABIName == "64") { + Target = Target.get64BitArchVariant(); + if (Target.getEnvironment() == llvm::Triple::GNU || + Target.getEnvironment() == llvm::Triple::GNUABIN32) +Target.setEnvironment(llvm::Triple::GNUABI64); +} + } return Target; } Modified: cfe/trunk/test/Driver/mips-abi.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-abi.c?rev=344603&r1=344602&r2=344603&view=diff == --- cfe/trunk/test/Driver/mips-abi.c (original) +++ cfe/trunk/test/Driver/mips-abi.c Tue Oct 16 03:19:06 2018 @@ -164,7 +164,7 @@ // MIPS-ARCH-UNKNOWN: error: unknown target CPU 'unknown' // Check adjusting of target triple accordingly to `-mabi` option. -// RUN: %clang -target mips64-linux-gnu -mabi=32 -### %s 2>&1 \ +// RUN: %clang -target mips64-linux-gnuabi64 -mabi=32 -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=TARGET-O32 %s // TARGET-O32: "-triple" "mips-unknown-linux-gnu" // TARGET-O32: "-target-cpu" "mips32r2" @@ -174,7 +174,7 @@ // RUN: %clang -target mips-linux-gnu -mabi=n32 -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=TARGET-N32 %s -// TARGET-N32: "-triple" "mips64-unknown-linux-gnu" +// TARGET-N32: "-triple" "mips64-unknown-linux-gnuabin32" // TARGET-N32: "-target-cpu" "mips64r2" // TARGET-N32: "-target-abi" "n32" // TARGET-N32: ld{{(.exe)?}}" @@ -182,7 +182,7 @@ // RUN: %clang -target mips-linux-gnu -mabi=64 -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=TARGET-N64 %s -// TARGET-N64: "-triple" "mips64-unknown-linux-gnu" +// TARGET-N64: "-triple" "mips64-unknown-linux-gnuabi64" // TARGET-N64: "-target-cpu" "mips64r2" // TARGET-N64: "-target-abi" "n64" // TARGET-N64: ld{{(.exe)?}}" ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r344608 - [driver][mips] Support MIPS R6 target triples
Author: atanasyan Date: Tue Oct 16 07:29:27 2018 New Revision: 344608 URL: http://llvm.org/viewvc/llvm-project?rev=344608&view=rev Log: [driver][mips] Support MIPS R6 target triples This change adds support for the following MIPS target triples: mipsisa32r6-linux-gnu mipsisa32r6el-linux-gnu mipsisa64r6-linux-gnuabi64 mipsisa64r6el-linux-gnuabi64 mipsisa64r6-linux-gnuabin32 mipsisa64r6el-linux-gnuabin32 Patch by Yun Qiang Su. Differential revision: https://reviews.llvm.org/D50850 Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/Linux.cpp cfe/trunk/test/CodeGen/atomics-inlining.c cfe/trunk/test/CodeGen/mips-zero-sized-struct.c cfe/trunk/test/CodeGen/target-data.c cfe/trunk/test/CodeGen/xray-attributes-supported.cpp cfe/trunk/test/Driver/clang-translation.c Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=344608&r1=344607&r2=344608&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Tue Oct 16 07:29:27 2018 @@ -35,6 +35,11 @@ void mips::getMipsCPUAndABI(const ArgLis DefMips64CPU = "mips64r6"; } + if (Triple.getSubArch() == llvm::Triple::MipsSubArch_r6) { +DefMips32CPU = "mips32r6"; +DefMips64CPU = "mips64r6"; + } + // MIPS64r6 is the default for Android MIPS64 (mips64el-linux-android). if (Triple.isAndroid()) { DefMips32CPU = "mips32"; Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=344608&r1=344607&r2=344608&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Tue Oct 16 07:29:27 2018 @@ -1871,26 +1871,30 @@ void Generic_GCC::GCCInstallationDetecto "i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu"}; static const char *const MIPSLibDirs[] = {"/lib"}; - static const char *const MIPSTriples[] = {"mips-linux-gnu", "mips-mti-linux", -"mips-mti-linux-gnu", -"mips-img-linux-gnu"}; + static const char *const MIPSTriples[] = { + "mips-linux-gnu", "mips-mti-linux", "mips-mti-linux-gnu", + "mips-img-linux-gnu", "mipsisa32r6-linux-gnu"}; static const char *const MIPSELLibDirs[] = {"/lib"}; - static const char *const MIPSELTriples[] = {"mipsel-linux-gnu", - "mips-img-linux-gnu"}; + static const char *const MIPSELTriples[] = { + "mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu"}; static const char *const MIPS64LibDirs[] = {"/lib64", "/lib"}; static const char *const MIPS64Triples[] = { - "mips64-linux-gnu", "mips-mti-linux-gnu", "mips-img-linux-gnu", - "mips64-linux-gnuabi64"}; + "mips64-linux-gnu", "mips-mti-linux-gnu", + "mips-img-linux-gnu","mips64-linux-gnuabi64", + "mipsisa64r6-linux-gnu", "mipsisa64r6-linux-gnuabi64"}; static const char *const MIPS64ELLibDirs[] = {"/lib64", "/lib"}; static const char *const MIPS64ELTriples[] = { - "mips64el-linux-gnu", "mips-mti-linux-gnu", "mips-img-linux-gnu", - "mips64el-linux-gnuabi64"}; + "mips64el-linux-gnu", "mips-mti-linux-gnu", + "mips-img-linux-gnu", "mips64el-linux-gnuabi64", + "mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64"}; static const char *const MIPSN32LibDirs[] = {"/lib32"}; - static const char *const MIPSN32Triples[] = {"mips64-linux-gnuabin32"}; + static const char *const MIPSN32Triples[] = {"mips64-linux-gnuabin32", + "mipsisa64r6-linux-gnuabin32"}; static const char *const MIPSN32ELLibDirs[] = {"/lib32"}; - static const char *const MIPSN32ELTriples[] = {"mips64el-linux-gnuabin32"}; + static const char *const MIPSN32ELTriples[] = { + "mips64el-linux-gnuabin32", "mipsisa64r6el-linux-gnuabin32"}; static const char *const PPCLibDirs[] = {"/lib32", "/lib"}; static const char *const PPCTriples[] = { Modified: cfe/trunk/lib/Driver/ToolChains/Linux.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Linux.cpp?rev=344608&r1=344607&r2=344608&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Linux.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Linux.cpp Tue Oct 16 07:29:27 2018 @@ -44,9 +44,7 @@ static std::string getMultiarchTriple(co llvm::Triple::EnvironmentType TargetEnvironment = TargetTriple.getEnvironment(); bool IsAndroid = TargetTriple.isAndroid(); - std::string Mips64
Re: [llvm-dev] mips builders on LLVM buildbot?
Hi Galina, I will try to find owners of these buildbots. I hope to get results on the next week. On Sat, Nov 3, 2018 at 1:48 AM Daniel Sanders wrote: > > Hi Galina, > > I'm sad that they appear to have been abandoned but no objections from me as > I'm not the admin for any of these anymore. A couple of them were taken over > by a colleague when I left but he too has left MIPS since then. Simon > Atanasyan might be able to find the owners if there still are any. > > > On Nov 2, 2018, at 13:29, Galina Kistanova via llvm-dev > > wrote: > > > > Hello everyone, > > > > There are few abandoned mips builders on LLVM buildbot: > > > > llvm-mips-linux > > clang-cmake-mipsel > > clang-cmake-mips > > > > I am going to remove them, if anyone has any objections, please speak up! -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [llvm-dev] mips builders on LLVM buildbot?
Hi Galina, a) "llvm-mips-linux" buildbot is active now. There are some failed tests but I'm working to make the buildbot "green". b) For now "clang-cmake-mips" and "clang-cmake-mipsel" can be removed. Later we probably restore these buildbots. On Sat, Nov 3, 2018 at 11:26 AM Simon Atanasyan wrote: > > I will try to find owners of these buildbots. I hope to get results on > the next week. > > On Sat, Nov 3, 2018 at 1:48 AM Daniel Sanders > wrote: > > > > I'm sad that they appear to have been abandoned but no objections from me > > as I'm not the admin for any of these anymore. A couple of them were taken > > over by a colleague when I left but he too has left MIPS since then. Simon > > Atanasyan might be able to find the owners if there still are any. > > > > > On Nov 2, 2018, at 13:29, Galina Kistanova via llvm-dev > > > wrote: > > > > > > Hello everyone, > > > > > > There are few abandoned mips builders on LLVM buildbot: > > > > > > llvm-mips-linux > > > clang-cmake-mipsel > > > clang-cmake-mips > > > > > > I am going to remove them, if anyone has any objections, please speak up! -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r357505 - [driver] clang-format. Fix indentation, split long lines. NFC
Author: atanasyan Date: Tue Apr 2 11:03:15 2019 New Revision: 357505 URL: http://llvm.org/viewvc/llvm-project?rev=357505&view=rev Log: [driver] clang-format. Fix indentation, split long lines. NFC Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/Linux.cpp Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=357505&r1=357504&r2=357505&view=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Apr 2 11:03:15 2019 @@ -246,8 +246,9 @@ InputArgList Driver::ParseArgStrings(Arr : diag::err_drv_unknown_argument; Diags.Report(DiagID) << ArgString; } else { - DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion - : diag::err_drv_unknown_argument_with_suggestion; + DiagID = IsCLMode() + ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion + : diag::err_drv_unknown_argument_with_suggestion; Diags.Report(DiagID) << ArgString << Nearest; } ContainsError |= Diags.getDiagnosticLevel(DiagID, SourceLocation()) > @@ -1417,11 +1418,13 @@ void Driver::generateCompilationDiagnost } void Driver::setUpResponseFiles(Compilation &C, Command &Cmd) { - // Since commandLineFitsWithinSystemLimits() may underestimate system's capacity - // if the tool does not support response files, there is a chance/ that things - // will just work without a response file, so we silently just skip it. + // Since commandLineFitsWithinSystemLimits() may underestimate system's + // capacity if the tool does not support response files, there is a chance/ + // that things will just work without a response file, so we silently just + // skip it. if (Cmd.getCreator().getResponseFilesSupport() == Tool::RF_None || - llvm::sys::commandLineFitsWithinSystemLimits(Cmd.getExecutable(), Cmd.getArguments())) + llvm::sys::commandLineFitsWithinSystemLimits(Cmd.getExecutable(), + Cmd.getArguments())) return; std::string TmpName = GetTemporaryPath("response", "txt"); @@ -2030,7 +2033,8 @@ void Driver::BuildInputs(const ToolChain Arg *Previous = nullptr; bool ShowNote = false; -for (Arg *A : Args.filtered(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) { +for (Arg *A : + Args.filtered(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) { if (Previous) { Diag(clang::diag::warn_drv_overriding_flag_option) << Previous->getSpelling() << A->getSpelling(); @@ -4260,8 +4264,8 @@ const char *Driver::GetNamedOutputPath(C SmallString<128> CrashDirectory(A->getValue()); llvm::sys::path::append(CrashDirectory, Split.first); const char *Middle = Suffix ? "-%%." : "-%%"; - std::error_code EC = - llvm::sys::fs::createUniqueFile(CrashDirectory + Middle + Suffix, TmpName); + std::error_code EC = llvm::sys::fs::createUniqueFile( + CrashDirectory + Middle + Suffix, TmpName); if (EC) { Diag(clang::diag::err_unable_to_make_temp) << EC.message(); return ""; @@ -4764,7 +4768,8 @@ bool Driver::GetReleaseVersion(StringRef return false; } -std::pair Driver::getIncludeExcludeOptionFlagMasks(bool IsClCompatMode) const { +std::pair +Driver::getIncludeExcludeOptionFlagMasks(bool IsClCompatMode) const { unsigned IncludedFlagsBitmask = 0; unsigned ExcludedFlagsBitmask = options::NoDriverOption; Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=357505&r1=357504&r2=357505&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Tue Apr 2 11:03:15 2019 @@ -464,7 +464,7 @@ void tools::gnutools::Linker::ConstructJ if (HasCRTBeginEndFiles) CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin))); - } +} // Add crtfastmath.o if available and fast math is enabled. ToolChain.AddFastMathRuntimeIfAvailable(Args, CmdArgs); @@ -675,14 +675,16 @@ void tools::gnutools::Assembler::Constru case llvm::Triple::sparcel: { CmdArgs.push_back("-32"); std::string CPU = getCPUName(Args, getToolChain().getTriple()); -CmdArgs.push_back(sparc::getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); +CmdArgs.push_back( +sparc::getSparcAsmModeForCPU(CPU, getToolChain().getTriple())); AddAssemblerKPIC(getToolChain(), Args, CmdArgs); break; } case llvm::Triple::sparcv9: { CmdArgs.push_back("-64"); std::string CPU = getCPUName(Args, getToolChain().getTriple())
r357506 - [driver][mips] Check both `gnuabi64` and `gnu` suffixes in `getMultiarchTriple`
Author: atanasyan Date: Tue Apr 2 11:03:31 2019 New Revision: 357506 URL: http://llvm.org/viewvc/llvm-project?rev=357506&view=rev Log: [driver][mips] Check both `gnuabi64` and `gnu` suffixes in `getMultiarchTriple` In case of N64 ABI toolchain paths migth have `mips-linux-gnuabi64` or `mips-linux-gnu` directory regardless of selected environment. Check both variants while detecting a multiarch triple. Fix for the bug https://bugs.llvm.org/show_bug.cgi?id=41204 Modified: cfe/trunk/lib/Driver/ToolChains/Linux.cpp cfe/trunk/test/Driver/linux-ld.c Modified: cfe/trunk/lib/Driver/ToolChains/Linux.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Linux.cpp?rev=357506&r1=357505&r2=357506&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Linux.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Linux.cpp Tue Apr 2 11:03:31 2019 @@ -44,6 +44,7 @@ static std::string getMultiarchTriple(co TargetTriple.getEnvironment(); bool IsAndroid = TargetTriple.isAndroid(); bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; + bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; // For most architectures, just use whatever we have rather than trying to be // clever. @@ -102,33 +103,37 @@ static std::string getMultiarchTriple(co return "aarch64_be-linux-gnu"; break; case llvm::Triple::mips: { -std::string Arch = IsMipsR6 ? "mipsisa32r6" : "mips"; -if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-gnu")) - return Arch + "-linux-gnu"; +std::string MT = IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +if (D.getVFS().exists(SysRoot + "/lib/" + MT)) + return MT; break; } case llvm::Triple::mipsel: { if (IsAndroid) return "mipsel-linux-android"; -std::string Arch = IsMipsR6 ? "mipsisa32r6el" : "mipsel"; -if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-gnu")) - return Arch + "-linux-gnu"; +std::string MT = IsMipsR6 ? "mipsisa32r6el-linux-gnu" : "mipsel-linux-gnu"; +if (D.getVFS().exists(SysRoot + "/lib/" + MT)) + return MT; break; } case llvm::Triple::mips64: { -std::string Arch = IsMipsR6 ? "mipsisa64r6" : "mips64"; -std::string ABI = llvm::Triple::getEnvironmentTypeName(TargetEnvironment); -if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-" + ABI)) - return Arch + "-linux-" + ABI; +std::string MT = std::string(IsMipsR6 ? "mipsisa64r6" : "mips64") + + "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); +if (D.getVFS().exists(SysRoot + "/lib/" + MT)) + return MT; +if (D.getVFS().exists(SysRoot + "/lib/mips64-linux-gnu")) + return "mips64-linux-gnu"; break; } case llvm::Triple::mips64el: { if (IsAndroid) return "mips64el-linux-android"; -std::string Arch = IsMipsR6 ? "mipsisa64r6el" : "mips64el"; -std::string ABI = llvm::Triple::getEnvironmentTypeName(TargetEnvironment); -if (D.getVFS().exists(SysRoot + "/lib/" + Arch + "-linux-" + ABI)) - return Arch + "-linux-" + ABI; +std::string MT = std::string(IsMipsR6 ? "mipsisa64r6el" : "mips64el") + + "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); +if (D.getVFS().exists(SysRoot + "/lib/" + MT)) + return MT; +if (D.getVFS().exists(SysRoot + "/lib/mips64el-linux-gnu")) + return "mips64el-linux-gnu"; break; } case llvm::Triple::ppc: Modified: cfe/trunk/test/Driver/linux-ld.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-ld.c?rev=357506&r1=357505&r2=357506&view=diff == --- cfe/trunk/test/Driver/linux-ld.c (original) +++ cfe/trunk/test/Driver/linux-ld.c Tue Apr 2 11:03:31 2019 @@ -1660,6 +1660,11 @@ // CHECK-DEBIAN-ML-MIPS64EL-N32: "-L[[SYSROOT]]/usr/lib" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=mips64-unknown-linux-gnu \ +// RUN: --gcc-toolchain="" \ +// RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \ +// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-ML-MIPS64-GNUABI %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: --target=mips64-linux-gnuabi64 -mabi=n64 \ // RUN: --gcc-toolchain="" \ // RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \ @@ -1680,6 +1685,11 @@ // CHECK-DEBIAN-ML-MIPS64-GNUABI: "{{.*}}/usr/lib/gcc/mips64-linux-gnuabi64/4.9/../../../mips64-linux-gnuabi64{{/|}}crtn.o" // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=mips64el-unknown-linux-gnu \ +// RUN: --gcc-toolchain="" \ +// RUN: --sysroot=%S/Inputs/debian_6_mips64_tree \ +// RUN: | FileCheck --check-prefix=CHECK-DEBIAN-ML-MIPS64EL-GNUABI %s +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:
r343169 - [driver][mips] Adjust target triple accordingly to provided ABI name
Author: atanasyan Date: Wed Sep 26 22:04:50 2018 New Revision: 343169 URL: http://llvm.org/viewvc/llvm-project?rev=343169&view=rev Log: [driver][mips] Adjust target triple accordingly to provided ABI name Explicitly selected MIPS ABI using the `-mabi` option implies corresponding target triple. For 'O32' ABI it's a 32-bit target triple like `mips-linux-gnu`. For 'N32' and 'N64' ABIs it's a 64-bit target triple like `mips64-linux-gnu`. This patch adjusts target triple accordingly these rules like we do for pseudo-target flags '-m64', '-m32' etc already. Differential revision: https://reviews.llvm.org/D52290 Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/test/Driver/mips-abi.c Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=343169&r1=343168&r2=343169&view=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Wed Sep 26 22:04:50 2018 @@ -481,6 +481,16 @@ static llvm::Triple computeTargetTriple( Target.setVendorName("intel"); } + // If target is MIPS adjust the target triple + // accordingly to provided ABI name. + A = Args.getLastArg(options::OPT_mabi_EQ); + if (A && Target.isMIPS()) +Target = llvm::StringSwitch(A->getValue()) + .Case("32", Target.get32BitArchVariant()) + .Case("n32", Target.get64BitArchVariant()) + .Case("64", Target.get64BitArchVariant()) + .Default(Target); + return Target; } Modified: cfe/trunk/test/Driver/mips-abi.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-abi.c?rev=343169&r1=343168&r2=343169&view=diff == --- cfe/trunk/test/Driver/mips-abi.c (original) +++ cfe/trunk/test/Driver/mips-abi.c Wed Sep 26 22:04:50 2018 @@ -162,3 +162,28 @@ // RUN:-march=unknown 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-ARCH-UNKNOWN %s // MIPS-ARCH-UNKNOWN: error: unknown target CPU 'unknown' + +// Check adjusting of target triple accordingly to `-mabi` option. +// RUN: %clang -target mips64-linux-gnu -mabi=32 -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=TARGET-O32 %s +// TARGET-O32: "-triple" "mips-unknown-linux-gnu" +// TARGET-O32: "-target-cpu" "mips32r2" +// TARGET-O32: "-target-abi" "o32" +// TARGET-O32: ld{{.*}}" +// TARGET-O32: "-m" "elf32btsmip" + +// RUN: %clang -target mips-linux-gnu -mabi=n32 -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=TARGET-N32 %s +// TARGET-N32: "-triple" "mips64-unknown-linux-gnu" +// TARGET-N32: "-target-cpu" "mips64r2" +// TARGET-N32: "-target-abi" "n32" +// TARGET-N32: ld{{.*}}" +// TARGET-N32: "-m" "elf32btsmipn32" + +// RUN: %clang -target mips-linux-gnu -mabi=64 -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=TARGET-N64 %s +// TARGET-N64: "-triple" "mips64-unknown-linux-gnu" +// TARGET-N64: "-target-cpu" "mips64r2" +// TARGET-N64: "-target-abi" "n64" +// TARGET-N64: ld{{.*}}" +// TARGET-N64: "-m" "elf64btsmip" ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r353965 - [Headers][mips] Add `__attribute__((__mode__(__unwind_word__)))` to the _Unwind_Word / _Unwind_SWord definitions
Author: atanasyan Date: Wed Feb 13 10:27:09 2019 New Revision: 353965 URL: http://llvm.org/viewvc/llvm-project?rev=353965&view=rev Log: [Headers][mips] Add `__attribute__((__mode__(__unwind_word__)))` to the _Unwind_Word / _Unwind_SWord definitions The rationale of this change is to fix _Unwind_Word / _Unwind_SWord definitions for MIPS N32 ABI. This ABI uses 32-bit pointers, but _Unwind_Word and _Unwind_SWord types are eight bytes long. # The __attribute__((__mode__(__unwind_word__))) is added to the type definitions. It makes them equal to the corresponding definitions used by GCC and allows to override types using `getUnwindWordWidth` function. # The `getUnwindWordWidth` virtual function override in the `MipsTargetInfo` class and provides correct type size values. Differential revision: https://reviews.llvm.org/D58165 Modified: cfe/trunk/lib/Basic/Targets/Mips.cpp cfe/trunk/lib/Basic/Targets/Mips.h cfe/trunk/lib/Headers/unwind.h cfe/trunk/test/Sema/attr-mode.c Modified: cfe/trunk/lib/Basic/Targets/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/Mips.cpp?rev=353965&r1=353964&r2=353965&view=diff == --- cfe/trunk/lib/Basic/Targets/Mips.cpp (original) +++ cfe/trunk/lib/Basic/Targets/Mips.cpp Wed Feb 13 10:27:09 2019 @@ -215,6 +215,14 @@ ArrayRef MipsTargetInfo:: Builtin::FirstTSBuiltin); } +unsigned MipsTargetInfo::getUnwindWordWidth() const { + return llvm::StringSwitch(ABI) + .Case("o32", 32) + .Case("n32", 64) + .Case("n64", 64) + .Default(getPointerWidth(0)); +} + bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const { // microMIPS64R6 backend was removed. if (getTriple().isMIPS64() && IsMicromips && (ABI == "n32" || ABI == "n64")) { Modified: cfe/trunk/lib/Basic/Targets/Mips.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/Mips.h?rev=353965&r1=353964&r2=353965&view=diff == --- cfe/trunk/lib/Basic/Targets/Mips.h (original) +++ cfe/trunk/lib/Basic/Targets/Mips.h Wed Feb 13 10:27:09 2019 @@ -401,6 +401,8 @@ public: return (ABI == "n32" || ABI == "n64") || getTargetOpts().ForceEnableInt128; } + unsigned getUnwindWordWidth() const override; + bool validateTarget(DiagnosticsEngine &Diags) const override; }; } // namespace targets Modified: cfe/trunk/lib/Headers/unwind.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/unwind.h?rev=353965&r1=353964&r2=353965&view=diff == --- cfe/trunk/lib/Headers/unwind.h (original) +++ cfe/trunk/lib/Headers/unwind.h Wed Feb 13 10:27:09 2019 @@ -66,8 +66,8 @@ extern "C" { #pragma GCC visibility push(default) #endif -typedef uintptr_t _Unwind_Word; -typedef intptr_t _Unwind_Sword; +typedef uintptr_t _Unwind_Word __attribute__((__mode__(__unwind_word__))); +typedef intptr_t _Unwind_Sword __attribute__((__mode__(__unwind_word__))); typedef uintptr_t _Unwind_Ptr; typedef uintptr_t _Unwind_Internal_Ptr; typedef uint64_t _Unwind_Exception_Class; Modified: cfe/trunk/test/Sema/attr-mode.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-mode.c?rev=353965&r1=353964&r2=353965&view=diff == --- cfe/trunk/test/Sema/attr-mode.c (original) +++ cfe/trunk/test/Sema/attr-mode.c Wed Feb 13 10:27:09 2019 @@ -6,6 +6,12 @@ // RUN: -verify %s // RUN: %clang_cc1 -triple x86_64-pc-linux-gnux32 -DTEST_64BIT_X86 -fsyntax-only \ // RUN: -verify %s +// RUN: %clang_cc1 -triple mips-linux-gnu -DTEST_MIPS_32 -fsyntax-only \ +// RUN: -verify %s +// RUN: %clang_cc1 -triple mips64-linux-gnuabin32 -DTEST_MIPS_N32 -fsyntax-only \ +// RUN: -verify %s +// RUN: %clang_cc1 -triple mips64-linux-gnu -DTEST_MIPS_64 -fsyntax-only \ +// RUN: -verify %s typedef int i16_1 __attribute((mode(HI))); int i16_1_test[sizeof(i16_1) == 2 ? 1 : -1]; @@ -33,7 +39,7 @@ typedef _Complex double c32 __attribute( int c32_test[sizeof(c32) == 8 ? 1 : -1]; typedef _Complex float c64 __attribute((mode(DC))); -#ifndef TEST_64BIT_PPC64 // Note, 'XC' mode is illegal for PPC64 machines. +#if !defined(__ppc__) && !defined(__mips__) // Note, 'XC' mode is illegal for PPC64 and MIPS machines. typedef _Complex float c80 __attribute((mode(XC))); #endif @@ -84,6 +90,15 @@ void f_ft128_arg(long double *x); void f_ft128_complex_arg(_Complex long double *x); void test_TFtype(f128ibm *a) { f_ft128_arg (a); } void test_TCtype(c128ibm *a) { f_ft128_complex_arg (a); } +#elif TEST_MIPS_32 +typedef unsigned int gcc_unwind_word __attribute__((mode(unwind_word))); +int foo[sizeof(gcc_unwind_word) == 4 ? 1 : -1]; +#elif TEST_MIPS_N32 +typedef unsigned int gcc_unwind_word __attribute__((mode(unwind_word
r312701 - [mips] Replace Triple::Environment check by the isGNUEnvironment() call. NFC
Author: atanasyan Date: Wed Sep 6 23:05:06 2017 New Revision: 312701 URL: http://llvm.org/viewvc/llvm-project?rev=312701&view=rev Log: [mips] Replace Triple::Environment check by the isGNUEnvironment() call. NFC Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=312701&r1=312700&r2=312701&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Wed Sep 6 23:05:06 2017 @@ -35,7 +35,7 @@ void mips::getMipsCPUAndABI(const ArgLis // MIPS32r6 is the default for mips(el)?-img-linux-gnu and MIPS64r6 is the // default for mips64(el)?-img-linux-gnu. if (Triple.getVendor() == llvm::Triple::ImaginationTechnologies && - Triple.getEnvironment() == llvm::Triple::GNU) { + Triple.isGNUEnvironment()) { DefMips32CPU = "mips32r6"; DefMips64CPU = "mips64r6"; } Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=312701&r1=312700&r2=312701&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Wed Sep 6 23:05:06 2017 @@ -1311,12 +1311,12 @@ bool clang::driver::findMIPSMultilibs(co if (TargetTriple.getVendor() == llvm::Triple::MipsTechnologies && TargetTriple.getOS() == llvm::Triple::Linux && - TargetTriple.getEnvironment() == llvm::Triple::GNU) + TargetTriple.isGNUEnvironment()) return findMipsMtiMultilibs(Flags, NonExistent, Result); if (TargetTriple.getVendor() == llvm::Triple::ImaginationTechnologies && TargetTriple.getOS() == llvm::Triple::Linux && - TargetTriple.getEnvironment() == llvm::Triple::GNU) + TargetTriple.isGNUEnvironment()) return findMipsImgMultilibs(Flags, NonExistent, Result); if (findMipsCsMultilibs(Flags, NonExistent, Result)) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r361967 - [mips] Check argument for __builtin_msa_ctcmsa / __builtin_msa_cfcmsa
Author: atanasyan Date: Wed May 29 07:59:32 2019 New Revision: 361967 URL: http://llvm.org/viewvc/llvm-project?rev=361967&view=rev Log: [mips] Check argument for __builtin_msa_ctcmsa / __builtin_msa_cfcmsa The `__builtin_msa_ctcmsa` and `__builtin_msa_cfcmsa` builtins are mapped to the `ctcmsa` and `cfcmsa` instructions respectively. While MSA control registers have indexes in 0..7 range, the instructions accept register index in 0..31 range [1]. [1] MIPS Architecture for Programmers Volume IV-j: The MIPS64 SIMD Architecture Module https://www.mips.com/?do-download=the-mips64-simd-architecture-module Modified: cfe/trunk/lib/Sema/SemaChecking.cpp cfe/trunk/test/CodeGen/builtins-mips-msa-error.c Modified: cfe/trunk/lib/Sema/SemaChecking.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=361967&r1=361966&r2=361967&view=diff == --- cfe/trunk/lib/Sema/SemaChecking.cpp (original) +++ cfe/trunk/lib/Sema/SemaChecking.cpp Wed May 29 07:59:32 2019 @@ -3034,6 +3034,8 @@ bool Sema::CheckMipsBuiltinFunctionCall( // These intrinsics take an unsigned 5 bit immediate. // The first block of intrinsics actually have an unsigned 5 bit field, // not a df/n field. + case Mips::BI__builtin_msa_cfcmsa: + case Mips::BI__builtin_msa_ctcmsa: i = 0; l = 0; u = 31; break; case Mips::BI__builtin_msa_clei_u_b: case Mips::BI__builtin_msa_clei_u_h: case Mips::BI__builtin_msa_clei_u_w: Modified: cfe/trunk/test/CodeGen/builtins-mips-msa-error.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-mips-msa-error.c?rev=361967&r1=361966&r2=361967&view=diff == --- cfe/trunk/test/CodeGen/builtins-mips-msa-error.c (original) +++ cfe/trunk/test/CodeGen/builtins-mips-msa-error.c Wed May 29 07:59:32 2019 @@ -77,6 +77,8 @@ void test(void) { v4i32_r = __msa_ceqi_w(v4i32_a, 16); // expected-error {{argument value 16 is outside the valid range [-16, 15]}} v2i64_r = __msa_ceqi_d(v2i64_a, 16); // expected-error {{argument value 16 is outside the valid range [-16, 15]}} + int_r = __msa_cfcmsa(32); // expected-error {{argument value 32 is outside the valid range [0, 31]}} + v16i8_r = __msa_clei_s_b(v16i8_a, 16); // expected-error {{argument value 16 is outside the valid range [-16, 15]}} v8i16_r = __msa_clei_s_h(v8i16_a, 16); // expected-error {{argument value 16 is outside the valid range [-16, 15]}} v4i32_r = __msa_clei_s_w(v4i32_a, 16); // expected-error {{argument value 16 is outside the valid range [-16, 15]}} @@ -107,6 +109,8 @@ void test(void) { int_r = __msa_copy_u_w(v4u32_a, 4);// expected-error {{argument value 4 is outside the valid range [0, 3]}} ll_r = __msa_copy_u_d(v2i64_a, 2);// expected-error {{argument value 2 is outside the valid range [0, 1]}} + __builtin_msa_ctcmsa(32, 777); // expected-error {{argument value 32 is outside the valid range [0, 31]}} + v16i8_r = __msa_insve_b(v16i8_r, 16, v16i8_a); // expected-error {{argument value 16 is outside the valid range [0, 15]}} v8i16_r = __msa_insve_h(v8i16_r, 8, v8i16_a); // expected-error {{argument value 8 is outside the valid range [0, 7]}} v4i32_r = __msa_insve_w(v4i32_r, 4, v4i32_a); // expected-error {{argument value 4 is outside the valid range [0, 3]}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r348935 - [mips] Enable using of integrated assembler in all cases.
Author: atanasyan Date: Wed Dec 12 07:32:25 2018 New Revision: 348935 URL: http://llvm.org/viewvc/llvm-project?rev=348935&view=rev Log: [mips] Enable using of integrated assembler in all cases. Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=348935&r1=348934&r2=348935&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Wed Dec 12 07:32:25 2018 @@ -2472,18 +2472,9 @@ bool Generic_GCC::IsIntegratedAssemblerD case llvm::Triple::systemz: case llvm::Triple::mips: case llvm::Triple::mipsel: -return true; case llvm::Triple::mips64: case llvm::Triple::mips64el: -// Enabled for Debian, Android, FreeBSD and OpenBSD mips64/mipsel, as they -// can precisely identify the ABI in use (Debian) or only use N64 for MIPS64 -// (Android). Other targets are unable to distinguish N32 from N64. -if (getTriple().getEnvironment() == llvm::Triple::GNUABI64 || -getTriple().isAndroid() || -getTriple().isOSFreeBSD() || -getTriple().isOSOpenBSD()) - return true; -return false; +return true; default: return false; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r372220 - [mips] Pass "xgot" flag as a subtarget feature
Author: atanasyan Date: Wed Sep 18 05:24:57 2019 New Revision: 372220 URL: http://llvm.org/viewvc/llvm-project?rev=372220&view=rev Log: [mips] Pass "xgot" flag as a subtarget feature We need "xgot" flag in the MipsAsmParser to implement correct expansion of some pseudo instructions in case of using 32-bit GOT (XGOT). MipsAsmParser does not have reference to MipsSubtarget but has a reference to "feature bit set". Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/test/Driver/mips-features.c cfe/trunk/test/Driver/mips-integrated-as.s Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=372220&r1=372219&r2=372220&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Wed Sep 18 05:24:57 2019 @@ -267,6 +267,13 @@ void mips::getMIPSTargetFeatures(const D D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1); } + if (Arg *A = Args.getLastArg(options::OPT_mxgot, options::OPT_mno_xgot)) { +if (A->getOption().matches(options::OPT_mxgot)) + Features.push_back("+xgot"); +else + Features.push_back("-xgot"); + } + mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); if (FloatABI == mips::FloatABI::Soft) { // FIXME: Note, this is a hack. We need to pass the selected float Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=372220&r1=372219&r2=372220&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Wed Sep 18 05:24:57 2019 @@ -1675,13 +1675,6 @@ void Clang::AddMIPSTargetArgs(const ArgL CmdArgs.push_back("hard"); } - if (Arg *A = Args.getLastArg(options::OPT_mxgot, options::OPT_mno_xgot)) { -if (A->getOption().matches(options::OPT_mxgot)) { - CmdArgs.push_back("-mllvm"); - CmdArgs.push_back("-mxgot"); -} - } - if (Arg *A = Args.getLastArg(options::OPT_mldc1_sdc1, options::OPT_mno_ldc1_sdc1)) { if (A->getOption().matches(options::OPT_mno_ldc1_sdc1)) { Modified: cfe/trunk/test/Driver/mips-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=372220&r1=372219&r2=372220&view=diff == --- cfe/trunk/test/Driver/mips-features.c (original) +++ cfe/trunk/test/Driver/mips-features.c Wed Sep 18 05:24:57 2019 @@ -268,13 +268,13 @@ // RUN: %clang -target mips-linux-gnu -### -c %s \ // RUN: -mno-xgot -mxgot 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-XGOT %s -// CHECK-XGOT: "-mllvm" "-mxgot" +// CHECK-XGOT: "-target-feature" "+xgot" // // -mno-xgot // RUN: %clang -target mips-linux-gnu -### -c %s \ // RUN: -mxgot -mno-xgot 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-NOXGOT %s -// CHECK-NOXGOT-NOT: "-mllvm" "-mxgot" +// CHECK-NOXGOT: "-target-feature" "-xgot" // // -mldc1-sdc1 // RUN: %clang -target mips-linux-gnu -### -c %s \ Modified: cfe/trunk/test/Driver/mips-integrated-as.s URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-integrated-as.s?rev=372220&r1=372219&r2=372220&view=diff == --- cfe/trunk/test/Driver/mips-integrated-as.s (original) +++ cfe/trunk/test/Driver/mips-integrated-as.s Wed Sep 18 05:24:57 2019 @@ -293,3 +293,13 @@ // IMG-SINGLEFLOAT-EXPLICIT-FPXX: "-target-feature" "+single-float" // IMG-SINGLEFLOAT-EXPLICIT-FPXX: "-target-feature" "+fpxx" // IMG-SINGLEFLOAT-EXPLICIT-FPXX: "-target-feature" "+nooddspreg" + +// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -mxgot -c %s 2>&1 | \ +// RUN: FileCheck -check-prefix=XGOT %s +// XGOT: -cc1as +// XGOT: "-target-feature" "+xgot" + +// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -mno-xgot -c %s 2>&1 | \ +// RUN: FileCheck -check-prefix=NOXGOT %s +// NOXGOT: -cc1as +// NOXGOT: "-target-feature" "-xgot" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r374154 - [mips] Set default float ABI to "soft" on FreeBSD
Author: atanasyan Date: Wed Oct 9 03:38:03 2019 New Revision: 374154 URL: http://llvm.org/viewvc/llvm-project?rev=374154&view=rev Log: [mips] Set default float ABI to "soft" on FreeBSD Initial patch by Kyle Evans. Fix PR43596 Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/lib/Driver/ToolChains/Arch/Mips.h cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/test/Driver/mips-float.c Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=374154&r1=374153&r2=374154&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Wed Oct 9 03:38:03 2019 @@ -149,7 +149,8 @@ StringRef mips::getGnuCompatibleMipsABIN // Select the MIPS float ABI as determined by -msoft-float, -mhard-float, // and -mfloat-abi=. -mips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args) { +mips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args, + const llvm::Triple &Triple) { mips::FloatABI ABI = mips::FloatABI::Invalid; if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, @@ -172,10 +173,15 @@ mips::FloatABI mips::getMipsFloatABI(con // If unspecified, choose the default based on the platform. if (ABI == mips::FloatABI::Invalid) { -// Assume "hard", because it's a default value used by gcc. -// When we start to recognize specific target MIPS processors, -// we will be able to select the default more correctly. -ABI = mips::FloatABI::Hard; +if (Triple.isOSFreeBSD()) { + // For FreeBSD, assume "soft" on all flavors of MIPS. + ABI = mips::FloatABI::Soft; +} else { + // Assume "hard", because it's a default value used by gcc. + // When we start to recognize specific target MIPS processors, + // we will be able to select the default more correctly. + ABI = mips::FloatABI::Hard; +} } assert(ABI != mips::FloatABI::Invalid && "must select an ABI"); @@ -274,7 +280,7 @@ void mips::getMIPSTargetFeatures(const D Features.push_back("-xgot"); } - mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); + mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args, Triple); if (FloatABI == mips::FloatABI::Soft) { // FIXME: Note, this is a hack. We need to pass the selected float // mode to the MipsTargetInfoBase to define appropriate macros there. Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.h?rev=374154&r1=374153&r2=374154&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.h (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.h Wed Oct 9 03:38:03 2019 @@ -38,7 +38,8 @@ void getMIPSTargetFeatures(const Driver const llvm::opt::ArgList &Args, std::vector &Features); StringRef getGnuCompatibleMipsABIName(StringRef ABI); -mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args); +mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args, + const llvm::Triple &Triple); std::string getMipsABILibSuffix(const llvm::opt::ArgList &Args, const llvm::Triple &Triple); bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value); Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=374154&r1=374153&r2=374154&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Wed Oct 9 03:38:03 2019 @@ -1672,7 +1672,7 @@ void Clang::AddMIPSTargetArgs(const ArgL CmdArgs.push_back("-target-abi"); CmdArgs.push_back(ABIName.data()); - mips::FloatABI ABI = mips::getMipsFloatABI(D, Args); + mips::FloatABI ABI = mips::getMipsFloatABI(D, Args, Triple); if (ABI == mips::FloatABI::Soft) { // Floating point operations and argument passing are soft. CmdArgs.push_back("-msoft-float"); Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=374154&r1=374153&r2=374154&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Wed Oct 9 03:38:03 2019 @@ -823,7 +823,8 @@ void tools::gnutools::Assembler::Constru A->render(Args, CmdArgs); } else if (mips:
r310037 - [mips] Code formatting fix. NFC
Author: atanasyan Date: Fri Aug 4 01:25:09 2017 New Revision: 310037 URL: http://llvm.org/viewvc/llvm-project?rev=310037&view=rev Log: [mips] Code formatting fix. NFC Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=310037&r1=310036&r2=310037&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Fri Aug 4 01:25:09 2017 @@ -301,7 +301,7 @@ void mips::getMIPSTargetFeatures(const D "nomadd4"); AddTargetFeature(Args, Features, options::OPT_mlong_calls, options::OPT_mno_long_calls, "long-calls"); - AddTargetFeature(Args, Features, options::OPT_mmt, options::OPT_mno_mt,"mt"); + AddTargetFeature(Args, Features, options::OPT_mmt, options::OPT_mno_mt, "mt"); } mips::NanEncoding mips::getSupportedNanEncoding(StringRef &CPU) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r310038 - [mips] Fix typo (missed space) in the warning message
Author: atanasyan Date: Fri Aug 4 01:25:15 2017 New Revision: 310038 URL: http://llvm.org/viewvc/llvm-project?rev=310038&view=rev Log: [mips] Fix typo (missed space) in the warning message Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td cfe/trunk/test/Driver/mips-gpopt-warning.c Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=310038&r1=310037&r2=310038&view=diff == --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Fri Aug 4 01:25:15 2017 @@ -282,7 +282,7 @@ def warn_target_unsupported_compact_bran " support it">, InGroup; def warn_drv_unsupported_gpopt : Warning< "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit" - " usage of}0-mabicalls">, + " usage of }0-mabicalls">, InGroup; def warn_drv_unable_to_find_directory_expected : Warning< Modified: cfe/trunk/test/Driver/mips-gpopt-warning.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-gpopt-warning.c?rev=310038&r1=310037&r2=310038&view=diff == --- cfe/trunk/test/Driver/mips-gpopt-warning.c (original) +++ cfe/trunk/test/Driver/mips-gpopt-warning.c Fri Aug 4 01:25:15 2017 @@ -1,6 +1,6 @@ // REQUIRES: mips-registered-target // RUN: %clang -### -c -target mips-mti-elf %s -mgpopt 2>&1 | FileCheck -check-prefix=IMPLICIT %s -// IMPLICIT: warning: ignoring '-mgpopt' option as it cannot be used with the implicit usage of-mabicalls +// IMPLICIT: warning: ignoring '-mgpopt' option as it cannot be used with the implicit usage of -mabicalls // RUN: %clang -### -c -target mips-mti-elf %s -mgpopt -mabicalls 2>&1 | FileCheck -check-prefix=EXPLICIT %s // EXPLICIT: warning: ignoring '-mgpopt' option as it cannot be used with -mabicalls ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r308619 - Reland "[mips] Teach the driver to accept -m(no-)gpopt."
On Thu, Jul 20, 2017 at 5:04 PM, Simon Dardis via cfe-commits wrote: > Reland "[mips] Teach the driver to accept -m(no-)gpopt." > > This patch teaches the driver to pass -mgpopt by default to the backend when > it > is supported, i.e. we are using -mno-abicalls. [...] > Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=308619&r1=308618&r2=308619&view=diff > == > --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) > +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Thu Jul 20 07:04:12 2017 > @@ -1462,6 +1462,30 @@ void Clang::AddMIPSTargetArgs(const ArgL > A->claim(); >} > > + Arg *GPOpt = Args.getLastArg(options::OPT_mgpopt, options::OPT_mno_gpopt); > + Arg *ABICalls = > + Args.getLastArg(options::OPT_mabicalls, options::OPT_mno_abicalls); > + > + // -mabicalls is the default for many MIPS environments, even with > -fno-pic. > + // -mgpopt is the default for static, -fno-pic environments but these two > + // options conflict. We want to be certain that -mno-abicalls -mgpopt is > + // the only case where -mllvm -mgpopt is passed. > + // NOTE: We need a warning here or in the backend to warn when -mgpopt is > + // passed explicitly when compiling something with -mabicalls > + // (implictly) in affect. Currently the warning is in the backend. > + bool NoABICalls = > + ABICalls && ABICalls->getOption().matches(options::OPT_mno_abicalls); What about N64 ABI + non-PIC code? In that case we pass the `+noabicalls` feature flag to the backend by default regardless of -mabicalls / -mnoabicalls options. Should we assign `true` to the NoABICalls in that case too to be consistent? -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r310418 - [mips] Enable `long_call/short_call` attributes on MIPS64
Author: atanasyan Date: Tue Aug 8 14:17:33 2017 New Revision: 310418 URL: http://llvm.org/viewvc/llvm-project?rev=310418&view=rev Log: [mips] Enable `long_call/short_call` attributes on MIPS64 This change enables `long_call/short_call/far/near` attributes on MIPS64 targets. Differential revision: https://reviews.llvm.org/D36208 Modified: cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/test/CodeGen/long-call-attr.c cfe/trunk/test/Sema/attr-long-call.c Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=310418&r1=310417&r2=310418&view=diff == --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Tue Aug 8 14:17:33 2017 @@ -264,7 +264,8 @@ class TargetArch arches> { } def TargetARM : TargetArch<["arm", "thumb", "armeb", "thumbeb"]>; def TargetAVR : TargetArch<["avr"]>; -def TargetMips : TargetArch<["mips", "mipsel"]>; +def TargetMips32 : TargetArch<["mips", "mipsel"]>; +def TargetAnyMips : TargetArch<["mips", "mipsel", "mips64", "mips64el"]>; def TargetMSP430 : TargetArch<["msp430"]>; def TargetX86 : TargetArch<["x86"]>; def TargetAnyX86 : TargetArch<["x86", "x86_64"]>; @@ -1160,13 +1161,13 @@ def MSP430Interrupt : InheritableAttr, T let Documentation = [Undocumented]; } -def Mips16 : InheritableAttr, TargetSpecificAttr { +def Mips16 : InheritableAttr, TargetSpecificAttr { let Spellings = [GCC<"mips16">]; let Subjects = SubjectList<[Function], ErrorDiag>; let Documentation = [Undocumented]; } -def MipsInterrupt : InheritableAttr, TargetSpecificAttr { +def MipsInterrupt : InheritableAttr, TargetSpecificAttr { // NOTE: If you add any additional spellings, ARMInterrupt's, // MSP430Interrupt's and AnyX86Interrupt's spellings must match. let Spellings = [GNU<"interrupt">]; @@ -1182,19 +1183,19 @@ def MipsInterrupt : InheritableAttr, Tar let Documentation = [MipsInterruptDocs]; } -def MicroMips : InheritableAttr, TargetSpecificAttr { +def MicroMips : InheritableAttr, TargetSpecificAttr { let Spellings = [GCC<"micromips">]; let Subjects = SubjectList<[Function], ErrorDiag>; let Documentation = [MicroMipsDocs]; } -def MipsLongCall : InheritableAttr, TargetSpecificAttr { +def MipsLongCall : InheritableAttr, TargetSpecificAttr { let Spellings = [GCC<"long_call">, GCC<"far">]; let Subjects = SubjectList<[Function]>; let Documentation = [MipsLongCallStyleDocs]; } -def MipsShortCall : InheritableAttr, TargetSpecificAttr { +def MipsShortCall : InheritableAttr, TargetSpecificAttr { let Spellings = [GCC<"short_call">, GCC<"near">]; let Subjects = SubjectList<[Function]>; let Documentation = [MipsShortCallStyleDocs]; @@ -1276,13 +1277,13 @@ def NoInline : InheritableAttr { let Documentation = [Undocumented]; } -def NoMips16 : InheritableAttr, TargetSpecificAttr { +def NoMips16 : InheritableAttr, TargetSpecificAttr { let Spellings = [GCC<"nomips16">]; let Subjects = SubjectList<[Function], ErrorDiag>; let Documentation = [Undocumented]; } -def NoMicroMips : InheritableAttr, TargetSpecificAttr { +def NoMicroMips : InheritableAttr, TargetSpecificAttr { let Spellings = [GCC<"nomicromips">]; let Subjects = SubjectList<[Function], ErrorDiag>; let Documentation = [MicroMipsDocs]; Modified: cfe/trunk/test/CodeGen/long-call-attr.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/long-call-attr.c?rev=310418&r1=310417&r2=310418&view=diff == --- cfe/trunk/test/CodeGen/long-call-attr.c (original) +++ cfe/trunk/test/CodeGen/long-call-attr.c Tue Aug 8 14:17:33 2017 @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple mips-linux-gnu -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple mips64-linux-gnu -emit-llvm -o - %s | FileCheck %s void __attribute__((long_call)) foo1 (void); void __attribute__((short_call)) foo4 (void); Modified: cfe/trunk/test/Sema/attr-long-call.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-long-call.c?rev=310418&r1=310417&r2=310418&view=diff == --- cfe/trunk/test/Sema/attr-long-call.c (original) +++ cfe/trunk/test/Sema/attr-long-call.c Tue Aug 8 14:17:33 2017 @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple mips-linux-gnu -fsyntax-only -verify %s +// RUN: %clang_cc1 -triple mips64-linux-gnu -fsyntax-only -verify %s __attribute__((long_call(0))) void foo1(); // expected-error {{'long_call' attribute takes no arguments}} __attribute__((short_call(0))) void foo9(); // expected-error {{'short_call' attribute takes no arguments}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r310614 - [mips] Show warning in case of mixing -mlong-calls and -mabicalls options
Author: atanasyan Date: Thu Aug 10 08:42:25 2017 New Revision: 310614 URL: http://llvm.org/viewvc/llvm-project?rev=310614&view=rev Log: [mips] Show warning in case of mixing -mlong-calls and -mabicalls options While we do not support `-mshared / -mno-shared` properly, show warning and ignore `-mlong-calls` option in case of implicitly or explicitly provided `-mabicalls` option. Differential revision: https://reviews.llvm.org/D36551 Added: cfe/trunk/test/Driver/mips-longcalls-warning.c Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/test/Driver/mips-features.c Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=310614&r1=310613&r2=310614&view=diff == --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Thu Aug 10 08:42:25 2017 @@ -292,6 +292,10 @@ def warn_drv_unsupported_gpopt : Warning "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit" " usage of }0-mabicalls">, InGroup; +def warn_drv_unsupported_longcalls : Warning< + "ignoring '-mlong-calls' option as it is not currently supported with " + "%select{|the implicit usage of }0-mabicalls">, + InGroup; def warn_drv_unsupported_abicalls : Warning< "ignoring '-mabicalls' option as it cannot be used with " "non position-independent code and the N64 ABI">, Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=310614&r1=310613&r2=310614&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Thu Aug 10 08:42:25 2017 @@ -245,6 +245,16 @@ void mips::getMIPSTargetFeatures(const D else Features.push_back("-noabicalls"); + if (Arg *A = Args.getLastArg(options::OPT_mlong_calls, + options::OPT_mno_long_calls)) { +if (A->getOption().matches(options::OPT_mno_long_calls)) + Features.push_back("-long-calls"); +else if (!UseAbiCalls) + Features.push_back("+long-calls"); +else + D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1); + } + mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); if (FloatABI == mips::FloatABI::Soft) { // FIXME: Note, this is a hack. We need to pass the selected float @@ -309,8 +319,6 @@ void mips::getMIPSTargetFeatures(const D AddTargetFeature(Args, Features, options::OPT_mno_odd_spreg, options::OPT_modd_spreg, "nooddspreg"); - AddTargetFeature(Args, Features, options::OPT_mlong_calls, - options::OPT_mno_long_calls, "long-calls"); AddTargetFeature(Args, Features, options::OPT_mmt, options::OPT_mno_mt, "mt"); } Modified: cfe/trunk/test/Driver/mips-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=310614&r1=310613&r2=310614&view=diff == --- cfe/trunk/test/Driver/mips-features.c (original) +++ cfe/trunk/test/Driver/mips-features.c Thu Aug 10 08:42:25 2017 @@ -336,12 +336,16 @@ // CHECK-IMG-SINGLEFLOAT-FPXX: "-target-feature" "+fpxx" // -mlong-call -// RUN: %clang -target mips-img-linux-gnu -### -c %s -mlong-calls 2>&1 \ +// RUN: %clang -target mips-img-linux-gnu -### -c %s \ +// RUN:-mno-abicalls -mlong-calls 2>&1 \ // RUN: | FileCheck --check-prefix=LONG-CALLS-ON %s -// RUN: %clang -target mips-img-linux-gnu -### -c %s -mno-long-calls 2>&1 \ +// RUN: %clang -target mips-img-linux-gnu -### -c %s \ +// RUN:-mno-abicalls -mno-long-calls 2>&1 \ // RUN: | FileCheck --check-prefix=LONG-CALLS-OFF %s // RUN: %clang -target mips-img-linux-gnu -### -c %s 2>&1 \ // RUN: | FileCheck --check-prefix=LONG-CALLS-DEF %s +// RUN: %clang -target mips-img-linux-gnu -### -c %s -mlong-calls 2>&1 \ +// RUN: | FileCheck --check-prefix=LONG-CALLS-DEF %s // LONG-CALLS-ON: "-target-feature" "+long-calls" // LONG-CALLS-OFF: "-target-feature" "-long-calls" // LONG-CALLS-DEF-NOT: "long-calls" Added: cfe/trunk/test/Driver/mips-longcalls-warning.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-longcalls-warning.c?rev=310614&view=auto == --- cfe/trunk/test/Driver/mips-longcalls-warning.c (added) +++ cfe/trunk/test/Driver/mips-longcalls-warning.c Thu Aug 10 08:42:25 2017 @@ -0,0 +1,6 @@ +// REQUIRES: mips-registered-target +// RUN: %clang -### -c -target mips-mti-elf -mlong-calls %s 2>&1 | FileCheck -check-prefix=IMPLICIT %s +// IMPLICIT: warning: ig
r310613 - [mips] Notify user that `-mabicalls` is ignored on non-PIC N64 ABI
Author: atanasyan Date: Thu Aug 10 08:42:16 2017 New Revision: 310613 URL: http://llvm.org/viewvc/llvm-project?rev=310613&view=rev Log: [mips] Notify user that `-mabicalls` is ignored on non-PIC N64 ABI The -mabicalls option does not make sense in the case of non position independent code for the N64 ABI. After this change the driver shows a warning that -mabicalls is ignored in that case. Differential revision: https://reviews.llvm.org/D36550 Added: cfe/trunk/test/Driver/mips-abicalls-warning.c Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/test/Driver/mips-features.c Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=310613&r1=310612&r2=310613&view=diff == --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Thu Aug 10 08:42:16 2017 @@ -292,6 +292,10 @@ def warn_drv_unsupported_gpopt : Warning "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit" " usage of }0-mabicalls">, InGroup; +def warn_drv_unsupported_abicalls : Warning< + "ignoring '-mabicalls' option as it cannot be used with " + "non position-independent code and the N64 ABI">, + InGroup; def warn_drv_unable_to_find_directory_expected : Warning< "unable to find %0 directory, expected to be in '%1'">, Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=310613&r1=310612&r2=310613&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Thu Aug 10 08:42:16 2017 @@ -227,11 +227,23 @@ void mips::getMIPSTargetFeatures(const D O.matches(options::OPT_fno_PIE) || O.matches(options::OPT_fno_pie)); } - if (IsN64 && NonPIC) + bool UseAbiCalls = false; + + Arg *ABICallsArg = + Args.getLastArg(options::OPT_mabicalls, options::OPT_mno_abicalls); + UseAbiCalls = + !ABICallsArg || + (ABICallsArg && ABICallsArg->getOption().matches(options::OPT_mabicalls)); + + if (UseAbiCalls && IsN64 && NonPIC) { +D.Diag(diag::warn_drv_unsupported_abicalls); +UseAbiCalls = false; + } + + if (!UseAbiCalls) Features.push_back("+noabicalls"); else -AddTargetFeature(Args, Features, options::OPT_mno_abicalls, - options::OPT_mabicalls, "noabicalls"); +Features.push_back("-noabicalls"); mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); if (FloatABI == mips::FloatABI::Soft) { Added: cfe/trunk/test/Driver/mips-abicalls-warning.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-abicalls-warning.c?rev=310613&view=auto == --- cfe/trunk/test/Driver/mips-abicalls-warning.c (added) +++ cfe/trunk/test/Driver/mips-abicalls-warning.c Thu Aug 10 08:42:16 2017 @@ -0,0 +1,3 @@ +// REQUIRES: mips-registered-target +// RUN: %clang -### -c -target mips64-mti-elf -fno-PIC -mabicalls %s 2>&1 | FileCheck %s +// CHECK: warning: ignoring '-mabicalls' option as it cannot be used with non position-independent code and the N64 ABI Modified: cfe/trunk/test/Driver/mips-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=310613&r1=310612&r2=310613&view=diff == --- cfe/trunk/test/Driver/mips-features.c (original) +++ cfe/trunk/test/Driver/mips-features.c Thu Aug 10 08:42:16 2017 @@ -10,6 +10,11 @@ // RUN: | FileCheck --check-prefix=CHECK-MNOABICALLS %s // CHECK-MNOABICALLS: "-target-feature" "+noabicalls" // +// -mno-abicalls non-PIC N64 +// RUN: %clang -target mips64-linux-gnu -### -c -fno-PIC %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MNOABICALLS-N64NPIC %s +// CHECK-MNOABICALLS-N64NPIC: "-target-feature" "+noabicalls" +// // -mgpopt // RUN: %clang -target mips-linux-gnu -### -c %s -mno-gpopt -mgpopt -Wno-unsupported-gpopt 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-MGPOPT-DEF-ABICALLS %s ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r310615 - [mips] Group all `-mabicalls` related checks in the single place. NFC
Author: atanasyan Date: Thu Aug 10 08:42:31 2017 New Revision: 310615 URL: http://llvm.org/viewvc/llvm-project?rev=310615&view=rev Log: [mips] Group all `-mabicalls` related checks in the single place. NFC Removed: cfe/trunk/test/Driver/mips-longcalls-warning.c Modified: cfe/trunk/test/Driver/mips-abicalls-warning.c Modified: cfe/trunk/test/Driver/mips-abicalls-warning.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-abicalls-warning.c?rev=310615&r1=310614&r2=310615&view=diff == --- cfe/trunk/test/Driver/mips-abicalls-warning.c (original) +++ cfe/trunk/test/Driver/mips-abicalls-warning.c Thu Aug 10 08:42:31 2017 @@ -1,3 +1,9 @@ // REQUIRES: mips-registered-target // RUN: %clang -### -c -target mips64-mti-elf -fno-PIC -mabicalls %s 2>&1 | FileCheck %s // CHECK: warning: ignoring '-mabicalls' option as it cannot be used with non position-independent code and the N64 ABI + +// RUN: %clang -### -c -target mips-mti-elf -mlong-calls %s 2>&1 | FileCheck -check-prefix=LONGCALL-IMP %s +// LONGCALL-IMP: warning: ignoring '-mlong-calls' option as it is not currently supported with the implicit usage of -mabicalls + +// RUN: %clang -### -c -target mips-mti-elf -mlong-calls -mabicalls %s 2>&1 | FileCheck -check-prefix=LONGCALL-EXP %s +// LONGCALL-EXP: warning: ignoring '-mlong-calls' option as it is not currently supported with -mabicalls Removed: cfe/trunk/test/Driver/mips-longcalls-warning.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-longcalls-warning.c?rev=310614&view=auto == --- cfe/trunk/test/Driver/mips-longcalls-warning.c (original) +++ cfe/trunk/test/Driver/mips-longcalls-warning.c (removed) @@ -1,6 +0,0 @@ -// REQUIRES: mips-registered-target -// RUN: %clang -### -c -target mips-mti-elf -mlong-calls %s 2>&1 | FileCheck -check-prefix=IMPLICIT %s -// IMPLICIT: warning: ignoring '-mlong-calls' option as it is not currently supported with the implicit usage of -mabicalls - -// RUN: %clang -### -c -target mips-mti-elf -mlong-calls -mabicalls %s 2>&1 | FileCheck -check-prefix=EXPLICIT %s -// EXPLICIT: warning: ignoring '-mlong-calls' option as it is not currently supported with -mabicalls ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r311334 - [mips] Remove checking of the redundant condition. NFC
Author: atanasyan Date: Mon Aug 21 07:08:29 2017 New Revision: 311334 URL: http://llvm.org/viewvc/llvm-project?rev=311334&view=rev Log: [mips] Remove checking of the redundant condition. NFC Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=311334&r1=311333&r2=311334&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Mon Aug 21 07:08:29 2017 @@ -232,8 +232,7 @@ void mips::getMIPSTargetFeatures(const D Arg *ABICallsArg = Args.getLastArg(options::OPT_mabicalls, options::OPT_mno_abicalls); UseAbiCalls = - !ABICallsArg || - (ABICallsArg && ABICallsArg->getOption().matches(options::OPT_mabicalls)); + !ABICallsArg || ABICallsArg->getOption().matches(options::OPT_mabicalls); if (UseAbiCalls && IsN64 && NonPIC) { D.Diag(diag::warn_drv_unsupported_abicalls); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 284c2eb - [clang][MIPS] Fix search path for Debian multilib O32
Author: YunQiang Su Date: 2021-10-28T10:23:06+03:00 New Revision: 284c2ebc5e057a0fda23257b899260d274e69a27 URL: https://github.com/llvm/llvm-project/commit/284c2ebc5e057a0fda23257b899260d274e69a27 DIFF: https://github.com/llvm/llvm-project/commit/284c2ebc5e057a0fda23257b899260d274e69a27.diff LOG: [clang][MIPS] Fix search path for Debian multilib O32 In the situation of multilib, the gcc objects are in a /32 directory. On Debian, the libraries is under /libo32 to avoid confliction. This patch enables clang find gcc in /32, and C lib in /libo32. Differential Revision: https://reviews.llvm.org/D112158 Added: clang/test/Driver/Inputs/debian_6_mips64_tree/libo32/.keep clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/32/crtbegin.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/32/crtend.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/n32/crtbegin.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/n32/crtend.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64el-linux-gnuabi64/4.9/32/crtbegin.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64el-linux-gnuabi64/4.9/32/crtend.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64el-linux-gnuabi64/4.9/n32/crtbegin.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64el-linux-gnuabi64/4.9/n32/crtend.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/libo32/crt1.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/libo32/crti.o clang/test/Driver/Inputs/debian_6_mips64_tree/usr/libo32/crtn.o Modified: clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Linux.cpp clang/test/Driver/linux-ld.c Removed: diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index e599f5d2a53eb..5436f008ed4d2 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -1081,7 +1081,8 @@ static bool findMipsCsMultilibs(const Multilib::flags_list &Flags, .flag("-m32") .flag("-mabi=n32"); -Multilib M32 = Multilib().flag("-m64").flag("+m32").flag("-mabi=n32"); +Multilib M32 = + Multilib().gccSuffix("/32").flag("-m64").flag("+m32").flag("-mabi=n32"); DebianMipsMultilibs = MultilibSet().Either(M32, M64, MAbiN32).FilterOut(NonExistent); @@ -2120,11 +2121,11 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( static const char *const M68kTriples[] = { "m68k-linux-gnu", "m68k-unknown-linux-gnu", "m68k-suse-linux"}; - static const char *const MIPSLibDirs[] = {"/lib"}; + static const char *const MIPSLibDirs[] = {"/libo32", "/lib"}; static const char *const MIPSTriples[] = { "mips-linux-gnu", "mips-mti-linux", "mips-mti-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6-linux-gnu"}; - static const char *const MIPSELLibDirs[] = {"/lib"}; + static const char *const MIPSELLibDirs[] = {"/libo32", "/lib"}; static const char *const MIPSELTriples[] = { "mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu"}; diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index 20ed697fecbca..d02c3af28257b 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -261,6 +261,13 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) const std::string OSLibDir = std::string(getOSLibDir(Triple, Args)); const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot); + // mips32: Debian multilib, we use /libo32, while in other case, /lib is + // used. We need add both libo32 and /lib. + if (Arch == llvm::Triple::mips || Arch == llvm::Triple::mipsel) { +Generic_GCC::AddMultilibPaths(D, SysRoot, "libo32", MultiarchTriple, Paths); +addPathIfExists(D, SysRoot + "/libo32", Paths); +addPathIfExists(D, SysRoot + "/usr/libo32", Paths); + } Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths); addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths); diff --git a/clang/test/Driver/Inputs/debian_6_mips64_tree/libo32/.keep b/clang/test/Driver/Inputs/debian_6_mips64_tree/libo32/.keep new file mode 100644 index 0..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/32/crtbegin.o b/clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/32/crtbegin.o new file mode 100644 index 0..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/debian_6_mips64_tree/usr/lib/gcc/mips64-linux-gnuabi64/4.9/32/crtend.o b/clang/test/Driver/Inputs/debian_6_mips64_tree
[clang] 0d14656 - [mips] Set __OCTEON__ macros
Author: Simon Atanasyan Date: 2019-11-05T12:10:58+03:00 New Revision: 0d14656b9d8ca38b8ea321c7047eaeec43c5b2ef URL: https://github.com/llvm/llvm-project/commit/0d14656b9d8ca38b8ea321c7047eaeec43c5b2ef DIFF: https://github.com/llvm/llvm-project/commit/0d14656b9d8ca38b8ea321c7047eaeec43c5b2ef.diff LOG: [mips] Set __OCTEON__ macros Added: Modified: clang/lib/Basic/Targets/Mips.cpp clang/test/Preprocessor/init.c Removed: diff --git a/clang/lib/Basic/Targets/Mips.cpp b/clang/lib/Basic/Targets/Mips.cpp index 4ca7f08af823..9b35bbcb7638 100644 --- a/clang/lib/Basic/Targets/Mips.cpp +++ b/clang/lib/Basic/Targets/Mips.cpp @@ -189,6 +189,9 @@ void MipsTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("_MIPS_ARCH", "\"" + CPU + "\""); Builder.defineMacro("_MIPS_ARCH_" + StringRef(CPU).upper()); + if (StringRef(CPU).startswith("octeon")) +Builder.defineMacro("__OCTEON__"); + // These shouldn't be defined for MIPS-I but there's no need to check // for that since MIPS-I isn't supported. Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1"); diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index 4e79077687c7..f80e4de9e5eb 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -4839,6 +4839,7 @@ // MIPS-ARCH-OCTEON:#define _MIPS_ARCH "octeon" // MIPS-ARCH-OCTEON:#define _MIPS_ARCH_OCTEON 1 // MIPS-ARCH-OCTEON:#define _MIPS_ISA _MIPS_ISA_MIPS64 +// MIPS-ARCH-OCTEON:#define __OCTEON__ 1 // MIPS-ARCH-OCTEON:#define __mips_isa_rev 2 // // Check MIPS float ABI macros ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] e578d0f - [mips] Fix `__mips_isa_rev` macros value for Octeon CPU
Author: Simon Atanasyan Date: 2019-11-05T12:10:58+03:00 New Revision: e578d0fd295a67bce1e1fc922237f459deb49c7e URL: https://github.com/llvm/llvm-project/commit/e578d0fd295a67bce1e1fc922237f459deb49c7e DIFF: https://github.com/llvm/llvm-project/commit/e578d0fd295a67bce1e1fc922237f459deb49c7e.diff LOG: [mips] Fix `__mips_isa_rev` macros value for Octeon CPU Added: Modified: clang/lib/Basic/Targets/Mips.cpp clang/test/Preprocessor/init.c Removed: diff --git a/clang/lib/Basic/Targets/Mips.cpp b/clang/lib/Basic/Targets/Mips.cpp index 2cafbe87a996..4ca7f08af823 100644 --- a/clang/lib/Basic/Targets/Mips.cpp +++ b/clang/lib/Basic/Targets/Mips.cpp @@ -61,7 +61,7 @@ void MipsTargetInfo::fillValidCPUList( unsigned MipsTargetInfo::getISARev() const { return llvm::StringSwitch(getCPU()) .Cases("mips32", "mips64", 1) - .Cases("mips32r2", "mips64r2", 2) + .Cases("mips32r2", "mips64r2", "octeon", 2) .Cases("mips32r3", "mips64r3", 3) .Cases("mips32r5", "mips64r5", 5) .Cases("mips32r6", "mips64r6", 6) diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index 18972de35348..4e79077687c7 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -4832,6 +4832,15 @@ // MIPS-ARCH-64R6:#define _MIPS_ISA _MIPS_ISA_MIPS64 // MIPS-ARCH-64R6:#define __mips_isa_rev 6 // +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips64-none-none \ +// RUN:-target-cpu octeon < /dev/null \ +// RUN: | FileCheck -match-full-lines -check-prefix MIPS-ARCH-OCTEON %s +// +// MIPS-ARCH-OCTEON:#define _MIPS_ARCH "octeon" +// MIPS-ARCH-OCTEON:#define _MIPS_ARCH_OCTEON 1 +// MIPS-ARCH-OCTEON:#define _MIPS_ISA _MIPS_ISA_MIPS64 +// MIPS-ARCH-OCTEON:#define __mips_isa_rev 2 +// // Check MIPS float ABI macros // // RUN: %clang_cc1 -E -dM -ffreestanding \ ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] f4d32ae - [mips] Check that features required by built-ins are enabled
Author: Simon Atanasyan Date: 2019-11-29T00:23:00+03:00 New Revision: f4d32ae75bf515f443a2c99dce5c882f460c82bd URL: https://github.com/llvm/llvm-project/commit/f4d32ae75bf515f443a2c99dce5c882f460c82bd DIFF: https://github.com/llvm/llvm-project/commit/f4d32ae75bf515f443a2c99dce5c882f460c82bd.diff LOG: [mips] Check that features required by built-ins are enabled Now Clang does not check that features required by built-in functions are enabled. That causes errors in the backend reported in PR44018. This patch fixes this bug by checking that required features are enabled. This should fix PR44018. Differential Revision: https://reviews.llvm.org/D70808 Added: clang/test/Sema/builtins-mips-features.c Modified: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Basic/Targets/Mips.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtins-mips-args.c clang/test/CodeGen/builtins-mips.c Removed: diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 746320fa526b..c30f65d94581 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -8742,6 +8742,12 @@ def err_32_bit_builtin_64_bit_tgt : Error< "this builtin is only available on 32-bit targets">; def err_builtin_x64_aarch64_only : Error< "this builtin is only available on x86-64 and aarch64 targets">; +def err_mips_builtin_requires_dsp : Error< + "this builtin requires 'dsp' ASE, please use -mdsp">; +def err_mips_builtin_requires_dspr2 : Error< + "this builtin requires 'dsp r2' ASE, please use -mdspr2">; +def err_mips_builtin_requires_msa : Error< + "this builtin requires 'msa' ASE, please use -mmsa">; def err_ppc_builtin_only_on_pwr7 : Error< "this builtin is only valid on POWER7 or later CPUs">; def err_x86_builtin_invalid_rounding : Error< diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index ac5a4953e00d..59e8f3439669 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -11282,6 +11282,8 @@ class Sema final { bool CheckHexagonBuiltinCpu(unsigned BuiltinID, CallExpr *TheCall); bool CheckHexagonBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall); bool CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); + bool CheckMipsBuiltinCpu(unsigned BuiltinID, CallExpr *TheCall); + bool CheckMipsBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall); bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall); bool CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall); bool CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall); diff --git a/clang/lib/Basic/Targets/Mips.cpp b/clang/lib/Basic/Targets/Mips.cpp index b9ab80df6194..ead5e91f7c8f 100644 --- a/clang/lib/Basic/Targets/Mips.cpp +++ b/clang/lib/Basic/Targets/Mips.cpp @@ -213,7 +213,10 @@ void MipsTargetInfo::getTargetDefines(const LangOptions &Opts, bool MipsTargetInfo::hasFeature(StringRef Feature) const { return llvm::StringSwitch(Feature) .Case("mips", true) + .Case("dsp", DspRev >= DSP1) + .Case("dspr2", DspRev >= DSP2) .Case("fp64", FPMode == FP64) + .Case("msa", HasMSA) .Default(false); } diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index c19badf80137..adefca7fe4e7 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -3051,8 +3051,37 @@ bool Sema::CheckHexagonBuiltinFunctionCall(unsigned BuiltinID, CheckHexagonBuiltinArgument(BuiltinID, TheCall); } +bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { + return CheckMipsBuiltinCpu(BuiltinID, TheCall) || + CheckMipsBuiltinArgument(BuiltinID, TheCall); +} + +bool Sema::CheckMipsBuiltinCpu(unsigned BuiltinID, CallExpr *TheCall) { + const TargetInfo &TI = Context.getTargetInfo(); -// CheckMipsBuiltinFunctionCall - Checks the constant value passed to the + if (Mips::BI__builtin_mips_addu_qb <= BuiltinID && + BuiltinID <= Mips::BI__builtin_mips_lwx) { +if (!TI.hasFeature("dsp")) + return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp); + } + + if (Mips::BI__builtin_mips_absq_s_qb <= BuiltinID && + BuiltinID <= Mips::BI__builtin_mips_subuh_r_qb) { +if (!TI.hasFeature("dspr2")) + return Diag(TheCall->getBeginLoc(), + diag::err_mips_builtin_requires_dspr2); + } + + if (Mips::BI__builtin_msa_add_a_b <= BuiltinID && + BuiltinID <= Mips::BI__builtin_msa_xori_b) { +if (!TI.hasFeature("msa")) + return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa); + } + + return false; +} + +// CheckMipsBuiltinArgument - Checks the constant value passed to the
r307151 - [driver][mips] Remove redundant curly brackets. NFC
Author: atanasyan Date: Wed Jul 5 05:57:32 2017 New Revision: 307151 URL: http://llvm.org/viewvc/llvm-project?rev=307151&view=rev Log: [driver][mips] Remove redundant curly brackets. NFC Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=307151&r1=307150&r2=307151&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Wed Jul 5 05:57:32 2017 @@ -227,12 +227,11 @@ void mips::getMIPSTargetFeatures(const D O.matches(options::OPT_fno_PIE) || O.matches(options::OPT_fno_pie)); } - if (IsN64 && NonPIC) { + if (IsN64 && NonPIC) Features.push_back("+noabicalls"); - } else { + else AddTargetFeature(Args, Features, options::OPT_mno_abicalls, options::OPT_mabicalls, "noabicalls"); - } mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args); if (FloatABI == mips::FloatABI::Soft) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r307152 - [driver][mips] Use AddTargetFeature to check arguments and add feature flags. NFC
Author: atanasyan Date: Wed Jul 5 05:57:37 2017 New Revision: 307152 URL: http://llvm.org/viewvc/llvm-project?rev=307152&view=rev Log: [driver][mips] Use AddTargetFeature to check arguments and add feature flags. NFC Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=307152&r1=307151&r2=307152&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Wed Jul 5 05:57:37 2017 @@ -297,13 +297,8 @@ void mips::getMIPSTargetFeatures(const D AddTargetFeature(Args, Features, options::OPT_mno_odd_spreg, options::OPT_modd_spreg, "nooddspreg"); - - if (Arg *A = Args.getLastArg(options::OPT_mmadd4, options::OPT_mno_madd4)) { -if (A->getOption().matches(options::OPT_mmadd4)) - Features.push_back("-nomadd4"); -else - Features.push_back("+nomadd4"); - } + AddTargetFeature(Args, Features, options::OPT_mno_madd4, options::OPT_mmadd4, + "nomadd4"); } mips::NanEncoding mips::getSupportedNanEncoding(StringRef &CPU) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r307386 - [driver][mips] Pass long-calls feature flag to the MIPS backend
Author: atanasyan Date: Fri Jul 7 03:35:33 2017 New Revision: 307386 URL: http://llvm.org/viewvc/llvm-project?rev=307386&view=rev Log: [driver][mips] Pass long-calls feature flag to the MIPS backend Check the `-mlong-calls` command line option and pass the `long-calls` feature flag to the backend. Handling of this feature flag in the backend needs to be implemented by a separate commit. Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp cfe/trunk/test/Driver/mips-features.c Modified: cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp?rev=307386&r1=307385&r2=307386&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Arch/Mips.cpp Fri Jul 7 03:35:33 2017 @@ -299,6 +299,8 @@ void mips::getMIPSTargetFeatures(const D options::OPT_modd_spreg, "nooddspreg"); AddTargetFeature(Args, Features, options::OPT_mno_madd4, options::OPT_mmadd4, "nomadd4"); + AddTargetFeature(Args, Features, options::OPT_mlong_calls, + options::OPT_mno_long_calls, "long-calls"); } mips::NanEncoding mips::getSupportedNanEncoding(StringRef &CPU) { Modified: cfe/trunk/test/Driver/mips-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=307386&r1=307385&r2=307386&view=diff == --- cfe/trunk/test/Driver/mips-features.c (original) +++ cfe/trunk/test/Driver/mips-features.c Fri Jul 7 03:35:33 2017 @@ -247,3 +247,14 @@ // RUN: | FileCheck --check-prefix=CHECK-IMG-SINGLEFLOAT-FPXX %s // CHECK-IMG-SINGLEFLOAT-FPXX: "-target-feature" "+single-float" // CHECK-IMG-SINGLEFLOAT-FPXX: "-target-feature" "+fpxx" + +// -mlong-call +// RUN: %clang -target mips-img-linux-gnu -### -c %s -mlong-calls 2>&1 \ +// RUN: | FileCheck --check-prefix=LONG-CALLS-ON %s +// RUN: %clang -target mips-img-linux-gnu -### -c %s -mno-long-calls 2>&1 \ +// RUN: | FileCheck --check-prefix=LONG-CALLS-OFF %s +// RUN: %clang -target mips-img-linux-gnu -### -c %s 2>&1 \ +// RUN: | FileCheck --check-prefix=LONG-CALLS-DEF %s +// LONG-CALLS-ON: "-target-feature" "+long-calls" +// LONG-CALLS-OFF: "-target-feature" "-long-calls" +// LONG-CALLS-DEF-NOT: "long-calls" ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r307627 - [mips] Create the correct profiling symbol on Linux MIPS
Author: atanasyan Date: Mon Jul 10 23:19:01 2017 New Revision: 307627 URL: http://llvm.org/viewvc/llvm-project?rev=307627&view=rev Log: [mips] Create the correct profiling symbol on Linux MIPS Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/mcount.c Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=307627&r1=307626&r2=307627&view=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Mon Jul 10 23:19:01 2017 @@ -499,6 +499,10 @@ public: switch (Triple.getArch()) { default: break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: +case llvm::Triple::mips64: +case llvm::Triple::mips64el: case llvm::Triple::ppc: case llvm::Triple::ppc64: case llvm::Triple::ppc64le: Modified: cfe/trunk/test/CodeGen/mcount.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mcount.c?rev=307627&r1=307626&r2=307627&view=diff == --- cfe/trunk/test/CodeGen/mcount.c (original) +++ cfe/trunk/test/CodeGen/mcount.c Mon Jul 10 23:19:01 2017 @@ -8,6 +8,10 @@ // RUN: %clang_cc1 -pg -triple arm-netbsd-eabi -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s // RUN: %clang_cc1 -pg -triple aarch64-netbsd -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s // RUN: %clang_cc1 -pg -triple mips-netbsd -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s +// RUN: %clang_cc1 -pg -triple mips-unknown-gnu-linux -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s +// RUN: %clang_cc1 -pg -triple mipsel-unknown-gnu-linux -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s +// RUN: %clang_cc1 -pg -triple mips64-unknown-gnu-linux -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s +// RUN: %clang_cc1 -pg -triple mips64el-unknown-gnu-linux -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s // RUN: %clang_cc1 -pg -triple powerpc-netbsd -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s // RUN: %clang_cc1 -pg -triple powerpc64-netbsd -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s // RUN: %clang_cc1 -pg -triple powerpc64le-netbsd -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK-PREFIXED,NO-MCOUNT1 %s ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r308667 - [CodeGen][mips] Support `long_call/far/near` attributes
Author: atanasyan Date: Thu Jul 20 13:34:18 2017 New Revision: 308667 URL: http://llvm.org/viewvc/llvm-project?rev=308667&view=rev Log: [CodeGen][mips] Support `long_call/far/near` attributes This patch adds support for the `long_call`, `far`, and `near` attributes for MIPS targets. The `long_call` and `far` attributes are synonyms. All these attributes override `-mlong-calls` / `-mno-long-calls` command line options for particular function. Differential revision: https://reviews.llvm.org/D35479 Added: cfe/trunk/test/CodeGen/long-call-attr.c cfe/trunk/test/Sema/attr-long-call.c Modified: cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/include/clang/Basic/AttrDocs.td cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/lib/CodeGen/CodeGenModule.h cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/lib/CodeGen/TargetInfo.h cfe/trunk/lib/Sema/SemaDeclAttr.cpp cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=308667&r1=308666&r2=308667&view=diff == --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Thu Jul 20 13:34:18 2017 @@ -1188,6 +1188,18 @@ def MicroMips : InheritableAttr, TargetS let Documentation = [MicroMipsDocs]; } +def MipsLongCall : InheritableAttr, TargetSpecificAttr { + let Spellings = [GCC<"long_call">, GCC<"far">]; + let Subjects = SubjectList<[Function]>; + let Documentation = [MipsCallStyleDocs]; +} + +def MipsShortCall : InheritableAttr, TargetSpecificAttr { + let Spellings = [GCC<"near">]; + let Subjects = SubjectList<[Function]>; + let Documentation = [MipsCallStyleDocs]; +} + def Mode : Attr { let Spellings = [GCC<"mode">]; let Subjects = SubjectList<[Var, Enum, TypedefName, Field], ErrorDiag, Modified: cfe/trunk/include/clang/Basic/AttrDocs.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=308667&r1=308666&r2=308667&view=diff == --- cfe/trunk/include/clang/Basic/AttrDocs.td (original) +++ cfe/trunk/include/clang/Basic/AttrDocs.td Thu Jul 20 13:34:18 2017 @@ -1323,6 +1323,26 @@ on the command line. }]; } +def MipsCallStyleDocs : Documentation { + let Category = DocCatFunction; + let Content = [{ +Clang supports the ``__attribute__((long_call))``, ``__attribute__((far))``, +and ``__attribute__((near))`` attributes on MIPS targets. These attributes may +only be added to function declarations and change the code generated +by the compiler when directly calling the function. The ``near`` attribute +allows calls to the function to be made using the ``jal`` instruction, which +requires the function to be located in the same naturally aligned 256MB +segment as the caller. The ``long_call`` and ``far`` attributes are synonyms +and require the use of a different call sequence that works regardless +of the distance between the functions. + +These attributes have no effect for position-independent code. + +These attributes take priority over command line switches such +as ``-mlong-calls`` and ``-mno-long-calls``. + }]; +} + def AVRInterruptDocs : Documentation { let Category = DocCatFunction; let Content = [{ Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=308667&r1=308666&r2=308667&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Thu Jul 20 13:34:18 2017 @@ -1080,7 +1080,7 @@ void CodeGenModule::setNonAliasAttribute GO->setSection(SA->getName()); } - getTargetCodeGenInfo().setTargetAttributes(D, GO, *this); + getTargetCodeGenInfo().setTargetAttributes(D, GO, *this, ForDefinition); } void CodeGenModule::SetInternalFunctionAttributes(const Decl *D, @@ -1147,7 +1147,9 @@ void CodeGenModule::CreateFunctionTypeMe void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F, bool IsIncompleteFunction, - bool IsThunk) { + bool IsThunk, + ForDefinition_t IsForDefinition) { + if (llvm::Intrinsic::ID IID = F->getIntrinsicID()) { // If this is an intrinsic function, set the function's attributes // to the intrinsic's attributes. @@ -1157,8 +1159,13 @@ void CodeGenModule::SetFunctionAttribute const auto *FD = cast(GD.getDecl()); - if (!IsIncompleteFunction) + if (!IsIncompleteFunction) { SetLLVMFunctionAttributes(FD, getTypes().arrangeGlobalDeclaration(GD), F); +// Setup target-specific attributes. +if (
r308719 - [mips] Add `short_call` to the set of `long_call/far/near` attributes
Author: atanasyan Date: Fri Jul 21 01:10:57 2017 New Revision: 308719 URL: http://llvm.org/viewvc/llvm-project?rev=308719&view=rev Log: [mips] Add `short_call` to the set of `long_call/far/near` attributes MIPS gcc supports `long_call/far/near` attributes only, but other targets have the `short_call` attribut, so let's support it for MIPS for consistency. Modified: cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/include/clang/Basic/AttrDocs.td cfe/trunk/test/CodeGen/long-call-attr.c cfe/trunk/test/Sema/attr-long-call.c Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=308719&r1=308718&r2=308719&view=diff == --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Fri Jul 21 01:10:57 2017 @@ -1195,7 +1195,7 @@ def MipsLongCall : InheritableAttr, Targ } def MipsShortCall : InheritableAttr, TargetSpecificAttr { - let Spellings = [GCC<"near">]; + let Spellings = [GCC<"short_call">, GCC<"near">]; let Subjects = SubjectList<[Function]>; let Documentation = [MipsShortCallStyleDocs]; } Modified: cfe/trunk/include/clang/Basic/AttrDocs.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=308719&r1=308718&r2=308719&view=diff == --- cfe/trunk/include/clang/Basic/AttrDocs.td (original) +++ cfe/trunk/include/clang/Basic/AttrDocs.td Fri Jul 21 01:10:57 2017 @@ -1348,13 +1348,14 @@ def MipsShortCallStyleDocs : Documentati let Category = DocCatFunction; let Content = [{ Clang supports the ``__attribute__((long_call))``, ``__attribute__((far))``, -and ``__attribute__((near))`` attributes on MIPS targets. These attributes may -only be added to function declarations and change the code generated -by the compiler when directly calling the function. The ``near`` attribute -allows calls to the function to be made using the ``jal`` instruction, which -requires the function to be located in the same naturally aligned 256MB -segment as the caller. The ``long_call`` and ``far`` attributes are synonyms -and require the use of a different call sequence that works regardless +``__attribute__((short__call))``, and ``__attribute__((near))`` attributes +on MIPS targets. These attributes may only be added to function declarations +and change the code generated by the compiler when directly calling +the function. The ``short_call`` and ``near`` attributes are synonyms and +allow calls to the function to be made using the ``jal`` instruction, which +requires the function to be located in the same naturally aligned 256MB segment +as the caller. The ``long_call`` and ``far`` attributes are synonyms and +require the use of a different call sequence that works regardless of the distance between the functions. These attributes have no effect for position-independent code. Modified: cfe/trunk/test/CodeGen/long-call-attr.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/long-call-attr.c?rev=308719&r1=308718&r2=308719&view=diff == --- cfe/trunk/test/CodeGen/long-call-attr.c (original) +++ cfe/trunk/test/CodeGen/long-call-attr.c Fri Jul 21 01:10:57 2017 @@ -1,17 +1,20 @@ // RUN: %clang_cc1 -triple mips-linux-gnu -emit-llvm -o - %s | FileCheck %s void __attribute__((long_call)) foo1 (void); +void __attribute__((short_call)) foo4 (void); void __attribute__((far)) foo2 (void) {} // CHECK: define void @foo2() [[FAR:#[0-9]+]] -void __attribute__((near)) foo3 (void) { foo1(); } +void __attribute__((near)) foo3 (void) { foo1(); foo4(); } // CHECK: define void @foo3() [[NEAR:#[0-9]+]] // CHECK: declare void @foo1() [[LONGDECL:#[0-9]+]] +// CHECK: declare void @foo4() [[SHORTDECL:#[0-9]+]] // CHECK: attributes [[FAR]] = { {{.*}} "long-call" {{.*}} } // CHECK: attributes [[NEAR]] = { {{.*}} "short-call" {{.*}} } // CHECK: attributes [[LONGDECL]] = { {{.*}} "long-call" {{.*}} } +// CHECK: attributes [[SHORTDECL]] = { {{.*}} "short-call" {{.*}} } Modified: cfe/trunk/test/Sema/attr-long-call.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-long-call.c?rev=308719&r1=308718&r2=308719&view=diff == --- cfe/trunk/test/Sema/attr-long-call.c (original) +++ cfe/trunk/test/Sema/attr-long-call.c Fri Jul 21 01:10:57 2017 @@ -1,18 +1,25 @@ // RUN: %clang_cc1 -triple mips-linux-gnu -fsyntax-only -verify %s __attribute__((long_call(0))) void foo1(); // expected-error {{'long_call' attribute takes no arguments}} +__attribute__((short_call(0))) void foo9(); // expected-error {{'short_call' attribute takes no arguments}} __attribute__((far(0))) void foo2(); // expected-error {{'far' attribute takes no argum
r303546 - [mips] Support `micromips` attribute
Author: atanasyan Date: Mon May 22 07:47:43 2017 New Revision: 303546 URL: http://llvm.org/viewvc/llvm-project?rev=303546&view=rev Log: [mips] Support `micromips` attribute This patch adds support for the `micromips` and `nomicromips` attributes for MIPS targets. Differential revision: https://reviews.llvm.org/D33363 Added: cfe/trunk/test/CodeGen/micromips-attr.c cfe/trunk/test/Sema/attr-micromips.c Modified: cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/include/clang/Basic/AttrDocs.td cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/lib/Sema/SemaDeclAttr.cpp cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=303546&r1=303545&r2=303546&view=diff == --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Mon May 22 07:47:43 2017 @@ -1179,6 +1179,12 @@ def MipsInterrupt : InheritableAttr, Tar let Documentation = [MipsInterruptDocs]; } +def MicroMips : InheritableAttr, TargetSpecificAttr { + let Spellings = [GCC<"micromips">]; + let Subjects = SubjectList<[Function], ErrorDiag>; + let Documentation = [MicroMipsDocs]; +} + def Mode : Attr { let Spellings = [GCC<"mode">]; let Subjects = SubjectList<[Var, Enum, TypedefName, Field], ErrorDiag, @@ -1261,6 +1267,12 @@ def NoMips16 : InheritableAttr, TargetSp let Documentation = [Undocumented]; } +def NoMicroMips : InheritableAttr, TargetSpecificAttr { + let Spellings = [GCC<"nomicromips">]; + let Subjects = SubjectList<[Function], ErrorDiag>; + let Documentation = [MicroMipsDocs]; +} + // This is not a TargetSpecificAttr so that is silently accepted and // ignored on other targets as encouraged by the OpenCL spec. // Modified: cfe/trunk/include/clang/Basic/AttrDocs.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=303546&r1=303545&r2=303546&view=diff == --- cfe/trunk/include/clang/Basic/AttrDocs.td (original) +++ cfe/trunk/include/clang/Basic/AttrDocs.td Mon May 22 07:47:43 2017 @@ -1269,6 +1269,19 @@ The semantics are as follows: }]; } +def MicroMipsDocs : Documentation { + let Category = DocCatFunction; + let Content = [{ +Clang supports the GNU style ``__attribute__((micromips))`` and +``__attribute__((nomicromips))`` attributes on MIPS targets. These attributes +may be attached to a function definition and instructs the backend to generate +or not to generate microMIPS code for that function. + +These attributes override the -mmicromips and -mno-micromips options +on the command line. + }]; +} + def AVRInterruptDocs : Documentation { let Category = DocCatFunction; let Content = [{ Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=303546&r1=303545&r2=303546&view=diff == --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon May 22 07:47:43 2017 @@ -6557,6 +6557,11 @@ public: Fn->addFnAttr("nomips16"); } +if (FD->hasAttr()) + Fn->addFnAttr("micromips"); +else if (FD->hasAttr()) + Fn->addFnAttr("nomicromips"); + const MipsInterruptAttr *Attr = FD->getAttr(); if (!Attr) return; Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=303546&r1=303545&r2=303546&view=diff == --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Mon May 22 07:47:43 2017 @@ -5935,12 +5935,18 @@ static void ProcessDeclAttribute(Sema &S handleDLLAttr(S, D, Attr); break; case AttributeList::AT_Mips16: -handleSimpleAttributeWithExclusions(S, D, - Attr); +handleSimpleAttributeWithExclusions(S, D, Attr); break; case AttributeList::AT_NoMips16: handleSimpleAttribute(S, D, Attr); break; + case AttributeList::AT_MicroMips: +handleSimpleAttributeWithExclusions(S, D, Attr); +break; + case AttributeList::AT_NoMicroMips: +handleSimpleAttribute(S, D, Attr); +break; case AttributeList::AT_AMDGPUFlatWorkGroupSize: handleAMDGPUFlatWorkGroupSizeAttr(S, D, Attr); break; Added: cfe/trunk/test/CodeGen/micromips-attr.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/micromips-attr.c?rev=303546&view=auto == --- cfe/trunk/test/CodeGen/micromips-attr.c (added) +++ cfe/trunk/test/CodeGen/micromips-attr.c Mo
r303564 - [mips] Quote command line options with `` in the micromips attribute description. NFC
Author: atanasyan Date: Mon May 22 10:53:31 2017 New Revision: 303564 URL: http://llvm.org/viewvc/llvm-project?rev=303564&view=rev Log: [mips] Quote command line options with `` in the micromips attribute description. NFC Modified: cfe/trunk/include/clang/Basic/AttrDocs.td Modified: cfe/trunk/include/clang/Basic/AttrDocs.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=303564&r1=303563&r2=303564&view=diff == --- cfe/trunk/include/clang/Basic/AttrDocs.td (original) +++ cfe/trunk/include/clang/Basic/AttrDocs.td Mon May 22 10:53:31 2017 @@ -1277,7 +1277,7 @@ Clang supports the GNU style ``__attribu may be attached to a function definition and instructs the backend to generate or not to generate microMIPS code for that function. -These attributes override the -mmicromips and -mno-micromips options +These attributes override the `-mmicromips` and `-mno-micromips` options on the command line. }]; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r303565 - [mips] Add one more check to the micromips attribute test case. NFC
Author: atanasyan Date: Mon May 22 10:53:34 2017 New Revision: 303565 URL: http://llvm.org/viewvc/llvm-project?rev=303565&view=rev Log: [mips] Add one more check to the micromips attribute test case. NFC Modified: cfe/trunk/test/Sema/attr-micromips.c Modified: cfe/trunk/test/Sema/attr-micromips.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-micromips.c?rev=303565&r1=303564&r2=303565&view=diff == --- cfe/trunk/test/Sema/attr-micromips.c (original) +++ cfe/trunk/test/Sema/attr-micromips.c Mon May 22 10:53:34 2017 @@ -13,3 +13,5 @@ __attribute__((mips16,micromips)) void f __attribute((micromips)) void foo7(); __attribute((nomicromips)) void foo8(); +__attribute__((mips16)) void foo9(void) __attribute__((micromips)); // expected-error {{'micromips' and 'mips16' attributes are not compatible}} \ +// expected-note {{conflicting attribute is here}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r303546 - [mips] Support `micromips` attribute
On Mon, May 22, 2017 at 3:57 PM, Aaron Ballman wrote: > On Mon, May 22, 2017 at 8:47 AM, Simon Atanasyan via cfe-commits > wrote: >> Author: atanasyan >> Date: Mon May 22 07:47:43 2017 >> New Revision: 303546 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=303546&view=rev >> Log: >> [mips] Support `micromips` attribute >> >> This patch adds support for the `micromips` and `nomicromips` attributes >> for MIPS targets. >> >> Differential revision: https://reviews.llvm.org/D33363 [...] >> Modified: cfe/trunk/include/clang/Basic/Attr.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=303546&r1=303545&r2=303546&view=diff >> == >> --- cfe/trunk/include/clang/Basic/Attr.td (original) >> +++ cfe/trunk/include/clang/Basic/Attr.td Mon May 22 07:47:43 2017 >> @@ -1179,6 +1179,12 @@ def MipsInterrupt : InheritableAttr, Tar >>let Documentation = [MipsInterruptDocs]; >> } >> >> +def MicroMips : InheritableAttr, TargetSpecificAttr { >> + let Spellings = [GCC<"micromips">]; >> + let Subjects = SubjectList<[Function], ErrorDiag>; > > Why is this an error rather than a warning? Same question below. Because GCC shows the error in this case. And I cannot imagine any reason why micromips attribute added to non-function declaration. % mips-mti-linux-gnu-gcc --version mips-mti-linux-gnu-gcc (Codescape GNU Tools 2016.05-01 for MIPS MTI Linux) 4.9.2 % mips-mti-linux-gnu-gcc -c attr-micromips.c tools/clang/test/Sema/attr-micromips.c:6:1: error: ‘nomicromips’ attribute only applies to functions __attribute((nomicromips)) int a; // expected-error {{attribute only applies to functions}} ^ tools/clang/test/Sema/attr-micromips.c:7:1: error: ‘micromips’ attribute only applies to functions __attribute((micromips)) int b; // expected-error {{attribute only applies to functions}} >> Modified: cfe/trunk/include/clang/Basic/AttrDocs.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=303546&r1=303545&r2=303546&view=diff >> == >> --- cfe/trunk/include/clang/Basic/AttrDocs.td (original) >> +++ cfe/trunk/include/clang/Basic/AttrDocs.td Mon May 22 07:47:43 2017 >> @@ -1269,6 +1269,19 @@ The semantics are as follows: >>}]; >> } >> >> +def MicroMipsDocs : Documentation { >> + let Category = DocCatFunction; >> + let Content = [{ >> +Clang supports the GNU style ``__attribute__((micromips))`` and >> +``__attribute__((nomicromips))`` attributes on MIPS targets. These >> attributes >> +may be attached to a function definition and instructs the backend to >> generate >> +or not to generate microMIPS code for that function. >> + >> +These attributes override the -mmicromips and -mno-micromips options > > Please quote the command line options with ``. Fixed at r303564. >> Added: cfe/trunk/test/Sema/attr-micromips.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-micromips.c?rev=303546&view=auto >> == >> --- cfe/trunk/test/Sema/attr-micromips.c (added) >> +++ cfe/trunk/test/Sema/attr-micromips.c Mon May 22 07:47:43 2017 >> @@ -0,0 +1,15 @@ >> +// RUN: %clang_cc1 -triple mips-linux-gnu -fsyntax-only -verify %s >> + >> +__attribute__((nomicromips(0))) void foo1(); // expected-error >> {{'nomicromips' attribute takes no arguments}} >> +__attribute__((micromips(1))) void foo2();// expected-error >> {{'micromips' attribute takes no arguments}} >> + >> +__attribute((nomicromips)) int a; // expected-error {{attribute only >> applies to functions}} >> +__attribute((micromips)) int b; // expected-error {{attribute only >> applies to functions}} >> + >> +__attribute__((micromips,mips16)) void foo5(); // expected-error >> {{'micromips' and 'mips16' attributes are not compatible}} \ >> +// expected-note >> {{conflicting attribute is here}} >> +__attribute__((mips16,micromips)) void foo6(); // expected-error >> {{'mips16' and 'micromips' attributes are not compatible}} \ >> +// expected-note >> {{conflicting attribute is here}} > > Can you also add a test like: > > __attribute__((mips16)) void foo9(void) __attribute__((micromips)); Fixed at r303565. -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r247548 - [mips] Add test case to check ABI flag emissions in case of inline assembler
Author: atanasyan Date: Mon Sep 14 06:23:02 2015 New Revision: 247548 URL: http://llvm.org/viewvc/llvm-project?rev=247548&view=rev Log: [mips] Add test case to check ABI flag emissions in case of inline assembler Follow up to r247546. The test case reproduces the problem fixed by this commit. Added: cfe/trunk/test/CodeGen/mips-inline-asm-abi.c Added: cfe/trunk/test/CodeGen/mips-inline-asm-abi.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mips-inline-asm-abi.c?rev=247548&view=auto == --- cfe/trunk/test/CodeGen/mips-inline-asm-abi.c (added) +++ cfe/trunk/test/CodeGen/mips-inline-asm-abi.c Mon Sep 14 06:23:02 2015 @@ -0,0 +1,12 @@ +// REQUIRES: mips-registered-target +// RUN: %clang_cc1 -triple mips-linux-gnu -emit-obj -o - %s | \ +// RUN: llvm-readobj -h - | FileCheck %s + +// CHECK: EF_MIPS_ABI_O32 + +__asm__( +"bar:\n" +" nop\n" +); + +void foo() {} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r247548 - [mips] Add test case to check ABI flag emissions in case of inline assembler
On Mon, Sep 14, 2015 at 3:24 PM, NAKAMURA Takumi wrote: > Why is it tested in clang? Because the problem fixed by r247546 can be reproduced only in case of using inline assembler. And the problem is in the incorrect ELF header flag. So this test cannot be in llvm/test because there is no inline assembler there, and I cannot escape to use llvm-readobj because "-emit-llvm" produces correct code. > FYI, update CLANG_TEST_DEPS in clang/test/CMakeLists.txt, if it would remain > in clang/test. Thanks. Will update it soon. > On Mon, Sep 14, 2015 at 8:24 PM Simon Atanasyan via cfe-commits > wrote: >> >> Author: atanasyan >> Date: Mon Sep 14 06:23:02 2015 >> New Revision: 247548 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=247548&view=rev >> Log: >> [mips] Add test case to check ABI flag emissions in case of inline >> assembler >> >> Follow up to r247546. The test case reproduces the problem fixed by this >> commit. >> >> Added: >> cfe/trunk/test/CodeGen/mips-inline-asm-abi.c >> >> Added: cfe/trunk/test/CodeGen/mips-inline-asm-abi.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mips-inline-asm-abi.c?rev=247548&view=auto >> >> == >> --- cfe/trunk/test/CodeGen/mips-inline-asm-abi.c (added) >> +++ cfe/trunk/test/CodeGen/mips-inline-asm-abi.c Mon Sep 14 06:23:02 2015 >> @@ -0,0 +1,12 @@ >> +// REQUIRES: mips-registered-target >> +// RUN: %clang_cc1 -triple mips-linux-gnu -emit-obj -o - %s | \ >> +// RUN: llvm-readobj -h - | FileCheck %s >> + >> +// CHECK: EF_MIPS_ABI_O32 >> + >> +__asm__( >> +"bar:\n" >> +" nop\n" >> +); >> + >> +void foo() {} -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r247548 - [mips] Add test case to check ABI flag emissions in case of inline assembler
Thanks a lot! On Mon, Sep 14, 2015 at 3:49 PM, NAKAMURA Takumi wrote: > Makes sense. I have updated CLANG_TEST_DEPS in r247554. > > On Mon, Sep 14, 2015 at 9:38 PM Simon Atanasyan wrote: >> >> On Mon, Sep 14, 2015 at 3:24 PM, NAKAMURA Takumi >> wrote: >> > Why is it tested in clang? >> >> Because the problem fixed by r247546 can be reproduced only in case of >> using inline assembler. And the problem is in the incorrect ELF header >> flag. So this test cannot be in llvm/test because there is no inline >> assembler there, and I cannot escape to use llvm-readobj because >> "-emit-llvm" produces correct code. >> >> > FYI, update CLANG_TEST_DEPS in clang/test/CMakeLists.txt, if it would >> > remain >> > in clang/test. >> >> Thanks. Will update it soon. >> >> > On Mon, Sep 14, 2015 at 8:24 PM Simon Atanasyan via cfe-commits >> > wrote: >> >> >> >> Author: atanasyan >> >> Date: Mon Sep 14 06:23:02 2015 >> >> New Revision: 247548 >> >> >> >> URL: http://llvm.org/viewvc/llvm-project?rev=247548&view=rev >> >> Log: >> >> [mips] Add test case to check ABI flag emissions in case of inline >> >> assembler >> >> >> >> Follow up to r247546. The test case reproduces the problem fixed by >> >> this >> >> commit. >> >> >> >> Added: >> >> cfe/trunk/test/CodeGen/mips-inline-asm-abi.c >> >> >> >> Added: cfe/trunk/test/CodeGen/mips-inline-asm-abi.c >> >> URL: >> >> >> >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/mips-inline-asm-abi.c?rev=247548&view=auto >> >> >> >> >> >> == >> >> --- cfe/trunk/test/CodeGen/mips-inline-asm-abi.c (added) >> >> +++ cfe/trunk/test/CodeGen/mips-inline-asm-abi.c Mon Sep 14 06:23:02 >> >> 2015 >> >> @@ -0,0 +1,12 @@ >> >> +// REQUIRES: mips-registered-target >> >> +// RUN: %clang_cc1 -triple mips-linux-gnu -emit-obj -o - %s | \ >> >> +// RUN: llvm-readobj -h - | FileCheck %s >> >> + >> >> +// CHECK: EF_MIPS_ABI_O32 >> >> + >> >> +__asm__( >> >> +"bar:\n" >> >> +" nop\n" >> >> +); >> >> + >> >> +void foo() {} >> >> -- >> Simon Atanasyan -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13057: [mips] Relax -mnan=2008 acceptance to permit MIPS32R2 and MIPS64R2.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D13057 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13339: Allow a ToolChain to compute the path of a compiler-rt's component.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM with a nit. Comment at: include/clang/Driver/ToolChain.h:253 @@ -252,1 +252,3 @@ + virtual SmallString<128> getCompilerRT(const llvm::opt::ArgList &Args, + StringRef Component, Return `std::string` for consistency with other methods. http://reviews.llvm.org/D13339 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13340: Add support for the new mips-mti-linux toolchain.
atanasyan added inline comments. Comment at: include/clang/Driver/ToolChain.h:92 @@ -91,2 +91,3 @@ MultilibSet Multilibs; + Multilib SelectedMultilib; This field is used by the `MipsToolChain` class only. If so, move it to that class. Comment at: include/clang/Driver/ToolChain.h:147 @@ -145,1 +146,3 @@ + const Multilib &getSelectedMultilib() const { return SelectedMultilib; } + Do you need public access to this member function? Comment at: lib/Driver/Driver.cpp:2127 @@ +2126,3 @@ + // Allow the discovery of tools prefixed with LLVM's default target triple. + std::string LLVMDefaultTargetTriple = llvm::sys::getDefaultTargetTriple(); + if (LLVMDefaultTargetTriple != DefaultTargetTriple) Just curious when is DefaultTargetTriple not equal to LLVMDefaultTargetTriple? Comment at: lib/Driver/Driver.cpp:2225 @@ -2219,1 +2224,3 @@ TC = new toolchains::HexagonToolChain(*this, Target, Args); + else if (Target.getVendor() == llvm::Triple::MipsTechnologies) +TC = new toolchains::MipsToolChain(*this, Target, Args); The `mips-mti-linux-gnu` triple is used by Codescape toolchain too. After this change if user provides `-target mips-mti-linux-gnu` command line option, the `MipsToolChain` will be used. As far as I understand you have to put `GCCInstallation.isValid()` checking to the `MipsToolChain` class methods to allow working with both GNU and non-GNU toolchains. IMHO it does not make the code clear. Maybe use the `MipsToolChain` class for the non-GNU toolchain only. Comment at: lib/Driver/ToolChains.cpp:2210 @@ -2172,2 +2209,3 @@ const Generic_GCC::GCCVersion &V = GCCInstallation.getVersion(); + const llvm::Triple &TT = getTriple(); bool UseInitArrayDefault = Let's make this change by a separate commit to reduce number of unrelated changes. Comment at: lib/Driver/ToolChains.cpp:2231 @@ +2230,3 @@ + // If we did find a valid GCC installation, we don't have anything else to do. + if (GCCInstallation.isValid()) +return; When is GCCInstallation invalid in case of using this toolchain? Comment at: lib/Driver/ToolChains.cpp:2243 @@ +2242,3 @@ + tools::mips::getMipsCPUAndABI(Args, Triple, CPUName, ABIName); + LibSuffix = llvm::StringSwitch(ABIName) + .Case("o32", "") Similar code exists in the `getLinuxDynamicLinker` routine. Let's factor out it into the separate function say `tools::mips::getMipsABILibSuffix`. Comment at: lib/Driver/Tools.cpp:8115 @@ -8110,2 +8114,3 @@ const llvm::Triple::ArchType Arch = ToolChain.getArch(); + const llvm::Triple &TT = ToolChain.getTriple(); Let's make this change by a separate commit to reduce number of unrelated changes. http://reviews.llvm.org/D13340 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13340: Add support for the new mips-mti-linux toolchain.
atanasyan added inline comments. Comment at: lib/Driver/Driver.cpp:2225 @@ -2219,1 +2224,3 @@ TC = new toolchains::HexagonToolChain(*this, Target, Args); + else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) && + !Target.hasEnvironment()) Now I try to redesign Codescape toolchain support in the Clang driver. I consider to use a separate toolchain class like your `MipsToolChain` and I name it `CodeScapeMtiToolChain`. If I be able to join support for both MIT and IMG toolchains in the single class, I will rename it to `CodeScapeToolChain`. Will this non-GNU toolchain have a personal name like CodeScape? If not I am okay with `MipsNonGNUToolChain`. http://reviews.llvm.org/D13340 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13340: Add support for the new mips-mti-linux toolchain.
atanasyan added inline comments. Comment at: lib/Driver/Driver.cpp:2225 @@ -2219,1 +2224,3 @@ TC = new toolchains::HexagonToolChain(*this, Target, Args); + else if ((Target.getVendor() == llvm::Triple::MipsTechnologies) && + !Target.hasEnvironment()) vkalintiris wrote: > atanasyan wrote: > > Now I try to redesign Codescape toolchain support in the Clang driver. I > > consider to use a separate toolchain class like your `MipsToolChain` and I > > name it `CodeScapeMtiToolChain`. If I be able to join support for both MIT > > and IMG toolchains in the single class, I will rename it to > > `CodeScapeToolChain`. > > > > Will this non-GNU toolchain have a personal name like CodeScape? If not I > > am okay with `MipsNonGNUToolChain`. > I thought about this and I don't believe that `MipsNonGNUToolChain` is a very > good name. The main reason is that the last component of the entries under > the sysroot, contain the name of the C library (or empty for GLIBC). We could > easily have a toolchain with `mips-r2-hard{,-uClibc}` installed for > `mips-mti-linux`. > > What are your thoughts about the names: `MipsGCCToolChain`, > `Mips{Clang,LLVM}ToolChain`, or `CodescapeGCCToolChain` and > `CodescapeLLVMToolChain`? > > Personally, I'd prefer the first pair of names. The reason is that with this > choice we will be consistent in the naming of our classes. Also, it's clear > that these are MIPS TCs and we have to consider that the Codescape name could > change in the future (improbable but not impossible). > > The `Mips{GCC,Clang/LLVM}Toolchain` name would specify whether we are going > to use the files generated from a GCC or Clang installation. This way we > could keep the existing functionality of the `Linux` class for older > toolchains that will be deprecated/unused over time. It sounds reasonable. Let's use MipsGCCToolChain and MipsLLVMToolChain. http://reviews.llvm.org/D13340 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D13340: Add support for the new mips-mti-linux toolchain.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D13340 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D12234: [mips][p5600] Add -mcpu=p5600 option.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D12234 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r250043 - [Driver] Remove `else` after `return`
Author: atanasyan Date: Mon Oct 12 09:32:57 2015 New Revision: 250043 URL: http://llvm.org/viewvc/llvm-project?rev=250043&view=rev Log: [Driver] Remove `else` after `return` Modified: cfe/trunk/lib/Driver/Multilib.cpp Modified: cfe/trunk/lib/Driver/Multilib.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Multilib.cpp?rev=250043&r1=250042&r2=250043&view=diff == --- cfe/trunk/lib/Driver/Multilib.cpp (original) +++ cfe/trunk/lib/Driver/Multilib.cpp Mon Oct 12 09:32:57 2015 @@ -260,16 +260,15 @@ bool MultilibSet::select(const Multilib: return false; }, Multilibs); - if (Filtered.size() == 0) { + if (Filtered.size() == 0) return false; - } else if (Filtered.size() == 1) { + if (Filtered.size() == 1) { M = Filtered[0]; return true; } // TODO: pick the "best" multlib when more than one is suitable assert(false); - return false; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r275949 - [driver][mips] Support MIPS targets in modern Android NDK
Author: atanasyan Date: Tue Jul 19 02:09:48 2016 New Revision: 275949 URL: http://llvm.org/viewvc/llvm-project?rev=275949&view=rev Log: [driver][mips] Support MIPS targets in modern Android NDK Initial patch provided by Duane Sand. Added: cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtbegin.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtbegin.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r1/crtend.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtend.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtbegin.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r2/crtend.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtend.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtbegin.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtbeginT.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/32/mips-r6/crtend.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtend.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/crtbegin.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtbeginS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/crtend.o - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtend.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/include/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/lib/gcc/mips64el-linux-android/4.9/include/.keep - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/bin/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/bin/.keep - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/lib/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/lib/.keep - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/lib64/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/lib64/.keep - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/libr2/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/libr2/.keep - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/libr6/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mips64el-linux-android/libr6/.keep - copied, changed from r275947, cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/crtendS.o cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mipsel-linux-android/libr2/ cfe/trunk/test/Driver/Inputs/basic_android_ndk_tree/mipsel-l
r275951 - [driver][mips] Remove empty folder from test inputs
Author: atanasyan Date: Tue Jul 19 02:23:15 2016 New Revision: 275951 URL: http://llvm.org/viewvc/llvm-project?rev=275951&view=rev Log: [driver][mips] Remove empty folder from test inputs Removed: cfe/trunk/test/Driver/Inputs/basic_android_tree/lib/gcc/mipsel-linux-android/4.4.3/mips-r6/ ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20313: [Mips] Set mips32 as default CPU for MIPS32 Android
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D20313 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20345: [Mips] Finetuning MIPS32 Android default variants
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D20345 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r270069 - [driver] Do not pass install dir to the MultilibSet include dirs callback
Author: atanasyan Date: Thu May 19 10:07:21 2016 New Revision: 270069 URL: http://llvm.org/viewvc/llvm-project?rev=270069&view=rev Log: [driver] Do not pass install dir to the MultilibSet include dirs callback All additional include directories are relative to the toolchain install folder. So let's do not pass this folder to each callback to simplify and slightly reduce the code. Modified: cfe/trunk/include/clang/Driver/Multilib.h cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/include/clang/Driver/Multilib.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Multilib.h?rev=270069&r1=270068&r2=270069&view=diff == --- cfe/trunk/include/clang/Driver/Multilib.h (original) +++ cfe/trunk/include/clang/Driver/Multilib.h Thu May 19 10:07:21 2016 @@ -99,8 +99,7 @@ public: typedef multilib_list::iterator iterator; typedef multilib_list::const_iterator const_iterator; - typedef std::function(StringRef InstallDir, - const Multilib &M)> + typedef std::function(const Multilib &M)> IncludeDirsFunc; typedef llvm::function_ref FilterCallback; Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270069&r1=270068&r2=270069&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Thu May 19 10:07:21 2016 @@ -1923,16 +1923,12 @@ static bool findMIPSMultilibs(const Driv .Maybe(Nan2008) .FilterOut(".*sof/nan2008") .FilterOut(NonExistent) -.setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector Dirs; - Dirs.push_back((InstallDir + "/include").str()); - std::string SysRootInc = - InstallDir.str() + "/../../../../sysroot"; +.setIncludeDirsCallback([](const Multilib &M) { + std::vector Dirs({"/include"}); if (StringRef(M.includeSuffix()).startswith("/uclibc")) -Dirs.push_back(SysRootInc + "/uclibc/usr/include"); +Dirs.push_back("/../../../../sysroot/uclibc/usr/include"); else -Dirs.push_back(SysRootInc + "/usr/include"); +Dirs.push_back("/../../../../sysroot/usr/include"); return Dirs; }); } @@ -1954,12 +1950,9 @@ static bool findMIPSMultilibs(const Driv MuslMipsMultilibs = MultilibSet().Either(MArchMipsR2, MArchMipselR2); // Specify the callback that computes the include directories. -MuslMipsMultilibs.setIncludeDirsCallback([](StringRef InstallDir, -const Multilib &M) { - std::vector Dirs; - Dirs.push_back( - (InstallDir + "/../sysroot" + M.osSuffix() + "/usr/include").str()); - return Dirs; +MuslMipsMultilibs.setIncludeDirsCallback([](const Multilib &M) { + return std::vector( + {"/../sysroot" + M.osSuffix() + "/usr/include"}); }); } @@ -2006,16 +1999,13 @@ static bool findMIPSMultilibs(const Driv .FilterOut("/mips16.*/64") .FilterOut("/micromips.*/64") .FilterOut(NonExistent) -.setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector Dirs; - Dirs.push_back((InstallDir + "/include").str()); - std::string SysRootInc = - InstallDir.str() + "/../../../../mips-linux-gnu"; +.setIncludeDirsCallback([](const Multilib &M) { + std::vector Dirs({"/include"}); if (StringRef(M.includeSuffix()).startswith("/uclibc")) -Dirs.push_back(SysRootInc + "/libc/uclibc/usr/include"); +Dirs.push_back( +"/../../../../mips-linux-gnu/libc/uclibc/usr/include"); else -Dirs.push_back(SysRootInc + "/libc/usr/include"); +Dirs.push_back("/../../../../mips-linux-gnu/libc/usr/include"); return Dirs; }); } @@ -2059,13 +2049,9 @@ static bool findMIPSMultilibs(const Driv .Maybe(MAbi64) .Maybe(LittleEndian) .FilterOut(NonExistent) -.setIncludeDirsCallback([](StringRef InstallDir, - const Multilib &M) { - std::vector Dirs; - Dirs.push_back((InstallDir + "/include").str()); - Dirs.push_back( - (InstallDir + "/../../../../sysroot/usr/include").str()); - return Dirs; +.setIncludeDirsCallback([](const Multilib &M) { + return std::vector( +
r270068 - [driver] Do not pass target triple to the MultilibSet include dirs callback
Author: atanasyan Date: Thu May 19 10:07:00 2016 New Revision: 270068 URL: http://llvm.org/viewvc/llvm-project?rev=270068&view=rev Log: [driver] Do not pass target triple to the MultilibSet include dirs callback No one callback uses target triple so we can escape passing the unused argument. Modified: cfe/trunk/include/clang/Driver/Multilib.h cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/include/clang/Driver/Multilib.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Multilib.h?rev=270068&r1=270067&r2=270068&view=diff == --- cfe/trunk/include/clang/Driver/Multilib.h (original) +++ cfe/trunk/include/clang/Driver/Multilib.h Thu May 19 10:07:00 2016 @@ -99,9 +99,9 @@ public: typedef multilib_list::iterator iterator; typedef multilib_list::const_iterator const_iterator; - typedef std::function( - StringRef InstallDir, StringRef Triple, const Multilib &M)> - IncludeDirsFunc; + typedef std::function(StringRef InstallDir, + const Multilib &M)> + IncludeDirsFunc; typedef llvm::function_ref FilterCallback; Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270068&r1=270067&r2=270068&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Thu May 19 10:07:00 2016 @@ -1924,7 +1924,7 @@ static bool findMIPSMultilibs(const Driv .FilterOut(".*sof/nan2008") .FilterOut(NonExistent) .setIncludeDirsCallback([](StringRef InstallDir, - StringRef TripleStr, const Multilib &M) { + const Multilib &M) { std::vector Dirs; Dirs.push_back((InstallDir + "/include").str()); std::string SysRootInc = @@ -1954,8 +1954,8 @@ static bool findMIPSMultilibs(const Driv MuslMipsMultilibs = MultilibSet().Either(MArchMipsR2, MArchMipselR2); // Specify the callback that computes the include directories. -MuslMipsMultilibs.setIncludeDirsCallback([]( -StringRef InstallDir, StringRef TripleStr, const Multilib &M) { +MuslMipsMultilibs.setIncludeDirsCallback([](StringRef InstallDir, +const Multilib &M) { std::vector Dirs; Dirs.push_back( (InstallDir + "/../sysroot" + M.osSuffix() + "/usr/include").str()); @@ -2007,7 +2007,7 @@ static bool findMIPSMultilibs(const Driv .FilterOut("/micromips.*/64") .FilterOut(NonExistent) .setIncludeDirsCallback([](StringRef InstallDir, - StringRef TripleStr, const Multilib &M) { + const Multilib &M) { std::vector Dirs; Dirs.push_back((InstallDir + "/include").str()); std::string SysRootInc = @@ -2060,7 +2060,7 @@ static bool findMIPSMultilibs(const Driv .Maybe(LittleEndian) .FilterOut(NonExistent) .setIncludeDirsCallback([](StringRef InstallDir, - StringRef TripleStr, const Multilib &M) { + const Multilib &M) { std::vector Dirs; Dirs.push_back((InstallDir + "/include").str()); Dirs.push_back( @@ -2540,8 +2540,7 @@ void MipsLLVMToolChain::AddClangSystemIn const auto &Callback = Multilibs.includeDirsCallback(); if (Callback) { -const auto IncludePaths = -Callback(D.getInstalledDir(), getTripleString(), SelectedMultilib); +const auto IncludePaths = Callback(D.getInstalledDir(), SelectedMultilib); for (const auto &Path : IncludePaths) addExternCSystemIncludeIfExists(DriverArgs, CC1Args, Path); } @@ -2588,8 +2587,8 @@ void MipsLLVMToolChain::AddClangCXXStdli const auto &Callback = Multilibs.includeDirsCallback(); if (Callback) { -const auto IncludePaths = Callback(getDriver().getInstalledDir(), - getTripleString(), SelectedMultilib); +const auto IncludePaths = +Callback(getDriver().getInstalledDir(), SelectedMultilib); for (const auto &Path : IncludePaths) { if (llvm::sys::fs::exists(Path + "/c++/v1")) { addSystemInclude(DriverArgs, CC1Args, Path + "/c++/v1"); @@ -3971,7 +3970,6 @@ void Linux::AddClangSystemIncludeArgs(co const auto &Callback = Multilibs.includeDirsCallback(); if (Callback) { const auto IncludePaths = Callback(GCCInstallation.getInstallPath(), - GCCInstallation.getTriple().str(), GCCInstallation.getMultilib()); for (con
r270067 - [driver][mips] Hardcode triple name in case of CodeSourcery toolchain. NFC
Author: atanasyan Date: Thu May 19 10:05:22 2016 New Revision: 270067 URL: http://llvm.org/viewvc/llvm-project?rev=270067&view=rev Log: [driver][mips] Hardcode triple name in case of CodeSourcery toolchain. NFC CodeSourcery toolchain is a standalone toolchain which always uses the same triple name in its paths. It is independent from target triple used by the driver. Modified: cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270067&r1=270066&r2=270067&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Thu May 19 10:05:22 2016 @@ -2011,7 +2011,7 @@ static bool findMIPSMultilibs(const Driv std::vector Dirs; Dirs.push_back((InstallDir + "/include").str()); std::string SysRootInc = - InstallDir.str() + "/../../../../" + TripleStr.str(); + InstallDir.str() + "/../../../../mips-linux-gnu"; if (StringRef(M.includeSuffix()).startswith("/uclibc")) Dirs.push_back(SysRootInc + "/libc/uclibc/usr/include"); else ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r270367 - [driver][mips] Rename some variables to better reflect their purpose. NFC
Author: atanasyan Date: Sun May 22 10:27:58 2016 New Revision: 270367 URL: http://llvm.org/viewvc/llvm-project?rev=270367&view=rev Log: [driver][mips] Rename some variables to better reflect their purpose. NFC Modified: cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270367&r1=270366&r2=270367&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Sun May 22 10:27:58 2016 @@ -1865,8 +1865,8 @@ static bool findMIPSMultilibs(const Driv FilterNonExistent NonExistent(Path, D.getVFS()); - // Check for FSF toolchain multilibs - MultilibSet FSFMipsMultilibs; + // Check for CodeScape MTI toolchain v1.2 and early. + MultilibSet MtiMipsMultilibsV1; { auto MArchMips32 = makeMultilib("/mips32") .flag("+m32") @@ -1908,7 +1908,7 @@ static bool findMIPSMultilibs(const Driv auto Nan2008 = makeMultilib("/nan2008").flag("+mnan=2008"); -FSFMipsMultilibs = +MtiMipsMultilibsV1 = MultilibSet() .Either(MArchMips32, MArchMicroMips, MArchMips64r2, MArchMips64, MArchDefault) @@ -1984,7 +1984,8 @@ static bool findMIPSMultilibs(const Driv MultilibSet().Either(M32, M64, MAbiN32).FilterOut(NonExistent); } - MultilibSet ImgMultilibs; + // Check for CodeScape IMG toolchain v1.2 and early. + MultilibSet ImgMultilibsV1; { auto Mips64r6 = makeMultilib("/mips64r6").flag("+m64").flag("-m32"); @@ -1993,7 +1994,7 @@ static bool findMIPSMultilibs(const Driv auto MAbi64 = makeMultilib("/64").flag("+mabi=n64").flag("-mabi=n32").flag("-m32"); -ImgMultilibs = +ImgMultilibsV1 = MultilibSet() .Maybe(Mips64r6) .Maybe(MAbi64) @@ -2058,8 +2059,8 @@ static bool findMIPSMultilibs(const Driv TargetTriple.getOS() == llvm::Triple::Linux && TargetTriple.getEnvironment() == llvm::Triple::GNU) { // Select mips-img-linux-gnu toolchain. -if (ImgMultilibs.select(Flags, Result.SelectedMultilib)) { - Result.Multilibs = ImgMultilibs; +if (ImgMultilibsV1.select(Flags, Result.SelectedMultilib)) { + Result.Multilibs = ImgMultilibsV1; return true; } return false; @@ -2067,7 +2068,7 @@ static bool findMIPSMultilibs(const Driv // Sort candidates. Toolchain that best meets the directories goes first. // Then select the first toolchains matches command line flags. - MultilibSet *candidates[] = {&DebianMipsMultilibs, &FSFMipsMultilibs}; + MultilibSet *candidates[] = {&DebianMipsMultilibs, &MtiMipsMultilibsV1}; std::sort( std::begin(candidates), std::end(candidates), [](MultilibSet *a, MultilibSet *b) { return a->size() > b->size(); }); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r270368 - [driver][mips] Use target triple mips-mti-linux-gnu for toolchain detection
Author: atanasyan Date: Sun May 22 10:28:34 2016 New Revision: 270368 URL: http://llvm.org/viewvc/llvm-project?rev=270368&view=rev Log: [driver][mips] Use target triple mips-mti-linux-gnu for toolchain detection Modified: cfe/trunk/lib/Driver/ToolChains.cpp cfe/trunk/test/Driver/mips-fsf.cpp Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270368&r1=270367&r2=270368&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Sun May 22 10:28:34 2016 @@ -2055,6 +2055,17 @@ static bool findMIPSMultilibs(const Driv return false; } + if (TargetTriple.getVendor() == llvm::Triple::MipsTechnologies && + TargetTriple.getOS() == llvm::Triple::Linux && + TargetTriple.getEnvironment() == llvm::Triple::GNU) { +// Select mips-mti-linux-gnu toolchain. +if (MtiMipsMultilibsV1.select(Flags, Result.SelectedMultilib)) { + Result.Multilibs = MtiMipsMultilibsV1; + return true; +} +return false; + } + if (TargetTriple.getVendor() == llvm::Triple::ImaginationTechnologies && TargetTriple.getOS() == llvm::Triple::Linux && TargetTriple.getEnvironment() == llvm::Triple::GNU) { @@ -2066,19 +2077,10 @@ static bool findMIPSMultilibs(const Driv return false; } - // Sort candidates. Toolchain that best meets the directories goes first. - // Then select the first toolchains matches command line flags. - MultilibSet *candidates[] = {&DebianMipsMultilibs, &MtiMipsMultilibsV1}; - std::sort( - std::begin(candidates), std::end(candidates), - [](MultilibSet *a, MultilibSet *b) { return a->size() > b->size(); }); - for (const auto &candidate : candidates) { -if (candidate->select(Flags, Result.SelectedMultilib)) { - if (candidate == &DebianMipsMultilibs) -Result.BiarchSibling = Multilib(); - Result.Multilibs = *candidate; - return true; -} + if (DebianMipsMultilibs.select(Flags, Result.SelectedMultilib)) { +Result.BiarchSibling = Multilib(); +Result.Multilibs = DebianMipsMultilibs; +return true; } { Modified: cfe/trunk/test/Driver/mips-fsf.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-fsf.cpp?rev=270368&r1=270367&r2=270368&view=diff == --- cfe/trunk/test/Driver/mips-fsf.cpp (original) +++ cfe/trunk/test/Driver/mips-fsf.cpp Sun May 22 10:28:34 2016 @@ -2,7 +2,7 @@ // // = Big-endian, mips32, hard float // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips32 -mhard-float \ +// RUN: --target=mips-mti-linux-gnu -mips32 -mhard-float \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_fsf_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF-32 %s // CHECK-BE-HF-32: "-internal-isystem" @@ -29,7 +29,7 @@ // // = Big-endian, mips32, hard float, fp64 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips32 -mfp64 -mhard-float \ +// RUN: --target=mips-mti-linux-gnu -mips32 -mfp64 -mhard-float \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_fsf_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF64-32 %s // CHECK-BE-HF64-32: "-internal-isystem" @@ -56,7 +56,7 @@ // // = Big-endian, mips32, soft float // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips32 -msoft-float \ +// RUN: --target=mips-mti-linux-gnu -mips32 -msoft-float \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_fsf_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-SF-32 %s // CHECK-BE-SF-32: "-internal-isystem" @@ -83,7 +83,7 @@ // // = Big-endian, mips16 / mips32, hard float // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips32 -mips16 -mhard-float \ +// RUN: --target=mips-mti-linux-gnu -mips32 -mips16 -mhard-float \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_fsf_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF-16 %s // CHECK-BE-HF-16: "-internal-isystem" @@ -110,7 +110,7 @@ // // = Big-endian, mips16 / mips32, hard float, fp64 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips32 -mips16 -mfp64 -mhard-float \ +// RUN: --target=mips-mti-linux-gnu -mips32 -mips16 -mfp64 -mhard-float \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_fsf_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF64-16 %s // CHECK-BE-HF64-16: "-internal-isystem" @@ -137,7 +137,7 @@ // // = Big-endian, mips16 / mips32, soft float // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips32 -mips16 -msoft-float \ +// RUN: --target=mips-m
r270374 - [driver][mips] clang-format the code. NFC
Author: atanasyan Date: Sun May 22 13:18:41 2016 New Revision: 270374 URL: http://llvm.org/viewvc/llvm-project?rev=270374&view=rev Log: [driver][mips] clang-format the code. NFC Modified: cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=270374&r1=270373&r2=270374&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Sun May 22 13:18:41 2016 @@ -2115,21 +2115,21 @@ static bool findMIPSMultilibs(const Driv .flag("+msoft-float") .flag("-mmicromips"); auto BeMicroHard = makeMultilib("/micromips-r6-hard") - .flag("+EB") - .flag("-msoft-float") - .flag("+mmicromips"); + .flag("+EB") + .flag("-msoft-float") + .flag("+mmicromips"); auto BeMicroSoft = makeMultilib("/micromips-r6-soft") - .flag("+EB") - .flag("+msoft-float") - .flag("+mmicromips"); + .flag("+EB") + .flag("+msoft-float") + .flag("+mmicromips"); auto ElMicroHard = makeMultilib("/micromipsel-r6-hard") - .flag("+EL") - .flag("-msoft-float") - .flag("+mmicromips"); + .flag("+EL") + .flag("-msoft-float") + .flag("+mmicromips"); auto ElMicroSoft = makeMultilib("/micromipsel-r6-soft") - .flag("+EL") - .flag("+msoft-float") - .flag("+mmicromips"); + .flag("+EL") + .flag("+msoft-float") + .flag("+mmicromips"); auto O32 = makeMultilib("/lib").osSuffix("").flag("-mabi=n32").flag("-mabi=n64"); @@ -2138,21 +2138,21 @@ static bool findMIPSMultilibs(const Driv auto N64 = makeMultilib("/lib64").osSuffix("").flag("-mabi=n32").flag("+mabi=n64"); -ImgMultilibsV2 = MultilibSet() - .Either({BeHard, BeSoft, ElHard, ElSoft, BeMicroHard, - BeMicroSoft, ElMicroHard, ElMicroSoft}) - .Either(O32, N32, N64) - .FilterOut(NonExistent) - .setIncludeDirsCallback([](const Multilib &M) { - return std::vector( - {"/../../../../sysroot" + M.includeSuffix() + -"/../usr/include"}); - }) - .setFilePathsCallback([](const Multilib &M) { - return std::vector( - {"/../../../../mips-img-linux-gnu/lib" + -M.gccSuffix()}); - }); +ImgMultilibsV2 = +MultilibSet() +.Either({BeHard, BeSoft, ElHard, ElSoft, BeMicroHard, BeMicroSoft, + ElMicroHard, ElMicroSoft}) +.Either(O32, N32, N64) +.FilterOut(NonExistent) +.setIncludeDirsCallback([](const Multilib &M) { + return std::vector({"/../../../../sysroot" + + M.includeSuffix() + + "/../usr/include"}); +}) +.setFilePathsCallback([](const Multilib &M) { + return std::vector( + {"/../../../../mips-img-linux-gnu/lib" + M.gccSuffix()}); +}); } StringRef CPUName; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
Hi Renato, Strange error. Unfortunately I am far from my computer right now. I was sure in my changes. Could you please revert the commit? On May 22, 2016 11:23 PM, "Renato Golin" wrote: > On 22 May 2016 at 19:18, Simon Atanasyan via cfe-commits > wrote: > > Author: atanasyan > > Date: Sun May 22 13:18:07 2016 > > New Revision: 270373 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=270373&view=rev > > Log: > > [driver][mips] Support new versions of MIPS CodeScape toolchains > > Hi Simon, > > http://lab.llvm.org:8011/builders/clang-cmake-aarch64-42vma/builds/8458 > > The failure is: > > mips-img-v2.cpp:212:13: error: expected string not found in input > // EL-SOFT: > "-L[[TC]]/../../../../mips-img-linux-gnu/lib/mipsel-r6-soft/lib" > > I can't see that strong, but I can see: > /../../../../mips-img-linux-gnu/lib/mipsel-r6-soft/lib/../lib" > > Not sure that's a bug in the driver or in your test, anyway, it broke > all bots, not just that one. :) > > cheers, > --renato > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r270380 - [driver][mips] Follow-up to r270373. Add missed folder.
Author: atanasyan Date: Sun May 22 17:06:19 2016 New Revision: 270380 URL: http://llvm.org/viewvc/llvm-project?rev=270380&view=rev Log: [driver][mips] Follow-up to r270373. Add missed folder. Added: cfe/trunk/test/Driver/Inputs/mips_img_v2_tree/mips-img-linux-gnu/lib/mipsel-r6-soft/ cfe/trunk/test/Driver/Inputs/mips_img_v2_tree/mips-img-linux-gnu/lib/mipsel-r6-soft/lib/ cfe/trunk/test/Driver/Inputs/mips_img_v2_tree/mips-img-linux-gnu/lib/mipsel-r6-soft/lib/.keep Added: cfe/trunk/test/Driver/Inputs/mips_img_v2_tree/mips-img-linux-gnu/lib/mipsel-r6-soft/lib/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/mips_img_v2_tree/mips-img-linux-gnu/lib/mipsel-r6-soft/lib/.keep?rev=270380&view=auto == (empty) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
Hope r270380 fixes the problem. On Mon, May 23, 2016 at 12:00 AM, Simon Atanasyan wrote: > Hi Renato, > > Strange error. Unfortunately I am far from my computer right now. I was sure > in my changes. Could you please revert the commit? > > On May 22, 2016 11:23 PM, "Renato Golin" wrote: >> >> On 22 May 2016 at 19:18, Simon Atanasyan via cfe-commits >> wrote: >> > Author: atanasyan >> > Date: Sun May 22 13:18:07 2016 >> > New Revision: 270373 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=270373&view=rev >> > Log: >> > [driver][mips] Support new versions of MIPS CodeScape toolchains >> >> Hi Simon, >> >> http://lab.llvm.org:8011/builders/clang-cmake-aarch64-42vma/builds/8458 >> >> The failure is: >> >> mips-img-v2.cpp:212:13: error: expected string not found in input >> // EL-SOFT: >> "-L[[TC]]/../../../../mips-img-linux-gnu/lib/mipsel-r6-soft/lib" >> >> I can't see that strong, but I can see: >> /../../../../mips-img-linux-gnu/lib/mipsel-r6-soft/lib/../lib" >> >> Not sure that's a bug in the driver or in your test, anyway, it broke >> all bots, not just that one. :) >> >> cheers, >> --renato -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
Hi, On Tue, May 24, 2016 at 12:37 PM, Ismail Donmez wrote: > > On Sun, May 22, 2016 at 9:18 PM, Simon Atanasyan via cfe-commits > wrote: >> Author: atanasyan >> Date: Sun May 22 13:18:07 2016 >> New Revision: 270373 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=270373&view=rev >> Log: >> [driver][mips] Support new versions of MIPS CodeScape toolchains > > Two tests fail for me on Linux, please the attached build log. 1. Revision 270373 contains a bug fixed at r270380. Do you use the latest Clang source code? 2. If so could you please send an output of the following command? /home/abuild/rpmbuild/BUILD/llvm/stage2/bin/clang -no-canonical-prefixes \ /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/mips-img-v2.cpp \ -### -o /home/abuild/rpmbuild/BUILD/llvm/stage2/tools/clang/test/Driver/Output/mips-img-v2.cpp.tmp.o \ --target=mips-img-linux-gnu \ --gcc-toolchain=/home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree \ -EB -mips32r6 -mhard-float -mabi=32 -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
Hi, Thanks for the information. One more question. Does the following folder exist? /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include/c++/4.9.2 On Wed, May 25, 2016 at 9:55 AM, Ismail Donmez wrote: > On Tue, May 24, 2016 at 4:18 PM, Simon Atanasyan wrote: >> /home/abuild/rpmbuild/BUILD/llvm/stage2/bin/clang -no-canonical-prefixes \ >> /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/mips-img-v2.cpp \ >> -### -o >> /home/abuild/rpmbuild/BUILD/llvm/stage2/tools/clang/test/Driver/Output/mips-img-v2.cpp.tmp.o >> \ >> --target=mips-img-linux-gnu \ >> >> --gcc-toolchain=/home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree >> \ >> -EB -mips32r6 -mhard-float -mabi=32 > > Here is the output: > > openSUSE Linux clang version 3.9.0 (trunk 270535) (based on LLVM 3.9.0svn) > Target: mips-img-linux-gnu > Thread model: posix > InstalledDir: /home/abuild/rpmbuild/BUILD/llvm/stage2/bin > "/home/abuild/rpmbuild/BUILD/llvm/stage2/bin/clang" "-cc1" "-triple" > "mips-img-linux-gnu" "-emit-obj" "-mrelax-all" "-disable-free" > "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" > "mips-img-v2.cpp" "-mrelocation-model" "static" "-mthread-model" > "posix" "-mdisable-fp-elim" "-fmath-errno" "-masm-verbose" > "-mconstructor-aliases" "-fuse-init-array" "-target-cpu" "mips32r6" > "-target-abi" "o32" "-mfloat-abi" "hard" "-dwarf-column-info" > "-debugger-tuning=gdb" "-resource-dir" > "/home/abuild/rpmbuild/BUILD/llvm/stage2/bin/../lib64/clang/3.9.0" > "-internal-isystem" > "/home/abuild/rpmbuild/BUILD/llvm/stage2/bin/../include/c++/v1" > "-internal-isystem" > "/home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../sysroot/mips-r6-hard/usr/local/include" > "-internal-isystem" > "/home/abuild/rpmbuild/BUILD/llvm/stage2/bin/../lib64/clang/3.9.0/include" > "-internal-externc-isystem" > "/home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../sysroot/mips-r6-hard/lib/../usr/include" -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
I'm trying to reproduce the problem but without success yet. And all buildbots available to me are green. So no ideas right now. By the way, as far as I can see you use some sort of build system probably to get rpm package. Right? Could you try to build Clang by hand (http://clang.llvm.org/get_started.html) and run the tests. Is the problem reproduced in that case? On Thu, May 26, 2016 at 10:01 AM, Ismail Donmez wrote: > Any ideas what's going on? > > On Wed, May 25, 2016 at 1:35 PM, Ismail Donmez wrote: >> Hi, >> >> On Wed, May 25, 2016 at 1:32 PM, Simon Atanasyan wrote: >>> Hi, >>> >>> Thanks for the information. One more question. Does the following folder >>> exist? >>> >>> /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include/c++/4.9.2 >>> >> >> Yes : >> >> :/ # ls >> /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include/c++/4.9.2 >> mips-img-linux-gnu -- Simon ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
Sounds reasonable. I will check this idea and fix the tests accordingly. On May 26, 2016 11:03 AM, "Ismail Donmez" wrote: > Hi, > > I think this is because I enable libc++ by default with > -DLLVM_ENABLE_LIBCXX=ON , so this tests need an explicit > -stdlib=libstdc++ > > ismail > > > On Thu, May 26, 2016 at 10:08 AM, Simon Atanasyan > wrote: > > I'm trying to reproduce the problem but without success yet. And all > > buildbots available to me are green. So no ideas right now. > > > > By the way, as far as I can see you use some sort of build system > > probably to get rpm package. Right? Could you try to build Clang by > > hand (http://clang.llvm.org/get_started.html) and run the tests. Is > > the problem reproduced in that case? > > > > On Thu, May 26, 2016 at 10:01 AM, Ismail Donmez wrote: > >> Any ideas what's going on? > >> > >> On Wed, May 25, 2016 at 1:35 PM, Ismail Donmez wrote: > >>> Hi, > >>> > >>> On Wed, May 25, 2016 at 1:32 PM, Simon Atanasyan > wrote: > Hi, > > Thanks for the information. One more question. Does the following > folder exist? > > > /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include/c++/4.9.2 > > >>> > >>> Yes : > >>> > >>> :/ # ls > /home/abuild/rpmbuild/BUILD/llvm/tools/clang/test/Driver/Inputs/mips_img_v2_tree/lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include/c++/4.9.2 > >>> mips-img-linux-gnu > > > > -- > > Simon > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r270842 - [driver][mips] Specify stdlib used in the tests explicitly
Author: atanasyan Date: Thu May 26 06:32:19 2016 New Revision: 270842 URL: http://llvm.org/viewvc/llvm-project?rev=270842&view=rev Log: [driver][mips] Specify stdlib used in the tests explicitly That allows to pass the tests even if default stdlib is not libstdc++. Modified: cfe/trunk/test/Driver/mips-img-v2.cpp cfe/trunk/test/Driver/mips-mti.cpp Modified: cfe/trunk/test/Driver/mips-img-v2.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-img-v2.cpp?rev=270842&r1=270841&r2=270842&view=diff == --- cfe/trunk/test/Driver/mips-img-v2.cpp (original) +++ cfe/trunk/test/Driver/mips-img-v2.cpp Thu May 26 06:32:19 2016 @@ -4,6 +4,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EB -mips32r6 -mhard-float -mabi=32 \ // RUN: | FileCheck --check-prefix=EB-HARD-O32 %s // EB-HARD-O32: "-internal-isystem" @@ -31,6 +32,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EB -mips64r6 -mhard-float -mabi=n32 \ // RUN: | FileCheck --check-prefix=EB-HARD-N32 %s // EB-HARD-N32: "-internal-isystem" @@ -58,6 +60,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips64-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EB -mips64r6 -mhard-float -mabi=64 \ // RUN: | FileCheck --check-prefix=EB-HARD-N64 %s // EB-HARD-N64: "-internal-isystem" @@ -85,6 +88,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EL -mips32r6 -mhard-float -mabi=32 \ // RUN: | FileCheck --check-prefix=EL-HARD-O32 %s // EL-HARD-O32: "-internal-isystem" @@ -112,6 +116,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EL -mips64r6 -mhard-float -mabi=n32 \ // RUN: | FileCheck --check-prefix=EL-HARD-N32 %s // EL-HARD-N32: "-internal-isystem" @@ -139,6 +144,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips64-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EL -mips64r6 -mhard-float -mabi=64 \ // RUN: | FileCheck --check-prefix=EL-HARD-N64 %s // EL-HARD-N64: "-internal-isystem" @@ -166,6 +172,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EB -mips32r6 -msoft-float \ // RUN: | FileCheck --check-prefix=EB-SOFT %s // EB-SOFT: "-internal-isystem" @@ -193,6 +200,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EL -mips32r6 -msoft-float \ // RUN: | FileCheck --check-prefix=EL-SOFT %s // EL-SOFT: "-internal-isystem" @@ -220,6 +228,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EB -mips32r6 -mhard-float -mmicromips \ // RUN: | FileCheck --check-prefix=EB-HARD-MICRO %s // EB-HARD-MICRO: "-internal-isystem" @@ -247,6 +256,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EB -mips32r6 -msoft-float -mmicromips \ // RUN: | FileCheck --check-prefix=EB-SOFT-MICRO %s // EB-SOFT-MICRO: "-internal-isystem" @@ -274,6 +284,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ // RUN:-EL -mips32r6 -mhard-float -mmicromips \ // RUN: | FileCheck --check-prefix=EL-HARD-MICRO %s // EL-HARD-MICRO: "-internal-isystem" @@ -301,6 +312,7 @@ // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN:--target=mips-img-linux-gnu \ // RUN:--gcc-toolchain=%S/Inputs/mips_img_v2_tree \ +// RUN:-stdlib=libstdc++ \ //
Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains
I hope r270842 fixes the problem. Thanks a lot for your help. On Thu, May 26, 2016 at 11:28 AM, Ismail Donmez wrote: > Indeed the problematic option is -DCLANG_DEFAULT_CXX_STDLIB=libc++ , > thanks Jonas! > > On Thu, May 26, 2016 at 11:19 AM, Hahnfeld, Jonas > wrote: >> Hi, >> >> Have you also set CLANG_DEFAULT_CXX_STDLIB? Then you may need to add an >> '-stdlib=platform' to the test... (see r260662 and r263434) >> >> Cheers, >> Jonas >> >>> -Original Message- >>> From: cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] On Behalf >>> Of Ismail Donmez via cfe-commits >>> Sent: Thursday, May 26, 2016 10:03 AM >>> To: Simon Atanasyan >>> Cc: cfe-commits >>> Subject: Re: r270373 - [driver][mips] Support new versions of MIPS >>> CodeScape toolchains >>> >>> Hi, >>> >>> I think this is because I enable libc++ by default with - >>> DLLVM_ENABLE_LIBCXX=ON , so this tests need an explicit -stdlib=libstdc++ -- Simon Atanasyan ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20678: [mips] Fold MipsTargetInfoBase subclasses into MipsTargetInfoBase and rename to MipsTargetInfo. NFC
atanasyan added inline comments. Comment at: lib/Basic/Targets.cpp:6986 @@ +6985,3 @@ + : TargetInfo(Triple), CPU((getTriple().getArch() == llvm::Triple::mips || + getTriple().getArch() == llvm::Triple::mipsel) +? "mips32r2" What do you think about creation a static function and using it to simplify this and similar conditions? ``` static bool is32BitTriple(const llvm::Triple &Triple) { return Triple.getArch() == llvm::Triple::mips || Triple.getArch() == llvm::Triple::mipsel; } ``` Comment at: lib/Basic/Targets.cpp:7006 @@ +7005,3 @@ + MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 32; +} else if (getTriple().getArch() == llvm::Triple::mips64 || + getTriple().getArch() == llvm::Triple::mips64el) { Can we use just `else` here? http://reviews.llvm.org/D20678 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20679: [mips] Kill 'support' for untested EABI.
atanasyan accepted this revision. atanasyan added a reviewer: atanasyan. atanasyan added a comment. This revision is now accepted and ready to land. LGTM Tools.cpp contains the following code. We need to remove `eabi` here too. if (CPUName.empty()) { // Deduce CPU name from ABI name. CPUName = llvm::StringSwitch(ABIName) .Cases("o32", "eabi", DefMips32CPU) .Cases("n32", "n64", DefMips64CPU) .Default(""); } http://reviews.llvm.org/D20679 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20680: [mips] Slightly simplify MipsTargetInfo::setDataLayout(). NFC.
atanasyan accepted this revision. atanasyan added a reviewer: atanasyan. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D20680 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20678: [mips] Fold MipsTargetInfoBase subclasses into MipsTargetInfoBase and rename to MipsTargetInfo. NFC
atanasyan accepted this revision. atanasyan added a reviewer: atanasyan. atanasyan added a comment. This revision is now accepted and ready to land. LGTM Comment at: lib/Basic/Targets.cpp:6986 @@ +6985,3 @@ + : TargetInfo(Triple), CPU((getTriple().getArch() == llvm::Triple::mips || + getTriple().getArch() == llvm::Triple::mipsel) +? "mips32r2" dsanders wrote: > atanasyan wrote: > > What do you think about creation a static function and using it to simplify > > this and similar conditions? > > > > ``` > > static bool is32BitTriple(const llvm::Triple &Triple) { > > return Triple.getArch() == llvm::Triple::mips || Triple.getArch() == > > llvm::Triple::mipsel; > > } > > ``` > I'm happy to add one if you want it but I'm currently finishing a patch that > removes most of them in favour of ABI checks. The only one I think should > remain as an Arch check is the one for MipsTargetInfo::ABI. Even that one is > incorrect on our buildbots which detect as mips64-linux-gnu but should > default to O32. Agreed. In that case the separate function is redundant. http://reviews.llvm.org/D20678 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20679: [mips] Kill 'support' for untested EABI.
atanasyan added a comment. In http://reviews.llvm.org/D20679#442121, @dsanders wrote: > Just to double-check: Do you still agree we should kill this now that the > number of tests covering EABI-specific behaviour is non-zero? > > I think we should on the basis that we still have no backend tests and no > buildbots. The only tests we have check that the driver passes -mabi=eabi to > the assembler. I agree. http://reviews.llvm.org/D20679 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20729: [mips] Compact branch policy setting
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM with some nits Comment at: lib/Driver/Tools.cpp:1446 @@ +1445,3 @@ +CmdArgs.push_back(Args.MakeArgString("-mips-compact-branches=" + Val)); + + } else Redundant empty line. Comment at: lib/Driver/Tools.cpp:7084 @@ +7083,3 @@ + // mips32r6 and mips64r6 have compact branches. + + return (bool)llvm::StringSwitch(CPU) Redundant empty line. Comment at: lib/Driver/Tools.cpp:7085 @@ +7084,3 @@ + + return (bool)llvm::StringSwitch(CPU) + .Case("mips32r6", true) Is it possible to re-write this line as: ``` return llvm::StringSwitch(CPU) ``` http://reviews.llvm.org/D20729 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r271110 - [driver][mips] Fix local variable naming. NFC
Author: atanasyan Date: Sat May 28 04:44:15 2016 New Revision: 271110 URL: http://llvm.org/viewvc/llvm-project?rev=271110&view=rev Log: [driver][mips] Fix local variable naming. NFC Modified: cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=271110&r1=271109&r2=271110&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Sat May 28 04:44:15 2016 @@ -2262,9 +2262,9 @@ static bool findMIPSMultilibs(const Driv TargetTriple.getOS() == llvm::Triple::Linux && TargetTriple.getEnvironment() == llvm::Triple::GNU) { // Select mips-mti-linux-gnu toolchain. -for (auto candidate : {&MtiMipsMultilibsV1, &MtiMipsMultilibsV2}) { - if (candidate->select(Flags, Result.SelectedMultilib)) { -Result.Multilibs = *candidate; +for (auto Candidate : {&MtiMipsMultilibsV1, &MtiMipsMultilibsV2}) { + if (Candidate->select(Flags, Result.SelectedMultilib)) { +Result.Multilibs = *Candidate; return true; } } @@ -2275,9 +2275,9 @@ static bool findMIPSMultilibs(const Driv TargetTriple.getOS() == llvm::Triple::Linux && TargetTriple.getEnvironment() == llvm::Triple::GNU) { // Select mips-img-linux-gnu toolchain. -for (auto candidate : {&ImgMultilibsV1, &ImgMultilibsV2}) { - if (candidate->select(Flags, Result.SelectedMultilib)) { -Result.Multilibs = *candidate; +for (auto Candidate : {&ImgMultilibsV1, &ImgMultilibsV2}) { + if (Candidate->select(Flags, Result.SelectedMultilib)) { +Result.Multilibs = *Candidate; return true; } } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20961: [mips] Replace almost all Arch checks in MipsTargetInfo with ABI checks. NFC.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D20961 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D20963: [mips] The P5600 does not support N32/N64 since it's a 32-bit CPU.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D20963 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21016: [mips] The default ABI depends on the CPU not the Arch on MTI and IMG vendor triples.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D21016 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21023: [mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.
atanasyan accepted this revision. atanasyan added a comment. This revision is now accepted and ready to land. LGTM http://reviews.llvm.org/D21023 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r273465 - [driver][mips] Factor out findMIPSMultilibs code into separate functions. NFC
Author: atanasyan Date: Wed Jun 22 15:00:50 2016 New Revision: 273465 URL: http://llvm.org/viewvc/llvm-project?rev=273465&view=rev Log: [driver][mips] Factor out findMIPSMultilibs code into separate functions. NFC The findMIPSMultilibs is too long. One more reason for splitting is to escape redundant calls of MultilibSet::FilterOut method which lead to disk access. Modified: cfe/trunk/lib/Driver/ToolChains.cpp Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=273465&r1=273464&r2=273465&view=diff == --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Jun 22 15:00:50 2016 @@ -1846,37 +1846,150 @@ static Multilib makeMultilib(StringRef c return Multilib(commonSuffix, commonSuffix, commonSuffix); } -static bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple, - StringRef Path, const ArgList &Args, - DetectedMultilibs &Result) { - // Some MIPS toolchains put libraries and object files compiled - // using different options in to the sub-directoris which names - // reflects the flags used for compilation. For example sysroot - // directory might looks like the following examples: - // - // /usr - // /lib <= crt*.o files compiled with '-mips32' - // /mips16 - // /usr - // /lib<= crt*.o files compiled with '-mips16' - // /el - // /usr - // /lib <= crt*.o files compiled with '-mips16 -EL' - // - // or - // - // /usr - // /lib <= crt*.o files compiled with '-mips32r2' - // /mips16 - // /usr - // /lib<= crt*.o files compiled with '-mips32r2 -mips16' - // /mips32 - // /usr - // /lib <= crt*.o files compiled with '-mips32' +static bool findMipsCsMultilibs(const Multilib::flags_list &Flags, +FilterNonExistent &NonExistent, +DetectedMultilibs &Result) { + // Check for Code Sourcery toolchain multilibs + MultilibSet CSMipsMultilibs; + { +auto MArchMips16 = makeMultilib("/mips16").flag("+m32").flag("+mips16"); - FilterNonExistent NonExistent(Path, "/crtbegin.o", D.getVFS()); +auto MArchMicroMips = +makeMultilib("/micromips").flag("+m32").flag("+mmicromips"); + +auto MArchDefault = makeMultilib("").flag("-mips16").flag("-mmicromips"); + +auto UCLibc = makeMultilib("/uclibc").flag("+muclibc"); + +auto SoftFloat = makeMultilib("/soft-float").flag("+msoft-float"); + +auto Nan2008 = makeMultilib("/nan2008").flag("+mnan=2008"); + +auto DefaultFloat = +makeMultilib("").flag("-msoft-float").flag("-mnan=2008"); + +auto BigEndian = makeMultilib("").flag("+EB").flag("-EL"); + +auto LittleEndian = makeMultilib("/el").flag("+EL").flag("-EB"); + +// Note that this one's osSuffix is "" +auto MAbi64 = makeMultilib("") + .gccSuffix("/64") + .includeSuffix("/64") + .flag("+mabi=n64") + .flag("-mabi=n32") + .flag("-m32"); + +CSMipsMultilibs = +MultilibSet() +.Either(MArchMips16, MArchMicroMips, MArchDefault) +.Maybe(UCLibc) +.Either(SoftFloat, Nan2008, DefaultFloat) +.FilterOut("/micromips/nan2008") +.FilterOut("/mips16/nan2008") +.Either(BigEndian, LittleEndian) +.Maybe(MAbi64) +.FilterOut("/mips16.*/64") +.FilterOut("/micromips.*/64") +.FilterOut(NonExistent) +.setIncludeDirsCallback([](const Multilib &M) { + std::vector Dirs({"/include"}); + if (StringRef(M.includeSuffix()).startswith("/uclibc")) +Dirs.push_back( +"/../../../../mips-linux-gnu/libc/uclibc/usr/include"); + else +Dirs.push_back("/../../../../mips-linux-gnu/libc/usr/include"); + return Dirs; +}); + } + + MultilibSet DebianMipsMultilibs; + { +Multilib MAbiN32 = +Multilib().gccSuffix("/n32").includeSuffix("/n32").flag("+mabi=n32"); + +Multilib M64 = Multilib() + .gccSuffix("/64") + .includeSuffix("/64") + .flag("+m64") + .flag("-m32") + .flag("-mabi=n32"); - // Check for CodeScape MTI toolchain v1.2 and early. +Multilib M32 = Multilib().flag("-m64").flag("+m32").flag("-mabi=n32"); + +DebianMipsMultilibs = +MultilibSet().Either(M32, M64, MAbiN32).FilterOut(NonExistent); + } + + // Sort candidates. Toolchain that best meets the directories tree goes first. + // Then select the first toolchains matches command line flags. + MultilibSet *Candidates[] = {&CSMipsMultilibs, &DebianMips
r273468 - [driver] Remove empty folders from the Inputs folder for the driver's tests. NFC
Author: atanasyan Date: Wed Jun 22 15:20:51 2016 New Revision: 273468 URL: http://llvm.org/viewvc/llvm-project?rev=273468&view=rev Log: [driver] Remove empty folders from the Inputs folder for the driver's tests. NFC Removed: cfe/trunk/test/Driver/Inputs/android_triple_version/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/el/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/fp64/bits/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/el/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/fp64/nan2008/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/el/fp64/nan2
r273471 - [driver] Remove one more bunch of empty 'test inputs' folders. NFC
Author: atanasyan Date: Wed Jun 22 15:30:26 2016 New Revision: 273471 URL: http://llvm.org/viewvc/llvm-project?rev=273471&view=rev Log: [driver] Remove one more bunch of empty 'test inputs' folders. NFC Removed: cfe/trunk/test/Driver/Inputs/basic_nacl_tree/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/micromips/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips16/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips32/mips16/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/lib/gcc/mips-mti-linux-gnu/4.9.0/mips64r2/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/micromips/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips16/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips32/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/include/c++/4.9.0/mips-mti-linux-gnu/mips64r2/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/micromips/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips16/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips32/mips16/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/el/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tree/mips-mti-linux-gnu/lib/mips64/64/fp64/ cfe/trunk/test/Driver/Inputs/mips_fsf_tre
[clang] cedc23b - [MIPS] Add `-no-pie` option to the clang driver's tests depend on it
Author: Simon Atanasyan Date: 2022-02-22T20:24:21+03:00 New Revision: cedc23bc8612feea61c0a7d92ccaae1ce51520ce URL: https://github.com/llvm/llvm-project/commit/cedc23bc8612feea61c0a7d92ccaae1ce51520ce DIFF: https://github.com/llvm/llvm-project/commit/cedc23bc8612feea61c0a7d92ccaae1ce51520ce.diff LOG: [MIPS] Add `-no-pie` option to the clang driver's tests depend on it Added: Modified: clang/test/Driver/mips-cs.cpp clang/test/Driver/mips-fsf.cpp clang/test/Driver/mips-img-v2.cpp clang/test/Driver/mips-img.cpp clang/test/Driver/mips-mti-linux.c Removed: diff --git a/clang/test/Driver/mips-cs.cpp b/clang/test/Driver/mips-cs.cpp index 6ef4c5d4350cd..39f87d8fd8354 100644 --- a/clang/test/Driver/mips-cs.cpp +++ b/clang/test/Driver/mips-cs.cpp @@ -4,7 +4,7 @@ // // = Big-endian, hard float // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu \ +// RUN: --target=mips-linux-gnu -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF-32 %s // CHECK-BE-HF-32: "-internal-isystem" @@ -32,7 +32,7 @@ // // = Big-endian, hard float, uclibc // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -muclibc \ +// RUN: --target=mips-linux-gnu -muclibc -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-UC-HF-32 %s // CHECK-BE-UC-HF-32: "-internal-isystem" @@ -61,7 +61,7 @@ // // = Big-endian, hard float, mips16 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mips16 \ +// RUN: --target=mips-linux-gnu -mips16 -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF-16 %s // CHECK-BE-HF-16: "-internal-isystem" @@ -90,7 +90,7 @@ // // = Big-endian, hard float, mmicromips // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mmicromips \ +// RUN: --target=mips-linux-gnu -mmicromips -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF-MICRO %s // CHECK-BE-HF-MICRO: "-internal-isystem" @@ -119,7 +119,7 @@ // // = Big-endian, hard float, nan2008 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -mnan=2008 \ +// RUN: --target=mips-linux-gnu -mnan=2008 -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-HF-NAN %s // CHECK-BE-HF-NAN: "-internal-isystem" @@ -148,7 +148,7 @@ // // = Big-endian, hard float, uclibc, nan2008 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -muclibc -mnan=2008 \ +// RUN: --target=mips-linux-gnu -muclibc -mnan=2008 -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-UC-HF-NAN %s // CHECK-BE-UC-HF-NAN: "-internal-isystem" @@ -177,7 +177,7 @@ // // = Big-endian, soft float // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -msoft-float \ +// RUN: --target=mips-linux-gnu -msoft-float -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-SF-32 %s // CHECK-BE-SF-32: "-internal-isystem" @@ -206,7 +206,7 @@ // // = Big-endian, soft float, uclibc // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -muclibc -msoft-float \ +// RUN: --target=mips-linux-gnu -muclibc -msoft-float -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-UC-SF-32 %s // CHECK-BE-UC-SF-32: "-internal-isystem" @@ -235,7 +235,7 @@ // // = Big-endian, soft float, mips16 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -msoft-float -mips16 \ +// RUN: --target=mips-linux-gnu -msoft-float -mips16 -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-SF-16 %s // CHECK-BE-SF-16: "-internal-isystem" @@ -264,7 +264,7 @@ // // = Big-endian, soft float, micromips // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -// RUN: --target=mips-linux-gnu -msoft-float -mmicromips \ +// RUN: --target=mips-linux-gnu -msoft-float -mmicromips -no-pie \ // RUN: -stdlib=libstdc++ --gcc-toolchain=%S/Inputs/mips_cs_tree \ // RUN: | FileCheck --check-prefix=CHECK-BE-SF-MICRO %s // CHECK-BE-SF-MICRO: "-internal-isystem" @@ -293,7 +293,7 @@ // // = Big-endian, hard flo
[clang] 2edcde0 - [MIPS] Add -mfix4300 flag to enable vr4300 mulmul bugfix pass
Author: Random Date: 2021-12-31T15:59:44+03:00 New Revision: 2edcde00cb396cc17d8d8b171a6ebaa97fd30e59 URL: https://github.com/llvm/llvm-project/commit/2edcde00cb396cc17d8d8b171a6ebaa97fd30e59 DIFF: https://github.com/llvm/llvm-project/commit/2edcde00cb396cc17d8d8b171a6ebaa97fd30e59.diff LOG: [MIPS] Add -mfix4300 flag to enable vr4300 mulmul bugfix pass Early revisions of the VR4300 have a hardware bug where two consecutive multiplications can produce an incorrect result in the second multiply. This revision adds the `-mfix4300` flag to llvm (and clang) which, when passed, provides a software fix for this issue. More precise description of the "mulmul" bug: ``` mul.[s,d] fd,fs,ft mul.[s,d] fd,fs,ft or [D]MULT[U] rs,rt ``` When the above sequence is executed by the CPU, if at least one of the source operands of the first mul instruction happens to be `sNaN`, `0` or `Infinity`, then the second mul instruction may produce an incorrect result. This can happen both if the two mul instructions are next to each other and if the first one is in a delay slot and the second is the first instruction of the branch target. Description of the fix: This fix adds a backend pass to llvm which scans for mul instructions in each basic block and inserts a nop whenever the following conditions are met: - The current instruction is a single or double-precision floating-point mul instruction. - The next instruction is either a mul instruction (any kind) or a branch instruction. Differential Revision: https://reviews.llvm.org/D116238 Added: llvm/lib/Target/Mips/MipsMulMulBugPass.cpp llvm/test/CodeGen/Mips/vr4300-mulbranch.ll llvm/test/CodeGen/Mips/vr4300-mulmul.ll Modified: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp llvm/lib/Target/Mips/CMakeLists.txt llvm/lib/Target/Mips/Mips.h llvm/lib/Target/Mips/MipsTargetMachine.cpp Removed: diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index dc8bd831f2a26..6c56d9739de2a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3617,6 +3617,7 @@ def mcheck_zero_division : Flag<["-"], "mcheck-zero-division">, Group; def mno_check_zero_division : Flag<["-"], "mno-check-zero-division">, Group; +def mfix4300 : Flag<["-"], "mfix4300">, Group; def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">, Group; def mbranch_likely : Flag<["-"], "mbranch-likely">, Group, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 2c34392150938..3a4e9153689e2 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1929,6 +1929,11 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args, } } + if (Arg *A = Args.getLastArg(options::OPT_mfix4300)) { +CmdArgs.push_back("-mllvm"); +CmdArgs.push_back("-mfix4300"); + } + if (Arg *A = Args.getLastArg(options::OPT_G)) { StringRef v = A->getValue(); CmdArgs.push_back("-mllvm"); diff --git a/llvm/lib/Target/Mips/CMakeLists.txt b/llvm/lib/Target/Mips/CMakeLists.txt index cbfd187fdfa21..5759fd9736e78 100644 --- a/llvm/lib/Target/Mips/CMakeLists.txt +++ b/llvm/lib/Target/Mips/CMakeLists.txt @@ -59,6 +59,7 @@ add_llvm_target(MipsCodeGen MipsTargetMachine.cpp MipsTargetObjectFile.cpp MicroMipsSizeReduction.cpp + MipsMulMulBugPass.cpp LINK_COMPONENTS Analysis diff --git a/llvm/lib/Target/Mips/Mips.h b/llvm/lib/Target/Mips/Mips.h index b3faaab436f01..faf58545db626 100644 --- a/llvm/lib/Target/Mips/Mips.h +++ b/llvm/lib/Target/Mips/Mips.h @@ -38,6 +38,7 @@ namespace llvm { FunctionPass *createMicroMipsSizeReducePass(); FunctionPass *createMipsExpandPseudoPass(); FunctionPass *createMipsPreLegalizeCombiner(); + FunctionPass *createMipsMulMulBugPass(); InstructionSelector *createMipsInstructionSelector(const MipsTargetMachine &, MipsSubtarget &, @@ -47,6 +48,7 @@ namespace llvm { void initializeMipsBranchExpansionPass(PassRegistry &); void initializeMicroMipsSizeReducePass(PassRegistry &); void initializeMipsPreLegalizerCombinerPass(PassRegistry&); + void initializeMipsMulMulBugFixPass(PassRegistry&); } // end namespace llvm; #endif diff --git a/llvm/lib/Target/Mips/MipsMulMulBugPass.cpp b/llvm/lib/Target/Mips/MipsMulMulBugPass.cpp new file mode 100644 index 0..cb112ca1dfffe --- /dev/null +++ b/llvm/lib/Target/Mips/MipsMulMulBugPass.cpp @@ -0,0 +1,134 @@ +//===- MipsMulMulBugPass.cpp - Mips VR4300 mulmul bugfix pass -===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPD