- Aug 13, 2007
-
-
Devang Patel authored
llvm-svn: 41051
-
Chris Lattner authored
llvm-svn: 41050
-
Dan Gohman authored
see if the base register is already occupied before assuming it can be used. This fixes bogus code generation in the accompanying testcase. llvm-svn: 41049
-
Chris Lattner authored
llvm-svn: 41048
-
Chris Lattner authored
Into: inttoptr (i64 0 to i8*) -> null This occurs in the example in PR1602. With this fixed, we now compile the example in PR1602 into fully "devirtualized" code: define void @_Z1g1S(%struct.S* noalias %s) { entry: %tmp131415 = getelementptr %struct.S* %s, i32 0, i32 0 ; <i32 (...)***> [#uses=1] %tmp16 = load i32 (...)*** %tmp131415, align 4 ; <i32 (...)**> [#uses=1] %tmp26277 = load i32 (...)** %tmp16 ; <i32 (...)*> [#uses=1] %tmp2829 = bitcast i32 (...)* %tmp26277 to void (%struct.S*)* ; <void (%struct.S*)*> [#uses=1] tail call void %tmp2829( %struct.S* %s ) ret void } This still has the vtable dispatch (as required) but does not have any pointer to method cruft left. llvm-svn: 41046
-
Evan Cheng authored
llvm-svn: 41043
-
- Aug 12, 2007
-
-
Devang Patel authored
llvm-svn: 41029
-
Reid Spencer authored
llvm-svn: 41028
-
Evan Cheng authored
llvm-svn: 41024
-
Chris Lattner authored
us to fold the entry block of PR1602 to false instead of: br i1 icmp eq (i32 and (i32 ptrtoint (void (%struct.S*)* inttoptr (i64 1 to void (%struct.S*)*) to i32), i32 1), i32 0), label %cond_next, label %cond_true llvm-svn: 41023
-
- Aug 11, 2007
-
-
Chris Lattner authored
have complex pointer manipulation going on. This allows us to compile stuff like this: __m128i foo(__m128i x){ static const unsigned int c_0[4] = { 0, 0, 0, 0 }; __m128i v_Zero = _mm_loadu_si128((__m128i*)c_0); x = _mm_unpacklo_epi8(x, v_Zero); return x; } into: _foo: xorps %xmm1, %xmm1 punpcklbw %xmm1, %xmm0 ret llvm-svn: 41022
-
Chris Lattner authored
llvm-svn: 41021
-
Chris Lattner authored
able to 3-addressify away stuff like this: movl %ecx, %eax decl %eax llvm-svn: 41020
-
Reid Spencer authored
llvm-svn: 41018
-
Bill Wendling authored
Make a 'memop' pattern just for them. llvm-svn: 41017
-
Evan Cheng authored
llvm-svn: 41016
-
Christopher Lamb authored
llvm-svn: 41013
-
- Aug 10, 2007
-
-
Christopher Lamb authored
Increase efficiency of sign_extend_inreg by using subregisters for truncation. As the README suggests sign_extend_subreg is selected to (sext(trunc)). llvm-svn: 41010
-
Christopher Lamb authored
llvm-svn: 41009
-
Christopher Lamb authored
Add 2-addr to 3-addr promotion code that allows 32-bit LEA to be used via subregisters when 16-bit LEA is disabled. llvm-svn: 41007
-
Christopher Lamb authored
Move isSubRegOf into MRegisterInfo. Fix a missed move elimination in LowerSubregs and add more debugging output there. llvm-svn: 41005
-
Devang Patel authored
llvm-svn: 41001
-
Devang Patel authored
llvm-svn: 40998
-
Devang Patel authored
llvm-svn: 40997
-
Chris Lattner authored
llvm-svn: 40989
-
Dan Gohman authored
use an intptr ValueType instead of i32 for the index operand in getCopyToParts. llvm-svn: 40987
-
Rafael Espindola authored
llvm-svn: 40986
-
Bill Wendling authored
llvm-svn: 40985
-
Bill Wendling authored
llvm-svn: 40982
-
Chris Lattner authored
llvm-svn: 40981
-
Chris Lattner authored
llvm-svn: 40980
-
Devang Patel authored
llvm-svn: 40979
-
Devang Patel authored
llvm-svn: 40978
-
Devang Patel authored
not split condition constraints. llvm-svn: 40977
-
Chris Lattner authored
llvm-svn: 40976
-
Evan Cheng authored
llvm-svn: 40975
-
Dale Johannesen authored
to handle values bigger than double. If we assume host==target and host long double works correctly, this is not too bad, but we don't want to have that limitation longterm. I could implement accepting double constants as long double or something like that, which would lead to incorrect codegen with no errors; the more I think about that the worse it seems. Rather than do such a hack that would be backed out later, I'm settling for giving reasonable error messages, for now. llvm-svn: 40974
-
Evan Cheng authored
llvm-svn: 40973
-
- Aug 09, 2007
-
-
Evan Cheng authored
divb / mulb outputs to ah. Under x86-64 it's not legal to read ah if the instruction requires a rex prefix (i.e. outputs to r8b, etc.). So issue shift right by 8 on AX and then truncate it to 8 bits instead. llvm-svn: 40972
-
Chris Lattner authored
alloca, increase the alignment of the load, turning it into an aligned load. This allows us to compile: #include <xmmintrin.h> __m128i foo(__m128i x){ static const unsigned int c_0[4] = { 0, 0, 0, 0 }; __m128i v_Zero = _mm_loadu_si128((__m128i*)c_0); x = _mm_unpacklo_epi8(x, v_Zero); return x; } into: _foo: punpcklbw _c_0.5944, %xmm0 ret .data .lcomm _c_0.5944,16,4 # c_0.5944 instead of: _foo: movdqu _c_0.5944, %xmm1 punpcklbw %xmm1, %xmm0 ret .data .lcomm _c_0.5944,16,2 # c_0.5944 llvm-svn: 40971
-