Skip to content
  1. Aug 01, 2009
  2. Jul 25, 2009
    • Daniel Dunbar's avatar
      More migration to raw_ostream, the water has dried up around the iostream hole. · 0dd5e1ed
      Daniel Dunbar authored
       - Some clients which used DOUT have moved to DEBUG. We are deprecating the
         "magic" DOUT behavior which avoided calling printing functions when the
         statement was disabled. In addition to being unnecessary magic, it had the
         downside of leaving code in -Asserts builds, and of hiding potentially
         unnecessary computations.
      
      llvm-svn: 77019
      0dd5e1ed
  3. Jul 20, 2009
  4. Jul 16, 2009
  5. Jul 11, 2009
  6. May 26, 2009
  7. May 14, 2009
  8. May 13, 2009
  9. May 09, 2009
  10. Apr 28, 2009
  11. Apr 14, 2009
  12. Apr 13, 2009
  13. 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
  14. Mar 30, 2009
  15. Mar 23, 2009
  16. Mar 19, 2009
  17. Mar 01, 2009
    • Evan Cheng's avatar
      Minor optimization: · c2f95b56
      Evan Cheng authored
      Look for situations like this:                                                                                                                                                              
      %reg1024<def> = MOV r1                                                                                                                                                                      
      %reg1025<def> = MOV r0                                                                                                                                                                      
      %reg1026<def> = ADD %reg1024, %reg1025                                                                                                                                                      
      r0            = MOV %reg1026                                                                                                                                                                
      Commute the ADD to hopefully eliminate an otherwise unavoidable copy.
      
      llvm-svn: 65752
      c2f95b56
  18. Feb 21, 2009
  19. Jan 28, 2009
  20. Jan 25, 2009
    • Evan Cheng's avatar
      Teach 2addr pass to be do more commuting. If both uses of a two-address... · abda665f
      Evan Cheng authored
      Teach 2addr pass to be do more commuting. If both uses of a two-address instruction are killed, but the first operand has a use before and after the def, commute if the second operand does not suffer from the same issue.
      %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1                                                                                                                                     
      %reg1029<def> = MOV8rr %reg1028                                                                                                                                                      
      %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead>                                                                                                                            
      insert => %reg1030<def> = MOV8rr %reg1028                                                                                                                                            
      %reg1030<def> = ADD8rr %reg1028<kill>, %reg1029<kill>, %EFLAGS<imp-def,dead>                                                                                                         
      
      In this case, it might not be possible to coalesce the second MOV8rr                                                                                                                 
      instruction if the first one is coalesced. So it would be profitable to                                                                                                              
      commute it:                                                                                                                                                                          
      %reg1028<def> = EXTRACT_SUBREG %reg1027<kill>, 1                                                                                                                                     
      %reg1029<def> = MOV8rr %reg1028                                                                                                                                                      
      %reg1029<def> = SHR8ri %reg1029, 7, %EFLAGS<imp-def,dead>                                                                                                                            
      insert => %reg1030<def> = MOV8rr %reg1029                                                                                                                                            
      %reg1030<def> = ADD8rr %reg1029<kill>, %reg1028<kill>, %EFLAGS<imp-def,dead>
      
      llvm-svn: 62954
      abda665f
  21. Jan 24, 2009
  22. Jan 05, 2009
  23. Nov 12, 2008
  24. Oct 07, 2008
  25. Oct 03, 2008
  26. Sep 04, 2008
  27. Aug 27, 2008
  28. Jul 03, 2008
    • Evan Cheng's avatar
      - Remove calls to copyKillDeadInfo which is an N^2 function. Instead,... · 7d98a48f
      Evan Cheng authored
      - Remove calls to copyKillDeadInfo which is an N^2 function. Instead, propagate kill / dead markers as new instructions are constructed in foldMemoryOperand, convertToThressAddress, etc.
      - Also remove LiveVariables::instructionChanged, etc. Replace all calls with cheaper calls which update VarInfo kill list.
      
      llvm-svn: 53097
      7d98a48f
    • Evan Cheng's avatar
      - Add LiveVariables::replaceKillInstruction. This does a subset of... · 7a265d83
      Evan Cheng authored
      - Add LiveVariables::replaceKillInstruction. This does a subset of instructionChanged. That is, it only update the VarInfo.kills if the new instruction is known to have the correct dead and kill markers.
      - CommuteInstruction copies kill / dead markers over to new instruction. So use replaceKillInstruction instead.
      
      llvm-svn: 53061
      7a265d83
    • Owen Anderson's avatar
      Make LiveVariables even more optional, by making it optional in the call to... · 30cc028e
      Owen Anderson authored
      Make LiveVariables even more optional, by making it optional in the call to TargetInstrInfo::convertToThreeAddressInstruction
      Also, if LV isn't around, then TwoAddr doesn't need to be updating flags, since they won't have been set in the first place.
      
      llvm-svn: 53058
      30cc028e
  29. Jul 02, 2008
  30. Jun 30, 2008
  31. Jun 25, 2008
  32. Jun 19, 2008
  33. Jun 18, 2008
  34. May 29, 2008
  35. May 27, 2008
Loading