- Jan 31, 2006
-
-
Evan Cheng authored
llvm-svn: 25855
-
Chris Lattner authored
* Rename hasSSE -> hasSSE1 to avoid my continual confusion with 'has any SSE'. * Add inline asm constraint specification. llvm-svn: 25854
-
Chris Lattner authored
llvm-svn: 25853
-
Evan Cheng authored
caused several test failures. llvm-svn: 25852
-
Chris Lattner authored
llvm-svn: 25851
-
Nate Begeman authored
bool %test(int %X) { %Y = seteq int %X, 13 ret bool %Y } as _test: addi r2, r3, -13 cntlzw r2, r2 srwi r3, r2, 5 blr rather than _test: cmpwi cr7, r3, 13 mfcr r2 rlwinm r3, r2, 31, 31, 31 blr This has very little effect on most code, but speeds up analyzer 23% and mason 11% llvm-svn: 25848
-
Chris Lattner authored
llvm-svn: 25847
-
Chris Lattner authored
llvm-svn: 25846
-
Chris Lattner authored
llvm-svn: 25845
-
Chris Lattner authored
llvm-svn: 25844
-
Chris Lattner authored
llvm-svn: 25843
-
Chris Lattner authored
llvm-svn: 25842
-
Chris Lattner authored
llvm-svn: 25841
-
Chris Lattner authored
an operand that contains the condcode), making things significantly simpler. llvm-svn: 25840
-
Chris Lattner authored
a CC as an operand. Much smaller, much happier. llvm-svn: 25839
-
Chris Lattner authored
llvm-svn: 25838
-
Chris Lattner authored
llvm-svn: 25837
-
Chris Lattner authored
llvm-svn: 25834
-
Chris Lattner authored
void %X(int %A) { %C = setlt int %A, 123 ; <bool> [#uses=1] br bool %C, label %T, label %F T: ; preds = %0 call int %main( int 0 ) ; <int>:0 [#uses=0] ret void F: ; preds = %0 ret void } to this: X: save -96, %o6, %o6 subcc %i0, 122, %l0 bg .LBBX_2 ! F nop ... not this: X: save -96, %o6, %o6 sethi 0, %l0 or %g0, 1, %l1 subcc %i0, 122, %l2 bg .LBBX_4 ! nop .LBBX_3: ! or %g0, %l0, %l1 .LBBX_4: ! subcc %l1, 0, %l0 bne .LBBX_2 ! F nop llvm-svn: 25833
-
Chris Lattner authored
llvm-svn: 25832
-
Evan Cheng authored
llvm-svn: 25831
-
Chris Lattner authored
llvm-svn: 25830
-
Chris Lattner authored
llvm-svn: 25829
-
Chris Lattner authored
llvm-svn: 25828
-
Chris Lattner authored
int %test_cpuid(int %op) { %B = alloca int %C = alloca int %D = alloca int %A = call int asm "cpuid", "=eax,==ebx,==ecx,==edx,eax"(int* %B, int* %C, int* %D, int %op) %Bv = load int* %B %Cv = load int* %C %Dv = load int* %D %x = add int %A, %Bv %y = add int %x, %Cv %z = add int %y, %Dv ret int %z } to this: _test_cpuid: sub %ESP, 16 mov DWORD PTR [%ESP], %EBX mov %EAX, DWORD PTR [%ESP + 20] cpuid mov DWORD PTR [%ESP + 8], %ECX mov DWORD PTR [%ESP + 12], %EBX mov DWORD PTR [%ESP + 4], %EDX mov %ECX, DWORD PTR [%ESP + 12] add %EAX, %ECX mov %ECX, DWORD PTR [%ESP + 8] add %EAX, %ECX mov %ECX, DWORD PTR [%ESP + 4] add %EAX, %ECX mov %EBX, DWORD PTR [%ESP] add %ESP, 16 ret ... note the proper register allocation. :) it is unclear to me why the loads aren't folded into the adds. llvm-svn: 25827
-
Chris Lattner authored
llvm-svn: 25826
-
Chris Lattner authored
llvm-svn: 25825
-
Evan Cheng authored
the order of the compare operands and generate SETOGT, SETOGE, SETUGE, and SETULE instead. llvm-svn: 25824
-
Chris Lattner authored
llvm-svn: 25822
-
- Jan 30, 2006
-
-
Chris Lattner authored
a chance to custom legalize setcc, which broke a bunch of C++ Codes. Testcase here: CodeGen/X86/2006-01-30-LongSetcc.ll llvm-svn: 25821
-
Chris Lattner authored
llvm-svn: 25819
-
Evan Cheng authored
llvm-svn: 25818
-
Evan Cheng authored
conversions. SSE does not have instructions to handle these tasks. llvm-svn: 25817
-
Chris Lattner authored
SPARC condition codes, not in terms of the DAG condcodes. This allows us to write nice clean patterns for cmovs/branches. llvm-svn: 25815
-
Chris Lattner authored
uint %test(uint %X) { %Y = call uint %llvm.ctpop.i32(uint %X) ret uint %Y } to: test: save -96, %o6, %o6 sll %i0, 0, %l0 popc %l0, %i0 restore %g0, %g0, %g0 retl nop instead of to 40 logical ops. Note the shift-by-zero that clears the top part of the 64-bit V9 register. Testcase here: CodeGen/SparcV8/ctpop.ll llvm-svn: 25814
-
Chris Lattner authored
running it. llvm-svn: 25811
-
Chris Lattner authored
llvm-svn: 25810
-
Chris Lattner authored
patterns. This allows emission of this code: t1: save -96, %o6, %o6 subcc %i0, %i1, %l0 move %icc, %i0, %i2 or %g0, %i2, %i0 restore %g0, %g0, %g0 retl nop instead of this: t1: save -96, %o6, %o6 subcc %i0, %i1, %l0 be .LBBt1_2 ! nop .LBBt1_1: ! or %g0, %i2, %i0 .LBBt1_2: ! restore %g0, %g0, %g0 retl nop for this: int %t1(int %a, int %b, int %c) { %tmp.2 = seteq int %a, %b %tmp3 = select bool %tmp.2, int %a, int %c ret int %tmp3 } llvm-svn: 25809
-
Chris Lattner authored
1. Default to having V9 instructions, instead of just V8. 2. unless -enable-sparc-v9-insts is passed, disable V9 (for use with llcbeta) llvm-svn: 25807
-
Chris Lattner authored
the two operations together. This allows us to compile this: void %two(int %a, int* %b) { %tmp.2 = seteq int %a, 0 %tmp.0.0 = select bool %tmp.2, int 10, int 20 store int %tmp.0.0, int* %b ret void } into: two: save -96, %o6, %o6 or %g0, 20, %l0 or %g0, 10, %l1 subcc %i0, 0, %l2 be .LBBtwo_2 ! entry nop .LBBtwo_1: ! entry or %g0, %l0, %l1 .LBBtwo_2: ! entry st %l1, [%i1] restore %g0, %g0, %g0 retl nop instead of: two: save -96, %o6, %o6 sethi 0, %l0 or %g0, 1, %l1 or %g0, 20, %l2 or %g0, 10, %l3 subcc %i0, 0, %l4 be .LBBtwo_2 ! entry nop .LBBtwo_1: ! entry or %g0, %l0, %l1 .LBBtwo_2: ! entry subcc %l1, 0, %l0 bne .LBBtwo_4 ! entry nop .LBBtwo_3: ! entry or %g0, %l2, %l3 .LBBtwo_4: ! entry st %l3, [%i1] restore %g0, %g0, %g0 retl nop llvm-svn: 25806
-