Skip to content
  1. Feb 02, 2012
  2. Feb 01, 2012
  3. Jan 30, 2012
  4. Jan 23, 2012
  5. Jan 22, 2012
  6. Jan 19, 2012
  7. Jan 08, 2012
  8. Jan 05, 2012
    • Victor Umansky's avatar
      Peephole optimization of ptest-conditioned branch in X86 arch. Performs... · 9255b6d9
      Victor Umansky authored
      Peephole optimization of ptest-conditioned branch in X86 arch. Performs instruction combining of sequences generated by ptestz/ptestc intrinsics to ptest+jcc pair for SSE and AVX.
      
      Testing: passed 'make check' including LIT tests for all sequences being handled (both SSE and AVX)
      
      Reviewers: Evan Cheng, David Blaikie, Bruno Lopes, Elena Demikhovsky, Chad Rosier, Anton Korobeynikov
      llvm-svn: 147601
      9255b6d9
  9. Jan 01, 2012
  10. Dec 24, 2011
    • Chandler Carruth's avatar
      Switch the lowering of CTLZ_ZERO_UNDEF from a .td pattern back to the · 7e9453e9
      Chandler Carruth authored
      X86ISelLowering C++ code. Because this is lowered via an xor wrapped
      around a bsr, we want the dagcombine which runs after isel lowering to
      have a chance to clean things up. In particular, it is very common to
      see code which looks like:
      
        (sizeof(x)*8 - 1) ^ __builtin_clz(x)
      
      Which is trying to compute the most significant bit of 'x'. That's
      actually the value computed directly by the 'bsr' instruction, but if we
      match it too late, we'll get completely redundant xor instructions.
      
      The more naive code for the above (subtracting rather than using an xor)
      still isn't handled correctly due to the dagcombine getting confused.
      
      Also, while here fix an issue spotted by inspection: we should have been
      expanding the zero-undef variants to the normal variants when there is
      an 'lzcnt' instruction. Do so, and test for this. We don't want to
      generate unnecessary 'bsr' instructions.
      
      These two changes fix some regressions in encoding and decoding
      benchmarks. However, there is still a *lot* to be improve on in this
      type of code.
      
      llvm-svn: 147244
      7e9453e9
  11. Dec 17, 2011
  12. Dec 16, 2011
  13. Dec 11, 2011
  14. Dec 06, 2011
  15. Nov 30, 2011
  16. Nov 28, 2011
  17. Nov 26, 2011
  18. Nov 24, 2011
  19. Nov 21, 2011
  20. Nov 19, 2011
  21. Oct 27, 2011
  22. Oct 21, 2011
  23. Oct 14, 2011
  24. Sep 22, 2011
  25. Sep 11, 2011
    • Nadav Rotem's avatar
      CR fixes per Bruno's request. · b873b187
      Nadav Rotem authored
      Undo the changes from r139285 which added custom lowering to vselect.
      Add tablegen lowering for vselect.
      
      llvm-svn: 139479
      b873b187
  26. Sep 09, 2011
  27. Sep 08, 2011
  28. Sep 06, 2011
    • Rafael Espindola's avatar
      Fix comment. Noticed by Duncan. · 9d96c942
      Rafael Espindola authored
      llvm-svn: 139161
      9d96c942
    • Duncan Sands's avatar
      Add codegen support for vector select (in the IR this means a select · f2641e1b
      Duncan Sands authored
      with a vector condition); such selects become VSELECT codegen nodes.
      This patch also removes VSETCC codegen nodes, unifying them with SETCC
      nodes (codegen was actually often using SETCC for vector SETCC already).
      This ensures that various DAG combiner optimizations kick in for vector
      comparisons.  Passes dragonegg bootstrap with no testsuite regressions
      (nightly testsuite as well as "make check-all").  Patch mostly by
      Nadav Rotem.
      
      llvm-svn: 139159
      f2641e1b
    • Duncan Sands's avatar
      Split the init.trampoline intrinsic, which currently combines GCC's · a098436b
      Duncan Sands authored
      init.trampoline and adjust.trampoline intrinsics, into two intrinsics
      like in GCC.  While having one combined intrinsic is tempting, it is
      not natural because typically the trampoline initialization needs to
      be done in one function, and the result of adjust trampoline is needed
      in a different (nested) function.  To get around this llvm-gcc hacks the
      nested function lowering code to insert an additional parent variable
      holding the adjust.trampoline result that can be accessed from the child
      function.  Dragonegg doesn't have the luxury of tweaking GCC code, so it
      stored the result of adjust.trampoline in the memory GCC set aside for
      the trampoline itself (this is always available in the child function),
      and set up some new memory (using an alloca) to hold the trampoline.
      Unfortunately this breaks Go which allocates trampoline memory on the
      heap and wants to use it even after the parent has exited (!).  Rather
      than doing even more hacks to get Go working, it seemed best to just use
      two intrinsics like in GCC.  Patch mostly by Sanjoy Das.
      
      llvm-svn: 139140
      a098436b
  29. Aug 30, 2011
  30. Aug 26, 2011
Loading