Skip to content
  1. Jan 17, 2015
    • Chandler Carruth's avatar
      [PM] Remove a dead field. · 24fd029a
      Chandler Carruth authored
      This was dead even before I refactored how we initialized it, but my
      refactoring made it trivially dead and it is now caught by a Clang
      warning. This fixes the warning and should clean up the -Werror bot
      failures (sorry!).
      
      llvm-svn: 226376
      24fd029a
    • Chandler Carruth's avatar
      [PM] Split the LoopInfo object apart from the legacy pass, creating · 4f8f307c
      Chandler Carruth authored
      a LoopInfoWrapperPass to wire the object up to the legacy pass manager.
      
      This switches all the clients of LoopInfo over and paves the way to port
      LoopInfo to the new pass manager. No functionality change is intended
      with this iteration.
      
      llvm-svn: 226373
      4f8f307c
  2. Jan 15, 2015
    • Chandler Carruth's avatar
      [PM] Separate the TargetLibraryInfo object from the immutable pass. · b98f63db
      Chandler Carruth authored
      The pass is really just a means of accessing a cached instance of the
      TargetLibraryInfo object, and this way we can re-use that object for the
      new pass manager as its result.
      
      Lots of delta, but nothing interesting happening here. This is the
      common pattern that is developing to allow analyses to live in both the
      old and new pass manager -- a wrapper pass in the old pass manager
      emulates the separation intrinsic to the new pass manager between the
      result and pass for analyses.
      
      llvm-svn: 226157
      b98f63db
    • David Majnemer's avatar
      SimplifyIndVar: Remove unused variable · f0982d0a
      David Majnemer authored
      OtherOperandIdx is not used anymore, remove it to silence warnings.
      
      llvm-svn: 226138
      f0982d0a
    • NAKAMURA Takumi's avatar
      24ebfcb6
    • Chandler Carruth's avatar
      [PM] Move TargetLibraryInfo into the Analysis library. · 62d4215b
      Chandler Carruth authored
      While the term "Target" is in the name, it doesn't really have to do
      with the LLVM Target library -- this isn't an abstraction which LLVM
      targets generally need to implement or extend. It has much more to do
      with modeling the various runtime libraries on different OSes and with
      different runtime environments. The "target" in this sense is the more
      general sense of a target of cross compilation.
      
      This is in preparation for porting this analysis to the new pass
      manager.
      
      No functionality changed, and updates inbound for Clang and Polly.
      
      llvm-svn: 226078
      62d4215b
    • Sanjoy Das's avatar
      Fix PR22222 · 8c252bde
      Sanjoy Das authored
      The bug was introduced in r225282. r225282 assumed that sub X, Y is
      the same as add X, -Y. This is not correct if we are going to upgrade
      the sub to sub nuw. This change fixes the issue by making the
      optimization ignore sub instructions.
      
      Differential Revision: http://reviews.llvm.org/D6979
      
      llvm-svn: 226075
      8c252bde
  3. Jan 14, 2015
  4. Jan 13, 2015
  5. Jan 12, 2015
  6. Jan 09, 2015
  7. Jan 08, 2015
    • Duncan P. N. Exon Smith's avatar
      Utils: Keep distinct MDNodes distinct in MapMetadata() · 953e1a48
      Duncan P. N. Exon Smith authored
      Create new copies of distinct `MDNode`s instead of following the
      uniquing `MDNode` logic.
      
      Just like self-references (or other cycles), `MapMetadata()` creates a
      new node.  In practice most calls use `RF_NoModuleLevelChanges`, in
      which case nothing is duplicated anyway.
      
      Part of PR22111.
      
      llvm-svn: 225476
      953e1a48
  8. Jan 06, 2015
    • Sanjoy Das's avatar
      This patch teaches IndVarSimplify to add nuw and nsw to certain kinds · 7c0ce266
      Sanjoy Das authored
      of operations that provably don't overflow. For example, we can prove
      %civ.inc below does not sign-overflow. With this change,
      IndVarSimplify changes %civ.inc to an add nsw.
      
        define i32 @foo(i32* %array, i32* %length_ptr, i32 %init) {
         entry:
          %length = load i32* %length_ptr, !range !0
          %len.sub.1 = sub i32 %length, 1
          %upper = icmp slt i32 %init, %len.sub.1
          br i1 %upper, label %loop, label %exit
        
         loop:
          %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ]
          %civ.inc = add i32 %civ, 1
          %cmp = icmp slt i32 %civ.inc, %length
          br i1 %cmp, label %latch, label %break
        
         latch:
          store i32 0, i32* %array
          %check = icmp slt i32 %civ.inc, %len.sub.1
          br i1 %check, label %loop, label %break
        
         break:
          ret i32 %civ.inc
        
         exit:
          ret i32 42
        }
      
      Differential Revision: http://reviews.llvm.org/D6748
      
      llvm-svn: 225282
      7c0ce266
  9. Jan 05, 2015
  10. Jan 04, 2015
    • Chandler Carruth's avatar
      [PM] Split the AssumptionTracker immutable pass into two separate APIs: · 66b3130c
      Chandler Carruth authored
      a cache of assumptions for a single function, and an immutable pass that
      manages those caches.
      
      The motivation for this change is two fold. Immutable analyses are
      really hacks around the current pass manager design and don't exist in
      the new design. This is usually OK, but it requires that the core logic
      of an immutable pass be reasonably partitioned off from the pass logic.
      This change does precisely that. As a consequence it also paves the way
      for the *many* utility functions that deal in the assumptions to live in
      both pass manager worlds by creating an separate non-pass object with
      its own independent API that they all rely on. Now, the only bits of the
      system that deal with the actual pass mechanics are those that actually
      need to deal with the pass mechanics.
      
      Once this separation is made, several simplifications become pretty
      obvious in the assumption cache itself. Rather than using a set and
      callback value handles, it can just be a vector of weak value handles.
      The callers can easily skip the handles that are null, and eventually we
      can wrap all of this up behind a filter iterator.
      
      For now, this adds boiler plate to the various passes, but this kind of
      boiler plate will end up making it possible to port these passes to the
      new pass manager, and so it will end up factored away pretty reasonably.
      
      llvm-svn: 225131
      66b3130c
  11. Dec 23, 2014
    • Michael Liao's avatar
      [SimplifyCFG] Revise common code sinking · 5313da32
      Michael Liao authored
      - Fix the case where more than 1 common instructions derived from the same
        operand cannot be sunk. When a pair of value has more than 1 derived values
        in both branches, only 1 derived value could be sunk.
      - Replace BB1 -> (BB2, PN) map with joint value map, i.e.
        map of (BB1, BB2) -> PN, which is more accurate to track common ops.
      
      llvm-svn: 224757
      5313da32
    • Michael Kuperstein's avatar
      Remove a bad cast in CloneModule() · 0bf33ffd
      Michael Kuperstein authored
      A cast that was introduced in r209007 was accidentally left in after the changes made to GlobalAlias rules in r210062. This crashes if the aliasee is a now-leggal ConstantExpr.
      
      llvm-svn: 224756
      0bf33ffd
  12. Dec 22, 2014
    • Bruno Cardoso Lopes's avatar
      [LCSSA] Handle PHI insertion in disjoint loops · bad65c3b
      Bruno Cardoso Lopes authored
      Take two disjoint Loops L1 and L2.
      
      LoopSimplify fails to simplify some loops (e.g. when indirect branches
      are involved). In such situations, it can happen that an exit for L1 is
      the header of L2. Thus, when we create PHIs in one of such exits we are
      also inserting PHIs in L2 header.
      
      This could break LCSSA form for L2 because these inserted PHIs can also
      have uses in L2 exits, which are never handled in the current
      implementation. Provide a fix for this corner case and test that we
      don't assert/crash on that.
      
      Differential Revision: http://reviews.llvm.org/D6624
      
      rdar://problem/19166231
      
      llvm-svn: 224740
      bad65c3b
  13. Dec 19, 2014
Loading