1. Jan 25, 2024
    • Nico Weber's avatar
    • Schrodinger ZHU Yifan's avatar
      [libc] reland mincore (#79309) · 048041f1
      Schrodinger ZHU Yifan authored
      048041f1
    • Michael Maitland's avatar
      [CodeGen][MISched] Handle empty sized resource usage. (#75951) · 7e09239e
      Michael Maitland authored
      TargetSchedule.td explicitly allows the usage of a ProcResource for zero
      cycles, in order to represent that the ProcResource must be available
      but is not consumed by the instruction. On the other hand,
      ResourceSegments explicitly does not allow for a zero sized interval. In
      order to remedy this, this patch handles the special case of when there
      is an empty interval usage of a resource by not adding an empty
      interval.
      
      We ran into this issue downstream, but it makes sense to have
      this upstream since it is explicitly allowed by TargetSchedule.td.
      7e09239e
    • William Moses's avatar
      [CMake/Bazel] Support usage of opt driver as a library (#79205) · 32f79226
      William Moses authored
      In Bazel, Clang current separates the clang executable into a
      clang-driver library, and the actual clang executable. This allows
      downstream users to make their own variations of clang, without having
      to redo/maintain separate build pipelines.
      
      This adds the same for opt for both CMake and Bazel.
      32f79226
    • lntue's avatar
      [libc][NFC] Fix `-DSHOW_INTERMEDIATE_OBJECTS=DEPS` to work properly for entry... · c1cb0b80
      lntue authored
      [libc][NFC] Fix `-DSHOW_INTERMEDIATE_OBJECTS=DEPS` to work properly for entry points and unit tests. (#79254)
      
      c1cb0b80
    • Nikolas Klauser's avatar
      e099e7b2
    • Fangrui Song's avatar
      [Driver] Test ignored target-specific options for AMDGPU/NVPTX (#79222) · ed7cee90
      Fangrui Song authored
      Fix missing test coverage after #70740 #70760
      
      When compiling for CUDA/HIP, the driver creates a cc1 job to compile for
      amdgcn/nvptx triple using most options.
      Certain target-specific options should be ignored, not lead to an error
      (`err_drv_unsupported_opt_for_target`).
      ed7cee90
    • Jeremy Morse's avatar
      [BPI] Transfer value-handles when assign/move constructing BPI (#77774) · 604a6c40
      Jeremy Morse authored
      Background: BPI stores a collection of edge branch-probabilities, and
      also a set of Callback value-handles for the blocks in the
      edge-collection. When a block is deleted, BPI's eraseBlock method is
      called to clear the edge-collection of references to that block, to
      avoid dangling pointers.
      
      However, when move-constructing or assigning a BPI object, the
      edge-collection gets moved, but the value-handles are discarded. This
      can lead to to stale entries in the edge-collection when blocks are
      deleted without the callback -- not normally a problem, but if a new
      block is allocated with the same address as an old block, spurious
      branch probabilities will be recorded about it. The fix is to transfer
      the handles from the source BPI object.
      
      This was exposed by an unrelated debug-info change, it probably just
      shifted around allocation orders to expose this. Detected as
      nondeterminism and reduced by Zequan Wu:
      
      
      https://github.com/llvm/llvm-project/commit/f1b0a544514f3d343f32a41de9d6fb0b6cbb6021#commitcomment-136737090
      
      (No test because IMHO testing for a behaviour that varies with memory
      allocators is likely futile; I can add the reproducer with a CHECK for
      the relevant branch weights if it's desired though)
      604a6c40
    • Nico Weber's avatar
      4a9a1d83
    • Vojislav Tomasevic's avatar
      [clang] Incorrect IR involving the use of bcopy (#79298) · 2a77d92e
      Vojislav Tomasevic authored
      This patch addresses the issue regarding the call of bcopy function in a
      conditional expression.
      It is analogous to the already accepted patch which deals with the same
      problem, just regarding the bzero function [0].
      
      Here is the testcase which illustrates the issue:
      
      ```
      void bcopy(const void *, void *, unsigned long);
      void foo(void);
      
      void test_bcopy() {
        char dst[20];
        char src[20];
        int _sz = 20, len = 20;
        return (_sz
                ? ((_sz >= len)
                   ? bcopy(src, dst, len)
                   : foo())
                : bcopy(src, dst, len));
      }
      ```
      
      When processing it with clang, following issue occurs:
      
      Instruction does not dominate all uses!
      %arraydecay2 = getelementptr inbounds [20 x i8], ptr %dst, i64 0, i64 0,
      !dbg !38
      %cond = phi ptr [ %arraydecay2, %cond.end ], [ %arraydecay5,
      %cond.false3 ], !dbg !33
      fatal error: error in backend: Broken module found, compilation aborted!
      
      This happens because an incorrect phi node is created. It is created
      because bcopy function call is lowered to the call of llvm.memmove
      intrinsic and function memmove returns void *. Since llvm.memmove is
      called in two places in the same return statement, clang creates a phi
      node in the final basic block for the return value and that phi node is
      incorrect. However, bcopy function should return void in the first
      place, so this phi node is unnecessary. This is what this patch
      addresses. An appropriate test is also added and no existing tests fail
      when applying this patch.
      
      Also, this crash only happens when LLVM is configured with
      -DLLVM_ENABLE_ASSERTIONS=On option.
      
      [0] https://reviews.llvm.org/D39746
      2a77d92e
    • Alexey Bataev's avatar
      [SLP]Fix PR79321: SLPVectorizer's PHICompare doesn't provide a strict · ca654acc
      Alexey Bataev authored
      weak ordering.
      
      Compared NumUses to meet the reaquirements of the strict weak ordering.
      ca654acc
    • Alex MacLean's avatar
      [NVPTX] use incomplete aggregate initializers (#79062) · 3b8539c9
      Alex MacLean authored
      The PTX ISA specifies that initializers may be incomplete ([5.4.4.
      Initializers](https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#initializers))
      > As in C, array initializers may be incomplete, i.e., the number of
      initializer elements may be less than the extent of the corresponding
      array dimension, with remaining array locations initialized to the
      default value for the specified array type.
      
      Emitting initializers in this form is preferable because it reduces the
      size of the PTX, in some cases significantly, and can improve compile
      time of ptxas as a result.
      3b8539c9
    • Kazu Hirata's avatar
      [ConstraintElimination] Use std::move in the constructor (NFC) (#79259) · 1605bf58
      Kazu Hirata authored
      Moving the contents of Coefficients saves 0.43% of heap allocations
      during the compilation of a large preprocessed file, namely
      X86ISelLowering.cpp, for the X86 target.
      1605bf58
    • Philip Reames's avatar
      [RISCV] Separate single source and dual source lowering code [nfc] · e9311f9c
      Philip Reames authored
      The two single source cases aren't effected by the swap or select matching
      as those are dual operand specific.  Similarly, a two source shuffle can't
      be a rotate.
      
      We can extend this idea for some of the shuffle types above, but some of
      them are validly either single or dual source.  We don't want to loose that
      and the code complexity of versioning early and having to repeat some shuffle
      kinds doesn't (currently) seem worth it.
      e9311f9c
    • Jan Svoboda's avatar
      [clangd] Make sure ninja can clean "ClangdXPC.framework" (#75669) · b801b607
      Jan Svoboda authored
      After building the ClangdXPC target, `ninja clean` fails with the
      following error:
      
      ```
      ninja: error: remove(lib/ClangdXPC.framework): Directory not empty
      ninja: error: remove(<build>/lib/ClangdXPC.framework): Directory not empty
      ```
      
      I did not find better way to make this work. I guess we could list all
      generated files (and directories) in `OUTPUT` of the custom command, but
      that seems fairly tedious/fragile.
      b801b607
    • ostannard's avatar
      [TableGen] Include source location in JSON dump (#79028) · 56602a48
      ostannard authored
      This adds a '!loc' field to each record containing the file name and
      line number of the record declaration.
      56602a48
    • Louis Dionne's avatar
      [ci] Remove unused generate-buildkite-pipeline-scheduled script (#79320) · 5e894771
      Louis Dionne authored
      The "scheduled build" pipeline on BuildKite had been disabled for months
      and doesn't exist anymore, so this script is effectively dead code. When
      we set up a cron-activated build again, we should do it using Github
      actions (which could trigger a BK pipeline if needed).
      
      Keeping this script around just creates additional confusion about
      what's used and what's not used for doing CI.
      5e894771
    • Valentin Clement (バレンタイン クレメン)'s avatar
      [flang][openacc] Lower DO CONCURRENT with acc loop (#79223) · e99c8aef
      Lower basic DO CONCURRENT with acc loop construct. The DO CONCURRENT is
      lowered to an acc.loop operation.
      
      This does not currently cover the DO CONCURRENT with locality specs.
      e99c8aef
    • Fangrui Song's avatar
      [ELF] Don't resolve relocations referencing SHN_ABS to tombstone in non-SHF_ALLOC sections (#79238) · 8abf8d12
      Fangrui Song authored
      A SHN_ABS symbol has never been considered for
      InputSection::relocateNonAlloc.
      Before #74686, the code did made it work in the absence of `-z
      dead-reloc-in-nonalloc=`.
      There is now a report about such SHN_ABS uses
      
      (https://github.com/llvm/llvm-project/pull/74686#issuecomment-1904101711)
      and I think it makes sense for non-SHF_ALLOC to support SHN_ABS, like
      SHF_ALLOC sections do.
      
      ```
      // clang -g
      __attribute__((weak)) int symbol;
      int *foo() { return &symbol; }
      
      0x00000023:   DW_TAG_variable [2]   (0x0000000c)
                      ...
                      DW_AT_location [DW_FORM_exprloc]        (DW_OP_addrx 0x0)
      
      ```
      
      .debug_addr references `symbol`, which can be redefined by a symbol
      assignment or --defsym to become a SHN_ABS symbol.
      
      The problem is that `!sym.getOutputSection()` cannot discern SHN_ABS
      from a symbol whose section has been discarded. Since commit
      1981b1b6...
      8abf8d12
    • Philip Reames's avatar
      [RISCV] Sink code into using branch in shuffle lowering [nfc] · fd817249
      Philip Reames authored
      Follow up to 396b6bbc, sink code into consuming branch, and fix one
      comment I realized used the misleading wording.  (Permute is a specific
      sub-type of single source shuffle.)
      fd817249
    • Jan Svoboda's avatar
      [clang] NFC: Remove `{File,Directory}Entry::getName()` (#74910) · 6c1dbd53
      Jan Svoboda authored
      The files and directories that Clang accesses are uniqued by their
      inode. For each inode `FileManager` will create exactly one `FileEntry`
      or `DirectoryEntry` object, which makes answering the question _"Are
      these two files/directories the same?"_ a simple pointer equality check.
      
      However, since the same inode can be accessed through multiple different
      paths, asking the `FileEntry` or `DirectoryEntry` object _"What is your
      name?"_ doesn't have clear semantics. In c0ff9908 we started reporting
      the most recent name used to access the entry, which turned out to be
      necessary for Clang modules. However, the long-term solution has always
      been to explicitly track the as-requested name. This has been
      implemented in 4dc5573a as `FileEntryRef` and `DirectoryEntryRef`.
      
      The `DirectoryEntry::getName()` interface has been deprecated since the
      Clang 17 release and `FileEntry::getName()` since Clang 18. We have
      replaced uses of these deprecat...
      6c1dbd53
    • Nikita Popov's avatar
      Remove fork handling from release issue workflow (#79310) · 56444d56
      Nikita Popov authored
      This is currently broken, because the check is performed on the wrong
      repository. repo here is llvm/llvm-project, which is not a fork (so this
      will always trigger), then we'll push a new branch to
      llvmbot/llvm-project, and then again set the wrong owner, so we'll look
      for the branch in llvm/llvm-project rather than llvmbot/llvm-project.
      
      Rather than fixing this, I'm removing the code entirely, as it shouldn't
      be needed anymore (llvmbot/llvm-project is a fork of llvm/llvm-project).
      56444d56
    • Christian Sigg's avatar
      [llvm][bazel] Fix BUILD · 4079aab8
      Christian Sigg authored
      4079aab8
    • Christian Sigg's avatar
      [llvm][bazel] Fix BUILD. · 611843d2
      Christian Sigg authored
      611843d2
    • Philip Reames's avatar
      [RISCV] Recurse on second operand of two operand shuffles (#79197) · 396b6bbc
      Philip Reames authored
      This builds on bdc41106.
      
      This change completes the migration to a recursive shuffle lowering
      strategy where when we encounter an unknown two argument shuffle, we
      lower each operand as a single source permute, and then use a vselect
      (i.e. a vmerge) to combine the results. This relies for code quality on
      the post-isel combine which will aggressively fold that vmerge back into
      the materialization of the second operand if possible.
      
      Note: The change includes only the most immediately obvious of the
      stylistic cleanup. There's a bunch of code movement that this enables
      that I'll do as a separate patch as rolling it into this creates an
      unreadable diff.
      396b6bbc
    • Danial Klimkin's avatar
      Fix bazel build past 4a582845 (#79318) · 56aa77e1
      Danial Klimkin authored
      and keep things sorted.
      56aa77e1
    • Louis Dionne's avatar
  2. Jan 24, 2024