From 705ef1994eeed85831dd5f30193ad21db0363b90 Mon Sep 17 00:00:00 2001 From: Douglas Katzman Date: Mon, 25 Jul 2016 16:36:02 +0000 Subject: [PATCH] [Myriad]: better compatibility with vendor source - Accept ma{2100,2150,2150} for -mcpu - Define more preprocessor macros - Don't append "le/" to little-endian lib dirs git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@276646 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 42 +++++++++++++++------- lib/Driver/ToolChains.cpp | 12 ++----- test/Preprocessor/predefined-arch-macros.c | 3 ++ 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 30e75847cb..6ce14ced7b 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -6470,8 +6470,9 @@ public: CK_NIAGARA2, CK_NIAGARA3, CK_NIAGARA4, - CK_MYRIAD2_1, - CK_MYRIAD2_2, + CK_MYRIAD2100, + CK_MYRIAD2150, + CK_MYRIAD2450, CK_LEON2, CK_LEON2_AT697E, CK_LEON2_AT697F, @@ -6498,8 +6499,9 @@ public: case CK_SPARCLITE86X: case CK_SPARCLET: case CK_TSC701: - case CK_MYRIAD2_1: - case CK_MYRIAD2_2: + case CK_MYRIAD2100: + case CK_MYRIAD2150: + case CK_MYRIAD2450: case CK_LEON2: case CK_LEON2_AT697E: case CK_LEON2_AT697F: @@ -6538,9 +6540,14 @@ public: .Case("niagara2", CK_NIAGARA2) .Case("niagara3", CK_NIAGARA3) .Case("niagara4", CK_NIAGARA4) - .Case("myriad2", CK_MYRIAD2_1) - .Case("myriad2.1", CK_MYRIAD2_1) - .Case("myriad2.2", CK_MYRIAD2_2) + .Case("ma2100", CK_MYRIAD2100) + .Case("ma2150", CK_MYRIAD2150) + .Case("ma2450", CK_MYRIAD2450) + // FIXME: the myriad2[.n] spellings are obsolete, + // but a grace period is needed to allow updating dependent builds. + .Case("myriad2", CK_MYRIAD2100) + .Case("myriad2.1", CK_MYRIAD2100) + .Case("myriad2.2", CK_MYRIAD2150) .Case("leon2", CK_LEON2) .Case("at697e", CK_LEON2_AT697E) .Case("at697f", CK_LEON2_AT697F) @@ -6649,18 +6656,27 @@ public: break; } if (getTriple().getVendor() == llvm::Triple::Myriad) { + std::string MyriadArchValue, Myriad2Value; + Builder.defineMacro("__sparc_v8__"); + Builder.defineMacro("__leon__"); switch (CPU) { - case CK_MYRIAD2_1: - Builder.defineMacro("__myriad2", "1"); - Builder.defineMacro("__myriad2__", "1"); + case CK_MYRIAD2150: + MyriadArchValue = "__ma2150"; + Myriad2Value = "2"; break; - case CK_MYRIAD2_2: - Builder.defineMacro("__myriad2", "2"); - Builder.defineMacro("__myriad2__", "2"); + case CK_MYRIAD2450: + MyriadArchValue = "__ma2450"; + Myriad2Value = "2"; break; default: + MyriadArchValue = "__ma2100"; + Myriad2Value = "1"; break; } + Builder.defineMacro(MyriadArchValue, "1"); + Builder.defineMacro(MyriadArchValue+"__", "1"); + Builder.defineMacro("__myriad2__", Myriad2Value); + Builder.defineMacro("__myriad2", Myriad2Value); } } diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 79f96cdaea..f05261aef3 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -4935,21 +4935,15 @@ MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, if (GCCInstallation.isValid()) { // The contents of LibDir are independent of the version of gcc. - // This contains libc, libg (a superset of libc), libm, libstdc++, libssp. + // This contains libc, libg, libm, libstdc++, libssp. + // The 'ma1x00' and 'nofpu' variants are irrelevant. SmallString<128> LibDir(GCCInstallation.getParentLibPath()); - if (Triple.getArch() == llvm::Triple::sparcel) - llvm::sys::path::append(LibDir, "../sparc-myriad-elf/lib/le"); - else - llvm::sys::path::append(LibDir, "../sparc-myriad-elf/lib"); + llvm::sys::path::append(LibDir, "../sparc-myriad-elf/lib"); addPathIfExists(D, LibDir, getFilePaths()); // This directory contains crt{i,n,begin,end}.o as well as libgcc. // These files are tied to a particular version of gcc. SmallString<128> CompilerSupportDir(GCCInstallation.getInstallPath()); - // There are actually 4 choices: {le,be} x {fpu,nofpu} - // but as this toolchain is for LEON sparc, it can assume FPU. - if (Triple.getArch() == llvm::Triple::sparcel) - llvm::sys::path::append(CompilerSupportDir, "le"); addPathIfExists(D, CompilerSupportDir, getFilePaths()); } } diff --git a/test/Preprocessor/predefined-arch-macros.c b/test/Preprocessor/predefined-arch-macros.c index 18a75df66e..1149678f2e 100644 --- a/test/Preprocessor/predefined-arch-macros.c +++ b/test/Preprocessor/predefined-arch-macros.c @@ -1921,6 +1921,8 @@ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_MYRIAD2-1 -check-prefix=CHECK_SPARCEL // RUN: %clang -E -dM %s -o - -target sparcel-myriad -mcpu=myriad2.2 2>&1 \ // RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_MYRIAD2-2 -check-prefix=CHECK_SPARCEL +// RUN: %clang -E -dM %s -o - -target sparcel-myriad -mcpu=ma2450 2>&1 \ +// RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_MYRIAD2-2 -check-prefix=CHECK_SPARCEL // CHECK_SPARCEL: #define __LITTLE_ENDIAN__ 1 // CHECK_MYRIAD2-1: #define __myriad2 1 // CHECK_MYRIAD2-1: #define __myriad2__ 1 @@ -1928,6 +1930,7 @@ // CHECK_MYRIAD2-2: #define __myriad2__ 2 // CHECK_SPARCEL: #define __sparc 1 // CHECK_SPARCEL: #define __sparc__ 1 +// CHECK_MYRIAD2-1: #define __sparc_v8__ 1 // CHECK_SPARCEL: #define __sparcv8 1 // // RUN: %clang -E -dM %s -o - 2>&1 \ -- 2.50.1