[clang] cedc23b - [MIPS] Add `-no-pie` option to the clang driver's tests depend on it

2022-02-22 Thread Simon Atanasyan via cfe-commits

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 

[clang] 2edcde0 - [MIPS] Add -mfix4300 flag to enable vr4300 mulmul bugfix pass

2021-12-31 Thread Simon Atanasyan via cfe-commits

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 ,
 }
   }
 
+  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.
+// 

[clang] 284c2eb - [clang][MIPS] Fix search path for Debian multilib O32

2021-10-28 Thread Simon Atanasyan via cfe-commits

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 ,
.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 , const llvm::Triple , 
const ArgList )
   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
 

[clang] f4d32ae - [mips] Check that features required by built-ins are enabled

2019-11-28 Thread Simon Atanasyan via cfe-commits

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 
,
 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  = 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
 // 

[clang] e578d0f - [mips] Fix `__mips_isa_rev` macros value for Octeon CPU

2019-11-05 Thread Simon Atanasyan via cfe-commits

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] 0d14656 - [mips] Set __OCTEON__ macros

2019-11-05 Thread Simon Atanasyan via cfe-commits

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 
,
   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


r374154 - [mips] Set default float ABI to "soft" on FreeBSD

2019-10-09 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Oct  9 03:38:03 2019
New Revision: 374154

URL: http://llvm.org/viewvc/llvm-project?rev=374154=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=374153=374154=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 , const ArgList ) {
+mips::FloatABI mips::getMipsFloatABI(const Driver , const ArgList ,
+ const llvm::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=374153=374154=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 ,
std::vector );
 StringRef getGnuCompatibleMipsABIName(StringRef ABI);
-mips::FloatABI getMipsFloatABI(const Driver , const llvm::opt::ArgList 
);
+mips::FloatABI getMipsFloatABI(const Driver , const llvm::opt::ArgList ,
+   const llvm::Triple );
 std::string getMipsABILibSuffix(const llvm::opt::ArgList ,
 const llvm::Triple );
 bool hasMipsAbiArg(const llvm::opt::ArgList , 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=374153=374154=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=374153=374154=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::shouldUseFPXX(
Args, getToolChain().getTriple(), CPUName, ABIName,
-   

r372220 - [mips] Pass "xgot" flag as a subtarget feature

2019-09-18 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Sep 18 05:24:57 2019
New Revision: 372220

URL: http://llvm.org/viewvc/llvm-project?rev=372220=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=372219=372220=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=372219=372220=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=372219=372220=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=372219=372220=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


r361967 - [mips] Check argument for __builtin_msa_ctcmsa / __builtin_msa_cfcmsa

2019-05-29 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed May 29 07:59:32 2019
New Revision: 361967

URL: http://llvm.org/viewvc/llvm-project?rev=361967=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=361966=361967=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=361966=361967=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


r357506 - [driver][mips] Check both `gnuabi64` and `gnu` suffixes in `getMultiarchTriple`

2019-04-02 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Apr  2 11:03:31 2019
New Revision: 357506

URL: http://llvm.org/viewvc/llvm-project?rev=357506=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=357505=357506=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=357505=357506=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: 

r357505 - [driver] clang-format. Fix indentation, split long lines. NFC

2019-04-02 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Apr  2 11:03:15 2019
New Revision: 357505

URL: http://llvm.org/viewvc/llvm-project?rev=357505=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=357504=357505=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 , Command ) {
-  // 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=357504=357505=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());
-

r353965 - [Headers][mips] Add `__attribute__((__mode__(__unwind_word__)))` to the _Unwind_Word / _Unwind_SWord definitions

2019-02-13 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Feb 13 10:27:09 2019
New Revision: 353965

URL: http://llvm.org/viewvc/llvm-project?rev=353965=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=353964=353965=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 ) 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=353964=353965=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 ) 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=353964=353965=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=353964=353965=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)));
+int foo[sizeof(gcc_unwind_word) == 8 ? 1 : -1];
+#elif 

r348935 - [mips] Enable using of integrated assembler in all cases.

2018-12-12 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Dec 12 07:32:25 2018
New Revision: 348935

URL: http://llvm.org/viewvc/llvm-project?rev=348935=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=348934=348935=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


Re: [llvm-dev] mips builders on LLVM buildbot?

2018-11-15 Thread Simon Atanasyan via cfe-commits
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


Re: [llvm-dev] mips builders on LLVM buildbot?

2018-11-03 Thread Simon Atanasyan via cfe-commits
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


r344608 - [driver][mips] Support MIPS R6 target triples

2018-10-16 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Oct 16 07:29:27 2018
New Revision: 344608

URL: http://llvm.org/viewvc/llvm-project?rev=344608=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=344607=344608=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=344607=344608=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=344607=344608=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 Mips64Abi = "gnuabi64";
-  if 

r344603 - [driver][mips] Adjust target triple's environment accordingly to provided ABI name

2018-10-16 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Oct 16 03:19:06 2018
New Revision: 344603

URL: http://llvm.org/viewvc/llvm-project?rev=344603=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=344602=344603=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=344602=344603=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


r344583 - [mips] Group similar commands in the test case. NFC

2018-10-15 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon Oct 15 22:18:36 2018
New Revision: 344583

URL: http://llvm.org/viewvc/llvm-project?rev=344583=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=344582=344583=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


r344570 - [mips] Fix handling of GNUABIN32 environment in a target triple

2018-10-15 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon Oct 15 15:43:23 2018
New Revision: 344570

URL: http://llvm.org/viewvc/llvm-project?rev=344570=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=344569=344570=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=344569=344570=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=344569=344570=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::mips64:
 

r343169 - [driver][mips] Adjust target triple accordingly to provided ABI name

2018-09-26 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Sep 26 22:04:50 2018
New Revision: 343169

URL: http://llvm.org/viewvc/llvm-project?rev=343169=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=343168=343169=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=343168=343169=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


r331856 - [driver] Add mips_Features_Group to Options to improve documentation sorting

2018-05-09 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed May  9 01:42:30 2018
New Revision: 331856

URL: http://llvm.org/viewvc/llvm-project?rev=331856=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=331855=331856=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,
   

r312701 - [mips] Replace Triple::Environment check by the isGNUEnvironment() call. NFC

2017-09-07 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Sep  6 23:05:06 2017
New Revision: 312701

URL: http://llvm.org/viewvc/llvm-project?rev=312701=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=312700=312701=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=312700=312701=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


r311334 - [mips] Remove checking of the redundant condition. NFC

2017-08-21 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon Aug 21 07:08:29 2017
New Revision: 311334

URL: http://llvm.org/viewvc/llvm-project?rev=311334=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=311333=311334=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


r310615 - [mips] Group all `-mabicalls` related checks in the single place. NFC

2017-08-10 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu Aug 10 08:42:31 2017
New Revision: 310615

URL: http://llvm.org/viewvc/llvm-project?rev=310615=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=310614=310615=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=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


r310613 - [mips] Notify user that `-mabicalls` is ignored on non-PIC N64 ABI

2017-08-10 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu Aug 10 08:42:16 2017
New Revision: 310613

URL: http://llvm.org/viewvc/llvm-project?rev=310613=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=310612=310613=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=310612=310613=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=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=310612=310613=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


r310614 - [mips] Show warning in case of mixing -mlong-calls and -mabicalls options

2017-08-10 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu Aug 10 08:42:25 2017
New Revision: 310614

URL: http://llvm.org/viewvc/llvm-project?rev=310614=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=310613=310614=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=310613=310614=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=310613=310614=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=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: ignoring '-mlong-calls' option as it is not 

r310418 - [mips] Enable `long_call/short_call` attributes on MIPS64

2017-08-08 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Aug  8 14:17:33 2017
New Revision: 310418

URL: http://llvm.org/viewvc/llvm-project?rev=310418=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=310417=310418=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 {
 }
 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=310417=310418=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=310417=310418=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


Re: r308619 - Reland "[mips] Teach the driver to accept -m(no-)gpopt."

2017-08-04 Thread Simon Atanasyan via cfe-commits
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=308618=308619=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


r310038 - [mips] Fix typo (missed space) in the warning message

2017-08-04 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Fri Aug  4 01:25:15 2017
New Revision: 310038

URL: http://llvm.org/viewvc/llvm-project?rev=310038=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=310037=310038=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=310037=310038=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


r310037 - [mips] Code formatting fix. NFC

2017-08-04 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Fri Aug  4 01:25:09 2017
New Revision: 310037

URL: http://llvm.org/viewvc/llvm-project?rev=310037=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=310036=310037=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 ) {


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r308719 - [mips] Add `short_call` to the set of `long_call/far/near` attributes

2017-07-21 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Fri Jul 21 01:10:57 2017
New Revision: 308719

URL: http://llvm.org/viewvc/llvm-project?rev=308719=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=308718=308719=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=308718=308719=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=308718=308719=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=308718=308719=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 arguments}}
 __attribute__((near(0))) void foo3();  

r308667 - [CodeGen][mips] Support `long_call/far/near` attributes

2017-07-20 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu Jul 20 13:34:18 2017
New Revision: 308667

URL: http://llvm.org/viewvc/llvm-project?rev=308667=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=308666=308667=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=308666=308667=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=308666=308667=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 (!IsForDefinition)
+  

r307627 - [mips] Create the correct profiling symbol on Linux MIPS

2017-07-11 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon Jul 10 23:19:01 2017
New Revision: 307627

URL: http://llvm.org/viewvc/llvm-project?rev=307627=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=307626=307627=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=307626=307627=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


r307386 - [driver][mips] Pass long-calls feature flag to the MIPS backend

2017-07-07 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Fri Jul  7 03:35:33 2017
New Revision: 307386

URL: http://llvm.org/viewvc/llvm-project?rev=307386=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=307385=307386=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 ) {

Modified: cfe/trunk/test/Driver/mips-features.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=307386=307385=307386=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


r307152 - [driver][mips] Use AddTargetFeature to check arguments and add feature flags. NFC

2017-07-05 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Jul  5 05:57:37 2017
New Revision: 307152

URL: http://llvm.org/viewvc/llvm-project?rev=307152=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=307151=307152=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 ) {


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r307151 - [driver][mips] Remove redundant curly brackets. NFC

2017-07-05 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Jul  5 05:57:32 2017
New Revision: 307151

URL: http://llvm.org/viewvc/llvm-project?rev=307151=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=307150=307151=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


Re: r303546 - [mips] Support `micromips` attribute

2017-05-22 Thread Simon Atanasyan via cfe-commits
On Mon, May 22, 2017 at 3:57 PM, Aaron Ballman <aa...@aaronballman.com> wrote:
> On Mon, May 22, 2017 at 8:47 AM, Simon Atanasyan via cfe-commits
> <cfe-commits@lists.llvm.org> wrote:
>> Author: atanasyan
>> Date: Mon May 22 07:47:43 2017
>> New Revision: 303546
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=303546=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=303545=303546=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=303545=303546=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=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


r303565 - [mips] Add one more check to the micromips attribute test case. NFC

2017-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon May 22 10:53:34 2017
New Revision: 303565

URL: http://llvm.org/viewvc/llvm-project?rev=303565=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=303564=303565=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


r303564 - [mips] Quote command line options with `` in the micromips attribute description. NFC

2017-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon May 22 10:53:31 2017
New Revision: 303564

URL: http://llvm.org/viewvc/llvm-project?rev=303564=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=303563=303564=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


r303546 - [mips] Support `micromips` attribute

2017-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon May 22 07:47:43 2017
New Revision: 303546

URL: http://llvm.org/viewvc/llvm-project?rev=303546=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=303545=303546=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=303545=303546=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=303545=303546=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=303545=303546=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 
 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=auto
==
--- 

r275951 - [driver][mips] Remove empty folder from test inputs

2016-07-19 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Jul 19 02:23:15 2016
New Revision: 275951

URL: http://llvm.org/viewvc/llvm-project?rev=275951=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


r275949 - [driver][mips] Support MIPS targets in modern Android NDK

2016-07-19 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Tue Jul 19 02:09:48 2016
New Revision: 275949

URL: http://llvm.org/viewvc/llvm-project?rev=275949=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/


r273471 - [driver] Remove one more bunch of empty 'test inputs' folders. NFC

2016-06-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Jun 22 15:30:26 2016
New Revision: 273471

URL: http://llvm.org/viewvc/llvm-project?rev=273471=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/


r273468 - [driver] Remove empty folders from the Inputs folder for the driver's tests. NFC

2016-06-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Jun 22 15:20:51 2016
New Revision: 273468

URL: http://llvm.org/viewvc/llvm-project?rev=273468=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/nan2008/

r273465 - [driver][mips] Factor out findMIPSMultilibs code into separate functions. NFC

2016-06-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Wed Jun 22 15:00:50 2016
New Revision: 273465

URL: http://llvm.org/viewvc/llvm-project?rev=273465=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=273464=273465=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 , const llvm::Triple 
,
-  StringRef Path, const ArgList ,
-  DetectedMultilibs ) {
-  // 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 ,
+FilterNonExistent ,
+DetectedMultilibs ) {
+  // 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 ) {
+  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[] = {, };
+  if (CSMipsMultilibs.size() < DebianMipsMultilibs.size())
+std::iter_swap(Candidates, 

Re: [PATCH] D21023: [mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.

2016-06-07 Thread Simon Atanasyan via cfe-commits
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


Re: [PATCH] D21016: [mips] The default ABI depends on the CPU not the Arch on MTI and IMG vendor triples.

2016-06-06 Thread Simon Atanasyan via cfe-commits
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] D20963: [mips] The P5600 does not support N32/N64 since it's a 32-bit CPU.

2016-06-03 Thread Simon Atanasyan via cfe-commits
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] D20961: [mips] Replace almost all Arch checks in MipsTargetInfo with ABI checks. NFC.

2016-06-03 Thread Simon Atanasyan via cfe-commits
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


r271110 - [driver][mips] Fix local variable naming. NFC

2016-05-28 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Sat May 28 04:44:15 2016
New Revision: 271110

URL: http://llvm.org/viewvc/llvm-project?rev=271110=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=271109=271110=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 : {, }) {
-  if (candidate->select(Flags, Result.SelectedMultilib)) {
-Result.Multilibs = *candidate;
+for (auto Candidate : {, }) {
+  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 : {, }) {
-  if (candidate->select(Flags, Result.SelectedMultilib)) {
-Result.Multilibs = *candidate;
+for (auto Candidate : {, }) {
+  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] D20729: [mips] Compact branch policy setting

2016-05-27 Thread Simon Atanasyan via cfe-commits
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


Re: [PATCH] D20679: [mips] Kill 'support' for untested EABI.

2016-05-27 Thread Simon Atanasyan via cfe-commits
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] D20678: [mips] Fold MipsTargetInfoBase subclasses into MipsTargetInfoBase and rename to MipsTargetInfo. NFC

2016-05-26 Thread Simon Atanasyan via cfe-commits
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 ) {
> >   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] D20680: [mips] Slightly simplify MipsTargetInfo::setDataLayout(). NFC.

2016-05-26 Thread Simon Atanasyan via cfe-commits
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] D20679: [mips] Kill 'support' for untested EABI.

2016-05-26 Thread Simon Atanasyan via cfe-commits
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] D20678: [mips] Fold MipsTargetInfoBase subclasses into MipsTargetInfoBase and rename to MipsTargetInfo. NFC

2016-05-26 Thread Simon Atanasyan via cfe-commits
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 ) {
  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: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains

2016-05-26 Thread Simon Atanasyan via cfe-commits
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


r270842 - [driver][mips] Specify stdlib used in the tests explicitly

2016-05-26 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu May 26 06:32:19 2016
New Revision: 270842

URL: http://llvm.org/viewvc/llvm-project?rev=270842=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=270841=270842=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++ \
 // RUN:

Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains

2016-05-26 Thread Simon Atanasyan via cfe-commits
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


Re: r270373 - [driver][mips] Support new versions of MIPS CodeScape toolchains

2016-05-26 Thread Simon Atanasyan via cfe-commits
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

2016-05-25 Thread Simon Atanasyan via cfe-commits
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

2016-05-24 Thread Simon Atanasyan via cfe-commits
Hi,

On Tue, May 24, 2016 at 12:37 PM, Ismail Donmez <ism...@i10z.com> wrote:
>
> On Sun, May 22, 2016 at 9:18 PM, Simon Atanasyan via cfe-commits
> <cfe-commits@lists.llvm.org> wrote:
>> Author: atanasyan
>> Date: Sun May 22 13:18:07 2016
>> New Revision: 270373
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=270373=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

2016-05-22 Thread Simon Atanasyan via cfe-commits
Hope r270380 fixes the problem.

On Mon, May 23, 2016 at 12:00 AM, Simon Atanasyan <si...@atanasyan.com> 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" <renato.go...@linaro.org> wrote:
>>
>> On 22 May 2016 at 19:18, Simon Atanasyan via cfe-commits
>> <cfe-commits@lists.llvm.org> wrote:
>> > Author: atanasyan
>> > Date: Sun May 22 13:18:07 2016
>> > New Revision: 270373
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=270373=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


r270380 - [driver][mips] Follow-up to r270373. Add missed folder.

2016-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Sun May 22 17:06:19 2016
New Revision: 270380

URL: http://llvm.org/viewvc/llvm-project?rev=270380=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=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

2016-05-22 Thread Simon Atanasyan via cfe-commits
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" <renato.go...@linaro.org> wrote:

> On 22 May 2016 at 19:18, Simon Atanasyan via cfe-commits
> <cfe-commits@lists.llvm.org> wrote:
> > Author: atanasyan
> > Date: Sun May 22 13:18:07 2016
> > New Revision: 270373
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=270373=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


r270374 - [driver][mips] clang-format the code. NFC

2016-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Sun May 22 13:18:41 2016
New Revision: 270374

URL: http://llvm.org/viewvc/llvm-project?rev=270374=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=270373=270374=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 ) {
-   return std::vector(
-   {"/../../../../sysroot" + M.includeSuffix() +
-"/../usr/include"});
- })
- .setFilePathsCallback([](const Multilib ) {
-   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 ) {
+  return std::vector({"/../../../../sysroot" +
+   M.includeSuffix() +
+   "/../usr/include"});
+})
+.setFilePathsCallback([](const Multilib ) {
+  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


r270368 - [driver][mips] Use target triple mips-mti-linux-gnu for toolchain detection

2016-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Sun May 22 10:28:34 2016
New Revision: 270368

URL: http://llvm.org/viewvc/llvm-project?rev=270368=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=270367=270368=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[] = {, };
-  std::sort(
-  std::begin(candidates), std::end(candidates),
-  [](MultilibSet *a, MultilibSet *b) { return a->size() > b->size(); });
-  for (const auto  : candidates) {
-if (candidate->select(Flags, Result.SelectedMultilib)) {
-  if (candidate == )
-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=270367=270368=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-mti-linux-gnu -mips32 -mips16 -msoft-float \
 // RUN: -stdlib=libstdc++ 

r270367 - [driver][mips] Rename some variables to better reflect their purpose. NFC

2016-05-22 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Sun May 22 10:27:58 2016
New Revision: 270367

URL: http://llvm.org/viewvc/llvm-project?rev=270367=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=270366=270367=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[] = {, };
+  MultilibSet *candidates[] = {, };
   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


r270067 - [driver][mips] Hardcode triple name in case of CodeSourcery toolchain. NFC

2016-05-19 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu May 19 10:05:22 2016
New Revision: 270067

URL: http://llvm.org/viewvc/llvm-project?rev=270067=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=270066=270067=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


r270068 - [driver] Do not pass target triple to the MultilibSet include dirs callback

2016-05-19 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu May 19 10:07:00 2016
New Revision: 270068

URL: http://llvm.org/viewvc/llvm-project?rev=270068=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=270067=270068=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
-  IncludeDirsFunc;
+  typedef std::function
+  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=270067=270068=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 ) 
{
+   const Multilib ) {
   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 ) {
+MuslMipsMultilibs.setIncludeDirsCallback([](StringRef InstallDir,
+const Multilib ) {
   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 ) 
{
+   const Multilib ) {
   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 ) 
{
+   const Multilib ) {
   std::vector Dirs;
   Dirs.push_back((InstallDir + "/include").str());
   Dirs.push_back(
@@ -2540,8 +2540,7 @@ void MipsLLVMToolChain::AddClangSystemIn
 
   const auto  = Multilibs.includeDirsCallback();
   if (Callback) {
-const auto IncludePaths =
-Callback(D.getInstalledDir(), getTripleString(), SelectedMultilib);
+const auto IncludePaths = Callback(D.getInstalledDir(), SelectedMultilib);
 for (const auto  : IncludePaths)
   addExternCSystemIncludeIfExists(DriverArgs, CC1Args, Path);
   }
@@ -2588,8 +2587,8 @@ void MipsLLVMToolChain::AddClangCXXStdli
 
   const auto  = Multilibs.includeDirsCallback();
   if (Callback) {
-const auto IncludePaths = Callback(getDriver().getInstalledDir(),
-   getTripleString(), SelectedMultilib);
+const auto IncludePaths =
+Callback(getDriver().getInstalledDir(), SelectedMultilib);
 for (const auto  : 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  = Multilibs.includeDirsCallback();
 if (Callback) {
   const auto IncludePaths = Callback(GCCInstallation.getInstallPath(),
- GCCInstallation.getTriple().str(),
  GCCInstallation.getMultilib());
   for (const auto  : IncludePaths)
 

r270069 - [driver] Do not pass install dir to the MultilibSet include dirs callback

2016-05-19 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Thu May 19 10:07:21 2016
New Revision: 270069

URL: http://llvm.org/viewvc/llvm-project?rev=270069=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=270068=270069=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
+  typedef std::function
   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=270068=270069=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 ) {
-  std::vector Dirs;
-  Dirs.push_back((InstallDir + "/include").str());
-  std::string SysRootInc =
-  InstallDir.str() + "/../../../../sysroot";
+.setIncludeDirsCallback([](const Multilib ) {
+  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 ) {
-  std::vector Dirs;
-  Dirs.push_back(
-  (InstallDir + "/../sysroot" + M.osSuffix() + "/usr/include").str());
-  return Dirs;
+MuslMipsMultilibs.setIncludeDirsCallback([](const Multilib ) {
+  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 ) {
-  std::vector Dirs;
-  Dirs.push_back((InstallDir + "/include").str());
-  std::string SysRootInc =
-  InstallDir.str() + "/../../../../mips-linux-gnu";
+.setIncludeDirsCallback([](const Multilib ) {
+  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 ) {
-  std::vector Dirs;
-  Dirs.push_back((InstallDir + "/include").str());
-  Dirs.push_back(
-  (InstallDir + "/../../../../sysroot/usr/include").str());
-  return Dirs;
+.setIncludeDirsCallback([](const Multilib ) {
+  return std::vector(
+

Re: [PATCH] D20345: [Mips] Finetuning MIPS32 Android default variants

2016-05-17 Thread Simon Atanasyan via cfe-commits
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


Re: [PATCH] D20313: [Mips] Set mips32 as default CPU for MIPS32 Android

2016-05-17 Thread Simon Atanasyan via cfe-commits
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


r250043 - [Driver] Remove `else` after `return`

2015-10-12 Thread Simon Atanasyan via cfe-commits
Author: atanasyan
Date: Mon Oct 12 09:32:57 2015
New Revision: 250043

URL: http://llvm.org/viewvc/llvm-project?rev=250043=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=250042=250043=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


Re: [PATCH] D13340: Add support for the new mips-mti-linux toolchain.

2015-10-02 Thread Simon Atanasyan via cfe-commits
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.

2015-10-02 Thread Simon Atanasyan via cfe-commits
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] D13340: Add support for the new mips-mti-linux toolchain.

2015-10-02 Thread Simon Atanasyan via cfe-commits
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.

2015-10-01 Thread Simon Atanasyan via cfe-commits
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 () 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  = GCCInstallation.getVersion();
+  const llvm::Triple  = 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  = 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] D13057: [mips] Relax -mnan=2008 acceptance to permit MIPS32R2 and MIPS64R2.

2015-09-22 Thread Simon Atanasyan via cfe-commits
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: r247548 - [mips] Add test case to check ABI flag emissions in case of inline assembler

2015-09-14 Thread Simon Atanasyan via cfe-commits
Thanks a lot!

On Mon, Sep 14, 2015 at 3:49 PM, NAKAMURA Takumi <geek4ci...@gmail.com> wrote:
> Makes sense. I have updated CLANG_TEST_DEPS in r247554.
>
> On Mon, Sep 14, 2015 at 9:38 PM Simon Atanasyan <si...@atanasyan.com> wrote:
>>
>> On Mon, Sep 14, 2015 at 3:24 PM, NAKAMURA Takumi <geek4ci...@gmail.com>
>> 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
>> > <cfe-commits@lists.llvm.org> wrote:
>> >>
>> >> Author: atanasyan
>> >> Date: Mon Sep 14 06:23:02 2015
>> >> New Revision: 247548
>> >>
>> >> URL: http://llvm.org/viewvc/llvm-project?rev=247548=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=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: r247548 - [mips] Add test case to check ABI flag emissions in case of inline assembler

2015-09-14 Thread Simon Atanasyan via cfe-commits
On Mon, Sep 14, 2015 at 3:24 PM, NAKAMURA Takumi <geek4ci...@gmail.com> 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
> <cfe-commits@lists.llvm.org> wrote:
>>
>> Author: atanasyan
>> Date: Mon Sep 14 06:23:02 2015
>> New Revision: 247548
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=247548=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=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: [PATCH] D12234: [mips][p5600] Add -mcpu=p5600 option.

2015-08-21 Thread Simon Atanasyan via cfe-commits
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