Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Mar 2019 19:06:51 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   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...
Message-ID:  <201903041906.x24J6pGA002766@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201903041906.x24J6pGA002766>