Skip to content
  1. May 19, 2010
  2. May 18, 2010
  3. May 17, 2010
  4. May 15, 2010
    • Dale Johannesen's avatar
      Fix uint64->{float, double} conversion to do rounding correctly in 32-bit. · 3a366a88
      Dale Johannesen authored
      The implementation in LegalizeIntegerTypes to handle this as 
      sint64->float + appropriate power of 2 is subject to double rounding,
      considered incorrect by numerics people.  Use this implementation only
      when it is safe.  This leads to using library calls in some cases
      that produced inline code before, but it's correct now.
      (EVTToAPFloatSemantics belongs somewhere else, any suggestions?)
      
      Add a correctly rounding (though not particularly fast) conversion
      that uses X87 80-bit computations for x86-32.
      
      7885399, 5901940.  This shows up in gcc.c-torture/execute/ieee/rbug.c
      in the gcc testsuite on some platforms.
      
      llvm-svn: 103883
      3a366a88
    • Dale Johannesen's avatar
      Improve assertion messages. · bb4656c0
      Dale Johannesen authored
      llvm-svn: 103882
      bb4656c0
    • Chris Lattner's avatar
      improve portability to systems that don't have powf/modf (e.g. solaris 9) · 93cd0f1c
      Chris Lattner authored
      patch by Evzen Muller!
      
      llvm-svn: 103876
      93cd0f1c
    • Chandler Carruth's avatar
      Fix an GCC warning that seems to have actually caught a bug (!!!) in · 75142e6b
      Chandler Carruth authored
      a condition's grouping. Every other use of Allocatable.test(Hint) groups it the
      same way as it is indented, so move the parentheses to agree with that
      grouping.
      
      llvm-svn: 103869
      75142e6b
    • Jakob Stoklund Olesen's avatar
      Calculate liveness on the fly for local registers. · 84ce2908
      Jakob Stoklund Olesen authored
      When working top-down in a basic block, substituting physregs for virtregs, the use-def chains are kept up to date. That means we can recognize a virtreg kill by the use-def chain becoming empty.
      
      This makes the fast allocator independent of incoming kill flags.
      
      llvm-svn: 103866
      84ce2908
    • Evan Cheng's avatar
      A partial re-def instruction may be a copy. · e26e56e7
      Evan Cheng authored
      llvm-svn: 103850
      e26e56e7
    • Evan Cheng's avatar
      Teach two-address pass to do some coalescing while eliminating REG_SEQUENCE · 8c2d062e
      Evan Cheng authored
      instructions.
      
      e.g.
      %reg1026<def> = VLDMQ %reg1025<kill>, 260, pred:14, pred:%reg0
      %reg1027<def> = EXTRACT_SUBREG %reg1026, 6
      %reg1028<def> = EXTRACT_SUBREG %reg1026<kill>, 5
      ...
      %reg1029<def> = REG_SEQUENCE %reg1028<kill>, 5, %reg1027<kill>, 6, %reg1028, 7, %reg1027, 8, %reg1028, 9, %reg1027, 10, %reg1030<kill>, 11, %reg1032<kill>, 12
      
      After REG_SEQUENCE is eliminated, we are left with:
      
      %reg1026<def> = VLDMQ %reg1025<kill>, 260, pred:14, pred:%reg0
      %reg1029:6<def> = EXTRACT_SUBREG %reg1026, 6
      %reg1029:5<def> = EXTRACT_SUBREG %reg1026<kill>, 5
      
      The regular coalescer will not be able to coalesce reg1026 and reg1029 because it doesn't
      know how to combine sub-register indices 5 and 6. Now 2-address pass will consult the
      target whether sub-registers 5 and 6 of reg1026 can be combined to into a larger
      sub-register (or combined to be reg1026 itself as is the case here). If it is possible, 
      it will be able to replace references of reg1026 with reg1029 + the larger sub-register
      index.
      
      llvm-svn: 103835
      8c2d062e
Loading