svn commit: r344774 - in projects/clang800-import: contrib/llvm/lib/Target/AArch64 contrib/llvm/lib/Target/WebAssembly contrib/llvm/lib/Target/X86 contrib/llvm/tools/clang/include/clang/Basic contr...
Dimitry Andric
dim at FreeBSD.org
Mon Mar 4 19:06:54 UTC 2019
Author: dim
Date: Mon Mar 4 19:06:51 2019
New Revision: 344774
URL: https://svnweb.freebsd.org/changeset/base/344774
Log:
Merge llvm, clang, compiler-rt, libc++, lld, and lldb release_80 branch
r355313, resolve conflicts, and bump version numbers.
Modified:
projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
projects/clang800-import/contrib/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td
projects/clang800-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp
projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/AttrDocs.td
projects/clang800-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/OpenBSD.cpp
projects/clang800-import/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp
projects/clang800-import/contrib/llvm/tools/llvm-xray/xray-converter.cpp
projects/clang800-import/lib/clang/include/clang/Basic/Version.inc
projects/clang800-import/lib/clang/include/lld/Common/Version.inc
projects/clang800-import/lib/clang/include/llvm/Support/VCSRevision.h
Directory Properties:
projects/clang800-import/contrib/compiler-rt/ (props changed)
projects/clang800-import/contrib/libc++/ (props changed)
projects/clang800-import/contrib/llvm/ (props changed)
projects/clang800-import/contrib/llvm/tools/clang/ (props changed)
projects/clang800-import/contrib/llvm/tools/lld/ (props changed)
projects/clang800-import/contrib/llvm/tools/lldb/ (props changed)
Modified: projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -471,9 +471,18 @@ void AArch64AsmPrinter::EmitJumpTableInfo() {
const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
if (JT.empty()) return;
+ const Function &F = MF->getFunction();
const TargetLoweringObjectFile &TLOF = getObjFileLowering();
- MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(MF->getFunction(), TM);
- OutStreamer->SwitchSection(ReadOnlySec);
+ bool JTInDiffSection =
+ !STI->isTargetCOFF() ||
+ !TLOF.shouldPutJumpTableInFunctionSection(
+ MJTI->getEntryKind() == MachineJumpTableInfo::EK_LabelDifference32,
+ F);
+ if (JTInDiffSection) {
+ // Drop it in the readonly section.
+ MCSection *ReadOnlySec = TLOF.getSectionForJumpTable(F, TM);
+ OutStreamer->SwitchSection(ReadOnlySec);
+ }
auto AFI = MF->getInfo<AArch64FunctionInfo>();
for (unsigned JTI = 0, e = JT.size(); JTI != e; ++JTI) {
Modified: projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -2108,9 +2108,6 @@ void AArch64FrameLowering::processFunctionBeforeFrameF
while (MBBI != MBB.end() && MBBI->getFlag(MachineInstr::FrameSetup))
++MBBI;
- if (MBBI->isTerminator())
- return;
-
// Create an UnwindHelp object.
int UnwindHelpFI =
MFI.CreateStackObject(/*size*/8, /*alignment*/16, false);
@@ -2118,8 +2115,10 @@ void AArch64FrameLowering::processFunctionBeforeFrameF
// We need to store -2 into the UnwindHelp object at the start of the
// function.
DebugLoc DL;
- RS->enterBasicBlock(MBB);
- unsigned DstReg = RS->scavengeRegister(&AArch64::GPR64RegClass, MBBI, 0);
+ RS->enterBasicBlockEnd(MBB);
+ RS->backward(std::prev(MBBI));
+ unsigned DstReg = RS->FindUnusedReg(&AArch64::GPR64commonRegClass);
+ assert(DstReg && "There must be a free register after frame setup");
BuildMI(MBB, MBBI, DL, TII.get(AArch64::MOVi64imm), DstReg).addImm(-2);
BuildMI(MBB, MBBI, DL, TII.get(AArch64::STURXi))
.addReg(DstReg, getKillRegState(true))
Modified: projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -209,8 +209,8 @@ static std::string computeDataLayout(const Triple &TT,
static Reloc::Model getEffectiveRelocModel(const Triple &TT,
Optional<Reloc::Model> RM) {
- // AArch64 Darwin is always PIC.
- if (TT.isOSDarwin())
+ // AArch64 Darwin and Windows are always PIC.
+ if (TT.isOSDarwin() || TT.isOSWindows())
return Reloc::PIC_;
// On ELF platforms the default static relocation model has a smart enough
// linker to cope with referencing external symbols defined in a shared
Modified: projects/clang800-import/contrib/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td
==============================================================================
--- projects/clang800-import/contrib/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td Mon Mar 4 19:06:51 2019 (r344774)
@@ -122,10 +122,3 @@ def : Pat<(select (i32 (seteq I32:$cond, 0)), I32:$lhs
(SELECT_I32 I32:$rhs, I32:$lhs, I32:$cond)>;
def : Pat<(select (i32 (seteq I32:$cond, 0)), I64:$lhs, I64:$rhs),
(SELECT_I64 I64:$rhs, I64:$lhs, I32:$cond)>;
-
-// The legalizer inserts an unnecessary `and 1` to make input conform
-// to getBooleanContents, which we can lower away.
-def : Pat<(select (i32 (and I32:$cond, 1)), I32:$lhs, I32:$rhs),
- (SELECT_I32 I32:$lhs, I32:$rhs, I32:$cond)>;
-def : Pat<(select (i32 (and I32:$cond, 1)), I64:$lhs, I64:$rhs),
- (SELECT_I64 I64:$lhs, I64:$rhs, I32:$cond)>;
Modified: projects/clang800-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -38134,8 +38134,11 @@ static SDValue combineTruncatedArithmetic(SDNode *N, S
return true;
// See if this is a single use constant which can be constant folded.
- SDValue BC = peekThroughOneUseBitcasts(Op);
- return ISD::isBuildVectorOfConstantSDNodes(BC.getNode());
+ // NOTE: We don't peek throught bitcasts here because there is currently
+ // no support for constant folding truncate+bitcast+vector_of_constants. So
+ // we'll just send up with a truncate on both operands which will
+ // get turned back into (truncate (binop)) causing an infinite loop.
+ return ISD::isBuildVectorOfConstantSDNodes(Op.getNode());
};
auto TruncateArithmetic = [&](SDValue N0, SDValue N1) {
Modified: projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/AttrDocs.td
==============================================================================
--- projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/AttrDocs.td Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/tools/clang/include/clang/Basic/AttrDocs.td Mon Mar 4 19:06:51 2019 (r344774)
@@ -3821,13 +3821,13 @@ The ``gnu_inline`` changes the meaning of ``extern inl
semantics, meaning:
* If any declaration that is declared ``inline`` is not declared ``extern``,
-then the ``inline`` keyword is just a hint. In particular, an out-of-line
-definition is still emitted for a function with external linkage, even if all
-call sites are inlined, unlike in C99 and C++ inline semantics.
+ then the ``inline`` keyword is just a hint. In particular, an out-of-line
+ definition is still emitted for a function with external linkage, even if all
+ call sites are inlined, unlike in C99 and C++ inline semantics.
* If all declarations that are declared ``inline`` are also declared
-``extern``, then the function body is present only for inlining and no
-out-of-line version is emitted.
+ ``extern``, then the function body is present only for inlining and no
+ out-of-line version is emitted.
Some important consequences: ``static inline`` emits an out-of-line
version if needed, a plain ``inline`` definition emits an out-of-line version
Modified: projects/clang800-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/OpenBSD.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/OpenBSD.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/OpenBSD.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -227,9 +227,7 @@ void openbsd::Linker::ConstructJob(Compilation &C, con
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtend)));
}
- const char *Exec = Args.MakeArgString(
- !NeedsSanitizerDeps ? ToolChain.GetLinkerPath()
- : ToolChain.GetProgramPath("ld.lld"));
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
}
Modified: projects/clang800-import/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -433,14 +433,6 @@ void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths
case llvm::Triple::DragonFly:
AddPath("/usr/include/c++/5.0", CXXSystem, false);
break;
- case llvm::Triple::OpenBSD: {
- std::string t = triple.getTriple();
- if (t.substr(0, 6) == "x86_64")
- t.replace(0, 6, "amd64");
- AddGnuCPlusPlusIncludePaths("/usr/include/g++",
- t, "", "", triple);
- break;
- }
case llvm::Triple::Minix:
AddGnuCPlusPlusIncludePaths("/usr/gnu/include/c++/4.4.3",
"", "", "", triple);
Modified: projects/clang800-import/contrib/llvm/tools/llvm-xray/xray-converter.cpp
==============================================================================
--- projects/clang800-import/contrib/llvm/tools/llvm-xray/xray-converter.cpp Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/contrib/llvm/tools/llvm-xray/xray-converter.cpp Mon Mar 4 19:06:51 2019 (r344774)
@@ -18,7 +18,6 @@
#include "llvm/Support/EndianStream.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FormatVariadic.h"
-#include "llvm/Support/JSON.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/YAMLTraits.h"
#include "llvm/Support/raw_ostream.h"
@@ -242,6 +241,31 @@ StackTrieNode *findOrCreateStackNode(
return CurrentStack;
}
+void writeTraceViewerRecord(uint16_t Version, raw_ostream &OS, int32_t FuncId,
+ uint32_t TId, uint32_t PId, bool Symbolize,
+ const FuncIdConversionHelper &FuncIdHelper,
+ double EventTimestampUs,
+ const StackTrieNode &StackCursor,
+ StringRef FunctionPhenotype) {
+ OS << " ";
+ if (Version >= 3) {
+ OS << llvm::formatv(
+ R"({ "name" : "{0}", "ph" : "{1}", "tid" : "{2}", "pid" : "{3}", )"
+ R"("ts" : "{4:f4}", "sf" : "{5}" })",
+ (Symbolize ? FuncIdHelper.SymbolOrNumber(FuncId)
+ : llvm::to_string(FuncId)),
+ FunctionPhenotype, TId, PId, EventTimestampUs,
+ StackCursor.ExtraData.id);
+ } else {
+ OS << llvm::formatv(
+ R"({ "name" : "{0}", "ph" : "{1}", "tid" : "{2}", "pid" : "1", )"
+ R"("ts" : "{3:f3}", "sf" : "{4}" })",
+ (Symbolize ? FuncIdHelper.SymbolOrNumber(FuncId)
+ : llvm::to_string(FuncId)),
+ FunctionPhenotype, TId, EventTimestampUs, StackCursor.ExtraData.id);
+ }
+}
+
} // namespace
void TraceConverter::exportAsChromeTraceEventFormat(const Trace &Records,
@@ -252,14 +276,18 @@ void TraceConverter::exportAsChromeTraceEventFormat(co
unsigned id_counter = 0;
+ OS << "{\n \"traceEvents\": [";
DenseMap<uint32_t, StackTrieNode *> StackCursorByThreadId{};
DenseMap<uint32_t, SmallVector<StackTrieNode *, 4>> StackRootsByThreadId{};
DenseMap<unsigned, StackTrieNode *> StacksByStackId{};
std::forward_list<StackTrieNode> NodeStore{};
-
- // Create a JSON Array which will hold all trace events.
- json::Array TraceEvents;
+ int loop_count = 0;
for (const auto &R : Records) {
+ if (loop_count++ == 0)
+ OS << "\n";
+ else
+ OS << ",\n";
+
// Chrome trace event format always wants data in micros.
// CyclesPerMicro = CycleHertz / 10^6
// TSC / CyclesPerMicro == TSC * 10^6 / CycleHertz == MicroTimestamp
@@ -284,15 +312,8 @@ void TraceConverter::exportAsChromeTraceEventFormat(co
// type of B for begin or E for end, thread id, process id,
// timestamp in microseconds, and a stack frame id. The ids are logged
// in an id dictionary after the events.
- TraceEvents.push_back(json::Object({
- {"name", Symbolize ? FuncIdHelper.SymbolOrNumber(R.FuncId)
- : llvm::to_string(R.FuncId)},
- {"ph", "B"},
- {"tid", llvm::to_string(R.TId)},
- {"pid", llvm::to_string(Version >= 3 ? R.PId : 1)},
- {"ts", llvm::formatv("{0:f4}", EventTimestampUs)},
- {"sf", llvm::to_string(StackCursor->ExtraData.id)},
- }));
+ writeTraceViewerRecord(Version, OS, R.FuncId, R.TId, R.PId, Symbolize,
+ FuncIdHelper, EventTimestampUs, *StackCursor, "B");
break;
case RecordTypes::EXIT:
case RecordTypes::TAIL_EXIT:
@@ -303,51 +324,43 @@ void TraceConverter::exportAsChromeTraceEventFormat(co
// (And/Or in loop termination below)
StackTrieNode *PreviousCursor = nullptr;
do {
- TraceEvents.push_back(json::Object({
- {"name", Symbolize
- ? FuncIdHelper.SymbolOrNumber(StackCursor->FuncId)
- : llvm::to_string(StackCursor->FuncId)},
- {"ph", "E"},
- {"tid", llvm::to_string(R.TId)},
- {"pid", llvm::to_string(Version >= 3 ? R.PId : 1)},
- {"ts", llvm::formatv("{0:f4}", EventTimestampUs)},
- {"sf", llvm::to_string(StackCursor->ExtraData.id)},
- }));
+ if (PreviousCursor != nullptr) {
+ OS << ",\n";
+ }
+ writeTraceViewerRecord(Version, OS, StackCursor->FuncId, R.TId, R.PId,
+ Symbolize, FuncIdHelper, EventTimestampUs,
+ *StackCursor, "E");
PreviousCursor = StackCursor;
StackCursor = StackCursor->Parent;
} while (PreviousCursor->FuncId != R.FuncId && StackCursor != nullptr);
break;
}
}
+ OS << "\n ],\n"; // Close the Trace Events array.
+ OS << " "
+ << "\"displayTimeUnit\": \"ns\",\n";
// The stackFrames dictionary substantially reduces size of the output file by
// avoiding repeating the entire call stack of function names for each entry.
- json::Object StackFrames;
- for (const auto &Stack : StacksByStackId) {
- const auto &StackId = Stack.first;
- const auto &StackFunctionNode = Stack.second;
- json::Object::iterator It;
- std::tie(It, std::ignore) = StackFrames.insert({
- llvm::to_string(StackId),
- json::Object{
- {"name",
- Symbolize ? FuncIdHelper.SymbolOrNumber(StackFunctionNode->FuncId)
- : llvm::to_string(StackFunctionNode->FuncId)}},
- });
-
- if (StackFunctionNode->Parent != nullptr)
- It->second.getAsObject()->insert(
- {"parent", llvm::to_string(StackFunctionNode->Parent->ExtraData.id)});
+ OS << R"( "stackFrames": {)";
+ int stack_frame_count = 0;
+ for (auto map_iter : StacksByStackId) {
+ if (stack_frame_count++ == 0)
+ OS << "\n";
+ else
+ OS << ",\n";
+ OS << " ";
+ OS << llvm::formatv(
+ R"("{0}" : { "name" : "{1}")", map_iter.first,
+ (Symbolize ? FuncIdHelper.SymbolOrNumber(map_iter.second->FuncId)
+ : llvm::to_string(map_iter.second->FuncId)));
+ if (map_iter.second->Parent != nullptr)
+ OS << llvm::formatv(R"(, "parent": "{0}")",
+ map_iter.second->Parent->ExtraData.id);
+ OS << " }";
}
-
- json::Object TraceJSON{
- {"displayTimeUnit", "ns"},
- {"traceEvents", std::move(TraceEvents)},
- {"stackFrames", std::move(StackFrames)},
- };
-
- // Pretty-print the JSON using two spaces for indentations.
- OS << formatv("{0:2}", json::Value(std::move(TraceJSON)));
+ OS << "\n }\n"; // Close the stack frames map.
+ OS << "}\n"; // Close the JSON entry.
}
namespace llvm {
Modified: projects/clang800-import/lib/clang/include/clang/Basic/Version.inc
==============================================================================
--- projects/clang800-import/lib/clang/include/clang/Basic/Version.inc Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/lib/clang/include/clang/Basic/Version.inc Mon Mar 4 19:06:51 2019 (r344774)
@@ -8,4 +8,4 @@
#define CLANG_VENDOR "FreeBSD "
-#define SVN_REVISION "354799"
+#define SVN_REVISION "355313"
Modified: projects/clang800-import/lib/clang/include/lld/Common/Version.inc
==============================================================================
--- projects/clang800-import/lib/clang/include/lld/Common/Version.inc Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/lib/clang/include/lld/Common/Version.inc Mon Mar 4 19:06:51 2019 (r344774)
@@ -7,4 +7,4 @@
#define LLD_REPOSITORY_STRING "FreeBSD"
// <Upstream revision at import>-<Local identifier in __FreeBSD_version style>
-#define LLD_REVISION_STRING "354799-1300002"
+#define LLD_REVISION_STRING "355313-1300002"
Modified: projects/clang800-import/lib/clang/include/llvm/Support/VCSRevision.h
==============================================================================
--- projects/clang800-import/lib/clang/include/llvm/Support/VCSRevision.h Mon Mar 4 18:26:08 2019 (r344773)
+++ projects/clang800-import/lib/clang/include/llvm/Support/VCSRevision.h Mon Mar 4 19:06:51 2019 (r344774)
@@ -1,2 +1,2 @@
/* $FreeBSD$ */
-#define LLVM_REVISION "svn-r354799"
+#define LLVM_REVISION "svn-r355313"
More information about the svn-src-projects
mailing list