Nick Lewycky
148fd55ef3
Teach instcombine all sorts of great stuff about shifts that have exact, nuw or
...
nsw bits on them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147528 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-04 09:28:29 +00:00
Nick Lewycky
57ed0948b8
Make use of the exact bit when optimizing '(X >>exact 3) << 1' to eliminate the
...
'and' that would zero out the trailing bits, and to produce an exact shift
ourselves.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147391 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-31 21:30:22 +00:00
Eli Friedman
ef71597242
Make sure to correctly clear the exact/nuw/nsw flags off of shifts when they are combined together. <rdar://problem/9859829>
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136435 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-29 00:18:19 +00:00
Chris Lattner
05cd886561
Transform any logical shift of a power of two into an exact/NUW shift when
...
in a known-non-zero context.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131887 91177308-0d34-0410-b5e6-96231b3b80d8
2011-05-23 00:21:50 +00:00
Benjamin Kramer
c2e31c1461
InstCombine: turn (C1 << A) << C2) into (C1 << C2) << A)
...
Fixes PR9809.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130485 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-29 08:15:41 +00:00
Chris Lattner
7a6aa1a391
Enhance a bunch of transformations in instcombine to start generating
...
exact/nsw/nuw shifts and have instcombine infer them when it can prove
that the relevant properties are true for a given shift without them.
Also, a variety of refactoring to use the new patternmatch logic thrown
in for good luck. I believe that this takes care of a bunch of related
code quality issues attached to PR8862.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125267 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-10 05:36:31 +00:00
Duncan Sands
c43cee3fbb
Move some shift transforms out of instcombine and into InstructionSimplify.
...
While there, I noticed that the transform "undef >>a X -> undef" was wrong.
For example if X is 2 then the top two bits must be equal, so the result can
not be anything. I fixed this in the constant folder as well. Also, I made
the transform for "X << undef" stronger: it now folds to undef always, even
though X might be zero. This is in accordance with the LangRef, but I must
admit that it is fairly aggressive. Also, I added "i32 X << 32 -> undef"
following the LangRef and the constant folder, likewise fairly aggressive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123417 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-14 00:37:45 +00:00
Owen Anderson
ec3953ff95
When determining if we can fold (x >> C1) << C2, the bits that we need to verify are zero
...
are not the low bits of x, but the bits that WILL be the low bits after the operation completes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122529 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-23 23:56:24 +00:00
Benjamin Kramer
c21a821e9f
The srem -> urem transform is not safe for any divisor that's not a power of two.
...
E.g. -5 % 5 is 0 with srem and 1 with urem.
Also addresses Frits van Bommel's comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120049 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-23 20:33:57 +00:00
Benjamin Kramer
b70ebd2aa3
InstCombine: Reduce "X shift (A srem B)" to "X shift (A urem B)" iff B is positive.
...
This allows to transform the rem in "1 << ((int)x % 8);" to an and.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120028 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-23 18:52:42 +00:00
Chris Lattner
11493aa471
tidy up test.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112321 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 23:15:21 +00:00
Chris Lattner
4ece577019
Enhance the shift propagator to handle the case when you have:
...
A = shl x, 42
...
B = lshr ..., 38
which can be transformed into:
A = shl x, 4
...
iff we can prove that the would-be-shifted-in bits
are already zero. This eliminates two shifts in the testcase
and allows eliminate of the whole i128 chain in the real example.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112314 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 22:53:44 +00:00
Chris Lattner
29cc0b3660
Implement a pretty general logical shift propagation
...
framework, which is good at ripping through bitfield
operations. This generalize a bunch of the existing
xforms that instcombine does, such as
(x << c) >> c -> and
to handle intermediate logical nodes. This is useful for
ripping up the "promote to large integer" code produced by
SRoA.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112304 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 22:24:38 +00:00
Chris Lattner
d07ad66791
merge and filecheckize test
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112289 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 20:44:45 +00:00
Chris Lattner
7673290a96
merge two tests
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112288 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-27 20:42:10 +00:00
Chris Lattner
90d4f3a077
merge test into shift.ll, this also eliminates awful grepping on -stats output
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83802 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-11 22:39:58 +00:00
Chris Lattner
490ff6310a
convert to filecheck.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83801 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-11 22:36:59 +00:00
Dan Gohman
3e054fe9ef
Use opt -S instead of piping bitcode output through llvm-dis.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81257 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-08 22:34:10 +00:00
Dan Gohman
b1e1e82c54
Change these tests to feed the assembly files to opt directly, instead
...
of using llvm-as, now that opt supports this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81226 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-08 16:50:01 +00:00
Chris Lattner
4f9797d683
two changes:
...
1. Make instcombine always canonicalize trunc x to i1 into an icmp(x&1). This
exposes the AND to other instcombine xforms and is more of what the code
generator expects.
2. Rewrite the remaining trunc pattern match to use 'match', which
simplifies it a lot.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67635 91177308-0d34-0410-b5e6-96231b3b80d8
2009-03-24 18:15:30 +00:00
Tanya Lattner
76806b6a43
Remove llvm-upgrade and update tests.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48103 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-09 08:16:40 +00:00
Tanya Lattner
ec9a35a6f9
Remove llvm-upgrade and update test cases.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47793 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-01 09:15:35 +00:00
Reid Spencer
2b544beda3
For PR1319:
...
Upgrade tests to work with new llvm.exp version of llvm_runtest.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36013 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-14 20:13:02 +00:00
Reid Spencer
69ccadd753
Use the llvm-upgrade program to upgrade llvm assembly.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32115 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-02 04:23:10 +00:00
Chris Lattner
82b98a0646
Make these tests fail if opt crashes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26127 91177308-0d34-0410-b5e6-96231b3b80d8
2006-02-12 01:32:58 +00:00
Chris Lattner
6c7fbb8503
A case that instcombine is not catching.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25127 91177308-0d34-0410-b5e6-96231b3b80d8
2006-01-06 07:48:28 +00:00
Chris Lattner
ab4ea6e980
new testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23380 91177308-0d34-0410-b5e6-96231b3b80d8
2005-09-18 05:10:39 +00:00
Chris Lattner
a9c83c73da
new testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21774 91177308-0d34-0410-b5e6-96231b3b80d8
2005-05-08 17:31:24 +00:00
Chris Lattner
1b50d062c8
new testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21714 91177308-0d34-0410-b5e6-96231b3b80d8
2005-05-06 04:11:32 +00:00
Chris Lattner
59359f1e84
New testcases
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16547 91177308-0d34-0410-b5e6-96231b3b80d8
2004-09-28 18:18:35 +00:00
Chris Lattner
907c7c7dd1
Testcases for rev 250 of InstructionCombining.cpp
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16522 91177308-0d34-0410-b5e6-96231b3b80d8
2004-09-27 16:21:26 +00:00
Chris Lattner
256b7a452b
New testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13739 91177308-0d34-0410-b5e6-96231b3b80d8
2004-05-25 06:30:49 +00:00
Chris Lattner
1c48527330
Testcase to make sure we can apply the shift to the operands of the select,
...
eliminating the shifts
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12801 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-09 23:47:24 +00:00
Misha Brukman
e78760e179
Renamed as' =>
llvm-as', dis' =>
llvm-dis', link' =>
llvm-link'.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8558 91177308-0d34-0410-b5e6-96231b3b80d8
2003-09-16 15:29:54 +00:00
Chris Lattner
ab04c365b8
Update test to represent new cannonicalization rules for multiplies
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7804 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-13 04:20:06 +00:00
Chris Lattner
dc20a3e7d3
Right, instcombine cannot remove ((X >> C) << C) if it's signed.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7790 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 21:22:51 +00:00
Chris Lattner
b310196abc
New testcases
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7789 91177308-0d34-0410-b5e6-96231b3b80d8
2003-08-12 21:20:49 +00:00
Chris Lattner
709ad40dc8
New testcases for signed shifts
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7294 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-24 18:38:09 +00:00
Chris Lattner
060c1f816c
Remove usage of grep-not script
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6966 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-28 23:32:04 +00:00
Chris Lattner
c6cab24151
Convert scripts from using explicit control flow to use the new grep-not script
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6955 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-28 22:44:42 +00:00
Chris Lattner
c232870b6f
Add a bunch of new tests
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5730 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 19:16:20 +00:00
Chris Lattner
a66e2fa195
Modernize testcase
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5726 91177308-0d34-0410-b5e6-96231b3b80d8
2003-03-10 18:20:53 +00:00
Chris Lattner
af1b4ad24c
Add new testcase for arithmetic shr of -1
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4069 91177308-0d34-0410-b5e6-96231b3b80d8
2002-10-08 16:10:35 +00:00
Chris Lattner
dabb94adc1
Check for cannonicalization of shl X, 1 -> add X, X
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3670 91177308-0d34-0410-b5e6-96231b3b80d8
2002-09-10 23:03:10 +00:00
Chris Lattner
4a6e4b30b4
These tests should not run -dce pass to cleanup instcombine.
...
If instcombine is making dead instructions, ALL that should be used is -die
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3221 91177308-0d34-0410-b5e6-96231b3b80d8
2002-08-02 19:27:58 +00:00
Chris Lattner
79a31b1782
Fix testcase, the 'shift out all bits' doesn't apply to signed types.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2482 91177308-0d34-0410-b5e6-96231b3b80d8
2002-05-06 16:11:31 +00:00
Chris Lattner
33a90b18e0
New testcases so I don't forget about these algebraic simplifications
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2479 91177308-0d34-0410-b5e6-96231b3b80d8
2002-05-06 05:43:36 +00:00