Skip to content
  1. Aug 18, 2015
  2. Aug 17, 2015
    • David Majnemer's avatar
      [WinEHPrepare] Replace unreasonable funclet terminators with unreachable · 83f4bb23
      David Majnemer authored
      It is possible to be in a situation where more than one funclet token is
      a valid SSA value.  If we see a terminator which exits a funclet which
      doesn't use the funclet's token, replace it with unreachable.
      
      Differential Revision: http://reviews.llvm.org/D12074
      
      llvm-svn: 245238
      83f4bb23
    • Douglas Katzman's avatar
      [SPARC]: recognize '.' as the start of an assembler expression. · 685a7d1a
      Douglas Katzman authored
      llvm-svn: 245232
      685a7d1a
    • James Molloy's avatar
      [ARM] Fix crash when targetting CPU without NEON · 974838f2
      James Molloy authored
      We emulate a scalar vmin/vmax with NEON instructions as they don't exist in the VFP ISA. So only mark these as legal when NEON is available.
      
      Found here: https://code.google.com/p/chromium/issues/detail?id=521671
      
      llvm-svn: 245231
      974838f2
    • Igor Laevsky's avatar
      [ScalarEvolutionExpander] Reuse findExistingExpansion during expansion cost... · 06044f97
      Igor Laevsky authored
      [ScalarEvolutionExpander] Reuse findExistingExpansion during expansion cost calculation for division
      
      Primary purpose of this change is to reuse existing code inside findExistingExpansion. However it introduces very slight semantic change - findExistingExpansion now looks into exiting blocks instead of a loop latches. Originally heuristic was based on the fact that we want to look at the loop exit conditions. And since all exiting latches will be listed in the ExitingBlocks, heuristic stays roughly the same.
      
      Differential Revision: http://reviews.llvm.org/D12008
      
      llvm-svn: 245227
      06044f97
    • Silviu Baranga's avatar
      [CostModel][AArch64] Increase cost of vector insert element and add missing cast costs · b322aa6f
      Silviu Baranga authored
      Summary:
      Increase the estimated costs for insert/extract element operations on
      AArch64. This is motivated by results from benchmarking interleaved
      accesses.
      
      Add missing costs for zext/sext/trunc instructions and some integer to
      floating point conversions. These costs were previously calculated
      by scalarizing these operation and were affected by the cost increase of
      the insert/extract element operations.
      
      Reviewers: rengolin
      
      Subscribers: mcrosier, aemerson, rengolin, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D11939
      
      llvm-svn: 245226
      b322aa6f
    • Silviu Baranga's avatar
      [CostModel][ARM] Increase cost of insert/extract operations · d5ac2693
      Silviu Baranga authored
      Summary:
      This change limits the minimum cost of an insert/extract
      element operation to 2 in cases where this would result
      in mixing of NEON and VFP code.
      
      Reviewers: rengolin
      
      Subscribers: mssimpso, aemerson, llvm-commits, rengolin
      
      Differential Revision: http://reviews.llvm.org/D12030
      
      llvm-svn: 245225
      d5ac2693
    • Igor Laevsky's avatar
      [BasicAliasAnalysis] Do not check ModRef table for intrinsics · b20bda77
      Igor Laevsky authored
      All possible ModRef behaviours can be completely represented using existing LLVM IR attributes.
      
      Differential Revision: http://reviews.llvm.org/D12033
      
      llvm-svn: 245224
      b20bda77
    • Artur Pilipenko's avatar
      Take alignment into account in isSafeToSpeculativelyExecute and isSafeToLoadUnconditionally. · 34d8ba84
      Artur Pilipenko authored
      Reviewed By: hfinkel, sanjoy, MatzeB
      
      Differential Revision: http://reviews.llvm.org/D9791
      
      llvm-svn: 245223
      34d8ba84
    • Benjamin Kramer's avatar
      Extend MCAsmLexer so that it can peek forward several tokens · 1ee99a8b
      Benjamin Kramer authored
      This commit adds a virtual `peekTokens()` function to `MCAsmLexer`
      which can peek forward an arbitrary number of tokens.
      
      It also makes the `peekTok()` method call `peekTokens()` method, but
      only requesting one token.
      
      The idea is to better support targets which more more ambiguous
      assembly syntaxes.
      
      Patch by Dylan McKay!
      
      llvm-svn: 245221
      1ee99a8b
    • Aaron Ballman's avatar
    • Joseph Tremoulet's avatar
      [WinEHPrepare] Fix catchret successor phi demotion · 7031c9fc
      Joseph Tremoulet authored
      Summary:
      When demoting an SSA value that has a use on a phi and one of the phi's
      predecessors terminates with catchret, the edge needs to be split and the
      load inserted in the new block, else we'll still have a cross-funclet SSA
      value.
      
      Add a test for this, and for the similar case where a def to be spilled is
      on and invoke and a critical edge, which was already implemented but
      missing a test.
      
      Reviewers: majnemer
      
      Subscribers: llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D12065
      
      llvm-svn: 245218
      7031c9fc
    • Tobias Grosser's avatar
      Revert "Disable targetdatalayoutcheck" · 58fdd887
      Tobias Grosser authored
      I committed by accident a local hack that should not have made it upstream.
      Sorry for the noise.
      
      llvm-svn: 245212
      58fdd887
    • Tobias Grosser's avatar
      Disable targetdatalayoutcheck · 607b8b26
      Tobias Grosser authored
      llvm-svn: 245210
      607b8b26
    • Daniel Sanders's avatar
      [mips] [IAS] Add support for the DLA pseudo-instruction and fix problems with DLI · a39ef1c6
      Daniel Sanders authored
      Summary: It is the same as LA, except that it can also load 64-bit addresses and it only works on 64-bit MIPS architectures.
      
      Reviewers: tomatabacu, seanbruno, vkalintiris
      
      Subscribers: brooks, seanbruno, emaste, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D9524
      
      llvm-svn: 245208
      a39ef1c6
    • Michael Kuperstein's avatar
      [GMR] isNonEscapingGlobalNoAlias() should look through Bitcasts/GEPs when looking at loads. · adc4e9c4
      Michael Kuperstein authored
      This fixes yet another case from PR24288.
      
      Differential Revision: http://reviews.llvm.org/D12064
      
      llvm-svn: 245207
      adc4e9c4
    • James Molloy's avatar
      Remove hand-rolled matching for fmin and fmax. · 88edc824
      James Molloy authored
      SDAGBuilder now does this all for us.
      
      llvm-svn: 245198
      88edc824
    • James Molloy's avatar
      Rip out hand-rolled matching code for VMIN, VMAX, VMINNM and VMAXNM · c617be55
      James Molloy authored
      This is no longer needed - SDAGBuilder will do this for us.
      
      llvm-svn: 245197
      c617be55
    • James Molloy's avatar
      Generate FMINNAN/FMINNUM/FMAXNAN/FMAXNUM from SDAGBuilder. · ef183397
      James Molloy authored
      These only get generated if the target supports them. If one of the variants is not legal and the other is, and it is safe to do so, the other variant will be emitted.
      
      For example on AArch32 (V8), we have scalar fminnm but not fmin.
      
      Fix up a couple of tests while we're here - one now produces better code, and the other was just plain wrong to start with.
      
      llvm-svn: 245196
      ef183397
    • Karthik Bhat's avatar
      Fix PR24469 resulting from r245025 and re-enable dead store elimination across basicblocks. · 3af28945
      Karthik Bhat authored
      PR24469 resulted because DeleteDeadInstruction in handleNonLocalStoreDeletion was
      deleting the next basic block iterator. Fixed the same by resetting the basic block iterator
      post call to DeleteDeadInstruction.
      
      llvm-svn: 245195
      3af28945
    • David Majnemer's avatar
      Revert "[InstCombinePHI] Partial simplification of identity operations." · 8ed559ad
      David Majnemer authored
      This reverts commit r244887, it caused PR24470.
      
      llvm-svn: 245194
      8ed559ad
    • Chandler Carruth's avatar
      [PM] Port ScalarEvolution to the new pass manager. · 2f1fd165
      Chandler Carruth authored
      This change makes ScalarEvolution a stand-alone object and just produces
      one from a pass as needed. Making this work well requires making the
      object movable, using references instead of overwritten pointers in
      a number of places, and other refactorings.
      
      I've also wired it up to the new pass manager and added a RUN line to
      a test to exercise it under the new pass manager. This includes basic
      printing support much like with other analyses.
      
      But there is a big and somewhat scary change here. Prior to this patch
      ScalarEvolution was never *actually* invalidated!!! Re-running the pass
      just re-wired up the various other analyses and didn't remove any of the
      existing entries in the SCEV caches or clear out anything at all. This
      might seem OK as everything in SCEV that can uses ValueHandles to track
      updates to the values that serve as SCEV keys. However, this still means
      that as we ran SCEV over each function in the module, we kept
      accumulating more and more SCEVs into the cache. At the end, we would
      have a SCEV cache with every value that we ever needed a SCEV for in the
      entire module!!! Yowzers. The releaseMemory routine would dump all of
      this, but that isn't realy called during normal runs of the pipeline as
      far as I can see.
      
      To make matters worse, there *is* actually a key that we don't update
      with value handles -- there is a map keyed off of Loop*s. Because
      LoopInfo *does* release its memory from run to run, it is entirely
      possible to run SCEV over one function, then over another function, and
      then lookup a Loop* from the second function but find an entry inserted
      for the first function! Ouch.
      
      To make matters still worse, there are plenty of updates that *don't*
      trip a value handle. It seems incredibly unlikely that today GVN or
      another pass that invalidates SCEV can update values in *just* such
      a way that a subsequent run of SCEV will incorrectly find lookups in
      a cache, but it is theoretically possible and would be a nightmare to
      debug.
      
      With this refactoring, I've fixed all this by actually destroying and
      recreating the ScalarEvolution object from run to run. Technically, this
      could increase the amount of malloc traffic we see, but then again it is
      also technically correct. ;] I don't actually think we're suffering from
      tons of malloc traffic from SCEV because if we were, the fact that we
      never clear the memory would seem more likely to have come up as an
      actual problem before now. So, I've made the simple fix here. If in fact
      there are serious issues with too much allocation and deallocation,
      I can work on a clever fix that preserves the allocations (while
      clearing the data) between each run, but I'd prefer to do that kind of
      optimization with a test case / benchmark that shows why we need such
      cleverness (and that can test that we actually make it faster). It's
      possible that this will make some things faster by making the SCEV
      caches have higher locality (due to being significantly smaller) so
      until there is a clear benchmark, I think the simple change is best.
      
      Differential Revision: http://reviews.llvm.org/D12063
      
      llvm-svn: 245193
      2f1fd165
    • Chandler Carruth's avatar
      [ADT] Teach FoldingSet to be movable. · b596ba23
      Chandler Carruth authored
      This is a very minimal move support - it leaves the moved-from object in
      a zombie state that is only valid for destruction and move assignment.
      This seems fine to me, and leaving it in the default constructed state
      would require adding more state to the object and potentially allocating
      memory (!!!) and so seems like a Bad Idea.
      
      llvm-svn: 245192
      b596ba23
  3. Aug 16, 2015
Loading