Sanjay Patel
8c5f236197
[InstCombine] enable (X <<nsw C1) >>s C2 --> X <<nsw (C1 - C2) for vectors with splat constants
...
llvm-svn: 293570
2017-01-30 23:35:52 +00:00
Sanjay Patel
abbb118a78
[InstCombine] add vector test for (X <<nsw C1) >>s C2 --> X <<nsw (C1 - C2); NFC
...
llvm-svn: 293566
2017-01-30 23:26:17 +00:00
Sanjay Patel
0c39d56a60
[InstCombine] enable more lshr(shl X, C1), C2 folds for vectors with splat constants
...
llvm-svn: 293562
2017-01-30 23:01:05 +00:00
Sanjay Patel
98cc841421
[InstCombine] add tests for more shift-shift patterns; NFC
...
llvm-svn: 293555
2017-01-30 22:24:36 +00:00
Sanjay Patel
373db5ba6c
[InstCombine] enable (X >>?exact C1) << C2 --> X >>?exact (C1-C2) for vectors with splat constants
...
llvm-svn: 293524
2017-01-30 18:40:23 +00:00
Sanjay Patel
1a86607d38
[InstCombine] add vector splat tests for (X >>?exact C1) << C2 --> X >>?exact (C1-C2); NFC
...
llvm-svn: 293517
2017-01-30 18:17:14 +00:00
Sanjay Patel
77732d5033
[InstCombine] enable (X <<nsw C1) >>s C2 --> X <<nsw (C1-C2) for vectors with splat constants
...
llvm-svn: 293507
2017-01-30 17:19:32 +00:00
Sanjay Patel
8e644c08ee
[InstCombine] fixed to propagate 'exact' on lshr
...
The original shift is bigger, so this may qualify as 'obvious',
but here's an attempt at an Alive-based proof:
Name: exact
Pre: (C1 u< C2)
%a = shl i8 %x, C1
%b = lshr exact i8 %a, C2
=>
%c = lshr exact i8 %x, C2 - C1
%b = and i8 %c, ((1 << width(C1)) - 1) u>> C2
Optimization is correct!
llvm-svn: 293498
2017-01-30 16:53:03 +00:00
Sanjay Patel
5d6687da99
[InstCombine] add 'exact' to lshr to show that it got dropped; NFC
...
llvm-svn: 293496
2017-01-30 16:38:49 +00:00
Sanjay Patel
1196d7cd7f
[InstCombine] enable lshr(shl X, C1), C2 folds for vectors with splat constants
...
llvm-svn: 293489
2017-01-30 16:11:40 +00:00
Sanjay Patel
127d64065a
[InstCombine] add tests for shift-shift patterns; NFC
...
llvm-svn: 293487
2017-01-30 15:54:50 +00:00
Sanjay Patel
062adaab83
[InstCombine] enable (X >>?,exact C1) << C2 --> X << (C2 - C1) for vectors with splats
...
llvm-svn: 293435
2017-01-29 17:11:18 +00:00
Sanjay Patel
c00574830f
[InstCombine] add tests for shl(shr X, C1), C2 transforms; NFC
...
llvm-svn: 293434
2017-01-29 16:52:59 +00:00
Sanjay Patel
ab8b32de71
[InstCombine] use m_APInt to allow shift-shift folds for vectors with splat constants
...
Some existing 'FIXME' tests are still not folded because of splat holes in value tracking.
llvm-svn: 292151
2017-01-16 19:35:45 +00:00
Sanjay Patel
21347ffddf
[InstCombine] add tests to show missed vector folds; NFC
...
Also, add comments and remove bogus comment.
llvm-svn: 292082
2017-01-15 23:45:03 +00:00
Sanjay Patel
5f8451afad
[InstCombine] use m_APInt to allow ashr folds for vectors with splat constants
...
llvm-svn: 292064
2017-01-15 16:38:19 +00:00
Sanjay Patel
b22f6c5f26
[InstCombine] use m_APInt to allow shl folds for vectors with splat constants
...
llvm-svn: 291934
2017-01-13 18:39:09 +00:00
Sanjay Patel
bbc1c1e46b
[InstCombine] add tests to show missing transforms for vector shl; NFC
...
llvm-svn: 291926
2017-01-13 18:27:23 +00:00
David Majnemer
cb892e9066
[InstCombine] Move casts around shift operations
...
It is possible to perform a left shift before zero extending if the
shift would only shift out zeros.
llvm-svn: 290928
2017-01-04 02:21:34 +00:00
Sanjay Patel
f5887f1fbd
[InstCombine] use m_APInt to allow icmp X, C folds for splat constant vectors
...
isSignBitCheck could be changed to take a pointer param to avoid the 'UnusedBit' ugliness.
llvm-svn: 281231
2016-09-12 16:25:41 +00:00
Sanjay Patel
db400baa80
[InstCombine] add tests to show missing vector folds
...
llvm-svn: 281219
2016-09-12 15:51:42 +00:00
Sanjay Patel
5c5311f4e5
[InstCombine] use m_APInt to allow icmp (and X, Y), C folds for splat constant vectors
...
llvm-svn: 279937
2016-08-28 18:18:00 +00:00
Sanjay Patel
d398d4a39e
[InstCombine] use m_APInt to allow icmp eq/ne (shr X, C2), C folds for splat constant vectors
...
llvm-svn: 279677
2016-08-24 22:22:06 +00:00
Sanjay Patel
163a5ab799
remove FIXME comment; fixed by previous commit
...
llvm-svn: 279400
2016-08-21 16:40:42 +00:00
Sanjay Patel
7ffcde7422
[InstCombine] use m_APInt to allow icmp (shl X, Y), C folds for splat constant vectors, part 3
...
This is a partial enablement (move the ConstantInt guard down).
llvm-svn: 279399
2016-08-21 16:35:34 +00:00
Sanjay Patel
46a68ba618
[InstCombine] add tests for missing vector icmp folds
...
llvm-svn: 278768
2016-08-16 00:48:38 +00:00
Sanjay Patel
aaf34d1bfc
[InstCombine] add test for missing vector icmp fold
...
llvm-svn: 278708
2016-08-15 18:39:54 +00:00
Sanjay Patel
195eb9340a
minimize test
...
llvm-svn: 278707
2016-08-15 18:35:44 +00:00
Sanjay Patel
3f506daf8c
remove unnecessary IR comments about uses
...
llvm-svn: 278705
2016-08-15 18:32:50 +00:00
Sanjay Patel
d391b0d69e
[InstCombine] add tests for missing vector icmp folds
...
llvm-svn: 278704
2016-08-15 18:26:56 +00:00
Sanjay Patel
beebe05af1
[InstCombine] add test for missing vector icmp fold
...
llvm-svn: 278635
2016-08-14 22:29:27 +00:00
Sanjay Patel
e2e89ef936
[ValueTracking, InstCombine] extend isKnownToBeAPowerOfTwo() to handle vector splat constants
...
We could try harder to handle non-splat vector constants too,
but that seems much rarer to me.
Note that the div test isn't resolved because there's a check
for isIntegerTy() guarding that transform.
Differential Revision: http://reviews.llvm.org/D20497
llvm-svn: 270369
2016-05-22 15:41:53 +00:00
Sanjay Patel
312c9afd90
add test for vector shift
...
llvm-svn: 270284
2016-05-20 22:08:16 +00:00
Sanjay Patel
ebc0faa8d4
[InstCombine] regenerate checks
...
llvm-svn: 268245
2016-05-02 15:32:10 +00:00
Rafael Espindola
d1beb07d39
Have a single way for creating unique value names.
...
We had two code paths. One would create names like "foo.1" and the other
names like "foo1".
For globals it is important to use "foo.1" to help C++ name demangling.
For locals there is no strong reason to go one way or the other so I
kept the most common mangling (foo1).
llvm-svn: 253804
2015-11-22 00:16:24 +00:00
Sunil Srivastava
d79dfcbc37
Changed renaming of local symbols by inserting a dot vefore the numeric suffix.
...
One code change and several test changes to match that
details in http://reviews.llvm.org/D9481
llvm-svn: 237150
2015-05-12 16:47:30 +00:00
David Majnemer
5a7717e498
ConstantFold, InstSimplify: undef >>a x can be either -1 or 0, choose 0
...
Zero is usually a nicer constant to have than -1.
llvm-svn: 223969
2014-12-10 21:58:15 +00:00
Ankur Garg
51eeba70da
[test/Transforms/InstCombine/shift.ll] Removed duplicate test cases. NFC.
...
Removed some duplicate test cases from the file /test/Transforms/InstCombine/shift.ll.
test54 and test57 were duplicates of each other.
test55 and test58 were duplicates of each other.
(Removed test57 and test58)
llvm-svn: 223767
2014-12-09 10:35:19 +00:00
Sonam Kumari
90d266c0a9
Removal Of Duplicate Test Case from shift.ll file
...
llvm-svn: 223648
2014-12-08 09:40:43 +00:00
Matt Arsenault
fed3dc8dc6
Revert "Revert r206045, "Fix shift by constants for vector.""
...
Fix cases where the Value itself is used, and not the constant value.
llvm-svn: 206214
2014-04-14 21:50:37 +00:00
NAKAMURA Takumi
58ad0c87f8
Whitespace.
...
llvm-svn: 206154
2014-04-14 07:03:13 +00:00
NAKAMURA Takumi
26afa982ec
Revert r206045, "Fix shift by constants for vector."
...
It broke some builders, at least, i686.
llvm-svn: 206153
2014-04-14 07:02:57 +00:00
Matt Arsenault
173a1e577c
Fix shift by constants for vector.
...
ashr <N x iM>, <N x iM> M -> undef
llvm-svn: 206045
2014-04-11 17:57:53 +00:00
Benjamin Kramer
010f108382
InstCombine: Check for zero shift amounts before subtracting one causing integer overflow.
...
PR17026. Also avoid undefined shifts and shift amounts larger than 64 bits
(those are always undef because we can't represent integer types that large).
llvm-svn: 189672
2013-08-30 14:35:35 +00:00
Stephen Lin
c1c7a1309c
Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change.
...
This update was done with the following bash script:
find test/Transforms -name "*.ll" | \
while read NAME; do
echo "$NAME"
if ! grep -q "^; *RUN: *llc" $NAME; then
TEMP=`mktemp -t temp`
cp $NAME $TEMP
sed -n "s/^define [^@]*@\([A-Za-z0-9_]*\)(.*$/\1/p" < $NAME | \
while read FUNC; do
sed -i '' "s/;\(.*\)\([A-Za-z0-9_]*\):\( *\)@$FUNC\([( ]*\)\$/;\1\2-LABEL:\3@$FUNC(/g" $TEMP
done
mv $TEMP $NAME
fi
done
llvm-svn: 186268
2013-07-14 01:42:54 +00:00
David Majnemer
bafa537eb7
Commit r185909 was a misapplied patch, fix it
...
llvm-svn: 185910
2013-07-09 07:58:32 +00:00
Nadav Rotem
4349f6963e
Revert r174152. The shift amount may overflow and in that case this transformation is illegal.
...
llvm-svn: 174156
2013-02-01 07:59:33 +00:00
Nadav Rotem
1d584029ae
Optimize shift lefts of a constant by a value plus constant into a single shift.
...
llvm-svn: 174152
2013-02-01 06:45:40 +00:00
Shuxin Yang
81b3678564
- Fix a problematic way in creating all-the-1 APInt.
...
- Propagate "exact" bit of [l|a]shr instruction.
llvm-svn: 169942
2012-12-12 00:29:03 +00:00
Shuxin Yang
73285933c9
For rdar://12329730, last piece.
...
This change attempts to simplify (X^Y) -> X or Y in the user's context if we know that
only bits from X or Y are demanded.
A minimized case is provided bellow. This change will simplify "t>>16" into "var1 >>16".
=============================================================
unsigned foo (unsigned val1, unsigned val2) {
unsigned t = val1 ^ 1234;
return (t >> 16) | t; // NOTE: t is used more than once.
}
=============================================================
Note that if the "t" were used only once, the expression would be finally optimized as well.
However, with with this change, the optimization will take place earlier.
Reviewed by Nadav, Thanks a lot!
llvm-svn: 169317
2012-12-04 22:15:32 +00:00