Owen Anderson
fa113f8155
Factor the profitability check for return slot optimization out into a static function.
...
At some point in the future, this check will become smarter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47310 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19 03:27:34 +00:00
Owen Anderson
c0755a6f98
An sret parameter is required to be the first parameter, so there's no need to loop
...
over all the parameters of the callee looking for it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47309 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19 03:15:29 +00:00
Owen Anderson
7acc0af95a
Cleanup some of my patches from yesterday. Refactor the check for which xform
...
to apply to a memcpy into processInstruction. Also, fix a bug in the check due to
missing braces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47307 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19 03:09:45 +00:00
Owen Anderson
c2580ab9b0
Fix Transforms/GVN/memcpy.ll, which Chris broke in r47275 by reordering the branches. memcpy's are a kind of CallInst.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47305 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19 02:53:23 +00:00
Evan Cheng
31886dbe37
PR1909: Tail merging pass ran wild. It makes no sense to merge blocks in order to save a single instruction since a branch will be inserted for each BB.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47301 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19 02:09:37 +00:00
Evan Cheng
422cba6ed0
Me not like duplicated comments.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47300 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-19 02:05:16 +00:00
Evan Cheng
efec751a1b
- When DAG combiner is folding a bit convert into a BUILD_VECTOR, it should check if it's essentially a SCALAR_TO_VECTOR. Avoid turning (v8i16) <10, u, u, u> to <10, 0, u, u, u, u, u, u>. Instead, simply convert it to a SCALAR_TO_VECTOR of the proper type.
...
- X86 now normalize SCALAR_TO_VECTOR to (BIT_CONVERT (v4i32 SCALAR_TO_VECTOR)). Get rid of X86ISD::S2VEC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47290 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 23:04:32 +00:00
Nick Lewycky
e0cfecf47d
Correctly fold divide-by-constant, even when faced with overflow.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47287 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 22:48:05 +00:00
Dan Gohman
b00ee21f21
Chris pointed out that it's not necessary to set i64 MUL to Expand
...
on x86-32 since i64 itself is not a Legal type. And, update some
comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47282 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 19:34:53 +00:00
Evan Cheng
a9407f5937
- Remove the previous check which broke coalescer-commute3.ll
...
- For now, conservatively ignore copy MI whose source is a physical register. Commuting its def MI can cause a physical register live interval to be live through a loop (since we know it's live coming into the def MI).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47281 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 18:56:31 +00:00
Chris Lattner
7c4e9a44a4
upgrade some tests.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47280 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 18:46:39 +00:00
Nate Begeman
e9fe65c973
Add a note
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47279 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 18:39:23 +00:00
Chris Lattner
92b416f64e
Add a note about sext from i1 plus flags use.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47278 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 18:30:13 +00:00
Dan Gohman
339ffedca9
Don't mark scalar integer multiplication as Expand on x86, since x86
...
has plain one-result scalar integer multiplication instructions.
This avoids expanding such instructions into MUL_LOHI sequences that
must be special-cased at isel time, and avoids the problem with that
code that provented memory operands from being folded.
This fixes PR1874, addressesing the most common case. The uncommon
cases of optimizing multiply-high operations will require work
in DAGCombiner.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47277 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 17:55:26 +00:00
Chris Lattner
e10c0b9d66
Transforming -A + -B --> -(A + B) isn't safe for FP, thanks
...
to Dale for noticing this!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47276 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 17:50:16 +00:00
Chris Lattner
913b19f6fc
minor code simplification, no functionality change.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47275 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 17:47:29 +00:00
Duncan Sands
548448a317
Simplify caller updating using a CallSite, as
...
requested by Chris. While there, do the same
for an existing function committed by someone
called "lattner" :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47273 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 17:32:13 +00:00
Chris Lattner
bb494bcb0e
don't bother calling getUnderlyingObject for non-pointers.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47272 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 17:28:21 +00:00
Owen Anderson
ef562471ce
Since we're not checking for the more general AllocationInst first, we need to explicitly check
...
that Object is an Argument before casting it to one.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47268 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 10:11:00 +00:00
Roman Levenstein
8dd25288f9
New helper function getMBBFromIndex() that given an index in any instruction of an MBB returns a pointer the MBB. Reviewed by Evan.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47267 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 09:35:30 +00:00
Owen Anderson
5aa4f2a085
Add support to GVN for performing sret return slot optimization. This means that, if an sret function tail calls
...
another sret function, it should pass its own sret parameter to the tail callee, allowing it to fill in the correct
return value. llvm-gcc does not emit this by default. Instead, it allocates space in the caller for the sret of
the tail call and then uses memcpy to copy the result into the caller's sret parameter. This optimization detects
and optimizes that case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47265 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 09:24:53 +00:00
Owen Anderson
874a892c99
I got the predicate backwards in my last patch. The comment is correct, the code was not.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47264 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 09:22:21 +00:00
Owen Anderson
26d914ada3
This check is not correct for mallocs, so exclude them earlier.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47263 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 09:11:02 +00:00
Evan Cheng
96cfff0906
For now, avoid commuting def MI for copy MI's whose source is not killed. That simply trade a live interval for another and because only the non-two-address operands can be folded into loads, may end up pessimising code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47262 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 08:40:53 +00:00
Chris Lattner
8244243a31
switch simplifycfg from using vectors for most things to smallvectors,
...
this speeds it up 2.3% on eon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47261 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 07:42:56 +00:00
Chris Lattner
bf1d8a7099
optimize away stackrestore calls that have no intervening alloca or call.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47258 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 06:12:38 +00:00
Owen Anderson
9eb948b466
Duncan pointed out that we can fast fail here, because the sret parameter of
...
a function must be the first parameter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47254 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 04:06:26 +00:00
Owen Anderson
ae708a3d91
Fix a comment, and a bug where we weren't applying the tail call logic in cases that failed the first test.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47253 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 03:52:21 +00:00
Owen Anderson
9aa7c35cee
Fix bugs that Chris noticed in my last patch.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47252 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 02:31:23 +00:00
Chris Lattner
d5b8d92b9f
simplify some code, BreakUpSubtract always returns nonnull now.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47251 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 02:18:25 +00:00
Chris Lattner
0ab5a4ae55
bitcasts of pointers are always pointers.
...
If we see a memcpy of a pointer, make sure to check later
uses of the pointer as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47250 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-18 02:11:28 +00:00
Owen Anderson
7d54254c9c
Add a predicate to Argument to check for the StructRet attribute.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47248 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 23:22:28 +00:00
Owen Anderson
9b636cb338
Teach getModRefInfo that memcpy, memmove, and memset don't "capture" memory addresses.
...
Also, noalias arguments are be considered "like" stack allocated ones for this purpose, because
the only way they can be modref'ed is if they escape somewhere in the current function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47247 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 21:29:08 +00:00
Chris Lattner
dd12f96c5e
Fold (-x + -y) -> -(x+y) which promotes better association, fixing
...
the second half of PR2047
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47244 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 21:03:36 +00:00
Chris Lattner
5329bb22e9
fix pasto
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47242 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 20:54:40 +00:00
Chris Lattner
0b0803ae15
Split up subtracts into add+negate if they have a reassociable use or operand
...
that is also a subtract. This implements PR2047 and Transforms/Reassociate/subtest2.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47241 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 20:51:26 +00:00
Chris Lattner
9bc5ed78c8
make the logic for breaking up subtracts more explicit, no
...
functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47239 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 20:44:51 +00:00
Chris Lattner
456012c72e
move PR2053 to here.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47237 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-17 19:43:57 +00:00
Duncan Sands
3d5378ff8e
Remove any 'nest' parameter attributes if the function
...
is not passed as an argument to a trampoline intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47220 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 20:56:04 +00:00
Duncan Sands
b3a94608b3
Some micro-optimizations.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47219 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 20:53:06 +00:00
Andrew Lenharth
d497d9fab6
I cannot find a libgcc function for this builtin. Therefor expanding it to a noop (which is how it use to be treated). If someone who knows the x86 backend better than me could tell me how to get a lock prefix on an instruction, that would be nice to complete x86 support.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47213 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 14:46:26 +00:00
Duncan Sands
051bb7b075
Teach LegalizeTypes how to expand the operands of
...
br_cc. This fixes 5 "make check" failures.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47212 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 10:29:26 +00:00
Evan Cheng
559f4224d6
Refactor some code; check if commuteInstruction is able to commute the instruction.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47208 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 02:32:17 +00:00
Andrew Lenharth
22c5c1b2df
llvm.memory.barrier, and impl for x86 and alpha
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47204 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 01:24:58 +00:00
Bill Wendling
527c250a90
Fix typos.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47200 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 01:09:25 +00:00
Dan Gohman
42a77880a8
Rename CountMemOperands to ComputeMemOperandsEnd to reflect what
...
it actually does. Simplify CountOperands a little by reusing
ComputeMemOperandsEnd. And reword some comments for both.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47198 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 00:36:48 +00:00
Dan Gohman
94ebde1d45
Revert 47177, which was incorrect.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47196 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-16 00:25:40 +00:00
Scott Michel
0123b7dcfa
Make tblgen a little smarter about constants smaller than i32. Currently,
...
tblgen will complain if a sign-extended constant does not fit into a
data type smaller than i32, e.g., i16. This causes a problem when certain
hex constants are used, such as 0xff for byte masks or immediate xor
values.
tblgen will try the sign-extended value first and, if the sign extended
value would overflow, it tries to see if the unsigned value will fit.
Consequently, a software developer can now safely incant:
(XORHIr16 R16C:$rA, 0xffff)
which is somewhat clearer and more informative than incanting:
(XORHIr16 R16C:$rA, (i16 -1))
even if the two are bitwise equivalent.
Tblgen also outputs the 64-bit unsigned constant in the generated ISel code
when getTargetConstant() is invoked.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47188 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-15 23:05:48 +00:00
Evan Cheng
bd3e5aac74
The copy instruction being coalesced will be removed, it is not a kill.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47179 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-15 21:36:51 +00:00
Ted Kremenek
e3e09574ae
Fixed bug in FoldingSetIteratorImpl where we did not correctly check if
...
we had reached the "fake bucket" after the last bucket, allowing the iterator
in some cases to run off the end of the hashtable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47178 91177308-0d34-0410-b5e6-96231b3b80d8
2008-02-15 21:12:46 +00:00