Skip to content
  1. Mar 29, 2013
    • Michael Liao's avatar
      Skip moving call address loading into callseq when targets prefer register indirect call. · 96b42608
      Michael Liao authored
      To enable a load of a call address to be folded with that call, this
      load is moved from outside of callseq into callseq. Such a moving
      adds a non-glued node (that load) into a glued sequence. This non-glue
      load is only removed when DAG selection folds them into a memory form
      call instruction. When such instruction selection is disabled, it breaks
      DAG schedule.
      
      To prevent that, such moving is disabled when target favors register
      indirect call.
      
      Previous workaround disabling CALL32m/CALL64m insn selection is removed.
      
      llvm-svn: 178308
      96b42608
  2. Mar 26, 2013
  3. Aug 24, 2012
  4. Jul 05, 2012
  5. May 09, 2012
  6. Apr 11, 2012
  7. Feb 27, 2012
  8. Feb 18, 2012
  9. Feb 16, 2012
    • Jakob Stoklund Olesen's avatar
      Use the same CALL instructions for Windows as for everything else. · 97e3115d
      Jakob Stoklund Olesen authored
      The different calling conventions and call-preserved registers are
      represented with regmask operands that are added dynamically.
      
      llvm-svn: 150708
      97e3115d
    • Jakob Stoklund Olesen's avatar
      Enable register mask operands for x86 calls. · 8a450cb2
      Jakob Stoklund Olesen authored
      Call instructions no longer have a list of 43 call-clobbered registers.
      Instead, they get a single register mask operand with a bit vector of
      call-preserved registers.
      
      This saves a lot of memory, 42 x 32 bytes = 1344 bytes per call
      instruction, and it speeds up building call instructions because those
      43 imp-def operands no longer need to be added to use-def lists. (And
      removed and shifted and re-added for every explicit call operand).
      
      Passes like LiveVariables, LiveIntervals, RAGreedy, PEI, and
      BranchFolding are significantly faster because they can deal with call
      clobbers in bulk.
      
      Overall, clang -O2 is between 0% and 8% faster, uniformly distributed
      depending on call density in the compiled code.  Debug builds using
      clang -O0 are 0% - 3% faster.
      
      I have verified that this patch doesn't change the assembly generated
      for the LLVM nightly test suite when building with -disable-copyprop
      and -disable-branch-fold.
      
      Branch folding behaves slightly differently in a few cases because call
      instructions have different hash values now.
      
      Copy propagation flushes its data structures when it crosses a register
      mask operand. This causes it to leave a few dead copies behind, on the
      order of 20 instruction across the entire nightly test suite, including
      SPEC. Fixing this properly would require the pass to use different data
      structures.
      
      llvm-svn: 150638
      8a450cb2
  10. Feb 02, 2012
    • Andrew Trick's avatar
      Instruction scheduling itinerary for Intel Atom. · 8523b16f
      Andrew Trick authored
      Adds an instruction itinerary to all x86 instructions, giving each a default latency of 1, using the InstrItinClass IIC_DEFAULT.
      
      Sets specific latencies for Atom for the instructions in files X86InstrCMovSetCC.td, X86InstrArithmetic.td, X86InstrControl.td, and X86InstrShiftRotate.td. The Atom latencies for the remainder of the x86 instructions will be set in subsequent patches.
      
      Adds a test to verify that the scheduler is working.
      
      Also changes the scheduling preference to "Hybrid" for i386 Atom, while leaving x86_64 as ILP.
      
      Patch by Preston Gurd!
      
      llvm-svn: 149558
      8523b16f
  11. Jan 26, 2012
    • Jakob Stoklund Olesen's avatar
      Handle call-clobbered ymm registers on Win64. · fc9dce25
      Jakob Stoklund Olesen authored
      The Win64 calling convention has xmm6-15 as callee-saved while still
      clobbering all ymm registers.
      
      Add a YMM_HI_6_15 pseudo-register that aliases the clobbered part of the
      ymm registers, and mark that as call-clobbered.  This allows live xmm
      registers across calls.
      
      This hack wouldn't be necessary with RegisterMask operands representing
      the call clobbers, but they are not quite operational yet.
      
      llvm-svn: 149088
      fc9dce25
  12. Jan 20, 2012
  13. Mar 24, 2011
  14. Jan 26, 2011
  15. Jan 03, 2011
  16. Nov 30, 2010
  17. Nov 12, 2010
  18. Oct 18, 2010
    • Kevin Enderby's avatar
      Added a handful of x86-32 instructions that were missing so that llvm-mc would · b9783dd9
      Kevin Enderby authored
      be more complete.  These are only expected to be used by llvm-mc with assembly
      source so there is no pattern, [], in the .td files.  Most are being added to
      X86InstrInfo.td as Chris suggested and only comments about register uses are
      added.  Suggestions welcome on the .td changes as I'm not sure on every detail
      of the x86 records.  More missing instructions will be coming.
      
      llvm-svn: 116716
      b9783dd9
  19. Oct 05, 2010
Loading