- Apr 02, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 12610
-
Alkis Evlogimenos authored
llvm-svn: 12607
-
- Apr 01, 2004
-
-
Chris Lattner authored
Implement a small optimization. In test/Regression/CodeGen/X86/select.ll, we now generate this for foldSel3: foldSel3: mov %AL, BYTE PTR [%ESP + 4] fld DWORD PTR [%ESP + 8] fld DWORD PTR [%ESP + 12] mov %EAX, DWORD PTR [%ESP + 16] mov %ECX, DWORD PTR [%ESP + 20] cmp %EAX, %ECX fxch %ST(1) fcmovae %ST(0), %ST(1) *** fstp %ST(1) ret Instead of: foldSel3: mov %AL, BYTE PTR [%ESP + 4] fld DWORD PTR [%ESP + 8] fld DWORD PTR [%ESP + 12] mov %EAX, DWORD PTR [%ESP + 16] mov %ECX, DWORD PTR [%ESP + 20] cmp %EAX, %ECX fxch %ST(1) fcmovae %ST(0), %ST(1) *** fxch %ST(1) *** fstp %ST(0) ret In practice, this only effects code size: performance should be basically unaffected. llvm-svn: 12588
-
Chris Lattner authored
llvm-svn: 12587
-
Chris Lattner authored
llvm-svn: 12579
-
Chris Lattner authored
llvm-svn: 12578
-
Chris Lattner authored
the X86 does not support a full set of fp cmove instructions, so we can't always fold the condition into the select. :( Yuck. llvm-svn: 12577
-
Chris Lattner authored
llvm-svn: 12576
-
Chris Lattner authored
llvm-svn: 12575
-
Chris Lattner authored
that require the asmwriter to be extended (printing implicit uses before the explicit operands) llvm-svn: 12574
-
- Mar 31, 2004
-
-
Chris Lattner authored
using our broad selection of movcc instructions. :) llvm-svn: 12560
-
- Mar 30, 2004
-
-
Chris Lattner authored
llvm-svn: 12554
-
Chris Lattner authored
folding compares into the select yet. llvm-svn: 12553
-
Chris Lattner authored
we never generated them Make indentation a bit more consistent llvm-svn: 12549
-
Chris Lattner authored
an incoming value from a block, the selector would evaluate the constant at the TOP of the block instead of at the end of the block. This made the live range for the constant span the entire block, increasing register pressure needlessly. llvm-svn: 12542
-
Chris Lattner authored
llvm-svn: 12541
-
- Mar 18, 2004
-
-
Chris Lattner authored
llvm-svn: 12500
-
Chris Lattner authored
folding load instructions into other instructions across free instruction boundaries. Perhaps this will also fix the other strange failures? llvm-svn: 12494
-
- Mar 15, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 12424
-
- Mar 14, 2004
-
-
Alkis Evlogimenos authored
MachineBasicBlock::iterator take a MachineInstr*. llvm-svn: 12392
-
Alkis Evlogimenos authored
instruction to make the API more flexible. llvm-svn: 12386
-
- Mar 13, 2004
-
-
Chris Lattner authored
llvm-svn: 12357
-
Chris Lattner authored
Intrinsic::va*. This avoid conflicting with macros in the stdlib.h file. llvm-svn: 12356
-
- Mar 12, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 12336
-
- Mar 11, 2004
-
-
Misha Brukman authored
llvm-svn: 12289
-
- Mar 09, 2004
-
-
Alkis Evlogimenos authored
instructions. llvm-svn: 12258
-
Alkis Evlogimenos authored
llvm-svn: 12254
-
Alkis Evlogimenos authored
llvm-svn: 12253
-
Alkis Evlogimenos authored
llvm-svn: 12252
-
Alkis Evlogimenos authored
llvm-svn: 12251
-
- Mar 08, 2004
-
-
Chris Lattner authored
testcase like this: int %test(int* %P, int %A) { %Pv = load int* %P %B = add int %A, %Pv ret int %B } We now generate: test: mov %ECX, DWORD PTR [%ESP + 4] mov %EAX, DWORD PTR [%ESP + 8] add %EAX, DWORD PTR [%ECX] ret Instead of: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, DWORD PTR [%ESP + 8] mov %EAX, DWORD PTR [%EAX] add %EAX, %ECX ret ... saving one instruction, and often a register. Note that there are a lot of other instructions that could use this, but they aren't handled. I'm not really interested in adding them, but mul/div and all of the FP instructions could be supported as well if someone wanted to add them. llvm-svn: 12204
-
Chris Lattner authored
llvm-svn: 12203
-
- Mar 07, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 12190
-
- Mar 04, 2004
-
-
Brian Gaeke authored
llvm-svn: 12122
-
Alkis Evlogimenos authored
llvm-svn: 12120
-
- Mar 02, 2004
-
-
Misha Brukman authored
llvm-svn: 12064
-
- Mar 01, 2004
-
-
Brian Gaeke authored
(16) into certain areas of the SPARC V9 back-end. I'm fairly sure the US IIIi's dcache has 32-byte lines, so I'm not sure where the 16 came from. However, in the interest of not breaking things any more than they already are, I'm going to leave the constant alone. llvm-svn: 12043
-
Chris Lattner authored
of generating this code: mov %EAX, 4 mov DWORD PTR [%ESP], %EAX mov %AX, 123 movsx %EAX, %AX mov DWORD PTR [%ESP + 4], %EAX call Y we now generate: mov DWORD PTR [%ESP], 4 mov DWORD PTR [%ESP + 4], 123 call Y Which hurts the eyes less. :) Considering that register pressure around call sites is already high (with all of the callee clobber registers n stuff), this may help a lot. llvm-svn: 12028
-
Chris Lattner authored
to function calls, we would emit dead code, like this: int Y(int, short, double); int X() { Y(4, 123, 4); } --- Old X: sub %ESP, 20 mov %EAX, 4 mov DWORD PTR [%ESP], %EAX *** mov %AX, 123 mov %AX, 123 movsx %EAX, %AX mov DWORD PTR [%ESP + 4], %EAX fld QWORD PTR [.CPIX_0] fstp QWORD PTR [%ESP + 8] call Y mov %EAX, 0 # IMPLICIT_USE %EAX %ESP add %ESP, 20 ret Now we emit: X: sub %ESP, 20 mov %EAX, 4 mov DWORD PTR [%ESP], %EAX mov %AX, 123 movsx %EAX, %AX mov DWORD PTR [%ESP + 4], %EAX fld QWORD PTR [.CPIX_0] fstp QWORD PTR [%ESP + 8] call Y mov %EAX, 0 # IMPLICIT_USE %EAX %ESP add %ESP, 20 ret Next up, eliminate the mov AX and movsx entirely! llvm-svn: 12026
-
- Feb 29, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 11998
-