- Jan 14, 2005
-
-
Reid Spencer authored
llvm-svn: 19544
-
Chris Lattner authored
llvm-svn: 19543
-
Chris Lattner authored
This allows us to better optimize begin() -> end() comparisons in common cases. llvm-svn: 19542
-
Chris Lattner authored
llvm-svn: 19541
-
Chris Lattner authored
llvm-svn: 19540
-
Chris Lattner authored
llvm-svn: 19539
-
- Jan 13, 2005
-
-
Chris Lattner authored
llvm-svn: 19538
-
Chris Lattner authored
the 'sim' program and probably elsewhere. In sim, it comes up for cases like this: #define round(x) ((x)>0.0 ? (x)+0.5 : (x)-0.5) double G; void T(double X) { G = round(X); } (it uses the round macro a lot). This changes the LLVM code from: %tmp.1 = setgt double %X, 0.000000e+00 ; <bool> [#uses=1] %tmp.4 = add double %X, 5.000000e-01 ; <double> [#uses=1] %tmp.6 = sub double %X, 5.000000e-01 ; <double> [#uses=1] %mem_tmp.0 = select bool %tmp.1, double %tmp.4, double %tmp.6 store double %mem_tmp.0, double* %G to: %tmp.1 = setgt double %X, 0.000000e+00 ; <bool> [#uses=1] %mem_tmp.0.p = select bool %tmp.1, double 5.000000e-01, double -5.000000e-01 %mem_tmp.0 = add double %mem_tmp.0.p, %X store double %mem_tmp.0, double* %G ret void llvm-svn: 19537
-
Chris Lattner authored
_Bool test2(int X, int Y) { return &arr[X][Y] == arr; } instead of generating this: bool %test2(int %X, int %Y) { %tmp.3.idx = mul int %X, 160 ; <int> [#uses=1] %tmp.3.idx1 = shl int %Y, ubyte 2 ; <int> [#uses=1] %tmp.3.offs2 = sub int 0, %tmp.3.idx ; <int> [#uses=1] %tmp.7 = seteq int %tmp.3.idx1, %tmp.3.offs2 ; <bool> [#uses=1] ret bool %tmp.7 } generate this: bool %test2(int %X, int %Y) { seteq int %X, 0 ; <bool>:0 [#uses=1] seteq int %Y, 0 ; <bool>:1 [#uses=1] %tmp.7 = and bool %0, %1 ; <bool> [#uses=1] ret bool %tmp.7 } This idiom occurs in C++ programs when iterating from begin() to end(), in a vector or array. For example, we now compile this: void test(int X, int Y) { for (int *i = arr; i != arr+100; ++i) foo(*i); } to this: no_exit: ; preds = %entry, %no_exit ... %exitcond = seteq uint %indvar.next, 100 ; <bool> [#uses=1] br bool %exitcond, label %return, label %no_exit instead of this: no_exit: ; preds = %entry, %no_exit ... %inc5 = getelementptr [100 x [40 x int]]* %arr, int 0, int 0, int %inc.rec ; <int*> [#uses=1] %tmp.8 = seteq int* %inc5, getelementptr ([100 x [40 x int]]* %arr, int 0, int 100, int 0) ; <bool> [#uses=1] %indvar.next = add uint %indvar, 1 ; <uint> [#uses=1] br bool %tmp.8, label %return, label %no_exit llvm-svn: 19536
-
Chris Lattner authored
llvm-svn: 19535
-
Chris Lattner authored
llvm-svn: 19534
-
Chris Lattner authored
llvm-svn: 19533
-
Chris Lattner authored
llvm-svn: 19532
-
Chris Lattner authored
llvm-svn: 19531
-
Reid Spencer authored
llvm-svn: 19530
-
Chris Lattner authored
llvm-svn: 19529
-
Chris Lattner authored
llvm-svn: 19528
-
Chris Lattner authored
llvm-svn: 19527
-
Chris Lattner authored
llvm-svn: 19526
-
Chris Lattner authored
llvm-svn: 19525
-
Reid Spencer authored
the JIT. llvm-svn: 19524
-
Reid Spencer authored
llvm-svn: 19523
-
Chris Lattner authored
of cases where we accidentally emitted a load folded once and unfolded elsewhere. llvm-svn: 19522
-
- Jan 12, 2005
-
-
Chris Lattner authored
This fixes llvm-test/SingleSource/Regression/C/casts.c llvm-svn: 19519
-
Chris Lattner authored
Checking to see if the load has two uses is not equivalent, as the chain value may have zero uses. llvm-svn: 19518
-
Chris Lattner authored
llvm-svn: 19517
-
Chris Lattner authored
llvm-svn: 19516
-
Chris Lattner authored
movsbl 4(%esp), %eax movl %eax, %edx sarl $7, %edx Now we generate: movsbl 4(%esp), %eax movl %eax, %edx sarl $31, %edx Which is right. llvm-svn: 19515
-
Chris Lattner authored
llvm-svn: 19514
-
Chris Lattner authored
imul %EAX, %EAX, 400 add %ECX, %EAX add %ESI, DWORD PTR [%ECX + 4*%EDX] inc %EDX cmp %EDX, 100 instead of this: imul %EAX, %EAX, 400 add %ECX, %EAX mov %EAX, %EDX shl %EAX, 2 add %ECX, %EAX add %ESI, DWORD PTR [%ECX] inc %EDX cmp %EDX, 100 llvm-svn: 19513
-
Reid Spencer authored
llvm-svn: 19512
-
Chris Lattner authored
llvm-svn: 19511
-
Chris Lattner authored
This fails for shifts because the constant is always 8 bits. llvm-svn: 19508
-
Chris Lattner authored
This fixes FreeBench/pcompress llvm-svn: 19507
-
Chris Lattner authored
llvm-svn: 19506
-
Jeff Cohen authored
llvm-svn: 19505
-
Jeff Cohen authored
llvm-svn: 19504
-
Chris Lattner authored
to be dynamically initialized. :( llvm-svn: 19503
-
Chris Lattner authored
Fix a bug that caused us to crash on povray. We weren't emitting an FP_REG_KILL into a block that had a successor with a FP PHI node. llvm-svn: 19502
-
Chris Lattner authored
mov %AX, WORD PTR [0] instead of like this: mov %AX, WORD PTR [] llvm-svn: 19501
-