Started 9 days 21 hr ago
Took 1 hr 19 min on green-dragon-17

Success Build rL:371351 - C:371342 - #499 (Sep 8, 2019 1:55:44 PM)

Revisions
  • http://llvm.org/svn/llvm-project/llvm/trunk : 371351
  • http://llvm.org/svn/llvm-project/cfe/trunk : 371342
  • http://llvm.org/svn/llvm-project/compiler-rt/trunk : 371338
  • http://llvm.org/svn/llvm-project/debuginfo-tests/trunk : 364589
  • http://llvm.org/svn/llvm-project/zorg/trunk : 371154
  • http://llvm.org/svn/llvm-project/libcxx/trunk : 371324
  • http://llvm.org/svn/llvm-project/clang-tools-extra/trunk : 371250
Changes
  1. [X86] Add a hack to combineVSelectWithAllOnesOrZeros to turn selects with two zero/undef vector inputs into an all zeroes vector.

    If the two zero vectors have undefs in different places they
    won't get combined by simplifySelect.

    This fixes a regression from an earlier commit. (detail/ViewSVN)
    by ctopper
  2. [X86] Remove call to getZeroVector from materializeVectorConstant. Add isel patterns for zero vectors with all types.

    The change to avx512-vec-cmp.ll is a regression, but should be
    easy to fix. It occurs because the getZeroVector call was
    canonicalizing both sides to the same node, then SimplifySelect
    was able to simplify it. But since only called getZeroVector
    on some VTs this isn't a robust way to combine this.

    The change to vector-shuffle-combining-ssse3.ll is more
    instructions, but removes a constant pool load so its unclear
    if its a regression or not. (detail/ViewSVN)
    by ctopper
  3. [InstSimplify] simplifyUnsignedRangeCheck(): if we know that X != 0, handle more cases (PR43246)

    Summary:
    This is motivated by D67122 sanitizer check enhancement.
    That patch seemingly worsens `-fsanitize=pointer-overflow`
    overhead from 25% to 50%, which strongly implies missing folds.

    In this particular case, given
    ```
    char* test(char& base, unsigned long offset) {
      return &base + offset;
    }
    ```
    it will end up producing something like
    https://godbolt.org/z/LK5-iH
    which after optimizations reduces down to roughly
    ```
    define i1 @t0(i8* nonnull %base, i64 %offset) {
      %base_int = ptrtoint i8* %base to i64
      %adjusted = add i64 %base_int, %offset
      %non_null_after_adjustment = icmp ne i64 %adjusted, 0
      %no_overflow_during_adjustment = icmp uge i64 %adjusted, %base_int
      %res = and i1 %non_null_after_adjustment, %no_overflow_during_adjustment
      ret i1 %res
    }
    ```
    Without D67122 there was no `%non_null_after_adjustment`,
    and in this particular case we can get rid of the overhead:

    Here we add some offset to a non-null pointer,
    and check that the result does not overflow and is not a null pointer.
    But since the base pointer is already non-null, and we check for overflow,
    that overflow check will already catch the null pointer,
    so the separate null check is redundant and can be dropped.

    Alive proofs:
    https://rise4fun.com/Alive/WRzq

    There are more patterns of "unsigned-add-with-overflow", they are not handled here,
    but this is the main pattern, that we currently consider canonical,
    so it makes sense to handle it.

    https://bugs.llvm.org/show_bug.cgi?id=43246

    Reviewers: spatel, nikic, vsk

    Reviewed By: spatel

    Subscribers: hiraditya, llvm-commits, reames

    Tags: #llvm

    Differential Revision: https://reviews.llvm.org/D67332 (detail/ViewSVN)
    by lebedevri
  4. [InstCombine] add tests for icmp with srem operand; NFC (detail/ViewSVN)
    by spatel

Started by an SCM change (2 times)

This run spent:

  • 1 hr 3 min waiting;
  • 1 hr 19 min build duration;
  • 2 hr 23 min total from scheduled to completion.
LLVM/Clang Warnings: 1 warning.
    Test Result (no failures)