- May 17, 2006
-
-
Chris Lattner authored
Patch written by Domagoj Babic! llvm-svn: 28367
-
Chris Lattner authored
to the new module. Patch provided by Nick Lewycky! llvm-svn: 28349
-
- May 14, 2006
-
-
Chris Lattner authored
llvm-svn: 28289
-
Chris Lattner authored
llvm-svn: 28286
-
Evan Cheng authored
llvm-svn: 28284
-
- May 13, 2006
-
-
Chris Lattner authored
bitfield now gives this code: _plus: lwz r2, 0(r3) rlwimi r2, r2, 0, 1, 31 xoris r2, r2, 32768 stw r2, 0(r3) blr instead of this: _plus: lwz r2, 0(r3) srwi r4, r2, 31 slwi r4, r4, 31 addis r4, r4, -32768 rlwimi r2, r4, 0, 0, 0 stw r2, 0(r3) blr this can obviously still be improved. llvm-svn: 28275
-
Chris Lattner authored
currently very limited, but can be extended in the future. For example, we now compile: uint %test30(uint %c1) { %c2 = cast uint %c1 to ubyte %c3 = xor ubyte %c2, 1 %c4 = cast ubyte %c3 to uint ret uint %c4 } to: _xor: movzbl 4(%esp), %eax xorl $1, %eax ret instead of: _xor: movb $1, %al xorb 4(%esp), %al movzbl %al, %eax ret More impressively, we now compile: struct B { unsigned bit : 1; }; void xor(struct B *b) { b->bit = b->bit ^ 1; } To (X86/PPC): _xor: movl 4(%esp), %eax xorl $-2147483648, (%eax) ret _xor: lwz r2, 0(r3) xoris r2, r2, 32768 stw r2, 0(r3) blr instead of (X86/PPC): _xor: movl 4(%esp), %eax movl (%eax), %ecx movl %ecx, %edx shrl $31, %edx # TRUNCATE movb %dl, %dl xorb $1, %dl movzbl %dl, %edx andl $2147483647, %ecx shll $31, %edx orl %ecx, %edx movl %edx, (%eax) ret _xor: lwz r2, 0(r3) srwi r4, r2, 31 xori r4, r4, 1 rlwimi r2, r4, 31, 0, 0 stw r2, 0(r3) blr This implements InstCombine/cast.ll:test30. llvm-svn: 28273
-
Chris Lattner authored
Fix a nasty bug in the memcmp optimizer where we used the wrong variable! llvm-svn: 28269
-
Chris Lattner authored
llvm-svn: 28268
-
- May 11, 2006
-
-
Chris Lattner authored
When doing the initial pass of constant folding, if we get a constantexpr, simplify the constant expr like we would do if the constant is folded in the normal loop. This fixes the missed-optimization regression in Transforms/InstCombine/getelementptr.ll last night. llvm-svn: 28224
-
- May 10, 2006
-
-
Chris Lattner authored
1. Implement InstCombine/deadcode.ll by not adding instructions in unreachable blocks (due to constants in conditional branches/switches) to the worklist. This causes them to be deleted before instcombine starts up, leading to better optimization. 2. In the prepass over instructions, do trivial constprop/dce as we go. This has the effect of improving the effectiveness of #1. In addition, it *significantly* speeds up instcombine on test cases with large amounts of constant folding code (for example, that produced by code specialization or partial evaluation). In one example, it speeds up instcombine from 0.0589s to 0.0224s with a release build (a 2.6x speedup). llvm-svn: 28215
-
- May 09, 2006
-
-
Chris Lattner authored
Domagoj Babic! llvm-svn: 28181
-
- May 06, 2006
-
-
Chris Lattner authored
Make the "fold (and (cast A), (cast B)) -> (cast (and A, B))" transformation only apply when both casts really will cause code to be generated. If one or both doesn't, then this xform doesn't remove a cast. This fixes Transforms/InstCombine/2006-05-06-Infloop.ll llvm-svn: 28141
-
- May 05, 2006
-
-
Chris Lattner authored
llvm-svn: 28128
-
Chris Lattner authored
llvm-svn: 28126
-
- May 04, 2006
-
-
Chris Lattner authored
llvm-svn: 28101
-
- May 02, 2006
-
-
Chris Lattner authored
Domagoj Babic! llvm-svn: 28048
-
- Apr 29, 2006
-
-
Chris Lattner authored
llvm-svn: 28019
-
- Apr 28, 2006
-
-
Chris Lattner authored
llvm-svn: 28007
-
- Apr 27, 2006
-
-
Chris Lattner authored
Transforms/InstCombine/vec_insert_to_shuffle.ll llvm-svn: 27997
-
Chris Lattner authored
nondeterminism being bad) could cause some trivial missed optimizations (dead phi nodes being left around for later passes to clean up). With this, llvm-gcc4 now bootstraps and correctly compares. I don't know why I never tried to do it before... :) llvm-svn: 27984
-
- Apr 20, 2006
-
-
Chris Lattner authored
llvm-svn: 27912
-
Andrew Lenharth authored
llvm-svn: 27881
-
Andrew Lenharth authored
can be converted to losslessly, we can continue the conversion to a direct call. llvm-svn: 27880
-
- Apr 18, 2006
-
-
Chris Lattner authored
if the pointer is known aligned. llvm-svn: 27781
-
- Apr 16, 2006
-
-
Chris Lattner authored
Make the insert/extract elt -> shuffle code more aggressive. This fixes CodeGen/PowerPC/vec_shuffle.ll llvm-svn: 27728
-
Chris Lattner authored
llvm-svn: 27727
-
- Apr 15, 2006
-
-
Chris Lattner authored
maximal shuffles out of them where possible. llvm-svn: 27717
-
- Apr 14, 2006
-
-
Chris Lattner authored
insert/extractelement operations. This implements Transforms/ScalarRepl/vector_promote.ll llvm-svn: 27710
-
- Apr 13, 2006
-
-
Andrew Lenharth authored
llvm-svn: 27652
-
- Apr 12, 2006
-
-
Reid Spencer authored
llvm-svn: 27625
-
Chris Lattner authored
aggressive in some cases where LLVMGCC 4 is inserting casts for no reason. This implements InstCombine/cast.ll:test27/28. llvm-svn: 27620
-
- Apr 11, 2006
-
-
Chris Lattner authored
llvm-svn: 27573
-
Chris Lattner authored
llvm-svn: 27571
-
- Apr 10, 2006
-
-
Andrew Lenharth authored
are visible to analysis as intrinsics. That is, make sure someone doesn't pass free around by address in some struct (as happens in say 176.gcc). This doesn't get rid of any indirect calls, just ensure calls to free and malloc are always direct. llvm-svn: 27560
-
- Apr 08, 2006
-
-
Chris Lattner authored
llvm-svn: 27513
-
- Apr 07, 2006
-
-
Chris Lattner authored
llvm-svn: 27478
-
- Apr 06, 2006
-
-
Chris Lattner authored
us to compile oh-so-realistic stuff like this: vec_vperm(A, B, (vector unsigned char){14}); to: vspltb v0, v0, 14 instead of: vspltisb v0, 14 vperm v0, v2, v1, v0 llvm-svn: 27452
-
- Apr 02, 2006
-
-
Chris Lattner authored
%tmp = cast <4 x uint> %tmp to <4 x int> ; <<4 x int>> [#uses=1] %tmp = cast <4 x int> %tmp to <4 x float> ; <<4 x float>> [#uses=1] into: %tmp = cast <4 x uint> %tmp to <4 x float> ; <<4 x float>> [#uses=1] llvm-svn: 27355
-
Chris Lattner authored
%tmp = cast <4 x uint>* %testData to <4 x int>* ; <<4 x int>*> [#uses=1] %tmp = load <4 x int>* %tmp ; <<4 x int>> [#uses=1] to this: %tmp = load <4 x uint>* %testData ; <<4 x uint>> [#uses=1] %tmp = cast <4 x uint> %tmp to <4 x int> ; <<4 x int>> [#uses=1] llvm-svn: 27353
-