1. Sep 01, 2021
    • Raphael Isemann's avatar
      [lldb] Don't save empty expressions in the multiline editor history · 4f7fb13f
      Raphael Isemann authored
      Right now running `expr` to start the multiline expression editor and then
      pressing enter causes an empty history empty to be created for the multiline
      editor. That doesn't seem very useful for users as pressing the 'up' key will
      now also bring up these empty expressions.
      
      I don't think there is ever a use case for recalling a completely empty
      expression from the history, so instead don't save those entries to the history
      file and make sure we never recall them when navigating over the expression
      history.
      
      Note: This is actually a Swift downstream patch that got shipped with Apple's
      LLDB for many years. However, this recently started conflicting with upstream
      LLDB as D100048 added a test that made sure that empty expression entries don't
      crash LLDB. Apple's LLDB was never affected by this crash as it never saved
      empty expressions in the first place.
      
      Reviewed By: augusto2112
      
      Differential Revision: https://reviews.llvm.org/D108983
      4f7fb13f
    • LLVM GN Syncbot's avatar
      [gn build] Port e983a659 · 9c37eda6
      LLVM GN Syncbot authored
      9c37eda6
    • Mark de Wever's avatar
      [libc++][NFC] split <charconv>. · e983a659
      Mark de Wever authored
      This move the helper types `chars_format`, `to_chars_result` and
      `from_chars_result` to a separate header. The first two are needed for
      D70631 the third for consistency.
      
      The header `__charconv/ryu.h` uses these types and it can't depend on the
      types in `<charconv>` in a modular build. Moving them to the ryu header
      would be an odd place and doesn't work since the header is included in the
      middle of `<charconv>`.
      
      Reviewed By: #libc, ldionne, Quuxplusone
      
      Differential Revision: https://reviews.llvm.org/D108927
      e983a659
    • Philip Reames's avatar
      [runtime] Move prolog/epilog block to a post-simplify strategy · b604fcb7
      Philip Reames authored
      The runtime unroller will try to produce a non-loop if the unroll count is 2 and thus the prolog/epilog loop would only run at most one iteration. The old implementation did this by avoiding loop construction entirely. This patches instead constructs the trivial loop and then explicitly breaks the backedge and simplifies. This does result in some additional code churn when triggered, but a) results in better quality code and b) removes a codepath which didn't work properly for multiple exit epilogs.
      
      One oddity that I want to draw to reviewer attention is that this somehow changes revisit order. The new order looks equivalent to me, but I don't understand how creating and erasing an extra loop here creates this effect.
      
      Differential Revision: https://reviews.llvm.org/D108521
      b604fcb7
    • Philip Reames's avatar
      [AlignFromAssume] Bailout w/non-constant alignments (pr51680) · 9b45fd90
      Philip Reames authored
      This is a bailout for pr51680.  This pass appears to assume that the alignment operand to an align tag on an assume bundle is constant.  This doesn't appear to be required anywhere, and clang happily generates non-constant alignments for cases such as this case taken from the bug report:
      
      // clang -cc1 -triple powerpc64-- -S -O1 opal_pci-min.c
      extern int a[];
      long *b;
      long c;
      void *d(long, int *, int, long, long, long) __attribute__((__alloc_align__(6)));
      void e() {
        b = d(c, a, 0, 0, 5, c);
        b[0] = 0;
      }
      
      This was exposed by a SCEV change which allowed a non-constant alignment to reach further into the pass' code.  We could generalize the pass, but for now, let's fix the crash.
      9b45fd90
    • Shilei Tian's avatar
      [OpenMP] Fix task wait doesn't work as expected in serialized team · 8442967f
      Shilei Tian authored
      As discussed in D107121, task wait doesn't work when a regular task T depends on
      a detached task or a hidden helper task T' in a serialized team. The root cause is,
      since the team is serialized, the last task will not be tracked by
      `td_incomplete_child_tasks`. When T' is finished, it first releases its
      dependences, and then decrements its parent counter. So far so good. For the thread
      that is running task wait, if at the moment it is still spinning and trying to
      execute tasks, it is fine because it can detect the new task and execute it.
      However, if it happends to finish the function `flag.execute_tasks(...)`, it will
      be broken because `td_incomplete_child_tasks` is 0 now.
      
      In this patch, we update the rule to track children tasks a little bit. If the
      task team encounters a proxy task or a hidden helper task, all following tasks
      will be tracked.
      
      Reviewed By: AndreyChurbanov
      
      Differential Revision: https://reviews.llvm.org/D107496
      8442967f
    • Sanjay Patel's avatar
      [InstCombine] fix typos in comments; NFC · 6c0181c0
      Sanjay Patel authored
      6c0181c0
  2. Aug 31, 2021