Skip to content
  1. May 22, 2013
    • Nadav Rotem's avatar
      SLPVectorizer: Change the order in which new instructions are added to the function. · 9e00eb38
      Nadav Rotem authored
      We are not working on a DAG and I ran into a number of problems when I enabled the vectorizations of 'diamond-trees' (trees that share leafs).
      * Imroved the numbering API.
      * Changed the placement of new instructions to the last root.
      * Fixed a bug with external tree users with non-zero lane.
      * Fixed a bug in the placement of in-tree users.
      
      llvm-svn: 182508
      9e00eb38
    • Jean-Luc Duprat's avatar
      This is an update to a previous commit (r181216). · 0dda6f16
      Jean-Luc Duprat authored
      The earlier change list introduced the following inst combines:
      B * (uitofp i1 C) —> select C, B, 0
      A * (1 - uitofp i1 C) —> select C, 0, A
      select C, 0, B + select C, A, 0 —> select C, A, B
      
      Together these 3 changes would simplify :
      A * (1 - uitofp i1 C) + B * uitofp i1 C 
      down to :
      select C, B, A
      
      In practice we found that the first two substitutions can have a
      negative effect on performance, because they reduce opportunities to
      use FMA contractions; between the two options FMAs are often the
      better choice.  This change list amends the previous one to enable
      just these inst combines:
      
      select C, B, 0 + select C, 0, A —> select C, B, A
      A * (1 - uitofp i1 C) + B * uitofp i1 C —> select C, B, A
      
      llvm-svn: 182499
      0dda6f16
    • Arnold Schwaighofer's avatar
      LoopVectorize: Make Value pointers that could be RAUW'ed a VH · 12b0d1cd
      Arnold Schwaighofer authored
      The Value pointers we store in the induction variable list can be RAUW'ed by a
      call to SCEVExpander::expandCodeFor, use a TrackingVH instead. Do the same thing
      in some other places where we store pointers that could potentially be RAUW'ed.
      
      Fixes PR16073.
      
      llvm-svn: 182485
      12b0d1cd
  2. May 21, 2013
  3. May 20, 2013
  4. May 18, 2013
  5. May 17, 2013
  6. May 16, 2013
  7. May 15, 2013
  8. May 14, 2013
    • Manman Ren's avatar
      GlobalOpt: fix an issue where CXAAtExitFn points to a deleted function. · b3c52fb4
      Manman Ren authored
      CXAAtExitFn was set outside a loop and before optimizations where functions
      can be deleted. This patch will set CXAAtExitFn inside the loop and after
      optimizations.
      
      Seg fault when running LTO because of accesses to a deleted function.
      rdar://problem/13838828
      
      llvm-svn: 181838
      b3c52fb4
    • Michael Gottesman's avatar
      Removed trailing whitespace. · 0c8b5628
      Michael Gottesman authored
      llvm-svn: 181760
      0c8b5628
    • Arnold Schwaighofer's avatar
      LoopVectorize: Handle loops with multiple forward inductions · 2e7a922a
      Arnold Schwaighofer authored
      We used to give up if we saw two integer inductions. After this patch, we base
      further induction variables on the chosen one like we do in the reverse
      induction and pointer induction case.
      
      Fixes PR15720.
      
      radar://13851975
      
      llvm-svn: 181746
      2e7a922a
    • Michael Gottesman's avatar
    • Michael Gottesman's avatar
      [objc-arc-opts] In the presense of an alloca unconditionally remove RR pairs... · a76143ee
      Michael Gottesman authored
      [objc-arc-opts] In the presense of an alloca unconditionally remove RR pairs if and only if we are both KnownSafeBU/KnownSafeTD rather than just either or.
      
      In the presense of a block being initialized, the frontend will emit the
      objc_retain on the original pointer and the release on the pointer loaded from
      the alloca. The optimizer will through the provenance analysis realize that the
      two are related (albiet different), but since we only require KnownSafe in one
      direction, will match the inner retain on the original pointer with the guard
      release on the original pointer. This is fixed by ensuring that in the presense
      of allocas we only unconditionally remove pointers if both our retain and our
      release are KnownSafe (i.e. we are KnownSafe in both directions) since we must
      deal with the possibility that the frontend will emit what (to the optimizer)
      appears to be unbalanced retain/releases.
      
      An example of the miscompile is:
      
        %A = alloca
        retain(%x)
        retain(%x) <--- Inner Retain
        store %x, %A
        %y = load %A
        ... DO STUFF ...
        release(%y)
        call void @use(%x)
        release(%x) <--- Guarding Release
      
      getting optimized to:
      
        %A = alloca
        retain(%x)
        store %x, %A
        %y = load %A
        ... DO STUFF ...
        release(%y)
        call void @use(%x)
      
      rdar://13750319
      
      llvm-svn: 181743
      a76143ee
  9. May 13, 2013
  10. May 12, 2013
  11. May 11, 2013
  12. May 10, 2013
  13. May 09, 2013
Loading