| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
Domagoj Babic!
llvm-svn: 28181
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 28128
|
| |
|
|
| |
llvm-svn: 28126
|
| |
|
|
| |
llvm-svn: 28101
|
| |
|
|
|
|
| |
Domagoj Babic!
llvm-svn: 28048
|
| |
|
|
| |
llvm-svn: 28019
|
| |
|
|
| |
llvm-svn: 28007
|
| |
|
|
|
|
| |
Transforms/InstCombine/vec_insert_to_shuffle.ll
llvm-svn: 27997
|
| |
|
|
| |
llvm-svn: 27912
|
| |
|
|
| |
llvm-svn: 27881
|
| |
|
|
|
|
| |
can be converted to losslessly, we can continue the conversion to a direct call.
llvm-svn: 27880
|
| |
|
|
|
|
| |
if the pointer is known aligned.
llvm-svn: 27781
|
| |
|
|
|
|
|
|
| |
Make the insert/extract elt -> shuffle code more aggressive.
This fixes CodeGen/PowerPC/vec_shuffle.ll
llvm-svn: 27728
|
| |
|
|
| |
llvm-svn: 27727
|
| |
|
|
|
|
| |
maximal shuffles out of them where possible.
llvm-svn: 27717
|
| |
|
|
|
|
|
| |
insert/extractelement operations. This implements
Transforms/ScalarRepl/vector_promote.ll
llvm-svn: 27710
|
| |
|
|
| |
llvm-svn: 27625
|
| |
|
|
|
|
|
|
| |
aggressive in some cases where LLVMGCC 4 is inserting casts for no reason.
This implements InstCombine/cast.ll:test27/28.
llvm-svn: 27620
|
| |
|
|
| |
llvm-svn: 27573
|
| |
|
|
| |
llvm-svn: 27571
|
| |
|
|
| |
llvm-svn: 27513
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
| |
%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
|
| |
|
|
|
|
|
|
|
|
|
|
| |
%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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
elimination of one load from this:
int AreSecondAndThirdElementsBothNegative( vector float *in ) {
#define QNaN 0x7FC00000
const vector unsigned int testData = (vector unsigned int)( QNaN, 0, 0, QNaN );
vector float test = vec_ld( 0, (float*) &testData );
return ! vec_any_ge( test, *in );
}
Now generating:
_AreSecondAndThirdElementsBothNegative:
mfspr r2, 256
oris r4, r2, 49152
mtspr 256, r4
li r4, lo16(LCPI1_0)
lis r5, ha16(LCPI1_0)
addi r6, r1, -16
lvx v0, r5, r4
stvx v0, 0, r6
lvx v1, 0, r3
vcmpgefp. v0, v0, v1
mfcr r3, 2
rlwinm r3, r3, 27, 31, 31
xori r3, r3, 1
cntlzw r3, r3
srwi r3, r3, 5
mtspr 256, r2
blr
llvm-svn: 27352
|
| |
|
|
| |
llvm-svn: 27330
|
| |
|
|
|
|
|
|
| |
Fold (B&A)^A == ~B & A
This implements InstCombine/xor.ll:test2[56]
llvm-svn: 27328
|
| |
|
|
|
|
| |
extract_element'd value, do so.
llvm-svn: 27323
|
| |
|
|
| |
llvm-svn: 27300
|
| |
|
|
| |
llvm-svn: 27261
|
| |
|
|
| |
llvm-svn: 27125
|
| |
|
|
| |
llvm-svn: 27052
|
| |
|
|
| |
llvm-svn: 27051
|
| |
|
|
| |
llvm-svn: 26992
|
| |
|
|
| |
llvm-svn: 26953
|
| |
|
|
|
|
|
|
| |
Transforms/CorrelatedExprs/switch.ll
Patch contributed by Eric Kidd!
llvm-svn: 26872
|
| |
|
|
|
|
|
| |
- Added more debugging info.
- Allow reuse of IV of negative stride. e.g. -4 stride == 2 * iv of -2 stride.
llvm-svn: 26841
|
| |
|
|
|
|
| |
for more IV reuses.
llvm-svn: 26837
|
| |
|
|
|
|
| |
of a smaller stride even if they have a common loop invariant expression part.
llvm-svn: 26828
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
stride. For a set of uses of the IV of a stride which is a multiple
of another stride, do not insert a new IV expression. Rather, reuse the
previous IV and rewrite the uses as uses of IV expression multiplied by
the factor.
e.g.
x = 0 ...; x ++
y = 0 ...; y += 4
then use of y can be rewritten as use of 4*x for x86.
llvm-svn: 26803
|
| |
|
|
|
|
|
|
| |
A*A*B + A*A*C --> A*(A*B+A*C) --> A*(A*(B+C))
This implements Reassociate/mul-factor3.ll
llvm-svn: 26757
|
| |
|
|
| |
llvm-svn: 26755
|
| |
|
|
|
|
|
| |
(x<<1)+(y<<1) -> (X+Y)<<1. This implements
Transforms/Reassociate/shift-factor.ll
llvm-svn: 26753
|
| |
|
|
|
|
| |
transformation decisions.
llvm-svn: 26738
|
| |
|
|
|
|
|
| |
arrays out of range in a horrible way, but we shouldn't break it anyway.
Details in the comments.
llvm-svn: 26606
|
| |
|
|
| |
llvm-svn: 26580
|
| |
|
|
|
|
|
|
|
|
|
|
| |
the pointer is known to come from either a global variable, alloca or
malloc. This allows us to compile this:
P = malloc(28);
memset(P, 0, 28);
into explicit stores on PPC instead of a memset call.
llvm-svn: 26577
|
| |
|
|
|
|
|
| |
Transforms/InstCombine/vec_narrow.ll. This add support for narrowing
extract_element(insertelement) also.
llvm-svn: 26538
|
| |
|
|
|
|
| |
Testcase here: Transforms/Reassociate/mulfactor.ll
llvm-svn: 26524
|