1. Nov 28, 2019
    • Saleem Abdulrasool's avatar
      build: avoid cached literals being linked against · cfcfd8a0
      Saleem Abdulrasool authored
      If the value of the LibXml2 search is cached, it can cause an errant
      link against LIBXML2_LIBRARIES-NOTFOUND if libxml2 is not found. Add
      a guard against this.  Should repair the build bots.
      cfcfd8a0
    • Saleem Abdulrasool's avatar
      build: avoid hardcoding the libxml2 library name · 340e7c0b
      Saleem Abdulrasool authored
      FindLibXml2 will set the LIBXML2_LIBRARIES variable to the libraries that
      we must link against. This will be an empty string if libxml2 is not
      found. Avoid hardcoding the library name as xml2 in the configuration.
      Simplify the usage in the WindowsManifest library.
      340e7c0b
    • Stefan Pintilie's avatar
      [PowerPC] Add new Future CPU for PowerPC in LLVM · dcceab1a
      Stefan Pintilie authored
      This is a continuation of D70262
      The previous patch as listed above added the future CPU in clang. This patch
      adds the future CPU in the PowerPC backend. At this point the patch simply
      assumes that a future CPU will have the same characteristics as pwr9. Those
      characteristics may change with later patches.
      
      Differential Revision: https://reviews.llvm.org/D70333
      dcceab1a
    • Nandor Licker's avatar
      [ConstExprPreter] Removed the flag forcing the use of the interpreter · f584f04d
      Nandor Licker authored
      Summary:
      Removed the ```-fforce-experimental-new-constant-interpreter flag```, leaving
      only the ```-fexperimental-new-constant-interpreter``` one. The interpreter
      now always emits an error on an unsupported feature.
      
      Allowing the interpreter to bail out would require a mapping from APValue to
      interpreter memory, which will not be necessary in the final version. It is
      more sensible to always emit an error if the interpreter fails.
      
      Reviewers: jfb, Bigcheese, rsmith, dexonsmith
      
      Subscribers: cfe-commits
      
      Tags: #clang
      
      Differential Revision: https://reviews.llvm.org/D70071
      f584f04d
    • Craig Topper's avatar
      [CriticalAntiDepBreaker] Teach the regmask clobber check to check if any... · 9283681e
      Craig Topper authored
      [CriticalAntiDepBreaker] Teach the regmask clobber check to check if any subregister is preserved before considering the super register clobbered
      
      X86 has some calling conventions where bits 127:0 of a vector register are callee saved, but the upper bits aren't. Previously we could detect that the full ymm register was clobbered when the xmm portion was really preserved. This patch checks the subregisters to make sure they aren't preserved.
      
      Fixes PR44140
      
      Differential Revision: https://reviews.llvm.org/D70699
      9283681e
    • taewookoh's avatar
      Revert b19ec1eb · 5d21f75b
      taewookoh authored
      Summary: This reverts commit b19ec1eb as it fails powerpc tests
      
      Subscribers: llvm-commits
      5d21f75b
    • Sanjay Patel's avatar
      [x86] make SLM extract vector element more expensive than default · 5c166f1d
      Sanjay Patel authored
      I'm not sure what the effect of this change will be on all of the affected
      tests or a larger benchmark, but it fixes the horizontal add/sub problems
      noted here:
      https://reviews.llvm.org/D59710?vs=227972&id=228095&whitespace=ignore-most#toc
      
      The costs are based on reciprocal throughput numbers in Agner's tables for
      PEXTR*; these appear to be very slow ops on Silvermont.
      
      This is a small step towards the larger motivation discussed in PR43605:
      https://bugs.llvm.org/show_bug.cgi?id=43605
      
      Also, it seems likely that insert/extract is the source of perf regressions on
      other CPUs (up to 30%) that were cited as part of the reason to revert D59710,
      so maybe we'll extend the table-based approach to other subtargets.
      
      Differential Revision: https://reviews.llvm.org/D70607
      5c166f1d
    • Gabor Horvath's avatar
      [clang-tidy] Fix PR35824 · 5c5e8605
      Gabor Horvath authored
      Differential Revision: https://reviews.llvm.org/D46027
      5c5e8605
    • Roman Lebedev's avatar
      [clang][CodeGen] Implicit Conversion Sanitizer: handle increment/decrement (PR44054)(take 2) · b98a0c7f
      Roman Lebedev authored
      Summary:
      Implicit Conversion Sanitizer is *almost* feature complete.
      There aren't *that* much unsanitized things left,
      two major ones are increment/decrement (this patch) and bit fields.
      
      As it was discussed in
      [[ https://bugs.llvm.org/show_bug.cgi?id=39519 | PR39519 ]],
      unlike `CompoundAssignOperator` (which is promoted internally),
      or `BinaryOperator` (for which we always have promotion/demotion in AST)
      or parts of `UnaryOperator` (we have promotion/demotion but only for
      certain operations), for inc/dec, clang omits promotion/demotion
      altogether, under as-if rule.
      
      This is technically correct: https://rise4fun.com/Alive/zPgD
      As it can be seen in `InstCombineCasts.cpp` `canEvaluateTruncated()`,
      `add`/`sub`/`mul`/`and`/`or`/`xor` operators can all arbitrarily
      be extended or truncated:
      https://github.com/llvm/llvm-project/blob/901cd3b3f62d0c700e5d2c3f97eff97d634bec5e/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp#L1320-L1334
      
      But that has serious implications:
      1. Since we no longer model implicit casts, do we pessimise
         their AST representation and everything that uses it?
      2. There is no demotion, so lossy demotion sanitizer does not trigger :]
      
      Now, i'm not going to argue about the first problem here,
      but the second one **needs** to be addressed. As it was stated
      in the report, this is done intentionally, so changing
      this in all modes would be considered a penalization/regression.
      Which means, the sanitization-less codegen must not be altered.
      
      It was also suggested to not change the sanitized codegen
      to the one with demotion, but i quite strongly believe
      that will not be the wise choice here:
      1. One will need to re-engineer the check that the inc/dec was lossy
         in terms of `@llvm.{u,s}{add,sub}.with.overflow` builtins
      2. We will still need to compute the result we would lossily demote.
         (i.e. the result of wide `add`ition/`sub`traction)
      3. I suspect it would need to be done right here, in sanitization.
         Which kinda defeats the point of
         using `@llvm.{u,s}{add,sub}.with.overflow` builtins:
         we'd have two `add`s with basically the same arguments,
         one of which is used for check+error-less codepath and other one
         for the error reporting. That seems worse than a single wide op+check.
      4. OR, we would need to do that in the compiler-rt handler.
         Which means we'll need a whole new handler.
         But then what about the `CompoundAssignOperator`,
         it would also be applicable for it.
         So this also doesn't really seem like the right path to me.
      5. At least X86 (but likely others) pessimizes all sub-`i32` operations
         (due to partial register stalls), so even if we avoid promotion+demotion,
         the computations will //likely// be performed in `i32` anyways.
      
      So i'm not really seeing much benefit of
      not doing the straight-forward thing.
      
      While looking into this, i have noticed a few more LLVM middle-end
      missed canonicalizations, and filed
      [[ https://bugs.llvm.org/show_bug.cgi?id=44100 | PR44100 ]],
      [[ https://bugs.llvm.org/show_bug.cgi?id=44102 | PR44102 ]].
      
      Those are not specific to inc/dec, we also have them for
      `CompoundAssignOperator`, and it can happen for normal arithmetics, too.
      But if we take some other path in the patch, it will not be applicable
      here, and we will have most likely played ourselves.
      
      TLDR: front-end should emit canonical, easy-to-optimize yet
      un-optimized code. It is middle-end's job to make it optimal.
      
      I'm really hoping reviewers agree with my personal assessment
      of the path this patch should take..
      
      This originally landed in 9872ea4e
      but got immediately reverted in cbfa2378
      because the assertion was faulty. That fault ended up being caused
      by the enum - while there will be promotion, both types are unsigned,
      with same width. So we still don't need to sanitize non-signed cases.
      So far. Maybe the assert will tell us this isn't so.
      
      Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=44054 | PR44054 ]].
      Refs. https://github.com/google/sanitizers/issues/940
      
      Reviewers: rjmccall, erichkeane, rsmith, vsk
      
      Reviewed By: erichkeane
      
      Subscribers: mehdi_amini, dexonsmith, cfe-commits, #sanitizers, llvm-commits, aaron.ballman, t.p.northover, efriedma, regehr
      
      Tags: #llvm, #clang, #sanitizers
      
      Differential Revision: https://reviews.llvm.org/D70539
      b98a0c7f
    • Craig Topper's avatar
      [LegalizeTypes][FPEnv][X86] Add initial support for softening strict fp nodes · ebfff46c
      Craig Topper authored
      This is based on what's required for softening fp128 operations on 32-bit X86 assuming f32/f64/f80 are legal. So there could be some things missing.
      
      Differential Revision: https://reviews.llvm.org/D70654
      ebfff46c
    • Taewook Oh's avatar
      [BPI] Improve unreachable/ColdCall heurstics to handle loops. · b19ec1eb
      Taewook Oh authored
      Summary:
      While updatePostDominatedByUnreachable attemps to find basic blocks that are post-domianted by unreachable blocks, it currently cannot handle loops precisely, because it doesn't use the actual post dominator tree analysis but relies on heuristics of visiting basic blocks in post-order. More precisely, when the entire loop is post-dominated by the unreachable block, current algorithm fails to detect the entire loop as post-dominated by the unreachable because when the algorithm reaches to the loop latch it fails to tell all its successors (including the loop header) will "eventually" be post-domianted by the unreachable block, because the algorithm hasn't visited the loop header yet. This makes BPI for the loop latch to assume that loop backedges are taken with 100% of probability. And because of this, block frequency info sometimes marks virtually dead loops (which are post dominated by unreachable blocks) super hot, because 100% backedge-taken probability makes the loop iteration count the max value. updatePostDominatedByColdCall has the exact same problem as well.
      
      To address this problem, this patch makes PostDominatedByUnreachable/PostDominatedByColdCall to be computed with the actual post-dominator tree.
      
      Reviewers: skatkov, chandlerc, manmanren
      
      Reviewed By: skatkov
      
      Subscribers: manmanren, vsk, apilipenko, Carrot, qcolombet, hiraditya, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D70104
      b19ec1eb
    • Peter Collingbourne's avatar
      scudo: Limit the number of bytes tested in a realloc test. · b208088a
      Peter Collingbourne authored
      This test was previously effectively doing:
      P = malloc(X); write X bytes to P; P = realloc(P, X - Y); P = realloc(P, X)
      and expecting that all X bytes stored to P would still be identical after
      the final realloc.
      
      This happens to be true for the current scudo implementation of realloc,
      but is not guaranteed to be true by the C standard ("Any bytes in the new
      object beyond the size of the old object have indeterminate values.").
      This implementation detail will change with the new memory tagging support,
      which unconditionally zeros newly allocated granules when memory tagging
      is enabled. Fix this by limiting the number of bytes that we test to the
      minimum size that we realloc the allocation to.
      
      Differential Revision: https://reviews.llvm.org/D70761
      b208088a
    • Peter Collingbourne's avatar
      scudo: Replace a couple of macros with their expansions. · 6fd6cfdf
      Peter Collingbourne authored
      The macros INLINE and COMPILER_CHECK always expand to the same thing (inline
      and static_assert respectively). Both expansions are standards compliant C++
      and are used consistently in the rest of LLVM, so let's improve consistency
      with the rest of LLVM by replacing them with the expansions.
      
      Differential Revision: https://reviews.llvm.org/D70793
      6fd6cfdf
    • Peter Collingbourne's avatar
      scudo: Call setCurrentTSD(nullptr) when bringing down the TSD registry in tests. · f30fe16d
      Peter Collingbourne authored
      Otherwise, we will hit a use-after-free when testing multiple instances of
      the same allocator on the same thread. This only recently became a problem
      with D70552 which caused us to run both ScudoCombinedTest.BasicCombined and
      ScudoCombinedTest.ReleaseToOS on the unit tests' main thread.
      
      Differential Revision: https://reviews.llvm.org/D70760
      f30fe16d
    • Martin Liska's avatar
      Make memory dump same as the one in asan. · 2045d2c9
      Martin Liska authored
      Shadow memory (and short granules) are not prepended with memory
      address and arrow at the end of line is removed.
      
      Differential Revision: https://reviews.llvm.org/D70707
      2045d2c9
    • Kostya Kortchinsky's avatar
      [scudo][standalone] Make tests work on Fuchsia · 0d3d4d3b
      Kostya Kortchinsky authored
      Summary:
      This CL makes unit tests compatible with Fuchsia's zxtest. This
      required a few changes here and there, but also unearthed some
      incompatibilities that had to be addressed.
      
      A header is introduced to allow to account for the zxtest/gtest
      differences, some `#if SCUDO_FUCHSIA` are used to disable incompatible
      code (the 32-bit primary, or the exclusive TSD).
      
      It also brought to my attention that I was using
      `__scudo_default_options` in different tests, which ended up in a
      single binary, and I am not sure how that ever worked. So move
      this to the main cpp.
      
      Additionally fully disable the secondary freelist on Fuchsia as we do
      not track VMOs for secondary allocations, so no release possible.
      
      With some modifications to Scudo's BUILD.gn in Fuchsia:
      ```
      [==========] 79 tests from 23 test cases ran (10280 ms total).
      [  PASSED  ] 79 tests
      ```
      
      Reviewers: mcgrathr, phosek, hctim, pcc, eugenis, cferris
      
      Subscribers: srhines, jfb, #sanitizers, llvm-commits
      
      Tags: #sanitizers, #llvm
      
      Differential Revision: https://reviews.llvm.org/D70682
      0d3d4d3b
    • Gabor Horvath's avatar
      [LifetimeAnalysis] Fix PR44150 · bcd0798c
      Gabor Horvath authored
      References need somewhat special treatment. While copying a gsl::Pointer
      will propagate the points-to set, creating an object from a reference
      often behaves more like a dereference operation.
      
      Differential Revision: https://reviews.llvm.org/D70755
      bcd0798c
    • Fangrui Song's avatar
      [ELF][ARM] Add getPCBias() · 3d9b1128
      Fangrui Song authored
      ThunkCreator::getThunk and ThunkCreator::normalizeExistingThunk
      currently assume that the implicit addends are -8 for ARM and -4 for
      Thumb. In D70637, ThunkCreator::getThunk will need to take care of the
      relocation addend explicitly.
      
      Add the utility function getPCBias() as a prerequisite so that the getThunk change in D70637
      can be more general.
      
      Reviewed By: peter.smith
      
      Differential Revision: https://reviews.llvm.org/D70690
      3d9b1128
    • Mark Murray's avatar
      [ARM][MVE][Intrinsics] Add MVE VAND/VORR/VORN/VEOR/VBIC intrinsics. Add unit tests. · a048bf87
      Mark Murray authored
      Summary: Add MVE VAND/VORR/VORN/VEOR/VBIC intrinsics. Add unit tests.
      
      Reviewers: simon_tatham, ostannard, dmgreen
      
      Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits
      
      Tags: #clang, #llvm
      
      Differential Revision: https://reviews.llvm.org/D70547
      a048bf87
    • Mark Murray's avatar
      [ARM][MVE][Intrinsics] Add MVE VMUL intrinsics. Remove annoying "t1" from... · e8a8dbe9
      Mark Murray authored
      [ARM][MVE][Intrinsics] Add MVE VMUL intrinsics. Remove annoying "t1" from VMUL* instructions. Add unit tests.
      
      Summary: Add MVE VMUL intrinsics. Remove annoying "t1" from VMUL* instructions. Add unit tests.
      
      Reviewers: simon_tatham, ostannard, dmgreen
      
      Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits
      
      Tags: #clang, #llvm
      
      Differential Revision: https://reviews.llvm.org/D70546
      e8a8dbe9
    • Mark Murray's avatar
      [ARM][MVE][Intrinsics] Add MVE VABD intrinsics. Add unit tests. · f4bba07b
      Mark Murray authored
      Summary: Add MVE VABD intrinsics. Add unit tests.
      
      Reviewers: simon_tatham, ostannard, dmgreen
      
      Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits
      
      Tags: #clang, #llvm
      
      Differential Revision: https://reviews.llvm.org/D70545
      f4bba07b
    • Sanjay Patel's avatar
      [InstCombine] add tests for copysign; NFC · 5e6b7287
      Sanjay Patel authored
      5e6b7287
    • Jay Foad's avatar
      Remove a comment obsoleted by r227345. · c13c5fea
      Jay Foad authored
      c13c5fea
  2. Nov 27, 2019