Skip to content
  1. Sep 19, 2013
  2. Sep 18, 2013
  3. Sep 17, 2013
    • Reid Kleckner's avatar
      COFF: Emit all MCSymbols rather than filtering out some of them · 3ea536fe
      Reid Kleckner authored
      In particular, this means we emit non-external symbols defined to
      variables, such as aliases or absolute addresses.
      
      This is needed to implement /safeseh, and it appears there was some
      confusion about what symbols to emit previously.
      
      llvm-svn: 190888
      3ea536fe
    • Reid Kleckner's avatar
      COFF: Remove ExportSection, which has been dead since r114823 · 50689eb9
      Reid Kleckner authored
      llvm-svn: 190887
      50689eb9
    • Eric Christopher's avatar
      Move variable into assert to avoid unused variable warning. · e7af7bd8
      Eric Christopher authored
      llvm-svn: 190886
      e7af7bd8
    • Matt Arsenault's avatar
      Cleanup handling of constant function casts. · e6952f28
      Matt Arsenault authored
      Some of this code is no longer necessary since int<->ptr casts are no
      longer occur as of r187444.
      
      This also fixes handling vectors of pointers, and adds a bunch of new
      testcases for vectors and address spaces.
      
      llvm-svn: 190885
      e6952f28
    • Bill Schmidt's avatar
      [PowerPC] Add a FIXME. · bdae03f2
      Bill Schmidt authored
      Documenting a design choice to generate only medium model sequences for TLS
      addresses at this time.  Small and large code models could be supported if
      necessary.
      
      llvm-svn: 190883
      bdae03f2
    • Bill Schmidt's avatar
      [PowerPC] Fix problems with large code model (PR17169). · bb381d70
      Bill Schmidt authored
      Large code model on PPC64 requires creating and referencing TOC entries when
      using the addis/ld form of addressing.  This was not being done in all cases.
      The changes in this patch to PPCAsmPrinter::EmitInstruction() fix this.  Two
      test cases are also modified to reflect this requirement.
      
      Fast-isel was not creating correct code for loading floating-point constants
      using large code model.  This also requires the addis/ld form of addressing.
      Previously we were using the addis/lfd shortcut which is only applicable to
      medium code model.  One test case is modified to reflect this requirement.
      
      llvm-svn: 190882
      bb381d70
    • Arnold Schwaighofer's avatar
      Costmodel: Add support for horizontal vector reductions · cae8735a
      Arnold Schwaighofer authored
      Upcoming SLP vectorization improvements will want to be able to estimate costs
      of horizontal reductions. Add infrastructure to support this.
      
      We model reductions as a series of (shufflevector,add) tuples ultimately
      followed by an extractelement. For example, for an add-reduction of <4 x float>
      we could generate the following sequence:
      
       (v0, v1, v2, v3)
         \   \  /  /
           \  \  /
             +  +
      
       (v0+v2, v1+v3, undef, undef)
          \      /
       ((v0+v2) + (v1+v3), undef, undef)
      
       %rdx.shuf = shufflevector <4 x float> %rdx, <4 x float> undef,
                                 <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
       %bin.rdx = fadd <4 x float> %rdx, %rdx.shuf
       %rdx.shuf7 = shufflevector <4 x float> %bin.rdx, <4 x float> undef,
                                <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
       %bin.rdx8 = fadd <4 x float> %bin.rdx, %rdx.shuf7
       %r = extractelement <4 x float> %bin.rdx8, i32 0
      
      This commit adds a cost model interface "getReductionCost(Opcode, Ty, Pairwise)"
      that will allow clients to ask for the cost of such a reduction (as backends
      might generate more efficient code than the cost of the individual instructions
      summed up). This interface is excercised by the CostModel analysis pass which
      looks for reduction patterns like the one above - starting at extractelements -
      and if it sees a matching sequence will call the cost model interface.
      
      We will also support a second form of pairwise reduction that is well supported
      on common architectures (haddps, vpadd, faddp).
      
       (v0, v1, v2, v3)
        \   /    \  /
       (v0+v1, v2+v3, undef, undef)
          \     /
       ((v0+v1)+(v2+v3), undef, undef, undef)
      
        %rdx.shuf.0.0 = shufflevector <4 x float> %rdx, <4 x float> undef,
              <4 x i32> <i32 0, i32 2 , i32 undef, i32 undef>
        %rdx.shuf.0.1 = shufflevector <4 x float> %rdx, <4 x float> undef,
              <4 x i32> <i32 1, i32 3, i32 undef, i32 undef>
        %bin.rdx.0 = fadd <4 x float> %rdx.shuf.0.0, %rdx.shuf.0.1
        %rdx.shuf.1.0 = shufflevector <4 x float> %bin.rdx.0, <4 x float> undef,
              <4 x i32> <i32 0, i32 undef, i32 undef, i32 undef>
        %rdx.shuf.1.1 = shufflevector <4 x float> %bin.rdx.0, <4 x float> undef,
              <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
        %bin.rdx.1 = fadd <4 x float> %rdx.shuf.1.0, %rdx.shuf.1.1
        %r = extractelement <4 x float> %bin.rdx.1, i32 0
      
      llvm-svn: 190876
      cae8735a
    • Arnold Schwaighofer's avatar
      SLPVectorizer: Don't vectorize phi nodes that use invoke values · 4a3dcaa1
      Arnold Schwaighofer authored
      We can't insert an insertelement after an invoke. We would have to split a
      critical edge. So when we see a phi node that uses an invoke we just give up.
      
      radar://14990770
      
      llvm-svn: 190871
      4a3dcaa1
Loading