Started 8 days 4 hr ago
Took 5 hr 20 min on green-dragon-02

Success Build #14659 (Sep 8, 2019 6:06:05 PM)

  • : 371353
  • : 371342
  • : 371354
  • : 371154
  • : 371324
  • : 371250
  1. Enable LSan for NetBSD/i386 in test/asan/ (detail)
    by kamil
  2. [X86][SSE] SimplifyDemandedVectorEltsForTargetNode - add faux shuffle support.

    This patch decodes target and faux shuffles with getTargetShuffleInputs - a reduced version of resolveTargetShuffleInputs that doesn't resolve SM_SentinelZero cases, so we can correctly remove zero vectors if they aren't demanded. (detail)
    by rksimon
  3. [InstCombine][NFC] Some tests for usub overflow+nonzero check improvement (PR43251) (detail)
    by lebedevri
  4. [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)
    by ctopper
  5. [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)
    by ctopper
  6. [InstSimplify] simplifyUnsignedRangeCheck(): if we know that X != 0, handle more cases (PR43246)

    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
    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:

    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.

    Reviewers: spatel, nikic, vsk

    Reviewed By: spatel

    Subscribers: hiraditya, llvm-commits, reames

    Tags: #llvm

    Differential Revision: (detail)
    by lebedevri
  7. [InstCombine] add tests for icmp with srem operand; NFC (detail)
    by spatel

Started by timer (5 times)

This run spent:

  • 4 hr 55 min waiting;
  • 5 hr 20 min build duration;
  • 10 hr total from scheduled to completion.
Test Result (no failures)