Dan Gohman
fa1211f69b
Enable first-class aggregates support.
...
Remove the GetResultInst instruction. It is still accepted in LLVM assembly
and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove
support for return instructions with multiple values. These are auto-upgraded
to use InsertValueInst instructions.
The IRBuilder still accepts multiple-value returns, and auto-upgrades them
to InsertValueInst instructions.
llvm-svn: 53941
2008-07-23 00:34:11 +00:00
Chris Lattner
c600c53d1f
Fix PR2553
...
llvm-svn: 53715
2008-07-17 06:07:20 +00:00
Matthijs Kooijman
c1d7477ed2
Redo InstCombiner::visitExtractValueInst. Instead of using the (complicate)
...
FindInsertedValue, it now performs a number of simple transformations that
should result in the same effect when applied iteratively.
llvm-svn: 53673
2008-07-16 12:55:45 +00:00
Evan Cheng
c97094552c
Fix PR2296. Do not transform x86_sse2_storel_dq into a full-width store.
...
llvm-svn: 53666
2008-07-16 07:28:14 +00:00
Chris Lattner
16395e51f4
Fix PR2506 by being a bit more careful about reverse fact propagation when
...
disproving a condition. This actually compiles the existing testcase
(udiv_select_to_select_shift) to:
define i64 @test(i64 %X, i1 %Cond) {
entry:
%divisor1.t = lshr i64 %X, 3 ; <i64> [#uses=1]
%quotient2 = lshr i64 %X, 3 ; <i64> [#uses=1]
%sum = add i64 %divisor1.t, %quotient2 ; <i64> [#uses=1]
ret i64 %sum
}
instead of:
define i64 @test(i64 %X, i1 %Cond) {
entry:
%quotient1.v = select i1 %Cond, i64 3, i64 4 ; <i64> [#uses=1]
%quotient1 = lshr i64 %X, %quotient1.v ; <i64> [#uses=1]
%quotient2 = lshr i64 %X, 3 ; <i64> [#uses=1]
%sum = add i64 %quotient1, %quotient2 ; <i64> [#uses=1]
ret i64 %sum
}
llvm-svn: 53534
2008-07-14 00:15:52 +00:00
Nick Lewycky
f76aa23b54
Enhance analysis of srem.
...
Remove dead code analyzing urem. 'urem' of power-of-2 is canonicalized to an
'and' instruction.
llvm-svn: 53506
2008-07-12 05:04:38 +00:00
Nick Lewycky
45e127ab20
Document 'mask' in this calculation.
...
llvm-svn: 53454
2008-07-11 08:16:26 +00:00
Nick Lewycky
da405e1155
Remove misleading constant from comment.
...
llvm-svn: 53452
2008-07-11 07:36:19 +00:00
Nick Lewycky
f95b64acaa
Add another optimization from PR2330. Also catch some missing cases that are
...
similar.
llvm-svn: 53451
2008-07-11 07:20:53 +00:00
Chris Lattner
3994bed1a9
a missed optimization that Eli spotted
...
llvm-svn: 53449
2008-07-11 06:40:29 +00:00
Chris Lattner
13a6911ea2
another bug in the same line.
...
llvm-svn: 53448
2008-07-11 06:38:16 +00:00
Chris Lattner
de89b507dd
fix a bug spotted by Eli's eagle eyes
...
llvm-svn: 53447
2008-07-11 06:36:01 +00:00
Chris Lattner
bd25b8507c
simplify and merge a bunch of code. Instead of comparing against
...
the min/max values for an integer type, compare against the min/max
values we can prove contain the input. This might be a tighter bound,
so this is general goodness.
llvm-svn: 53446
2008-07-11 05:40:05 +00:00
Chris Lattner
38a50c9528
fold away (x <= cst) earlier, allowing us to not have to
...
handle them in some code.
llvm-svn: 53445
2008-07-11 05:08:55 +00:00
Chris Lattner
6af608b8ce
Fix folding of icmp's of i1 where the comparison is signed. The code
...
was using the algorithm for folding unsigned comparisons which is
completely wrong. This has been broken since the signless types change.
llvm-svn: 53444
2008-07-11 04:20:58 +00:00
Chris Lattner
4fa8bb3430
Fix a bogus optimization: folding (slt (zext i1 A to i32), 1) -> (slt i1 A, true)
...
This cause a regression in InstCombine/JavaCompare, which was doing the right
thing on accident. To handle the missed case, generalize the comparisons based
on masked bits a little bit to handle comparisons against the max value. For
example, we can now xform (slt i32 (and X, 4), 4) -> (setne i32 (and X, 4), 4)
llvm-svn: 53443
2008-07-11 04:09:09 +00:00
Nick Lewycky
6193a564ab
Fix overzealous optimization. Thanks to Duncan Sands for pointing out my error!
...
llvm-svn: 53393
2008-07-10 05:51:40 +00:00
Nick Lewycky
bb89c2a3f6
Simplify, suggested by Chris Lattner.
...
llvm-svn: 53283
2008-07-09 07:35:26 +00:00
Nick Lewycky
f9c27c343a
Fold (a < 8) && (b < 8) into (a|b) < 8 for unsigned less or greater than.
...
llvm-svn: 53282
2008-07-09 07:29:11 +00:00
Nick Lewycky
364661c43e
Fold ((1 << a) & 1) to (a == 0).
...
llvm-svn: 53276
2008-07-09 05:20:13 +00:00
Nick Lewycky
0d3645e673
Reduce x - y to -y when we know the 'x' part will get masked off anyways.
...
llvm-svn: 53271
2008-07-09 04:32:37 +00:00
Chris Lattner
501d78fdc0
Fix PR2496, a really nasty bug which involved sinking volatile loads
...
into phis. This is actually the same bug as PR2262 /
2008-04-29-VolatileLoadDontMerge.ll, but I missed checking the first
predecessor for multiple successors. Testcase here:
InstCombine/2008-07-08-VolatileLoadMerge.ll
llvm-svn: 53240
2008-07-08 17:18:32 +00:00
Dan Gohman
38740a98b2
Make DenseMap's insert return a pair, to more closely resemble std::map.
...
llvm-svn: 53177
2008-07-07 17:46:23 +00:00
Nick Lewycky
9f1a4dc672
Fix missed optimization opportunity when analyzing cast of mul and select.
...
llvm-svn: 53151
2008-07-05 21:19:34 +00:00
Evan Cheng
da3db11db3
- Re-apply 52748 and friends with fix. GetConstantStringInfo() returns an empty string for ConstantAggregateZero case which surprises selectiondag.
...
- Correctly handle memcpy from constant string which is zero-initialized.
llvm-svn: 52891
2008-06-30 07:31:25 +00:00
Anton Korobeynikov
a7c583d584
Revert (52748 and friends):
...
Move GetConstantStringInfo to lib/Analysis. Remove
string output routine from Constant. Update all
callers. Change debug intrinsic api slightly to
accomodate move of routine, these now return values
instead of strings.
This unbreaks llvm-gcc bootstrap.
llvm-svn: 52884
2008-06-29 17:57:03 +00:00
Eric Christopher
d0ab9c47e6
Move GetConstantStringInfo to lib/Analysis. Remove
...
string output routine from Constant. Update all
callers. Change debug intrinsic api slightly to
accomodate move of routine, these now return values
instead of strings.
llvm-svn: 52748
2008-06-26 00:31:12 +00:00
Chris Lattner
c9c81fb0df
Fix PR2488, a case where we deleted stack restores too aggressively.
...
llvm-svn: 52702
2008-06-25 05:59:28 +00:00
Eli Friedman
d3449df326
Fix for PR2479: correctly optimize expressions like (a > 13) & (a ==
...
15).
See also PR1800, which is about the signed case.
llvm-svn: 52608
2008-06-21 23:36:13 +00:00
Chris Lattner
f3ecd2d290
Fix PR2471, which is a bug involving an invalid promotion from a conditional load.
...
llvm-svn: 52525
2008-06-20 05:12:56 +00:00
Bill Wendling
cd6fb1d0a8
Remove dead code causing a warning.
...
llvm-svn: 52502
2008-06-19 18:00:44 +00:00
Dan Gohman
ed2250990a
Use Instruction::moveBefore instead of manipulating the instruction list
...
directly.
llvm-svn: 52498
2008-06-19 17:47:47 +00:00
Chris Lattner
78119b4742
Fix the regressions on sext-misc.ll my patch yesterday caused.
...
llvm-svn: 52466
2008-06-18 18:11:55 +00:00
Chris Lattner
ef36dcd10b
implement some simple bswap optimizations, rdar://5992453
...
llvm-svn: 52442
2008-06-18 04:33:20 +00:00
Chris Lattner
b5ee8b3e89
make truncate/sext elimination capable of changing phi's. This
...
implements rdar://6013816 and the testcase in Transforms/InstCombine/sext-misc.ll.
llvm-svn: 52440
2008-06-18 04:00:49 +00:00
Duncan Sands
4b50fde2c4
Fix typo that changed the logic to something wrong.
...
Spotted by Nick Lewycky.
llvm-svn: 52411
2008-06-17 15:55:30 +00:00
Matthijs Kooijman
86cda9e050
Pass around Instruction* instead of Instruction& in FindInsertedValue and friends.
...
llvm-svn: 52318
2008-06-16 13:13:08 +00:00
Matthijs Kooijman
5cb387735d
80 column fixes.
...
llvm-svn: 52316
2008-06-16 12:57:37 +00:00
Matthijs Kooijman
e92e18be5a
Move FindScalarValue from InstructionCombining.cpp to ValueTracking.cpp. While
...
I'm at it, rename it to FindInsertedValue.
The only functional change is that newly created instructions are no longer
added to instcombine's worklist, but that is not really necessary anyway (and
I'll commit some improvements next that will completely remove the need).
llvm-svn: 52315
2008-06-16 12:48:21 +00:00
Eli Friedman
5de0a77a9b
Don't skip over instructions other than loads that might read memory
...
when trying to sink stores.
llvm-svn: 52259
2008-06-13 22:02:12 +00:00
Eli Friedman
9833a1b407
Make sure SimplifyStoreAtEndOfBlock doesn't mess with loops; the
...
structure checks are incorrect if the blocks aren't distinct.
Fixes PR2435.
llvm-svn: 52257
2008-06-13 21:17:49 +00:00
Gabor Greif
431e9560b7
fix a minor deviation from the original in my previous commit
...
llvm-svn: 52247
2008-06-12 21:51:29 +00:00
Gabor Greif
f6d8e77027
op_iterator-ify some loops, low hanging fruit only, there is more
...
llvm-svn: 52246
2008-06-12 21:37:33 +00:00
Matthijs Kooijman
b2fc72bfbf
Teach instruction combining about the extractvalue. It can succesfully fold
...
useless insert-extract chains, similar to how it folds them for vectors.
Add a testcase for this.
llvm-svn: 52217
2008-06-11 14:05:05 +00:00
Matthijs Kooijman
3453c7bcb5
Clarify a comment.
...
llvm-svn: 52212
2008-06-11 09:00:12 +00:00
Chris Lattner
b4866ef30c
Limit the icmp+phi merging optimization to the cases where it is profitable:
...
don't make i1 phis when it won't be possible to eliminate them.
llvm-svn: 52097
2008-06-08 20:52:11 +00:00
Zhou Sheng
1152ca9101
As Chris suggested, handle the situation if ShAmt larger than BitWidth,
...
otherwise, opt might crash.
llvm-svn: 52041
2008-06-06 08:32:05 +00:00
Zhou Sheng
fbe1dc240c
If BitWidth equals to ShtAmt, the RHSKnownZero[BitWidth-ShiftAmt-1] will
...
crash the opt. Just fix this.
Test case in llvm/test/Transforms/InstCombine/2008-06-05-ashr-crash.ll
llvm-svn: 52003
2008-06-05 14:23:44 +00:00
Chris Lattner
a12a6de683
move CannotBeNegativeZero to ValueTracking. Simplify some signbit comparisons.
...
llvm-svn: 51864
2008-06-02 01:29:46 +00:00
Chris Lattner
965c769b3c
move ComputeMaskedBits, MaskedValueIsZero, and ComputeNumSignBits
...
out of instcombine into a new file in libanalysis. This also teaches
ComputeNumSignBits about the number of sign bits in a constantint.
llvm-svn: 51863
2008-06-02 01:18:21 +00:00