Commit Graph

11193 Commits

Author SHA1 Message Date
Xin Tong
a95e25c887 Refactor in DSE
1. Add some comments regarding how the pass builds and uses genset and killset
2. Merge some similar functions.
3. Rename DSEComputeKind to DSEKind.
4. Some other small comment changes.
2015-12-20 14:19:47 -08:00
Erik Eckstein
057323fb15 Partially reverting "AliasAnalysis: use escape analysis for some checks."
Partially revert 09c61c61bf.

In some configuration it triggers an assert in escape analysis.
2015-12-18 17:47:56 -08:00
Doug Gregor
cd1c106e35 Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2015-12-18 15:45:48 -08:00
Erik Eckstein
549321756b Revert "AliasAnalysis: use escape analysis in the MemoryBehaviorVisitor"
This reverts commit ae2bf14786.

It broke one regression test.
2015-12-18 15:20:35 -08:00
Mark Lacey
faba6e56b7 Add a stand-alone generic specializer pass.
Begin unbundling devirtualization, specialization, and inlining by
recreating the stand-alone generic specializer pass.

I've added a use of the pass to the pipeline, but this is almost
certainly not going to be the final location of where it runs. It's
primarily there to ensure this code gets exercised.

Since this is running prior to inlining, it changes the order that some
functions are specialized in, which means differences in the order of
output of one of the tests (one which similarly changed when
devirtualization, specialization, and inlining were bundled together).
2015-12-18 14:08:56 -08:00
Mark Lacey
dbde7cc4c1 Update the pass manager to allow for function creation in function passes.
Add interfaces and update the pass execution logic to allow function
passes to create new functions, or ask for functions to be optimized
prior to continuing.

Doing so results in the pass pipeline halting execution on the current
function, and continuing with newly added functions, returning to the
previous function after the newly added functions are fully optimized.
2015-12-18 14:08:56 -08:00
Erik Eckstein
8b79b0d7f5 Change parameter of isNotAliasedIndirectParameter from bool to an enum.
And fix indentation of switch cases.
2015-12-18 12:57:21 -08:00
Xin Tong
cb94f5fdd1 Update some comments and remove dead code in dead store elimination 2015-12-18 10:18:36 -08:00
Doug Gregor
a97ab6dd14 Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2015-12-18 10:15:47 -08:00
Xin Tong
4491d86dc3 Optimize how gen and kill sets are computed in dead store elimination. Existing tests ensure correctness 2015-12-18 09:50:48 -08:00
Erik Eckstein
4aabe88005 ARC: use escape analysis in ARC analysis 2015-12-18 08:02:18 -08:00
Erik Eckstein
ae2bf14786 AliasAnalysis: use escape analysis in the MemoryBehaviorVisitor 2015-12-18 08:02:18 -08:00
Erik Eckstein
09c61c61bf AliasAnalysis: use escape analysis for some checks.
One important additional change here is that alias analsyis doesn't assume that inout is not-aliasing anymore
2015-12-18 08:02:18 -08:00
Erik Eckstein
ae6fa34645 EscapeAnalysis: some new and changed utility functions to be used by alias analysis and ARC analysis. 2015-12-18 08:02:18 -08:00
Erik Eckstein
fc08b60af4 add utility functions for checking not-aliased indirect function arguments. 2015-12-18 08:02:18 -08:00
Dmitri Gribenko
6a66b3cff8 Merge pull request #561 from practicalswift/typos-again
[Typo] Replace PR#514-525 with one large PR
2015-12-18 03:37:02 -08:00
Michael Gottesman
b235064c3f [loop-canonicalization] Change pre-header insertion so that it always occurs.
Previously, if a header had multiple predecessors or if the predecessor was not
a cond_br, we would not insert a pre-header. Now we always insert pre-headers.

This is important in terms of ensuring that ARC Sequence Opts is correct when it
inserts retains before loops.

Reviewed by Andy Trick.

rdar://23853221
SR-102
2015-12-17 19:18:45 -06:00
Michael Gottesman
810181c6d1 Add two utility passes, Compute{Dominance,Loop}Info that just build the relevant infos.
This makes it easy to use -sil-verify-all to verify that both type of info are
created correctly and that analyses are properly updating them. I am going to
use this to harden testing of the loop canonicalizer.
2015-12-17 19:18:45 -06:00
Dmitri Gribenko
73ce9ae7e9 Collection.count => .length
And other API changes that naturally fall out from this, like
Array(repeating:count:) => Array(repeating:length:).
2015-12-17 15:55:29 -08:00
Doug Gregor
824088a07d Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2015-12-17 15:50:24 -08:00
Xin Tong
aa9b052363 Fix an iterator invalidation bug in SSAupdater
I failed to create a test, but will check in a test in the context of
redundant load elimination, which will use the SSAupdater.
2015-12-17 15:50:20 -08:00
Arnold Schwaighofer
386dd0f171 COWArrayOpt: Handle patterns of 2d array accesses after more aggresive alias analysis
Make sure we handle a code pattern that we will encounter after Erik's upcoming
alias analysis changes.

rdar://23938778
2015-12-17 15:30:51 -08:00
Mark Lacey
90b45c4dd7 Extract method to run all function passes over a given function.
More small refactoring in the pass manager.
2015-12-17 14:57:30 -08:00
Mark Lacey
d770376981 Replace tabs with spaces.
Also run clang-format over the changed area.
2015-12-17 12:25:03 -08:00
Mark Lacey
fbb7abc7c6 Fix 80-column violations. 2015-12-17 12:25:03 -08:00
Max Moiseev
3fe0c60d7f Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2015-12-17 11:00:02 -08:00
Nadav Rotem
e56bc1bf19 Merge pull request #624 from joemasilotti/looses-vs-loses
Fix grammar of variable
2015-12-17 10:24:25 -08:00
Joe Masilotti
5ea582cf35 Fix grammar of variable
Change variable name to match method signature of APFloat::convert

http://llvm.org/docs/doxygen/html/classllvm_1_1APFloat.html#a4fa2f1464bb4f645082d8aa0e0a9bc0e
2015-12-17 12:41:26 -05:00
Mark Lacey
bed0da6472 Typo: consequtive -> consecutive 2015-12-16 22:43:54 -08:00
Mark Lacey
3ed75f4fb0 Move the pass manager's function worklist into PassManager.
Make it a std::vector that reserves enough space based on the number of
functions in the initial bottom-up ordering.

This is the first step in making it possible for function passes to
notify the pass manager of new functions to process.
2015-12-16 21:30:33 -08:00
Michael Gottesman
f81b6694b3 Update the DEBUG_TYPE names of the various parts of ARC to match the new name of GlobalARCOpts, ARCSequenceOpts. 2015-12-16 21:32:05 -06:00
Dmitri Gribenko
9ecf7eea21 Merge pull request #610 from frootloops/patch-3
Fix some guidelines violations and typos
2015-12-16 18:15:42 -08:00
Erik Eckstein
11c8da8f21 SimplifyCFG: add an additional safety check before we try to convert parameters of ABI compatible functions.
This check should not trigger, at least with the current definition of what a convert_function may do.
But still it's a good idea to make the check to be on the safe side.
2015-12-16 14:18:58 -08:00
Arsen Gasparyan
65f336b849 Fix a typo 2015-12-17 00:57:52 +03:00
practicalswift
8ab8847684 Fix typos. 2015-12-16 22:09:32 +01:00
Nadav Rotem
7f9118f037 Move getAnalysis into the debug section (to fix a warning). NFC. 2015-12-16 10:43:00 -08:00
Nadav Rotem
341888cac5 Fix a typo in the assert message. 2015-12-16 10:42:26 -08:00
Nadav Rotem
698dec087e Fix a bug in the overflow removal pass.
We were comparing constraints to arithmetic operations with mismatching types.
2015-12-16 10:39:06 -08:00
Doug Gregor
1ba7b5d98d Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2015-12-15 16:01:48 -08:00
Mark Lacey
226a825807 Simplify the pass manager execution logic.
Make it a bit more clear that we're alternating between collecting (and
then running) function passes, and running module passes. Removes some
duplication that was present.

Reapplies 9d4d3c8 with fixes for bisecting pass execution.
2015-12-15 15:17:53 -08:00
Xin Tong
8a0543b49c Rename EnableLocalStoreDSE to DisableLocalStoreDSE and flip the condition 2015-12-15 14:59:08 -08:00
Xin Tong
0f938ef6bd Speculatively disable local dead store. It breaks a test case. It was enabled because TBAA is believed to have been fixed. 2015-12-15 14:55:20 -08:00
Mark Lacey
59544560d1 Revert "Simplify the pass manager execution logic."
This reverts commit 9d4d3c8055.

I forgot to finish up changes required to make -Xllvm
-sil-opt-pass-count continue working the way it did, so I'll back that
out until I have those changes as well.
2015-12-15 13:23:59 -08:00
Mark Lacey
9d4d3c8055 Simplify the pass manager execution logic.
Make it a bit more clear that we're alternating between collecting (and
then running) function passes, and running module passes. Removes some
duplication that was present.
2015-12-15 13:08:08 -08:00
Max Moiseev
2021dd5a4d Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2015-12-15 12:49:22 -08:00
Mark Lacey
a8fbc4722f Minor pass manager refactoring.
Extract the code related to running a module pass into a separate
function.
2015-12-15 10:25:38 -08:00
Xin Tong
f7cc000e7a Enable local dead store, i.e. a store to a local variable is dead if its not read before function exit. 2015-12-15 09:34:36 -08:00
Xin Tong
1254eaa69e Add the invalidated analysis in DSE 2015-12-15 08:39:31 -08:00
Michael Gottesman
472efd46c6 [loop-region-analysis] Store the exiting regions from loops that we compute and used to just throw away.
I need this for loop-arc since I need to be able to analyze all "loop-exits"
when I just have the parent loop region. We are already computing this
information and throwing it away, so there should be no compile time impact.
2015-12-15 02:02:39 -06:00
Michael Gottesman
a3a329fffb Add some comments to LoopRegionAnalysis that explains a few methods in better detail. NFC. 2015-12-15 02:02:39 -06:00