Skip to content
  1. Sep 04, 2012
    • Preston Gurd's avatar
      Generic Bypass Slow Div · cdf540d5
      Preston Gurd authored
      - CodeGenPrepare pass for identifying div/rem ops
      - Backend specifies the type mapping using addBypassSlowDivType
      - Enabled only for Intel Atom with O2 32-bit -> 8-bit
      - Replace IDIV with instructions which test its value and use DIVB if the value
      is positive and less than 256.
      - In the case when the quotient and remainder of a divide are used a DIV
      and a REM instruction will be present in the IR. In the non-Atom case
      they are both lowered to IDIVs and CSE removes the redundant IDIV instruction,
      using the quotient and remainder from the first IDIV. However,
      due to this optimization CSE is not able to eliminate redundant
      IDIV instructions because they are located in different basic blocks.
      This is overcome by calculating both the quotient (DIV) and remainder (REM)
      in each basic block that is inserted by the optimization and reusing the result
      values when a subsequent DIV or REM instruction uses the same operands.
      - Test cases check for the presents of the optimization when calculating
      either the quotient, remainder,  or both.
      
      Patch by Tyler Nowicki!
      
      llvm-svn: 163150
      cdf540d5
  2. Aug 13, 2012
  3. Aug 11, 2012
  4. Aug 07, 2012
    • Andrew Trick's avatar
      Allow x86 subtargets to use the GenericModel defined in X86Schedule.td. · e0c83b1f
      Andrew Trick authored
      This allows codegen passes to query properties like
      InstrItins->SchedModel->IssueWidth. It also ensure's that
      computeOperandLatency returns the X86 defaults for loads and "high
      latency ops". This should have no significant impact on existing
      schedulers because X86 defaults happen to be the same as global
      defaults.
      
      llvm-svn: 161370
      e0c83b1f
  5. Aug 01, 2012
  6. Jul 19, 2012
  7. Jul 18, 2012
    • Preston Gurd's avatar
      This patch fixes 8 out of 20 unexpected failures in "make check" · f0a48ec8
      Preston Gurd authored
      when run on an Intel Atom processor. The failures have arisen due
      to changes elsewhere in the trunk over the past 8 weeks or so.
      
      These failures were not detected by the Atom buildbot because the
      CPU on the Atom buildbot was not being detected as an Atom CPU.
      The fix for this problem is in Host.cpp and X86Subtarget.cpp, but
      shall remain commented out until the current set of Atom test failures
      are fixed.
      
      Patch by Andy Zhang and Tyler Nowicki!
      
      llvm-svn: 160451
      f0a48ec8
  8. Jun 03, 2012
  9. Jun 01, 2012
  10. May 31, 2012
  11. May 02, 2012
  12. May 01, 2012
  13. Apr 26, 2012
  14. Apr 23, 2012
    • Preston Gurd's avatar
      This patch fixes a problem which arose when using the Post-RA scheduler · 9a091475
      Preston Gurd authored
      on X86 Atom. Some of our tests failed because the tail merging part of
      the BranchFolding pass was creating new basic blocks which did not
      contain live-in information. When the anti-dependency code in the Post-RA
      scheduler ran, it would sometimes rename the register containing
      the function return value because the fact that the return value was
      live-in to the subsequent block had been lost. To fix this, it is necessary
      to run the RegisterScavenging code in the BranchFolding pass.
      
      This patch makes sure that the register scavenging code is invoked
      in the X86 subtarget only when post-RA scheduling is being done.
      Post RA scheduling in the X86 subtarget is only done for Atom.
      
      This patch adds a new function to the TargetRegisterClass to control
      whether or not live-ins should be preserved during branch folding.
      This is necessary in order for the anti-dependency optimizations done
      during the PostRASchedulerList pass to work properly when doing
      Post-RA scheduling for the X86 in general and for the Intel Atom in particular.
      
      The patch adds and invokes the new function trackLivenessAfterRegAlloc()
      instead of using the existing requiresRegisterScavenging().
      It changes BranchFolding.cpp to call trackLivenessAfterRegAlloc() instead of
      requiresRegisterScavenging(). It changes the all the targets that
      implemented requiresRegisterScavenging() to also implement
      trackLivenessAfterRegAlloc().  
      
      It adds an assertion in the Post RA scheduler to make sure that post RA
      liveness information is available when it is needed.
      
      It changes the X86 break-anti-dependencies test to use –mcpu=atom, in order
      to avoid running into the added assertion.
      
      Finally, this patch restores the use of anti-dependency checking
      (which was turned off temporarily for the 3.1 release) for
      Intel Atom in the Post RA scheduler.
      
      Patch by Andy Zhang!
      
      Thanks to Jakob and Anton for their reviews.
      
      llvm-svn: 155395
      9a091475
  15. Apr 17, 2012
  16. Mar 27, 2012
  17. Feb 22, 2012
  18. Feb 07, 2012
  19. 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
  20. Jan 31, 2012
  21. Jan 10, 2012
  22. Jan 09, 2012
  23. Dec 29, 2011
  24. Dec 02, 2011
  25. Oct 30, 2011
  26. Oct 18, 2011
  27. Oct 17, 2011
  28. Oct 16, 2011
  29. Oct 14, 2011
  30. Oct 11, 2011
  31. Oct 10, 2011
  32. Oct 09, 2011
  33. Oct 03, 2011
  34. Sep 07, 2011
  35. Sep 05, 2011
Loading