1. Oct 26, 2020
    • Craig Topper's avatar
    • Sanjay Patel's avatar
      [CostModel] remove cost-kind predicate for some vector reduction costs · f2c25c70
      Sanjay Patel authored
      This is a modified 2nd try of 22d10b8a
      (reverted by 1c837169 because it managed
      to expose an existing crashing bug that should be fixed by
      74ffc823 ).
      
      Original commit message:
      
      This is similar in spirit to 01ea93d8 (memcpy) except that
      here the underlying caller assumptions were created for vectorizer
      use (throughput) rather than other passes.
      
      That meant targets could have an enormous throughput cost with no
      corresponding size, latency, or blended cost increase.
      The ARM costs show a small difference between throughput and
      size because there's an underlying difference in cmp/sel
      costs that is also predicated on cost-kind.
      
      Paraphrasing from the previous commits:
      This may not make sense for some callers, but at least now the
      costs will be consistently wrong instead of mysteriously wrong.
      
      Targets should provide better overrides if the current modeling
      is not accurate.
      f2c25c70
    • Sanjay Patel's avatar
      [CostModel] fix operand/type accounting for fadd/fmul reductions · 74ffc823
      Sanjay Patel authored
      I'm not sure if/how this ever worked, but it must not be tested
      currently because the basic tests added here were crashing as
      noted in the post-review comments for 1c837169 (which reverted
      another cost-model fix in 22d10b8a).
      74ffc823
    • Nikita Popov's avatar
      [SCEV] Strenthen nowrap flags after constant folding for mul exprs · ebeef022
      Nikita Popov authored
      Same change as 0dda6333, but for
      mul expressions. We want to first fold any constant operans and
      then strengthen the nowrap flags, as we can compute more precise
      flags at that point.
      ebeef022
    • Aaron Puchert's avatar
      Thread safety analysis: Nullability improvements in TIL, NFCI · b296c64e
      Aaron Puchert authored
      The constructor of Project asserts that the contained ValueDecl is not
      null, use that in the ThreadSafetyAnalyzer. In the case of LiteralPtr
      it's the other way around.
      
      Also dyn_cast<> is sufficient if we know something isn't null.
      b296c64e
    • Aaron Puchert's avatar
      Thread safety analysis: Consider global variables in scope · 5250a03a
      Aaron Puchert authored
      Instead of just mutex members we also consider mutex globals.
      Unsurprisingly they are always in scope. Now the paper [1] says that
      
      > The scope of a class member is assumed to be its enclosing class,
      > while the scope of a global variable is the translation unit in
      > which it is defined.
      
      But I don't think we should limit this to TUs where a definition is
      available - a declaration is enough to acquire the mutex, and if a mutex
      is really limited in scope to a translation unit, it should probably be
      only declared there.
      
      The previous attempt in 9dcc82f3 was causing false positives because
      I wrongly assumed that LiteralPtrs were always globals, which they are
      not. This should be fixed now.
      
      [1] https://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/42958.pdf
      
      Fixes PR46354.
      
      Reviewed By: aaron.ballman
      
      Differential Revision: https://reviews.llvm.org/D84604
      5250a03a
    • Nikita Popov's avatar
      [SCEV] Always constant fold mul expression operands · 1ff313f0
      Nikita Popov authored
      Establish parity with the handling of add expressions, by always
      constant folding mul expression operands before checking the depth
      limit (this is a non-recursive simplification). The code was already
      unconditionally constant folding the case where all operands were
      constants, but was not folding multiple constant operands together
      if there were also non-constant operands.
      
      This requires picking out a different demonstration for depth-based
      folding differences in the limit-depth.ll test.
      1ff313f0
    • Nikita Popov's avatar
      [SCEV] Separate out constant folding in mul expr creation · 22a5cde5
      Nikita Popov authored
      Separate out the code handling constant folding into a separate
      block, that is independent of other folds that need a constant
      first operand. Also make some minor adjustments to make the
      constant folding look nearly identical to the same code in
      getAddExpr().
      
      The only reason this change is not strictly NFC is that the
      C1*(C2+V) fold is moved below the constant folding, which means
      that it now also applies to C1*C2*(C3+V), as it should.
      22a5cde5
    • Nikita Popov's avatar
      [SCEV] Strength nowrap flags after constant folding · 0dda6333
      Nikita Popov authored
      We should first try to constant fold the add expression and only
      strengthen nowrap flags afterwards. This allows us to determine
      stronger flags if e.g. only two operands are left after constant
      folding (and thus "guaranteed no wrap region" code applies) or the
      resulting operands are non-negative and thus nsw->nuw strengthening
      applies.
      0dda6333
    • Nikita Popov's avatar
      [IndVars] Regenerate test checks (NFC) · c5718253
      Nikita Popov authored
      Also run the test case through -instnamer.
      c5718253
  2. Oct 25, 2020
  3. Oct 24, 2020