Skip to content
  1. Sep 27, 2012
  2. Sep 26, 2012
  3. Sep 20, 2012
    • Michael Liao's avatar
      Re-work X86 code generation of atomic ops with spin-loop · 3237662b
      Michael Liao authored
      - Rewrite/merge pseudo-atomic instruction emitters to address the
        following issue:
        * Reduce one unnecessary load in spin-loop
      
          previously the spin-loop looks like
      
              thisMBB:
              newMBB:
                ld  t1 = [bitinstr.addr]
                op  t2 = t1, [bitinstr.val]
                not t3 = t2  (if Invert)
                mov EAX = t1
                lcs dest = [bitinstr.addr], t3  [EAX is implicit]
                bz  newMBB
                fallthrough -->nextMBB
      
          the 'ld' at the beginning of newMBB should be lift out of the loop
          as lcs (or CMPXCHG on x86) will load the current memory value into
          EAX. This loop is refined as:
      
              thisMBB:
                EAX = LOAD [MI.addr]
              mainMBB:
                t1 = OP [MI.val], EAX
                LCMPXCHG [MI.addr], t1, [EAX is implicitly used & defined]
                JNE mainMBB
              sinkMBB:
      
        * Remove immopc as, so far, all pseudo-atomic instructions has
          all-register form only, there is no immedidate operand.
      
        * Remove unnecessary attributes/modifiers in pseudo-atomic instruction
          td
      
        * Fix issues in PR13458
      
      - Add comprehensive tests on atomic ops on various data types.
        NOTE: Some of them are turned off due to missing functionality.
      
      - Revise tests due to the new spin-loop generated.
      
      llvm-svn: 164281
      3237662b
  4. Sep 18, 2012
  5. Sep 01, 2012
  6. Aug 28, 2012
  7. Aug 24, 2012
  8. Aug 23, 2012
  9. Aug 21, 2012
  10. Aug 20, 2012
  11. Aug 13, 2012
  12. Aug 08, 2012
  13. Aug 02, 2012
  14. Aug 01, 2012
  15. Jul 29, 2012
  16. Jul 28, 2012
  17. Jul 18, 2012
  18. Jul 16, 2012
    • Nadav Rotem's avatar
      Fix a bug in the 3-address conversion of LEA when one of the operands is an · 4968e45b
      Nadav Rotem authored
      undef virtual register. The problem is that ProcessImplicitDefs removes the
      definition of the register and marks all uses as undef. If we lose the undef
      marker then we get a register which has no def, is not marked as undef. The
      live interval analysis does not collect information for these virtual
      registers and we crash in later passes.
      
      Together with Michael Kuperstein <michael.m.kuperstein@intel.com>
      
      llvm-svn: 160260
      4968e45b
  19. Jul 15, 2012
  20. Jul 13, 2012
  21. Jul 11, 2012
  22. Jul 09, 2012
    • Manman Ren's avatar
      X86: implement functions to analyze & synthesize CMOV|SET|Jcc · 5f6fa428
      Manman Ren authored
      getCondFromSETOpc, getCondFromCMovOpc, getSETFromCond, getCMovFromCond
      
      No functional change intended.
      If we want to update the condition code of CMOV|SET|Jcc, we first analyze the
      opcode to get the condition code, then update the condition code, finally
      synthesize the new opcode form the new condition code.
      
      llvm-svn: 159955
      5f6fa428
  23. Jul 07, 2012
  24. Jul 06, 2012
    • Manman Ren's avatar
      X86: peephole optimization to remove cmp instruction · c9656737
      Manman Ren authored
      For each Cmp, we check whether there is an earlier Sub which make Cmp
      redundant. We handle the case where SUB operates on the same source operands as
      Cmp, including the case where the two source operands are swapped.
      
      llvm-svn: 159838
      c9656737
  25. Jul 04, 2012
  26. Jun 25, 2012
  27. Jun 24, 2012
Loading