Skip to content
  1. Oct 13, 2009
  2. Oct 12, 2009
    • John McCall's avatar
      Implement -Wparentheses: warn about using assignments in contexts that require · d5707abd
      John McCall authored
      conditions.  Add a fixit to insert the parentheses.  Also fix a very minor
      possible memory leak in 'for' conditions.
      
      Fixes PR 4876 and rdar://problem/7289172
      
      llvm-svn: 83907
      d5707abd
    • Bob Wilson's avatar
      Change CreateNewWater method to return NewMBB by reference. · 3250e776
      Bob Wilson authored
      llvm-svn: 83905
      3250e776
    • Douglas Gregor's avatar
    • Bob Wilson's avatar
      Last week, ARMConstantIslandPass was failing to converge for the · cc121aa7
      Bob Wilson authored
      MultiSource/Benchmarks/MiBench/automotive-susan test.  The failure has
      since been masked by an unrelated change (just randomly), so I don't have
      a testcase for this now.  Radar 7291928.
      
      The situation where this happened is that a constant pool entry (CPE) was
      placed at a lower address than the load that referenced it.  There were in
      fact 2 CPEs placed at adjacent addresses and referenced by 2 loads that were
      close together in the code.  The distance from the loads to the CPEs was
      right at the limit of what they could handle, so that only one of the CPEs
      could be placed within range.  On every iteration, the first CPE was found
      to be out of range, causing a new CPE to be inserted.  The second CPE had
      been in range but the newly inserted entry pushed it too far away.  Thus the
      second CPE was also replaced by a new entry, which in turn pushed the first
      CPE out of range.  Etc.
      
      Judging from some comments in the code, the initial implementation of this
      pass did not support CPEs placed _before_ their references.  In the case
      where the CPE is placed at a higher address, the key to making the algorithm
      terminate is that new CPEs are only inserted at the end of a group of adjacent
      CPEs.  This is implemented by removing a basic block from the "WaterList"
      once it has been used, and then adding the newly inserted CPE block to the
      list so that the next insertion will come after it.  This avoids the ping-pong
      effect where CPEs are repeatedly moved to the beginning of a group of
      adjacent CPEs.  This does not work when going backwards, however, because the
      entries at the end of an adjacent group of CPEs are closer than the CPEs
      earlier in the group.
      
      To make this pass terminate, we need to maintain a property that changes can
      only happen in some sort of monotonic fashion.  The fix used here is to require
      that the CPE for a particular constant pool load can only move to lower
      addresses.  This is a very simple change to the code and should not cause
      any significant degradation in the results.
      
      llvm-svn: 83902
      cc121aa7
Loading