r344147 - [Hexagon] Use GetLinkerPath instead of hard-coded string.
Author: sidneym Date: Wed Oct 10 08:37:03 2018 New Revision: 344147 URL: http://llvm.org/viewvc/llvm-project?rev=344147&view=rev Log: [Hexagon] Use GetLinkerPath instead of hard-coded string. Add GetLinkerPath and set the default to "hexagon-link". Use GetLinkerPath instead of the hard-coded string. This change will allow -fuse-ld to function correctly. Differential revision: https://reviews.llvm.org/D53038 Modified: cfe/trunk/lib/Driver/ToolChains/Hexagon.cpp cfe/trunk/lib/Driver/ToolChains/Hexagon.h Modified: cfe/trunk/lib/Driver/ToolChains/Hexagon.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Hexagon.cpp?rev=344147&r1=344146&r2=344147&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Hexagon.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Hexagon.cpp Wed Oct 10 08:37:03 2018 @@ -369,9 +369,8 @@ void hexagon::Linker::ConstructJob(Compi constructHexagonLinkArgs(C, JA, HTC, Output, Inputs, Args, CmdArgs, LinkingOutput); - std::string Linker = HTC.GetProgramPath("hexagon-link"); - C.addCommand(llvm::make_unique(JA, *this, Args.MakeArgString(Linker), - CmdArgs, Inputs)); + const char *Exec = Args.MakeArgString(HTC.GetLinkerPath()); + C.addCommand(llvm::make_unique(JA, *this, Exec, CmdArgs, Inputs)); } // Hexagon tools end. Modified: cfe/trunk/lib/Driver/ToolChains/Hexagon.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Hexagon.h?rev=344147&r1=344146&r2=344147&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Hexagon.h (original) +++ cfe/trunk/lib/Driver/ToolChains/Hexagon.h Wed Oct 10 08:37:03 2018 @@ -81,6 +81,9 @@ public: void addLibStdCxxIncludePaths( const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; + + const char *getDefaultLinker() const override { return "hexagon-link"; } + CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; StringRef GetGCCLibAndIncVersion() const { return GCCLibAndIncVersion.Text; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r344482 - [Hexagon] Update tests account for non-hardcoded linker name.
Author: sidneym Date: Sun Oct 14 10:51:36 2018 New Revision: 344482 URL: http://llvm.org/viewvc/llvm-project?rev=344482&view=rev Log: [Hexagon] Update tests account for non-hardcoded linker name. Tests should not assume the linker's name, CLANG_DEFAULT_LINKER could change it. Differential Revision: https://reviews.llvm.org/D53219 Modified: cfe/trunk/test/Driver/hexagon-toolchain-elf.c cfe/trunk/test/Driver/linux-ld.c Modified: cfe/trunk/test/Driver/hexagon-toolchain-elf.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/hexagon-toolchain-elf.c?rev=344482&r1=344481&r2=344482&view=diff == --- cfe/trunk/test/Driver/hexagon-toolchain-elf.c (original) +++ cfe/trunk/test/Driver/hexagon-toolchain-elf.c Sun Oct 14 10:51:36 2018 @@ -63,7 +63,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK020 %s // CHECK020: "-cc1" {{.*}} "-target-cpu" "hexagonv4" -// CHECK020: hexagon-link{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v4/crt0 +// CHECK020: {{hexagon-link|ld}}{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v4/crt0 // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -71,7 +71,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK021 %s // CHECK021: "-cc1" {{.*}} "-target-cpu" "hexagonv5" -// CHECK021: hexagon-link{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v5/crt0 +// CHECK021: {{hexagon-link|ld}}{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v5/crt0 // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -79,7 +79,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK022 %s // CHECK022: "-cc1" {{.*}} "-target-cpu" "hexagonv55" -// CHECK022: hexagon-link{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v55/crt0 +// CHECK022: {{hexagon-link|ld}}{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v55/crt0 // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -87,7 +87,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK023 %s // CHECK023: "-cc1" {{.*}} "-target-cpu" "hexagonv60" -// CHECK023: hexagon-link{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v60/crt0 +// CHECK023: {{hexagon-link|ld}}{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v60/crt0 // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -95,7 +95,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK024 %s // CHECK024: "-cc1" {{.*}} "-target-cpu" "hexagonv62" -// CHECK024: hexagon-link{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v62/crt0 +// CHECK024: {{hexagon-link|ld}}{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v62/crt0 // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -103,7 +103,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK025 %s // CHECK025: "-cc1" {{.*}} "-target-cpu" "hexagonv65" -// CHECK025: hexagon-link{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v65/crt0 +// CHECK025: {{hexagon-link|ld}}{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v65/crt0 // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -111,7 +111,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK026 %s // CHECK026-NOT: "-ffp-contract=fast" -// CHECK026: hexagon-link +// CHECK026: {{hexagon-link|ld}} // RUN: %clang -### -target hexagon-unknown-elf \ // RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ @@ -119,7 +119,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK027 %s // CHECK027-NOT: "-ffp-contract=fast" -// CHECK027: hexagon-link +// CHECK027: {{hexagon-link|ld}} // - // Test Linker related args @@ -134,7 +134,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK030 %s // CHECK030: "-cc1" -// CHECK030-NEXT: hexagon-link +// CHECK030: {{hexagon-link|ld}} // CHECK030-NOT: "-static" // CHECK030-NOT: "-shared" // CHECK030: "{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v60/crt0_standalone.o" @@ -155,7 +155,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK031 %s // CHECK031: "-cc1" -// CHECK031-NEXT: hexagon-link +// CHECK031: {{hexagon-link|ld}} // CHECK031-NOT: "-static" // CHECK031-NOT: "-shared" // CHECK031: "{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/lib/v60/crt0_standalone.o" @@ -178,7 +178,7 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK032 %s // CHECK032: "-cc1" -// CHECK032-NEXT: hexagon-link +// CHECK032: {{he
[clang] 2c5d6df - [Hexagon] Make lld be the default linker for linux/musl
Author: Sid Manning Date: 2020-04-06T12:59:07-05:00 New Revision: 2c5d6dfda98e409f6a6b4b577ebdf59a35ff2ebe URL: https://github.com/llvm/llvm-project/commit/2c5d6dfda98e409f6a6b4b577ebdf59a35ff2ebe DIFF: https://github.com/llvm/llvm-project/commit/2c5d6dfda98e409f6a6b4b577ebdf59a35ff2ebe.diff LOG: [Hexagon] Make lld be the default linker for linux/musl When the target is hexagon-unknown-linux-musl select lld as the default linker. Differential Revision: https://reviews.llvm.org/D77498 Added: Modified: clang/lib/Driver/ToolChains/Hexagon.h clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.h b/clang/lib/Driver/ToolChains/Hexagon.h index d7b4a13d3a4f..0158b9c42af9 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.h +++ b/clang/lib/Driver/ToolChains/Hexagon.h @@ -81,7 +81,9 @@ class LLVM_LIBRARY_VISIBILITY HexagonToolChain : public Linux { const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; - const char *getDefaultLinker() const override { return "hexagon-link"; } + const char *getDefaultLinker() const override { +return getTriple().isMusl() ? "ld.lld" : "hexagon-link"; + } CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index fba1a891a361..ee5fb220d220 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -674,3 +674,15 @@ // RUN: | FileCheck -check-prefix=CHECK090 %s // CHECK090-NOT: -fno-use-init-array // - +// Check default linker for musl +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK091 %s +// CHECK091: ld.lld +// - +// Check default linker for elf +// - +// RUN: %clang -### -target hexagon-unknown-elf %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK092 %s +// CHECK092: hexagon-link +// - ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] aed2fdb - [Hexagon] Update paths for linux/musl
Author: Sid Manning Date: 2020-04-07T13:45:52-05:00 New Revision: aed2fdb1671c31ceff6997af56ae67831dad2595 URL: https://github.com/llvm/llvm-project/commit/aed2fdb1671c31ceff6997af56ae67831dad2595 DIFF: https://github.com/llvm/llvm-project/commit/aed2fdb1671c31ceff6997af56ae67831dad2595.diff LOG: [Hexagon] Update paths for linux/musl Update the sysroot expectation to match other targets and breakout linux/musl toolchain tests into a new file. Differential Revision: https://reviews.llvm.org/D77440 Added: clang/test/Driver/Inputs/hexagon_tree/Tools/target/hexagon/include/c++/v1/readme clang/test/Driver/hexagon-toolchain-linux.c Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/lib/Driver/ToolChains/Hexagon.h clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 4a5e8254dfa0..cf0a0335fbdf 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -273,12 +273,13 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, if (!Args.hasArg(options::OPT_shared, options::OPT_nostartfiles, options::OPT_nostdlib)) - CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/crt1.o")); + CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/usr/lib/crt1.o")); else if (Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_nostartfiles, options::OPT_nostdlib)) - CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/Scrt1.o")); + CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/usr/lib/crti.o")); -CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + D.SysRoot + "/lib")); +CmdArgs.push_back( +Args.MakeArgString(StringRef("-L") + D.SysRoot + "/usr/lib")); Args.AddAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_e, options::OPT_s, options::OPT_t, options::OPT_u_Group}); @@ -288,7 +289,10 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, CmdArgs.push_back("-lclang_rt.builtins-hexagon"); CmdArgs.push_back("-lc"); } - +if (D.CCCIsCXX()) { + if (HTC.ShouldLinkCXXStdlib(Args)) +HTC.AddCXXStdlibLibArgs(Args, CmdArgs); +} return; } @@ -508,6 +512,22 @@ HexagonToolChain::HexagonToolChain(const Driver &D, const llvm::Triple &Triple, HexagonToolChain::~HexagonToolChain() {} +void HexagonToolChain::AddCXXStdlibLibArgs(const ArgList &Args, + ArgStringList &CmdArgs) const { + CXXStdlibType Type = GetCXXStdlibType(Args); + switch (Type) { + case ToolChain::CST_Libcxx: +CmdArgs.push_back("-lc++"); +CmdArgs.push_back("-lc++abi"); +CmdArgs.push_back("-lunwind"); +break; + + case ToolChain::CST_Libstdcxx: +CmdArgs.push_back("-lstdc++"); +break; + } +} + Tool *HexagonToolChain::buildAssembler() const { return new tools::hexagon::Assembler(*this); } @@ -571,7 +591,10 @@ void HexagonToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, const Driver &D = getDriver(); if (!D.SysRoot.empty()) { SmallString<128> P(D.SysRoot); -llvm::sys::path::append(P, "include"); +if (getTriple().isMusl()) + llvm::sys::path::append(P, "usr/include"); +else + llvm::sys::path::append(P, "include"); addExternCSystemInclude(DriverArgs, CC1Args, P.str()); return; } @@ -581,7 +604,22 @@ void HexagonToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, addExternCSystemInclude(DriverArgs, CC1Args, TargetDir + "/hexagon/include"); } - +void HexagonToolChain::addLibCxxIncludePaths( +const llvm::opt::ArgList &DriverArgs, +llvm::opt::ArgStringList &CC1Args) const { + const Driver &D = getDriver(); + if (!D.SysRoot.empty() && getTriple().isMusl()) +addLibStdCXXIncludePaths(D.SysRoot + "/usr/include/c++/v1", "", "", "", "", + "", DriverArgs, CC1Args); + else if (getTriple().isMusl()) +addLibStdCXXIncludePaths("/usr/include/c++/v1", "", "", "", "", "", + DriverArgs, CC1Args); + else { +std::string TargetDir = getHexagonTargetDir(D.InstalledDir, D.PrefixDirs); +addLibStdCXXIncludePaths(TargetDir, "/hexagon/include/c++/v1", "", "", "", + "", DriverArgs, CC1Args); + } +} void HexagonToolChain::addLibStdCxxIncludePaths( const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const { @@ -594,14 +632,22 @@ void HexagonToolChain::addLibStdCxxIncludePaths( ToolChain::CXXStdlibType HexagonToolChain::GetCXXStdlibType(const ArgList &Args) const { Arg *A = Args.getLastArg(options::OPT_stdlib_EQ); - if (!A) -return ToolChain::CST_Libstdcxx; - + if (!A) { +if (getTriple().isMusl()) + return ToolChain
[clang] 9bda29a - [Hexagon] Default linker tests can fail if CLANG_DEFAULT_LINKER is used.
Author: Sid Manning Date: 2020-04-09T08:36:50-05:00 New Revision: 9bda29ab0fdfee4e4b5cbe17f87a16f673e91e1f URL: https://github.com/llvm/llvm-project/commit/9bda29ab0fdfee4e4b5cbe17f87a16f673e91e1f DIFF: https://github.com/llvm/llvm-project/commit/9bda29ab0fdfee4e4b5cbe17f87a16f673e91e1f.diff LOG: [Hexagon] Default linker tests can fail if CLANG_DEFAULT_LINKER is used. These values are not always known since there is a configuration option to set the default linker, CLANG_DEFAULT_LINKER. Differential Revision: https://reviews.llvm.org/D77684 Added: Modified: clang/test/Driver/hexagon-toolchain-elf.c clang/test/Driver/hexagon-toolchain-linux.c Removed: diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 4590522d2b40..0a6c86424955 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -597,10 +597,3 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK084 %s // CHECK084: "-fno-use-init-array" -// - -// Check default linker for elf -// - -// RUN: %clang -### -target hexagon-unknown-elf %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK092 %s -// CHECK092: hexagon-link -// - diff --git a/clang/test/Driver/hexagon-toolchain-linux.c b/clang/test/Driver/hexagon-toolchain-linux.c index 6c47044a2c0c..354a924f1209 100644 --- a/clang/test/Driver/hexagon-toolchain-linux.c +++ b/clang/test/Driver/hexagon-toolchain-linux.c @@ -95,7 +95,3 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK007 %s // CHECK007: "-internal-isystem" "{{.*}}hexagon{{/|}}include{{/|}}c++{{/|}}v1" -// - -// RUN: %clang -### -target hexagon-unknown-linux-musl %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK008 %s -// CHECK008: ld.lld ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] b0da094 - [Hexagon] Add support for Linux/Musl ABI (part 2)
Author: Sid Manning Date: 2020-03-26T17:19:46-05:00 New Revision: b0da094983948c8a82f1a26eaa0702920c2b2b36 URL: https://github.com/llvm/llvm-project/commit/b0da094983948c8a82f1a26eaa0702920c2b2b36 DIFF: https://github.com/llvm/llvm-project/commit/b0da094983948c8a82f1a26eaa0702920c2b2b36.diff LOG: [Hexagon] Add support for Linux/Musl ABI (part 2) A continuation of https://reviews.llvm.org/D72701. This adds support needed in clang. Differential Revision: https://reviews.llvm.org/D75638 Added: clang/test/CodeGen/hexagon-linux-vararg.c Modified: clang/include/clang/Basic/TargetInfo.h clang/lib/AST/ASTContext.cpp clang/lib/Basic/Targets/Hexagon.h clang/lib/CodeGen/TargetInfo.cpp Removed: diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h index 615f09985132..81760ec82838 100644 --- a/clang/include/clang/Basic/TargetInfo.h +++ b/clang/include/clang/Basic/TargetInfo.h @@ -273,7 +273,14 @@ class TargetInfo : public virtual TransferrableTargetInfo, // void *__overflow_arg_area; // void *__reg_save_area; // } va_list[1]; -SystemZBuiltinVaList +SystemZBuiltinVaList, + +// typedef struct __va_list_tag { +//void *__current_saved_reg_area_pointer; +//void *__saved_reg_area_end_pointer; +//void *__overflow_area_pointer; +//} va_list; +HexagonBuiltinVaList }; protected: diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index dca6523d5176..19f67fc2bb3f 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -7795,6 +7795,57 @@ CreateSystemZBuiltinVaListDecl(const ASTContext *Context) { return Context->buildImplicitTypedef(VaListTagArrayType, "__builtin_va_list"); } +static TypedefDecl *CreateHexagonBuiltinVaListDecl(const ASTContext *Context) { + // typedef struct __va_list_tag { + RecordDecl *VaListTagDecl; + VaListTagDecl = Context->buildImplicitRecord("__va_list_tag"); + VaListTagDecl->startDefinition(); + + const size_t NumFields = 3; + QualType FieldTypes[NumFields]; + const char *FieldNames[NumFields]; + + // void *CurrentSavedRegisterArea; + FieldTypes[0] = Context->getPointerType(Context->VoidTy); + FieldNames[0] = "__current_saved_reg_area_pointer"; + + // void *SavedRegAreaEnd; + FieldTypes[1] = Context->getPointerType(Context->VoidTy); + FieldNames[1] = "__saved_reg_area_end_pointer"; + + // void *OverflowArea; + FieldTypes[2] = Context->getPointerType(Context->VoidTy); + FieldNames[2] = "__overflow_area_pointer"; + + // Create fields + for (unsigned i = 0; i < NumFields; ++i) { +FieldDecl *Field = FieldDecl::Create( +const_cast(*Context), VaListTagDecl, SourceLocation(), +SourceLocation(), &Context->Idents.get(FieldNames[i]), FieldTypes[i], +/*TInfo=*/0, +/*BitWidth=*/0, +/*Mutable=*/false, ICIS_NoInit); +Field->setAccess(AS_public); +VaListTagDecl->addDecl(Field); + } + VaListTagDecl->completeDefinition(); + Context->VaListTagDecl = VaListTagDecl; + QualType VaListTagType = Context->getRecordType(VaListTagDecl); + + // } __va_list_tag; + TypedefDecl *VaListTagTypedefDecl = + Context->buildImplicitTypedef(VaListTagType, "__va_list_tag"); + + QualType VaListTagTypedefType = Context->getTypedefType(VaListTagTypedefDecl); + + // typedef __va_list_tag __builtin_va_list[1]; + llvm::APInt Size(Context->getTypeSize(Context->getSizeType()), 1); + QualType VaListTagArrayType = Context->getConstantArrayType( + VaListTagTypedefType, Size, nullptr, ArrayType::Normal, 0); + + return Context->buildImplicitTypedef(VaListTagArrayType, "__builtin_va_list"); +} + static TypedefDecl *CreateVaListDecl(const ASTContext *Context, TargetInfo::BuiltinVaListKind Kind) { switch (Kind) { @@ -7814,6 +7865,8 @@ static TypedefDecl *CreateVaListDecl(const ASTContext *Context, return CreateAAPCSABIBuiltinVaListDecl(Context); case TargetInfo::SystemZBuiltinVaList: return CreateSystemZBuiltinVaListDecl(Context); + case TargetInfo::HexagonBuiltinVaList: +return CreateHexagonBuiltinVaListDecl(Context); } llvm_unreachable("Unhandled __builtin_va_list type kind"); diff --git a/clang/lib/Basic/Targets/Hexagon.h b/clang/lib/Basic/Targets/Hexagon.h index f58f594b104f..89e3fa3fa6bf 100644 --- a/clang/lib/Basic/Targets/Hexagon.h +++ b/clang/lib/Basic/Targets/Hexagon.h @@ -103,6 +103,8 @@ class LLVM_LIBRARY_VISIBILITY HexagonTargetInfo : public TargetInfo { DiagnosticsEngine &Diags) override; BuiltinVaListKind getBuiltinVaListKind() const override { +if (getTriple().isMusl()) + return TargetInfo::HexagonBuiltinVaList; return TargetInfo::CharPtrBuiltinVaList; } diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp
[clang] 81194bf - [Hexagon] MaxAtomicPromoteWidth and MaxAtomicInlineWidth are not getting set.
Author: Sid Manning Date: 2020-03-30T12:33:51-05:00 New Revision: 81194bfeea7b40b6e8c543bb4ae49b59f590475b URL: https://github.com/llvm/llvm-project/commit/81194bfeea7b40b6e8c543bb4ae49b59f590475b DIFF: https://github.com/llvm/llvm-project/commit/81194bfeea7b40b6e8c543bb4ae49b59f590475b.diff LOG: [Hexagon] MaxAtomicPromoteWidth and MaxAtomicInlineWidth are not getting set. Noticed when building llvm's c++ library. Differential Revision: https://reviews.llvm.org/D76546 Added: Modified: clang/lib/Basic/Targets/Hexagon.h clang/test/Preprocessor/hexagon-predefines.c Removed: diff --git a/clang/lib/Basic/Targets/Hexagon.h b/clang/lib/Basic/Targets/Hexagon.h index 89e3fa3fa6bf..7e173df81683 100644 --- a/clang/lib/Basic/Targets/Hexagon.h +++ b/clang/lib/Basic/Targets/Hexagon.h @@ -57,6 +57,7 @@ class LLVM_LIBRARY_VISIBILITY HexagonTargetInfo : public TargetInfo { LargeArrayAlign = 64; UseBitFieldTypeAlignment = true; ZeroLengthBitfieldBoundary = 32; +MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64; // These are the default values anyway, but explicitly make sure // that the size of the boolean type is 8 bits. Bool vectors are used diff --git a/clang/test/Preprocessor/hexagon-predefines.c b/clang/test/Preprocessor/hexagon-predefines.c index 54013ceffa64..7979d567134b 100644 --- a/clang/test/Preprocessor/hexagon-predefines.c +++ b/clang/test/Preprocessor/hexagon-predefines.c @@ -113,3 +113,18 @@ // CHECK-LINUX: #define __unix__ 1 // CHECK-LINUX: #define linux 1 // CHECK-LINUX: #define unix 1 + +// RUN: %clang_cc1 -E -dM -triple hexagon-unknown-linux-musl \ +// RUN: -target-cpu hexagonv67 -target-feature +hvxv67 \ +// RUN: -target-feature +hvx-length128b %s | FileCheck \ +// RUN: %s -check-prefix CHECK-ATOMIC +// CHECK-ATOMIC: #define __CLANG_ATOMIC_BOOL_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_CHAR16_T_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_CHAR32_T_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_CHAR_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_INT_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_LLONG_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_LONG_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_POINTER_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_SHORT_LOCK_FREE 2 +// CHECK-ATOMIC: #define __CLANG_ATOMIC_WCHAR_T_LOCK_FREE 2 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] d37cbda - [Hexagon] Define __ELF__ by default.
Author: Sid Manning Date: 2020-02-21T16:10:31-06:00 New Revision: d37cbda5f9a47a4206439632ef4fa1534e66f856 URL: https://github.com/llvm/llvm-project/commit/d37cbda5f9a47a4206439632ef4fa1534e66f856 DIFF: https://github.com/llvm/llvm-project/commit/d37cbda5f9a47a4206439632ef4fa1534e66f856.diff LOG: [Hexagon] Define __ELF__ by default. Differential Revision: https://reviews.llvm.org/D74972 Added: Modified: clang/lib/Basic/Targets/Hexagon.cpp clang/test/Preprocessor/hexagon-predefines.c compiler-rt/lib/builtins/CMakeLists.txt Removed: diff --git a/clang/lib/Basic/Targets/Hexagon.cpp b/clang/lib/Basic/Targets/Hexagon.cpp index fcf9e9cff31d..205601c359d0 100644 --- a/clang/lib/Basic/Targets/Hexagon.cpp +++ b/clang/lib/Basic/Targets/Hexagon.cpp @@ -24,6 +24,8 @@ void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__qdsp6__", "1"); Builder.defineMacro("__hexagon__", "1"); + Builder.defineMacro("__ELF__"); + // The macro __HVXDBL__ is deprecated. bool DefineHvxDbl = false; diff --git a/clang/test/Preprocessor/hexagon-predefines.c b/clang/test/Preprocessor/hexagon-predefines.c index fd33a6667170..5be8b96e290d 100644 --- a/clang/test/Preprocessor/hexagon-predefines.c +++ b/clang/test/Preprocessor/hexagon-predefines.c @@ -96,3 +96,8 @@ // CHECK-V67HVX-128B: #define __HVX_LENGTH__ 128 // CHECK-V67HVX-128B: #define __HVX__ 1 // CHECK-V67HVX-128B: #define __hexagon__ 1 + +// RUN: %clang_cc1 -E -dM -triple hexagon-unknown-elf -target-cpu hexagonv67 \ +// RUN: -target-feature +hvxv67 -target-feature +hvx-length128b %s | FileCheck \ +// RUN: %s -check-prefix CHECK-ELF +// CHECK-ELF: #define __ELF__ 1 diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt index 125a3a1b1476..21cac1c23539 100644 --- a/compiler-rt/lib/builtins/CMakeLists.txt +++ b/compiler-rt/lib/builtins/CMakeLists.txt @@ -492,7 +492,6 @@ set(armv7m_SOURCES ${arm_SOURCES}) set(armv7em_SOURCES ${arm_SOURCES}) # hexagon arch -set(hexagon_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES}) set(hexagon_SOURCES hexagon/common_entry_exit_abi1.S hexagon/common_entry_exit_abi2.S @@ -524,6 +523,8 @@ set(hexagon_SOURCES hexagon/udivsi3.S hexagon/umoddi3.S hexagon/umodsi3.S + ${GENERIC_SOURCES} + ${GENERIC_TF_SOURCES} ) ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 6377676 - Add default paths to support musl target
Author: Sid Manning Date: 2020-03-02T13:39:42-06:00 New Revision: 637767665141ae48c7a0558903bb29e03bf5ad6f URL: https://github.com/llvm/llvm-project/commit/637767665141ae48c7a0558903bb29e03bf5ad6f DIFF: https://github.com/llvm/llvm-project/commit/637767665141ae48c7a0558903bb29e03bf5ad6f.diff LOG: Add default paths to support musl target Pickup the default crt and libs when the target is musl. Differential Revision: https://reviews.llvm.org/D75139 Added: Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 88523cd4bb1c..c069eefde9af 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -264,18 +264,41 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, UseG0 = G.getValue() == 0; } - // - // - // CmdArgs.push_back("-o"); CmdArgs.push_back(Output.getFilename()); + if (HTC.getTriple().isMusl()) { +if (!Args.hasArg(options::OPT_shared, options::OPT_static)) + CmdArgs.push_back("-dynamic-linker=/lib/ld-musl-hexagon.so.1"); + +if (!Args.hasArg(options::OPT_shared, + options::OPT_nostartfiles, + options::OPT_nostdlib)) + CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/crt1.o")); +else if (Args.hasArg(options::OPT_shared) && + !Args.hasArg(options::OPT_nostartfiles, options::OPT_nostdlib)) + CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/Scrt1.o")); + +CmdArgs.push_back( +Args.MakeArgString(StringRef("-L") + D.SysRoot + "/lib")); +Args.AddAllArgs(CmdArgs, +{options::OPT_T_Group, options::OPT_e, options::OPT_s, + options::OPT_t, options::OPT_u_Group}); +AddLinkerInputs(HTC, Inputs, Args, CmdArgs, JA); + +if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { + CmdArgs.push_back("-lclang_rt.builtins-hexagon"); + CmdArgs.push_back("-lc"); +} + +return; + } + // // moslib // std::vector OsLibs; bool HasStandalone = false; - for (const Arg *A : Args.filtered(options::OPT_moslib_EQ)) { A->claim(); OsLibs.emplace_back(A->getValue()); diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 0a6c86424955..24daac05d612 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -597,3 +597,69 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK084 %s // CHECK084: "-fno-use-init-array" +// - +// Passing --musl +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: --sysroot=/hexagon \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK085 %s +// CHECK085-NOT: /hexagon{{/|}}lib{{/|}}Scrt1.o +// CHECK085: "/hexagon{{/|}}lib{{/|}}crt1.o" +// CHECK085: "-lclang_rt.builtins-hexagon" "-lc" +// CHECK085: "-dynamic-linker={{/|}}lib{{/|}}ld-musl-hexagon.so.1" +// - +// Passing --musl --shared +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: --sysroot=/hexagon -shared \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK086 %s +// CHECK086:"/hexagon{{/|}}lib{{/|}}Scrt1.o" +// CHECK086:"-lclang_rt.builtins-hexagon" "-lc" +// CHECK086-NOT:/hexagon{{/|}}lib{{/|}}crt1.o +// CHECK086-NOT:-dynamic-linker={{/|}}lib{{/|}}ld-musl-hexagon.so.1 +// - +// Passing --musl -nostdlib +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: --sysroot=/hexagon -nostdlib \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK087 %s +// CHECK087-NOT: /hexagon{{/|\\
[clang] 0858eeb - Revert "Add default paths to support musl target"
Author: Sid Manning Date: 2020-03-02T14:09:52-06:00 New Revision: 0858eebd2a48b931f2ef1dfa23042980bd6a773d URL: https://github.com/llvm/llvm-project/commit/0858eebd2a48b931f2ef1dfa23042980bd6a773d DIFF: https://github.com/llvm/llvm-project/commit/0858eebd2a48b931f2ef1dfa23042980bd6a773d.diff LOG: Revert "Add default paths to support musl target" This reverts commit 637767665141ae48c7a0558903bb29e03bf5ad6f. Need to fix the testcase. Added: Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index c069eefde9af..88523cd4bb1c 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -264,41 +264,18 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, UseG0 = G.getValue() == 0; } + // + // + // CmdArgs.push_back("-o"); CmdArgs.push_back(Output.getFilename()); - if (HTC.getTriple().isMusl()) { -if (!Args.hasArg(options::OPT_shared, options::OPT_static)) - CmdArgs.push_back("-dynamic-linker=/lib/ld-musl-hexagon.so.1"); - -if (!Args.hasArg(options::OPT_shared, - options::OPT_nostartfiles, - options::OPT_nostdlib)) - CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/crt1.o")); -else if (Args.hasArg(options::OPT_shared) && - !Args.hasArg(options::OPT_nostartfiles, options::OPT_nostdlib)) - CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/Scrt1.o")); - -CmdArgs.push_back( -Args.MakeArgString(StringRef("-L") + D.SysRoot + "/lib")); -Args.AddAllArgs(CmdArgs, -{options::OPT_T_Group, options::OPT_e, options::OPT_s, - options::OPT_t, options::OPT_u_Group}); -AddLinkerInputs(HTC, Inputs, Args, CmdArgs, JA); - -if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { - CmdArgs.push_back("-lclang_rt.builtins-hexagon"); - CmdArgs.push_back("-lc"); -} - -return; - } - // // moslib // std::vector OsLibs; bool HasStandalone = false; + for (const Arg *A : Args.filtered(options::OPT_moslib_EQ)) { A->claim(); OsLibs.emplace_back(A->getValue()); diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 24daac05d612..0a6c86424955 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -597,69 +597,3 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK084 %s // CHECK084: "-fno-use-init-array" -// - -// Passing --musl -// - -// RUN: %clang -### -target hexagon-unknown-linux-musl \ -// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ -// RUN: -mcpu=hexagonv60 \ -// RUN: --sysroot=/hexagon \ -// RUN: %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK085 %s -// CHECK085-NOT: /hexagon{{/|}}lib{{/|}}Scrt1.o -// CHECK085: "/hexagon{{/|}}lib{{/|}}crt1.o" -// CHECK085: "-lclang_rt.builtins-hexagon" "-lc" -// CHECK085: "-dynamic-linker={{/|}}lib{{/|}}ld-musl-hexagon.so.1" -// - -// Passing --musl --shared -// - -// RUN: %clang -### -target hexagon-unknown-linux-musl \ -// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ -// RUN: -mcpu=hexagonv60 \ -// RUN: --sysroot=/hexagon -shared \ -// RUN: %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK086 %s -// CHECK086:"/hexagon{{/|}}lib{{/|}}Scrt1.o" -// CHECK086:"-lclang_rt.builtins-hexagon" "-lc" -// CHECK086-NOT:/hexagon{{/|}}lib{{/|}}crt1.o -// CHECK086-NOT:-dynamic-linker={{/|}}lib{{/|}}ld-musl-hexagon.so.1 -// - -// Passing --musl -nostdlib -// - -// RUN: %clang -### -target hexagon-unknown-linux-musl \ -// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ -// RUN: -mcpu=hexagonv60 \ -// RUN: --sysroot=/hexagon -nostdlib \ -// RUN: %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK087 %s -// CHECK087-NOT: /hexagon{{/|}}lib{{/|}
[clang] d481e59 - [hexagon] Add default paths to support musl target
Author: Sid Manning Date: 2020-03-03T08:43:10-06:00 New Revision: d481e59863ac0eaca813a972f0dc79b763012d30 URL: https://github.com/llvm/llvm-project/commit/d481e59863ac0eaca813a972f0dc79b763012d30 DIFF: https://github.com/llvm/llvm-project/commit/d481e59863ac0eaca813a972f0dc79b763012d30.diff LOG: [hexagon] Add default paths to support musl target Pickup the default crt and libs when the target is musl. Resubmitting after updating the testcase. Differential Revision: https://reviews.llvm.org/D75139 Added: Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 88523cd4bb1c..1e2e7c84b006 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -264,18 +264,39 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, UseG0 = G.getValue() == 0; } - // - // - // CmdArgs.push_back("-o"); CmdArgs.push_back(Output.getFilename()); + if (HTC.getTriple().isMusl()) { +if (!Args.hasArg(options::OPT_shared, options::OPT_static)) + CmdArgs.push_back("-dynamic-linker=/lib/ld-musl-hexagon.so.1"); + +if (!Args.hasArg(options::OPT_shared, options::OPT_nostartfiles, + options::OPT_nostdlib)) + CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/crt1.o")); +else if (Args.hasArg(options::OPT_shared) && + !Args.hasArg(options::OPT_nostartfiles, options::OPT_nostdlib)) + CmdArgs.push_back(Args.MakeArgString(D.SysRoot + "/lib/Scrt1.o")); + +CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + D.SysRoot + "/lib")); +Args.AddAllArgs(CmdArgs, +{options::OPT_T_Group, options::OPT_e, options::OPT_s, + options::OPT_t, options::OPT_u_Group}); +AddLinkerInputs(HTC, Inputs, Args, CmdArgs, JA); + +if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { + CmdArgs.push_back("-lclang_rt.builtins-hexagon"); + CmdArgs.push_back("-lc"); +} + +return; + } + // // moslib // std::vector OsLibs; bool HasStandalone = false; - for (const Arg *A : Args.filtered(options::OPT_moslib_EQ)) { A->claim(); OsLibs.emplace_back(A->getValue()); diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 0a6c86424955..93c9da2250f5 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -597,3 +597,70 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK084 %s // CHECK084: "-fno-use-init-array" +// - +// Passing --musl +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: -fuse-ld=lld \ +// RUN: --sysroot=/hexagon \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK085 %s +// CHECK085-NOT: /hexagon{{/|}}lib{{/|}}Scrt1.o +// CHECK085: "-dynamic-linker={{/|}}lib{{/|}}ld-musl-hexagon.so.1" +// CHECK085: "/hexagon{{/|}}lib{{/|}}crt1.o" +// CHECK085: "-lclang_rt.builtins-hexagon" "-lc" +// - +// Passing --musl --shared +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: --sysroot=/hexagon -shared \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK086 %s +// CHECK086-NOT:-dynamic-linker={{/|}}lib{{/|}}ld-musl-hexagon.so.1 +// CHECK086:"/hexagon{{/|}}lib{{/|}}Scrt1.o" +// CHECK086:"-lclang_rt.builtins-hexagon" "-lc" +// CHECK086-NOT:/hexagon{{/|}}lib{{/|}}crt1.o +// - +// Passing --musl -nostdlib +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: --sysroot=/hexagon -nostdlib \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix
[clang] d567b0b - Avoid unsupported LLD options
Author: Sid Manning Date: 2019-12-20T14:18:10-06:00 New Revision: d567b0ba841d4b6f4b0d906da350a3bb2b2f769f URL: https://github.com/llvm/llvm-project/commit/d567b0ba841d4b6f4b0d906da350a3bb2b2f769f DIFF: https://github.com/llvm/llvm-project/commit/d567b0ba841d4b6f4b0d906da350a3bb2b2f769f.diff LOG: Avoid unsupported LLD options Differential Revision: https://reviews.llvm.org/D70919 Added: clang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 4a735a2a1d59..e4d9ea8a70f9 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -209,7 +209,11 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, bool IncStartFiles = !Args.hasArg(options::OPT_nostartfiles); bool IncDefLibs = !Args.hasArg(options::OPT_nodefaultlibs); bool UseG0 = false; + const char *Exec = Args.MakeArgString(HTC.GetLinkerPath()); + bool UseLLD = (llvm::sys::path::filename(Exec).equals_lower("ld.lld") || + llvm::sys::path::stem(Exec).equals_lower("ld.lld")); bool UseShared = IsShared && !IsStatic; + StringRef CpuVer = toolchains::HexagonToolChain::GetTargetCPUVersion(Args); // // Silence warnings for various options @@ -232,9 +236,10 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA, for (const auto &Opt : HTC.ExtraOpts) CmdArgs.push_back(Opt.c_str()); - CmdArgs.push_back("-march=hexagon"); - StringRef CpuVer = toolchains::HexagonToolChain::GetTargetCPUVersion(Args); - CmdArgs.push_back(Args.MakeArgString("-mcpu=hexagon" + CpuVer)); + if (!UseLLD) { +CmdArgs.push_back("-march=hexagon"); +CmdArgs.push_back(Args.MakeArgString("-mcpu=hexagon" + CpuVer)); + } if (IsShared) { CmdArgs.push_back("-shared"); diff --git a/clang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld b/clang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld new file mode 100755 index ..e69de29bb2d1 diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 661e758d931b..0339619e1c1f 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -536,3 +536,25 @@ // RUN: | FileCheck -check-prefix=CHECK080 %s // CHECK080: "-cc1" // CHECK080: "-Wreturn-type" + +// - +// Default, not passing -fuse-ld +// - +// RUN: %clang -### -target hexagon-unknown-elf \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK081 %s +// CHECK081: "-march=hexagon" +// CHECK081: "-mcpu=hexagonv60" +// - +// Passing -fuse-ld=lld +// - +// RUN: %clang -### -target hexagon-unknown-elf \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: -fuse-ld=lld \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK082 %s +// CHECK082-NOT: -march= +// CHECK082-NOT: -mcpu= ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 6174fdd - [Hexagon] Enable init_arrays when target is linux-musl
Author: Sid Manning Date: 2020-03-12T15:00:15-05:00 New Revision: 6174fddbe3d40972d97f63d9bf6bb1c4236de0e3 URL: https://github.com/llvm/llvm-project/commit/6174fddbe3d40972d97f63d9bf6bb1c4236de0e3 DIFF: https://github.com/llvm/llvm-project/commit/6174fddbe3d40972d97f63d9bf6bb1c4236de0e3.diff LOG: [Hexagon] Enable init_arrays when target is linux-musl Differential Revision: https://reviews.llvm.org/D76079 Added: Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 1e2e7c84b006..4a5e8254dfa0 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -544,7 +544,8 @@ unsigned HexagonToolChain::getOptimizationLevel( void HexagonToolChain::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const { - bool UseInitArrayDefault = false; + + bool UseInitArrayDefault = getTriple().isMusl(); if (!DriverArgs.hasFlag(options::OPT_fuse_init_array, options::OPT_fno_use_init_array, diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 93c9da2250f5..fba1a891a361 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -664,3 +664,13 @@ // CHECK089: "/hexagon{{/|}}lib{{/|}}crt1.o" // CHECK089-NOT: -lclang_rt.builtins-hexagon // CHECK089-NOT: -lc +// - +// Not Passing -fno-use-init-array when musl is selected +// - +// RUN: %clang -### -target hexagon-unknown-linux-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK090 %s +// CHECK090-NOT: -fno-use-init-array +// - ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 430c9a8 - [Hexagon] Enable linux #defines
Author: Sid Manning Date: 2020-03-19T14:33:49-05:00 New Revision: 430c9a80c17b00ec65b8254810e3c9e122d13f98 URL: https://github.com/llvm/llvm-project/commit/430c9a80c17b00ec65b8254810e3c9e122d13f98 DIFF: https://github.com/llvm/llvm-project/commit/430c9a80c17b00ec65b8254810e3c9e122d13f98.diff LOG: [Hexagon] Enable linux #defines Enable standard linux defines when the triple is Linux and the environment is musl. Differential Revision: https://reviews.llvm.org/D76310 Added: Modified: clang/lib/Basic/Targets.cpp clang/test/Preprocessor/hexagon-predefines.c Removed: diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index c063f8ca4472..9181c715085e 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -117,6 +117,9 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new XCoreTargetInfo(Triple, Opts); case llvm::Triple::hexagon: +if (os == llvm::Triple::Linux && +Triple.getEnvironment() == llvm::Triple::Musl) + return new LinuxTargetInfo(Triple, Opts); return new HexagonTargetInfo(Triple, Opts); case llvm::Triple::lanai: diff --git a/clang/test/Preprocessor/hexagon-predefines.c b/clang/test/Preprocessor/hexagon-predefines.c index 5be8b96e290d..54013ceffa64 100644 --- a/clang/test/Preprocessor/hexagon-predefines.c +++ b/clang/test/Preprocessor/hexagon-predefines.c @@ -101,3 +101,15 @@ // RUN: -target-feature +hvxv67 -target-feature +hvx-length128b %s | FileCheck \ // RUN: %s -check-prefix CHECK-ELF // CHECK-ELF: #define __ELF__ 1 + +// RUN: %clang_cc1 -E -dM -triple hexagon-unknown-linux-musl \ +// RUN: -target-cpu hexagonv67 -target-feature +hvxv67 \ +// RUN: -target-feature +hvx-length128b %s | FileCheck \ +// RUN: %s -check-prefix CHECK-LINUX +// CHECK-LINUX: #define __gnu_linux__ 1 +// CHECK-LINUX: #define __linux 1 +// CHECK-LINUX: #define __linux__ 1 +// CHECK-LINUX: #define __unix 1 +// CHECK-LINUX: #define __unix__ 1 +// CHECK-LINUX: #define linux 1 +// CHECK-LINUX: #define unix 1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] faa889b - [Hexagon] clang driver should consider --sysroot option
Author: Sid Manning Date: 2020-02-18T14:25:55-06:00 New Revision: faa889b2358704c57febf2ad75ad88eec5debf31 URL: https://github.com/llvm/llvm-project/commit/faa889b2358704c57febf2ad75ad88eec5debf31 DIFF: https://github.com/llvm/llvm-project/commit/faa889b2358704c57febf2ad75ad88eec5debf31.diff LOG: [Hexagon] clang driver should consider --sysroot option Hexagon's clang driver should consider --sysroot option when setting up include paths. Differential Revision: https://reviews.llvm.org/D74776 Added: Modified: clang/lib/Driver/ToolChains/Hexagon.cpp clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index 2b9046712a26..25e9f1b6c222 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -540,6 +540,13 @@ void HexagonToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, return; const Driver &D = getDriver(); + if (!D.SysRoot.empty()) { +SmallString<128> P(D.SysRoot); +llvm::sys::path::append(P, "include"); +addExternCSystemInclude(DriverArgs, CC1Args, P.str()); +return; + } + std::string TargetDir = getHexagonTargetDir(D.getInstalledDir(), D.PrefixDirs); addExternCSystemInclude(DriverArgs, CC1Args, TargetDir + "/hexagon/include"); diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 9b5ebe3c86a4..4af00215ea31 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -577,3 +577,14 @@ // RUN: | FileCheck -check-prefix=CHECK082 %s // CHECK082-NOT: -march= // CHECK082-NOT: -mcpu= +// - +// Passing --sysroot +// - +// RUN: %clang -### -target hexagon-unknown-elf \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: --sysroot=/hexagon \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK083 %s +// CHECK083: "-isysroot" "/hexagon" +// CHECK083: "-internal-externc-isystem" "/hexagon/include" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] cf45742 - [hexagon] Fix testcase issue with windows builder.
Author: Sid Manning Date: 2020-02-18T16:36:38-06:00 New Revision: cf4574299a279beeb8acb894583962ec0f41286c URL: https://github.com/llvm/llvm-project/commit/cf4574299a279beeb8acb894583962ec0f41286c DIFF: https://github.com/llvm/llvm-project/commit/cf4574299a279beeb8acb894583962ec0f41286c.diff LOG: [hexagon] Fix testcase issue with windows builder. Added: Modified: clang/test/Driver/hexagon-toolchain-elf.c Removed: diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c index 4af00215ea31..a0bf8cac9668 100644 --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -587,4 +587,4 @@ // RUN: %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK083 %s // CHECK083: "-isysroot" "/hexagon" -// CHECK083: "-internal-externc-isystem" "/hexagon/include" +// CHECK083: "-internal-externc-isystem" "/hexagon{{/|}}include" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] c539be1 - [Hexagon] Add support for named registers cs0 and cs1
Author: Sid Manning Date: 2021-03-18T09:53:22-05:00 New Revision: c539be1dcbcf88530cfaf1728b077feb564b72ec URL: https://github.com/llvm/llvm-project/commit/c539be1dcbcf88530cfaf1728b077feb564b72ec DIFF: https://github.com/llvm/llvm-project/commit/c539be1dcbcf88530cfaf1728b077feb564b72ec.diff LOG: [Hexagon] Add support for named registers cs0 and cs1 Allow inline assembly code to referece cs0 and cs1. Added: Modified: clang/lib/Basic/Targets/Hexagon.cpp llvm/lib/Target/Hexagon/HexagonISelLowering.cpp llvm/test/CodeGen/Hexagon/namedreg.ll Removed: diff --git a/clang/lib/Basic/Targets/Hexagon.cpp b/clang/lib/Basic/Targets/Hexagon.cpp index ba10459e9690..d1613fb22930 100644 --- a/clang/lib/Basic/Targets/Hexagon.cpp +++ b/clang/lib/Basic/Targets/Hexagon.cpp @@ -136,7 +136,7 @@ const char *const HexagonTargetInfo::GCCRegNames[] = { "r9", "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", "p0", "p1", "p2", "p3", -"sa0", "lc0", "sa1", "lc1", "m0", "m1", "usr", "ugp", +"sa0", "lc0", "sa1", "lc1", "m0", "m1", "usr", "ugp", "cs0", "cs1", "r1:0", "r3:2", "r5:4", "r7:6", "r9:8", "r11:10", "r13:12", "r15:14", "r17:16", "r19:18", "r21:20", "r23:22", "r25:24", "r27:26", "r29:28", "r31:30" diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp index 30c3d3d4f570..a7e9ed34bfcb 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -308,6 +308,8 @@ Register HexagonTargetLowering::getRegisterByName( .Case("m1", Hexagon::M1) .Case("usr", Hexagon::USR) .Case("ugp", Hexagon::UGP) + .Case("cs0", Hexagon::CS0) + .Case("cs1", Hexagon::CS1) .Default(Register()); if (Reg) return Reg; diff --git a/llvm/test/CodeGen/Hexagon/namedreg.ll b/llvm/test/CodeGen/Hexagon/namedreg.ll index 72ca50868828..a905332b2dee 100644 --- a/llvm/test/CodeGen/Hexagon/namedreg.ll +++ b/llvm/test/CodeGen/Hexagon/namedreg.ll @@ -4,10 +4,29 @@ entry: %0 = call i32 @llvm.read_register.i32(metadata !0) ret i32 %0 } - declare i32 @llvm.read_register.i32(metadata) #1 +define dso_local i32 @rcs0() #0 { +entry: + %0 = call i32 @llvm.read_register.i32(metadata !1) + ret i32 %0 +} + +define dso_local i32 @rcs1() #0 { +entry: + %0 = call i32 @llvm.read_register.i32(metadata !2) + ret i32 %0 +} + + + !llvm.named.register.r19 = !{!0} +!llvm.named.register.cs0 = !{!1} +!llvm.named.register.cs1 = !{!2} !0 = !{!"r19"} +!1 = !{!"cs0"} +!2 = !{!"cs1"} ; CHECK: r0 = r19 +; CHECK: r0 = cs0 +; CHECK: r0 = cs1 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits