Skip to content
  1. Apr 08, 2009
    • Dan Gohman's avatar
      Implement support for using modeling implicit-zero-extension on x86-64 · ad3e549a
      Dan Gohman authored
      with SUBREG_TO_REG, teach SimpleRegisterCoalescing to coalesce
      SUBREG_TO_REG instructions (which are similar to INSERT_SUBREG
      instructions), and teach the DAGCombiner to take advantage of this on
      targets which support it. This eliminates many redundant
      zero-extension operations on x86-64.
      
      This adds a new TargetLowering hook, isZExtFree. It's similar to
      isTruncateFree, except it only applies to actual definitions, and not
      no-op truncates which may not zero the high bits.
      
      Also, this adds a new optimization to SimplifyDemandedBits: transform
      operations like x+y into (zext (add (trunc x), (trunc y))) on targets
      where all the casts are no-ops. In contexts where the high part of the
      add is explicitly masked off, this allows the mask operation to be
      eliminated. Fix the DAGCombiner to avoid undoing these transformations
      to eliminate casts on targets where the casts are no-ops.
      
      Also, this adds a new two-address lowering heuristic. Since
      two-address lowering runs before coalescing, it helps to be able to
      look through copies when deciding whether commuting and/or
      three-address conversion are profitable.
      
      Also, fix a bug in LiveInterval::MergeInClobberRanges. It didn't handle
      the case that a clobber range extended both before and beyond an
      existing live range. In that case, multiple live ranges need to be
      added. This was exposed by the new subreg coalescing code.
      
      Remove 2008-05-06-SpillerBug.ll. It was bugpoint-reduced, and the
      spiller behavior it was looking for no longer occurrs with the new
      instruction selection.
      
      llvm-svn: 68576
      ad3e549a
  2. Mar 26, 2009
  3. Mar 23, 2009
  4. Mar 20, 2009
    • Sebastian Redl's avatar
      Fix the Win32 VS2008 build: · 8d5baa09
      Sebastian Redl authored
       - Make type declarations match the struct/class keyword of the definition.
       - Move AddSignalHandler into the namespace where it belongs.
       - Correctly call functions from template base.
       - Some other small changes.
      With this patch, LLVM and Clang should build properly and with far less noise under VS2008.
      
      llvm-svn: 67347
      8d5baa09
  5. Mar 19, 2009
  6. Mar 05, 2009
  7. Feb 08, 2009
  8. Jan 29, 2009
  9. Jan 20, 2009
  10. Jan 07, 2009
    • Evan Cheng's avatar
      The coalescer does not coalesce a virtual register to a physical register if... · f6768bd9
      Evan Cheng authored
      The coalescer does not coalesce a virtual register to a physical register if any of the physical register's sub-register live intervals overlaps with the virtual register. This is overly conservative. It prevents a extract_subreg from being coalesced away:
      
      v1024 = EDI  // not killed
            =
            = EDI
      
      One possible solution is for the coalescer to examine the sub-register live intervals in the same manner as the physical register. Another possibility is to examine defs and uses (when needed) of sub-registers. Both solutions are too expensive. For now, look for "short virtual intervals" and scan instructions to look for conflict instead.
      
      This is a small win on x86-64. e.g. It shaves 403.gcc by ~80 instructions.
      
      llvm-svn: 61847
      f6768bd9
  11. Dec 19, 2008
    • Evan Cheng's avatar
      Fix PR3149. If an early clobber def is a physical register and it is tied to... · 0869f785
      Evan Cheng authored
      Fix PR3149. If an early clobber def is a physical register and it is tied to an input operand, it effectively extends the live range of the physical register. Currently we do not have a good way to represent this.
      
      172     %ECX<def> = MOV32rr %reg1039<kill>
      180     INLINEASM <es:subl $5,$1
              sbbl $3,$0>, 10, %EAX<def>, 14, %ECX<earlyclobber,def>, 9, %EAX<kill>,
      36, <fi#0>, 1, %reg0, 0, 9, %ECX<kill>, 36, <fi#1>, 1, %reg0, 0
      188     %EAX<def> = MOV32rr %EAX<kill>
      196     %ECX<def> = MOV32rr %ECX<kill>
      204     %ECX<def> = MOV32rr %ECX<kill>
      212     %EAX<def> = MOV32rr %EAX<kill>
      220     %EAX<def> = MOV32rr %EAX
      228     %reg1039<def> = MOV32rr %ECX<kill>
      
      The early clobber operand ties ECX input to the ECX def.
      
      The live interval of ECX is represented as this:
      %reg20,inf = [46,47:1)[174,230:0)  0@174-(230) 1@46-(47)
      
      The right way to represent this is something like
      %reg20,inf = [46,47:2)[174,182:1)[181:230:0)  0@174-(182) 1@181-230 @2@46-(47)
      
      Of course that won't work since that means overlapping live ranges defined by two val#.
      
      The workaround for now is to add a bit to val# which says the val# is redefined by a early clobber def somewhere. This prevents the move at 228 from being optimized away by SimpleRegisterCoalescing::AdjustCopiesBackFrom.
      
      llvm-svn: 61259
      0869f785
  12. Dec 08, 2008
  13. Dec 05, 2008
  14. Dec 03, 2008
  15. Nov 26, 2008
  16. Nov 21, 2008
  17. Nov 13, 2008
  18. Nov 12, 2008
  19. Oct 29, 2008
  20. Oct 27, 2008
    • David Greene's avatar
      · b00b267b
      David Greene authored
      Fix PR2634.  Create new virtual registers from spills early so that we
      can give it the same stack slot as the spilled interval if it is folded.
      This prevents the fold/unfold code from pointing to the wrong register.
      
      llvm-svn: 58255
      b00b267b
  21. Oct 24, 2008
  22. Oct 18, 2008
  23. Oct 07, 2008
  24. Oct 03, 2008
  25. Oct 01, 2008
  26. Sep 30, 2008
  27. Sep 24, 2008
  28. Sep 21, 2008
  29. Sep 19, 2008
  30. Sep 17, 2008
    • Dale Johannesen's avatar
      Add a bit to mark operands of asm's that conflict · f8610ebe
      Dale Johannesen authored
      with an earlyclobber operand elsewhere.  Propagate
      this bit and the earlyclobber bit through SDISel.
      Change linear-scan RA not to allocate regs in a way 
      that conflicts with an earlyclobber.  See also comments.
      
      llvm-svn: 56290
      f8610ebe
  31. Sep 16, 2008
  32. Sep 13, 2008
    • Dan Gohman's avatar
      Remove isImm(), isReg(), and friends, in favor of · 38453eeb
      Dan Gohman authored
      isImmediate(), isRegister(), and friends, to avoid confusion
      about having two different names with the same meaning. I'm
      not attached to the longer names, and would be ok with
      changing to the shorter names if others prefer it.
      
      llvm-svn: 56189
      38453eeb
  33. Aug 20, 2008
  34. Aug 19, 2008
Loading