Skip to content
  1. May 08, 2009
    • Nick Lewycky's avatar
      This transform requires valid TargetData info. Wrap it in 'if (TD)' in · 702fbf94
      Nick Lewycky authored
      preparation for the day we use null TargetData when no target is specified.
      
      llvm-svn: 71210
      702fbf94
    • Evan Cheng's avatar
      Optimize code placement in loop to eliminate unconditional branches or move... · 2fa28110
      Evan Cheng authored
      Optimize code placement in loop to eliminate unconditional branches or move unconditional branch to the outside of the loop. e.g.
      
      ///       A:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       <fallthrough to B>                                                                                                                                                 
      ///                                                                                                                                                                          
      ///       B:  --> loop header                                                                                                                                                
      ///       ...                                                                                                                                                                
      ///       jcc <cond> C, [exit]                                                                                                                                               
      ///                                                                                                                                                                          
      ///       C:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       jmp B                                                                                                                                                              
      ///                                                                                                                                                                          
      /// ==>                                                                                                                                                                      
      ///                                                                                                                                                                          
      ///       A:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       jmp B                                                                                                                                                              
      ///                                                                                                                                                                          
      ///       C:  --> new loop header                                                                                                                                            
      ///       ...                                                                                                                                                                
      ///       <fallthough to B>                                                                                                                                                  
      ///                                                                                                                                                                          
      ///       B:                                                                                                                                                                 
      ///       ...                                                                                                                                                                
      ///       jcc <cond> C, [exit] 
      
      llvm-svn: 71209
      2fa28110
    • Nick Lewycky's avatar
      Add missing #include for "strlen" which is used inline in this header. Fixes · 2f6bddd2
      Nick Lewycky authored
      build under gcc 4.3.
      
      llvm-svn: 71208
      2f6bddd2
    • Sanjiv Gupta's avatar
      Moved pic16 naming functions to correct place. · 89e72b9c
      Sanjiv Gupta authored
      No functionality change.
      
      llvm-svn: 71207
      89e72b9c
    • Eli Friedman's avatar
      PR4123: don't crash when inlining a call which uses its own result. · 36b9026f
      Eli Friedman authored
      llvm-svn: 71199
      36b9026f
    • Bob Wilson's avatar
      Fix pr4100. Do not remove no-op copies when they are dead. The register · e20be418
      Bob Wilson authored
      scavenger gets confused about register liveness if it doesn't see them.
      I'm not thrilled with this solution, but it only comes up when there are dead
      copies in the code, which is something that hopefully doesn't happen much.
      
      Here is what happens in pr4100: As shown in the following excerpt from the
      debug output of llc, the source of a move gets reloaded from the stack,
      inserting a new load instruction before the move.  Since that source operand
      is a kill, the physical register is free to be reused for the destination
      of the move.  The move ends up being a no-op, copying R3 to R3, so it is
      deleted.  But, it leaves behind the load to reload %reg1028 into R3, and
      that load is not updated to show that it's destination operand (R3) is dead.
      The scavenger gets confused by that load because it thinks that R3 is live.
      
      Starting RegAlloc of: %reg1025<def,dead> = MOVr %reg1028<kill>, 14, %reg0, %reg0
        Regs have values: 
        Reloading %reg1028 into R3
        Last use of R3[%reg1028], removing it from live set
        Assigning R3 to %reg1025
        Register R3 [%reg1025] is never used, removing it from live set
      
      Alternative solutions might be either marking the load as dead, or zapping
      the load along with the no-op copy.  I couldn't see an easy way to do
      either of those, though.
      
      llvm-svn: 71196
      e20be418
  2. May 07, 2009
  3. May 06, 2009
Loading