Skip to content
  1. Jan 31, 2013
  2. Jan 29, 2013
  3. Jan 28, 2013
    • Bill Schmidt's avatar
      This patch addresses bug 15031. · 2e4ae4e1
      Bill Schmidt authored
      The common code in the post-RA scheduler to break anti-dependencies on the
      critical path contained a flaw.  In the reported case, an anti-dependency
      between the overlapping registers %X4 and %R4 exists:
      
      	%X29<def> = OR8 %X4, %X4
      	%R4<def>, %X3<def,dead,tied3> = LBZU 1, %X3<kill,tied1>
      
      The unpatched code breaks the dependency by replacing %R4 and its uses
      with %R3, the first register on the available list.  However, %R3 and
      %X3 overlap, so this creates two overlapping definitions on the same
      instruction.
      
      The fix is straightforward, preventing selection of a register that
      overlaps any other defined register on the same instruction.
      
      The test case is reduced from the bug report, and verifies that we no
      longer produce "lbzu 3, 1(3)" when breaking this anti-dependency.
      
      llvm-svn: 173706
      2e4ae4e1
    • Eric Christopher's avatar
      Fix comment. · 59cc0711
      Eric Christopher authored
      llvm-svn: 173698
      59cc0711
    • Michael Gottesman's avatar
      Extracted ObjCARC.cpp into its own library libLLVMObjCARCOpts in preparation... · 79d8d812
      Michael Gottesman authored
      Extracted ObjCARC.cpp into its own library libLLVMObjCARCOpts in preparation for refactoring the ARC Optimizer.
      
      llvm-svn: 173647
      79d8d812
  4. Jan 27, 2013
  5. Jan 25, 2013
  6. Jan 24, 2013
  7. Jan 23, 2013
    • Bill Wendling's avatar
      Add the heuristic to differentiate SSPStrong from SSPRequired. · 7c8f96a9
      Bill Wendling authored
      The requirements of the strong heuristic are:
      
      * A Protector is required for functions which contain an array, regardless of
        type or length.
      
      * A Protector is required for functions which contain a structure/union which
        contains an array, regardless of type or length.  Note, there is no limit to
        the depth of nesting.
      
      * A protector is required when the address of a local variable (i.e., stack
        based variable) is exposed. (E.g., such as through a local whose address is
        taken as part of the RHS of an assignment or a local whose address is taken as
        part of a function argument.)
      
      llvm-svn: 173231
      7c8f96a9
    • Bill Wendling's avatar
      Add the IR attribute 'sspstrong'. · d154e283
      Bill Wendling authored
      SSPStrong applies a heuristic to insert stack protectors in these situations:
      
      * A Protector is required for functions which contain an array, regardless of
        type or length.
      
      * A Protector is required for functions which contain a structure/union which
        contains an array, regardless of type or length.  Note, there is no limit to
        the depth of nesting.
      
      * A protector is required when the address of a local variable (i.e., stack
        based variable) is exposed. (E.g., such as through a local whose address is
        taken as part of the RHS of an assignment or a local whose address is taken as
        part of a function argument.)
      
      This patch implements the SSPString attribute to be equivalent to
      SSPRequired. This will change in a subsequent patch.
      
      llvm-svn: 173230
      d154e283
  8. Jan 22, 2013
    • Tim Northover's avatar
      Make APFloat constructor require explicit semantics. · 29178a34
      Tim Northover authored
      Previously we tried to infer it from the bit width size, with an added
      IsIEEE argument for the PPC/IEEE 128-bit case, which had a default
      value. This default value allowed bugs to creep in, where it was
      inappropriate.
      
      llvm-svn: 173138
      29178a34
  9. Jan 21, 2013
    • Michael Ilseman's avatar
      Introduce a new data structure, the SparseMultiSet, and changes to the MI scheduler to use it. · 3e3194f4
      Michael Ilseman authored
      A SparseMultiSet adds multiset behavior to SparseSet, while retaining SparseSet's desirable properties. Essentially, SparseMultiSet provides multiset behavior by storing its dense data in doubly linked lists that are inlined into the dense vector. This allows it to provide good data locality as well as vector-like constant-time clear() and fast constant time find(), insert(), and erase(). It also allows SparseMultiSet to have a builtin recycler rather than keeping SparseSet's behavior of always swapping upon removal, which allows it to preserve more iterators. It's often a better alternative to a SparseSet of a growable container or vector-of-vector.
      
      llvm-svn: 173064
      3e3194f4
  10. Jan 20, 2013
    • Nadav Rotem's avatar
      · 9450fcff
      Nadav Rotem authored
      Revert 172708.
      
      The optimization handles esoteric cases but adds a lot of complexity both to the X86 backend and to other backends.
      This optimization disables an important canonicalization of chains of SEXT nodes and makes SEXT and ZEXT asymmetrical.
      Disabling the canonicalization of consecutive SEXT nodes into a single node disables other DAG optimizations that assume
      that there is only one SEXT node. The AVX mask optimizations is one example. Additionally this optimization does not update the cost model.
      
      llvm-svn: 172968
      9450fcff
    • David Blaikie's avatar
      The last of PR14471 - emission of constant floats · a39a76ef
      David Blaikie authored
      llvm-svn: 172941
      a39a76ef
  11. Jan 18, 2013
  12. Jan 17, 2013
Loading