- Oct 18, 2004
-
-
Chris Lattner authored
llvm-svn: 17110
-
Chris Lattner authored
occurs in the entry node of a function llvm-svn: 17109
-
Chris Lattner authored
particular, invoke ret values are only live in the normal dest of the invoke not in the unwind dest. llvm-svn: 17108
-
Chris Lattner authored
where C requires semicolons in some cases to indicate null statements. llvm-svn: 17107
-
Chris Lattner authored
exercise that I'm not interested in tackling right now. Just punt and treat them like unwind's. This 'fixes' test/Regression/Transforms/ADCE/unreachable-function.ll llvm-svn: 17106
-
Chris Lattner authored
llvm-svn: 17105
-
Chris Lattner authored
If a function had no return instruction in it, and the result of the inlined call instruction was used, we would crash. llvm-svn: 17104
-
Chris Lattner authored
llvm-svn: 17103
-
Nate Begeman authored
Pass -single_module option to gcc when linking dynamic libraries for use with bugpoint, so that we can bugpoint multiple .cp files llvm-svn: 17102
-
Nate Begeman authored
llvm-svn: 17101
-
- Oct 17, 2004
-
-
Chris Lattner authored
This comes up many times in perlbmk and probably others. llvm-svn: 17100
-
Chris Lattner authored
other blocks. llvm-svn: 17099
-
Chris Lattner authored
unneccesary. This allows us to delete several hundred phi nodes of the form PHI(x,x,x,undef) from 253.perlbmk and probably other programs as well. This implements Mem2Reg/UndefValuesMerge.ll llvm-svn: 17098
-
Chris Lattner authored
llvm-svn: 17097
-
Chris Lattner authored
to think that PHI[4, undef] == 4. llvm-svn: 17096
-
Chris Lattner authored
so prepare for this. llvm-svn: 17095
-
Chris Lattner authored
0->field, which is illegal. Now we print ((foo*)0)->field. The second hunk is an optimization to not print undefined phi values. llvm-svn: 17094
-
Chris Lattner authored
last night. :) bork! llvm-svn: 17093
-
Reid Spencer authored
llvm-svn: 17092
-
Reid Spencer authored
llvm-svn: 17091
-
Reid Spencer authored
llvm-svn: 17090
-
Reid Spencer authored
llvm-svn: 17089
-
Reid Spencer authored
llvm-svn: 17088
-
Reid Spencer authored
llvm-svn: 17087
-
Reid Spencer authored
llvm-svn: 17086
-
Reid Spencer authored
llvm-svn: 17085
-
Reid Spencer authored
llvm-svn: 17084
-
Chris Lattner authored
double %test(uint %X) { %tmp.1 = cast uint %X to double ; <double> [#uses=1] ret double %tmp.1 } into: test: sub %ESP, 8 mov %EAX, DWORD PTR [%ESP + 12] mov %ECX, 0 mov DWORD PTR [%ESP], %EAX mov DWORD PTR [%ESP + 4], %ECX fild QWORD PTR [%ESP] add %ESP, 8 ret ... which basically zero extends to 8 bytes, then does an fild for an 8-byte signed int. Now we generate this: test: sub %ESP, 4 mov %EAX, DWORD PTR [%ESP + 8] mov DWORD PTR [%ESP], %EAX fild DWORD PTR [%ESP] shr %EAX, 31 fadd DWORD PTR [.CPItest_0 + 4*%EAX] add %ESP, 4 ret .section .rodata .align 4 .CPItest_0: .quad 5728578726015270912 This does a 32-bit signed integer load, then adds in an offset if the sign bit of the integer was set. It turns out that this is substantially faster than the preceeding sequence. Consider this testcase: unsigned a[2]={1,2}; volatile double G; void main() { int i; for (i=0; i<100000000; ++i ) G += a[i&1]; } On zion (a P4 Xeon, 3Ghz), this patch speeds up the testcase from 2.140s to 0.94s. On apoc, an athlon MP 2100+, this patch speeds up the testcase from 1.72s to 1.34s. Note that the program takes 2.5s/1.97s on zion/apoc with GCC 3.3 -O3 -fomit-frame-pointer. llvm-svn: 17083
-
Chris Lattner authored
us to use index registers for CPI's llvm-svn: 17082
-
Chris Lattner authored
index reg and scale llvm-svn: 17081
-
Chris Lattner authored
%X = and Y, constantint %Z = setcc %X, 0 instead of emitting: and %EAX, 3 test %EAX, %EAX je .LBBfoo2_2 # UnifiedReturnBlock We now emit: test %EAX, 3 je .LBBfoo2_2 # UnifiedReturnBlock This triggers 581 times on 176.gcc for example. llvm-svn: 17080
-
Chris Lattner authored
llvm-svn: 17079
-
Nate Begeman authored
1. optional shift left 2. and x, immX 3. and y, immY 4. or z, x, y ==> rlwimi z, x, y, shift, mask begin, mask end where immX == ~immY and immX is a run of set bits. This transformation fires 32 times on voronoi, once on espresso, and probably several dozen times on external benchmarks such as gcc. To put this in terms of actual code generated for struct B { unsigned a : 3; unsigned b : 2; }; void storeA (struct B *b, int v) { b->a = v;} void storeB (struct B *b, int v) { b->b = v;} Old: _storeA: rlwinm r2, r4, 0, 29, 31 lwz r4, 0(r3) rlwinm r4, r4, 0, 0, 28 or r2, r4, r2 stw r2, 0(r3) blr _storeB: rlwinm r2, r4, 3, 0, 28 rlwinm r2, r2, 0, 27, 28 lwz r4, 0(r3) rlwinm r4, r4, 0, 29, 26 or r2, r2, r4 stw r2, 0(r3) blr New: _storeA: lwz r2, 0(r3) rlwimi r2, r4, 0, 29, 31 stw r2, 0(r3) blr _storeB: lwz r2, 0(r3) rlwimi r2, r4, 3, 27, 28 stw r2, 0(r3) blr llvm-svn: 17078
-
Chris Lattner authored
llvm-svn: 17077
-
Chris Lattner authored
llvm-svn: 17076
-
Chris Lattner authored
for undef. llvm-svn: 17075
-
Chris Lattner authored
llvm-svn: 17074
-
Reid Spencer authored
llvm-svn: 17073
-
Reid Spencer authored
llvm-svn: 17072
-
Reid Spencer authored
that we undefine the macro before using its name in the definition. This can happen on Linux if _GNU_SOURCE is defined. llvm-svn: 17071
-