1. Apr 07, 2020
  2. Apr 06, 2020
  3. Apr 07, 2020
    • Hubert Tong's avatar
      [llvm-objdump][NFC] Declare command-line externs in headers with namespace · 076308a4
      Hubert Tong authored
      Summary:
      This patch moves the forward declarations of command-line `cl::*`
      externs in `MachODump.cpp` and `llvm-objdump.cpp` into the headers
      corresponding to the file that defines the variable. At the same time,
      these externs are moved into the `llvm::objdump` namespace. The externs
      that are not referenced outside their defining translation unit are made
      static.
      
      This does not factor out uses of the Mach-O options from
      `llvm-objdump.cpp`.
      
      Reviewers: jhenderson, MaskRay, DiggerLin, jasonliu, daltenty
      
      Reviewed By: jhenderson, MaskRay
      
      Subscribers: rupprecht, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D77388
      076308a4
    • Nico Weber's avatar
      [gn build] (manually) port 6c1a9fb1 · 0c9f750a
      Nico Weber authored
      0c9f750a
    • Leonard Chan's avatar
      [AsmPrinter] Do not define local aliases for global objects in a comdat · a0222ac1
      Leonard Chan authored
      A global symbol that is defined in a comdat should not generate an alias since
      call sites that would've referred to that symbol will refer to their own
      independent local aliases rather than the surviving global comdat one. This
      could result in something that looks like:
      
      ```
      ld.lld: error: relocation refers to a discarded section: .text._ZN3fbl8internal18NullFunctionTargetIvJjjPjEED1Ev.stub
      >>> defined in user-x64-clang/obj/system/ulib/minfs/libminfs.a(minfs._sources.file.cc.o)
      >>> section group signature: _ZN3fbl8internal18NullFunctionTargetIvJjjPjEED1Ev.stub
      >>> prevailing definition is in user-x64-clang/obj/system/ulib/minfs/libminfs.a(minfs._sources.vnode.cc.o)
      >>> referenced by function.h:169 (../../zircon/system/ulib/fbl/include/fbl/function.h:169)
      >>>               minfs._sources.file.cc.o:(minfs::File::AllocateAndCommitData(std::__2::unique_ptr<minfs::Transaction, std::__2::default_delete<minfs::Transaction> >)) in archive user-x64-clang/obj/system/ulib/minfs/libminfs.a
      ```
      
      We ran into this when experimenting with a new C++ ABI for fuchsia
      (refer to D72959) which takes relative offsets between comdat'd functions
      which is why the normal C++ user wouldn't run into this.
      
      Differential Revision: https://reviews.llvm.org/D77429
      a0222ac1
    • Nico Weber's avatar
      Make llvm_source_root in llvm-lit relative too. · 6c1a9fb1
      Nico Weber authored
      No intended behavior change.
      6c1a9fb1
    • Nick Desaulniers's avatar
      [SelectionDAG] fix predecessor list for INLINEASM_BRs' parent · 5bc291be
      Nick Desaulniers authored
      Summary:
      A bug report mentioned that LLVM was producing jumps off the end of a
      function when using "asm goto with outputs". Further digging pointed to
      MachineBasicBlocks that had their address taken and were indirect
      targets of INLINEASM_BR being removed by BranchFolder, because their
       predecessor list was empty, so they appeared to have no entry.
      
      This was a cascading failure caused earlier, during Pre-RA instruction
      scheduling. We have a few special cases in Pre-RA instruction scheduling
      where we split a MachineBasicBlock in two.  This requires careful
      handing of predecessor and successor lists for a MachineBasicBlock that
      was split, and careful handing of PHI MachineInstrs that referred to the
      MachineBasicBlock before it was split.
      
      The clue that led to this fix was the observation that many callers of
      MachineBasicBlock::splice() frequently call
      MachineBasicBlock::transferSuccessorsAndUpdatePHIs() to update their PHI
      nodes after a splice. We don't want to reuse that method, as we have
      custom successor transferring logic for this block split.
      
      This patch fixes 2 pre-existing bugs, and adds tests.
      
      The first bug was that MachineBasicBlock::splice() correctly handles
      updating most successors and predecessors; we don't need to do anything
      more than removing the previous fallthrough block from the first half of
      the split block post splice. Previously, we were updating the successor
      list incorrectly (updating successors updates predecessors).
      
      The second bug was that PHI nodes that needed registers from the first
      half of the split block were not having entries populated.  The register
      live out information was correct, and the FuncInfo->PHINodesToUpdate was
      correct. Specifically, the check in SelectionDAGISel::FinishBasicBlock:
      
          for (unsigned i = 0, e = FuncInfo->PHINodesToUpdate.size(); i != e; ++i) {
            MachineInstrBuilder PHI(*MF, FuncInfo->PHINodesToUpdate[i].first);
            if (!FuncInfo->MBB->isSuccessor(PHI->getParent()))
              continue;
            PHI.addReg(FuncInfo->PHINodesToUpdate[i].second).addMBB(FuncInfo->MBB);
      
      was `continue`ing because FuncInfo->MBB tracks the second half of
      the post-split block; no one was updating PHI entries for the first half
      of the post-split block.
      
      SelectionDAGBuilder::UpdateSplitBlock() already expects to perform
      special handling for MachineBasicBlocks that were split post calls to
      ScheduleDAGSDNodes::EmitSchedule(), so I'm confident that it's both
      correct for ScheduleDAGSDNodes::EmitSchedule() to return the second half
      of the split block `CopyBB` which updates `FuncInfo->MBB` (ie. the
      current MachineBasicBlock being processed), and perform special handling
      for this in SelectionDAGBuilder::UpdateSplitBlock().
      
      Reviewers: void, craig.topper, efriedma
      
      Reviewed By: void, efriedma
      
      Subscribers: hfinkel, fhahn, MatzeB, efriedma, hiraditya, llvm-commits, srhines
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D76961
      5bc291be
    • Dan Albert's avatar
      Upstream Bionic definitions of ctype_base/regex. · cbf1904a
      Dan Albert authored
      Summary:
      This is a patch that Android has been carrying in its tree for several
      years. This patch upstreams the existing ABI.
      
      There's some historical cruft here. __regex_word used to be a part of
      regex_traits rather than ctype_base. Bionic also used to use its own
      ctype implementation because the libc++ builtin one wasn't available
      yet. Bionic's ctype masks were 8 bits wide and already saturated, so a
      wider type needed to be used for the regex mask, and the existing
      value was already used so Android needed to specify its own.
      
      Since then Android has migrated to the builtin ctype implementation
      and this patch probably should have been dropped then. Unfortunately
      that was not noticed at the time, so now we need to keep this to
      maintain the current ABI.
      
      Reviewers: EricWF, #libc, ldionne
      
      Reviewed By: #libc, ldionne
      
      Subscribers: dexonsmith, ldionne, libcxx-commits
      
      Tags: #libc
      
      Differential Revision: https://reviews.llvm.org/D76171
      cbf1904a
    • Davide Italiano's avatar
      6f9ea260
    • Sergej Jaskiewicz's avatar
      [libunwind] Support the new libc++ test format · 649f0428
      Sergej Jaskiewicz authored
      Reviewers: ldionne, #libunwind, mstorsjo
      
      Reviewed By: ldionne, #libunwind, mstorsjo
      
      Subscribers: mstorsjo, dexonsmith, llvm-commits, libcxx-commits
      
      Tags: #llvm, #libunwind
      
      Differential Revision: https://reviews.llvm.org/D77501
      649f0428
    • Chris Lattner's avatar
      8ba7a2d5
    • Matt Arsenault's avatar
      AMDGPU: Remove dead paths for requiresUniformRegister · 869f05c8
      Matt Arsenault authored
      The extracts from control flow intrinsics are already properly handled
      by divergence analysis. The inline asm case isn't dead, but has also
      never really worked correctly so leave it as-is for now.
      869f05c8
    • Erik Pilkington's avatar
      [CodeGenObjC] Fix a crash when attempting to copy a zero-sized bit-field in a non-trivial C struct · d33c7de8
      Erik Pilkington authored
      Zero sized bit-fields aren't included in the CGRecordLayout, so we shouldn't be
      calling EmitLValueForField for them. rdar://60695105
      
      Differential revision: https://reviews.llvm.org/D76782
      d33c7de8