Commit Graph

265 Commits

Author SHA1 Message Date
Simone Ferrini
ce4031f240 Removed unnecessary semicolons 2015-12-03 21:24:40 +01:00
Xin Tong
0b79ecf51c Rename swift-arc-optimize to swift-llvm-arc-optimize as this is a LLVM pass 2015-11-18 11:53:23 -08:00
Michael Gottesman
9fb54bf4bf Fix for upstream ilist changes. 2015-11-11 16:07:41 -08:00
Erik Eckstein
ce848c648d And again: re-apply the StackPromotion commit 0dd045ca04.
The problem of the failure was a bug in instruction cloning, which is fixed in the previous commit.
2015-11-08 15:51:00 -08:00
Mark Lacey
e9718f619e Revert "Another try to re-apply the StackPromotion commit 0dd045ca04dcc10a33abf57f7e1b08260c4e3de1."
This reverts commit 7d70aa39dc because
it may be responsible for a bot breakage.
2015-11-07 16:51:24 -08:00
Erik Eckstein
7d70aa39dc Another try to re-apply the StackPromotion commit 0dd045ca04.
One bug fixed in escape analysis (previous commit) and one bug fixed in StackPromotion itself.
2015-11-06 16:16:36 -08:00
Arnold Schwaighofer
fd662987c8 Revert the StackPromotion pass - bots hit an assert.
Assertion failed: (NumUsePointsToFind > 0 && "There must be at least one
releasing instruction for an alloc"), function canPromoteAlloc

Revert "Fix comment for StackPromotion pass in SIL Passes"
Revert "Reapply the StackPromotion commit
0dd045ca04dcc10a33abf57f7e1b08260c4e3de1."

This reverts commit 3f4b1496bd and commit
199cfca13b.
2015-11-06 06:40:05 -08:00
Erik Eckstein
199cfca13b Reapply the StackPromotion commit 0dd045ca04.
This time with fixing a crash.
2015-11-05 22:01:27 -08:00
Erik Eckstein
d7b7fc76ea Revert "Add a stack promotion optimization."
This reverts commit 0dd045ca04.

StackPromotion crashes when compiling MatMult in stdlib-asserts configuration
2015-11-05 21:34:05 -08:00
Erik Eckstein
0dd045ca04 Add a stack promotion optimization.
It promotes allocations of native swift objects and array buffers to the stack if it is possible.
The SIL StackPromotion pass is the main part of the optimization. For details see comments there.
Unfortunately we need an additional LLVM pass to handle array buffers, which is not very nice.
I hope that we can get rid of it in future (again: for details see the comments in StackPromotion.cpp)

The optimization gives performance improvements in some benchmarks, mostly related to array literals:
ArrayLiteral: +12%
Combos: +16%
DictionaryLiteral: + 37%
RIPEMD: +10%
StringBuilder: +27%
StringInterpolation: +11%
And last but not least the new benchmark which is dedicated to test stack promotion:
ObjectAllocation: +52%
2015-11-05 16:52:59 -08:00
Michael Gottesman
9ebc0d214b Move the declaration of initializeSwiftARCContractPass and initializeSwiftARCOptPass from {LLVMARCContarct,LLVMARCOpts}.cpp => PassesFwd.h so swift-llvm-opts can use them.
Swift SVN r32807
2015-10-21 21:45:19 +00:00
Michael Gottesman
72f5063f3c Update SwiftAA for upstream AA changes.
Swift SVN r32800
2015-10-21 21:45:13 +00:00
Chris Lattner
fe78e77783 silence some warnings.
Swift SVN r32176
2015-09-23 05:06:51 +00:00
Xin Tong
921a951b63 Fix a compiler crasher with replaceAllUsesWith in LLVMARCOpt.
Swift SVN r32148
2015-09-22 16:20:45 +00:00
Xin Tong
ecc7cc091c Use LLVM RC Identity for LLVMARCOpt Retain/Release code motion.rdar://22774326
Swift SVN r32146
2015-09-22 05:58:07 +00:00
Xin Tong
2b546cd6b5 Implement bridgeobject_retain/release merging in LLVMARCContract. rdar://22108790
recommit for r32132.

Swift SVN r32145
2015-09-22 04:34:53 +00:00
Dmitri Hrybenko
55c6c8bd98 Revert "Implement bridgeobject_retain/release merging in LLVMARCContract. rdar://22108790"
This reverts commit r32132.  It broke tests:

Swift :: 1_stdlib/FloatingPoint.swift.gyb
Swift :: 1_stdlib/NSStringAPI.swift
Swift :: 1_stdlib/Runtime.swift
Swift :: Interpreter/SDK/CoreGraphics_CGFloat.swift

Swift SVN r32142
2015-09-22 01:08:02 +00:00
Xin Tong
3eb7000b8f Implement bridgeobject_retain/release merging in LLVMARCContract. rdar://22108790
Swift SVN r32132
2015-09-21 23:06:19 +00:00
Xin Tong
c9f43c824c LLVM level RC identity, strip off pointer casts as well as reference forwarding
for some of the entry points. rdar://22774326

Swift SVN r32124
2015-09-21 21:16:22 +00:00
Xin Tong
720d49be49 update comments for swift_retain, i.e. it returns no reference now
Swift SVN r32095
2015-09-19 16:38:31 +00:00
Xin Tong
768a6011de Add retain_n entry points to SwiftAA. rdar://22765670
Swift SVN r32094
2015-09-19 16:37:27 +00:00
Xin Tong
33193ef2d8 Strength reduce unknownRetain to retain.
when an object is passed to unknownRetain and retain, the unknownRetain
can be strength reduced to retain.  same for unknownRelease and release.

Swift SVN r32087
2015-09-18 23:20:20 +00:00
Xin Tong
75385d0501 merge multiple unknownRetain/unknownReleases to
unknownRetain_n/unknownRelease_n rdar://21945003

Swift SVN r32084
2015-09-18 22:25:59 +00:00
Xin Tong
dca508bfbb This is part of a series of commits to remove reference forwarding for
some of the ARC entry points. rdar://22724641. After this commit,
swift_retain_noresult will be completely replaced by swift_retain.
LLVMARCOpts pass is modified NOT to rewrite swift_retain to
swift_retain_noresult which forward no reference.

Swift SVN r32082
2015-09-18 21:56:50 +00:00
Xin Tong
bc3fe169b4 This is part of a series of commits to remove reference forwarding for some of the ARC entry points. rdar://22724641.
After this commit, swift_retain will return no reference and LLVMARCContract pass is modified NOT to rewrite
swift_retain_noresult to old swift_retain which forwarded the reference.

Swift SVN r32075
2015-09-18 20:35:39 +00:00
Michael Gottesman
121ef3ef9f Revert the series of commits for removing the return value from swift_retain_noresult.
I asked that the patches were split up so I could do post commit review.

This reverts commit r32059.
This reverts commit r32058.
This reverts commit r32056.
This reverts commit r32055.

Swift SVN r32060
2015-09-18 02:31:24 +00:00
Xin Tong
4e46dacc3d Completely replace swift_retain_noresult with swift_retain. this is part of a series of commits
to remove reference forwarding for some of the ARC entry points. rdar://22724641. After this
commit, swift_retain_noresult will be completely replaced by swift_retain and LLVMARCOpts.cpp
will no longer canonicalize swift_retain to swift_retain_noresult as now swift_retain returns no
reference.

Swift SVN r32058
2015-09-18 01:51:17 +00:00
Xin Tong
955e4ed652 Change swift_retain/swift_retain_n to return no value. this is part of a series of commits
to remove reference forwarding for some of the ARC entry points. rdar://22724641. After this
commit, swift_retain will be the same as swift_retain_noresult, returning no reference.
LLVMARCContract pass is also modified NOT to rewrite swift_retain_noresult to the
old swift_retain which forwards the reference.

Swift SVN r32055
2015-09-18 00:41:35 +00:00
Michael Gottesman
72f7476ce9 Adjust to upstream changes in the ModRefResult enum
Swift SVN r31799
2015-09-09 04:37:15 +00:00
Michael Gottesman
8e9bc84677 Perform the RRN optimization early/clear when we see an unknown call.
If we have an unknown call, we need to create any retainN calls we
have seen. The reason why is that we do not want to move retains,
releases over isUniquelyReferenced calls. Specifically imagine this:

retain(x); unknown(x); release(x); isUniquelyReferenced(x); retain(x);

In this case we would with this optimization merge the last retain
with the first. This would then create an additional copy. The
release side of this is:

retain(x); unknown(x); release(x); isUniquelyReferenced(x); release(x);

Again in such a case by merging the first release with the second
release, we would be introducing an additional copy.

Thus if we see an unknown call we merge together all retains and
releases before to get some optimization without any loss of
correctness. This could be made more aggressive through appropriate
alias analysis and usage of LLVM's function attributes to determine that
a function does not touch globals.

Swift SVN r30394
2015-07-20 06:34:57 +00:00
Michael Gottesman
0db8d77e4c Refactor LLVMARCContract => LLVMARCContract.cpp.
Swift SVN r30393
2015-07-20 06:34:55 +00:00
Michael Gottesman
3ddaf105b0 Refactor ARCEntryPointBuilder => ARCEntryPointBuilder.h
Swift SVN r30392
2015-07-20 06:34:54 +00:00
Erik Eckstein
57c5de4491 [llvm-arc-opts] Optimize strong_retain_unowned/strong_release pairs.
Replaces a swift_retainUnowned/swift_release pair with a swift_checkUnowned, if possible.
For details see rdar://problem/21297936




Swift SVN r30262
2015-07-16 13:46:18 +00:00
Michael Gottesman
672d32ef02 [llvm-arc-opts] Merge together multiple retains/releases in the same BB into retain_n/release_n calls.
We are taking advantage of the fact that we can always safely move a retain
earlier in the program and a release later in the program. Given this
information, in every BB, we merge together all retains into the first retain
(creating a retain_n) and all releases into the last release in that BB
(creating a release_n).

rdar://21803771

Swift SVN r30261
2015-07-16 12:28:29 +00:00
Michael Gottesman
123dbc6912 [llvm-arc-opts] Extract out single BB analysis/opts into its own method. To shrink the size of SwiftARCContractImpl::run.
Swift SVN r30260
2015-07-16 12:28:28 +00:00
Michael Gottesman
cd0e84acb7 [llvm-arc-opts] Extract out the implementation of SwiftARCContract into SwiftARCContractImpl so we can store global information more conveniently without polluting the public header where the actual LLVM pass is declared.
Swift SVN r30259
2015-07-16 12:28:27 +00:00
Michael Gottesman
3c86d000e4 Small style fixes. NFC.
Swift SVN r30258
2015-07-16 12:28:26 +00:00
Michael Gottesman
89ce119646 Add support to ARCEntryPointBuilder for emitting RetainN and ReleaseN calls.
Swift SVN r30257
2015-07-16 12:28:25 +00:00
Michael Gottesman
2315c8fd06 [llvm-arc-opts] Rename SwiftARCExpand => SwiftARCContract.
This pass does things similar to LLVMARCContract so it makes sense to use the
same naming schema.

Also I am going to be implementing some contracting optimziations here later
today.

Swift SVN r30203
2015-07-15 00:03:01 +00:00
Michael Gottesman
04890c964e [llvm-arc-opts] Remove retainAndReturnThree.
We were never generating it and are going to transition all of the stdlib data
structures to single pointer representations.

rdar://21665665

Swift SVN r30174
2015-07-13 23:10:12 +00:00
Michael Gottesman
24c9c75df0 [llvm-arc-opts] Refactor the ARC call constant caches and ARC call creation code into a builder class.
This removes a bunch of boilerplate from the LLVMARCOpts passes related
to Constant caches and creating these calls.

Swift SVN r30130
2015-07-12 22:13:10 +00:00
Dmitri Hrybenko
7c290477bc ARC optimizer: disable one optimization
ARC optimizer inserts calls to swift_retainAndReturnThree, which does
not exist.

rdar://21665665

Swift SVN r29907
2015-07-03 04:38:29 +00:00
Dmitri Hrybenko
8f61538f64 Adjust to llvm::Location -> llvm::MemoryLocation rename
Swift SVN r29698
2015-06-25 22:01:36 +00:00
Dmitri Hrybenko
2fc1cbe8c1 Adjust to the new IRBuilder APIs
Swift SVN r29692
2015-06-25 22:01:24 +00:00
Adrian Prantl
f68161e66c Have LLVMArcOpts preserve the debug locations when lowering calls to
retain and release operations.

rdar://problem/21028676

Swift SVN r29550
2015-06-22 18:50:51 +00:00
Andrew Trick
af711933b7 Update DataLayout API for upstream LLVM changes.
Swift SVN r25771
2015-03-04 23:21:47 +00:00
Dmitri Hrybenko
85975d3529 Update for upstream LLVM change
Swift SVN r25040
2015-02-06 19:09:05 +00:00
Dmitri Hrybenko
5ff0612224 CMake: stop using LLVM_COMMON_LIBS, it is not set anywhere
Swift SVN r24174
2015-01-05 07:18:10 +00:00
Arnold Schwaighofer
75645e22a6 LLVMARCOpts: Retain motion can ignore loads
rdar://19060610

Swift SVN r23530
2014-11-21 20:06:33 +00:00
Arnold Schwaighofer
f71006fbf1 LLVMARCOpts: Properly handle swift_bridgeObjectRetain/Release
We did not use the right name for the function and were not attempting to move
them.

rdar://19060663

Swift SVN r23529
2014-11-21 20:06:31 +00:00