Commit Graph

11193 Commits

Author SHA1 Message Date
Roman Levenstein
ee9a739f3c Stop "using namespace llvm"
This avoids ambiguities between llvm and swift types with the same name.
2015-12-14 23:40:14 -08:00
Michael Gottesman
c29236cc89 When sort/uniqueing exiting regions for processing, unique not by pointer value, but by ID. 2015-12-15 00:36:56 -06:00
Michael Gottesman
f3c8c5a774 Create SILBasicBlock::getSuccessorBlocks().
This just runs a transform range on getSuccessor()'s ArrayRef<SILSuccessor> so
one does not need to always call Successor.getBB() when iterating over successor
blocks. Instead the transform range does that call for you.

I also updated some loops to use this new SILBasicBlock method to make sure that
the code is tested out by tests that are already in tree. All these places
should be functionally the same albeit a bit cleaner.
2015-12-15 00:36:56 -06:00
Chris Lattner
fd465ff520 Merge pull request #526 from practicalswift/fix-typos-30
Fix typos (30 of 30)
2015-12-14 18:13:19 -08:00
Erik Eckstein
f316a301e6 [LICM] fix wrong aliasing checks for alloc_stack 2015-12-14 16:50:48 -08:00
Erik Eckstein
7d50b6abcf [ClosureSpecializer] use shared linkage for new functions.
This avoids unresolved-symbol errors in case the original function has external linkage.
2015-12-14 16:35:26 -08:00
Roman Levenstein
58221cd15a Make it clear to the compiler that we mean swift::LoadInst, not llvm::LoadInst here. 2015-12-14 13:25:53 -08:00
Roman Levenstein
3596805cf8 Fix formatting. NFC. 2015-12-14 13:09:08 -08:00
Max Moiseev
806be29941 Merge remote-tracking branch 'origin' into swift-3-api-guidelines 2015-12-14 12:05:35 -08:00
Arnold Schwaighofer
99ff2168a6 Add debug messages to loop unrolling and array value propagation 2015-12-14 12:03:42 -08:00
Arnold Schwaighofer
edf9ca06fc Unroll loops with known short trip count
This enables array value propagation in array literal loops like:

for e in [2,3,4] {
  r += e
}

Allowing us to completely get rid of the array.

rdar://19958821
SR-203
2015-12-14 12:03:42 -08:00
Arnold Schwaighofer
ba2de2d88d Use SILLoop::canDuplicate in the ArraySpecializer 2015-12-14 12:03:41 -08:00
Arnold Schwaighofer
6662e7432a Reapply Add a pass to propagate constant array values to array subscript calls
This reverts commit 82ff59c0b9.

Original commit message:

This allows us to compile the function:

func valueArray() -> Int{
  var a = [1,2,3]
  var r = a[0] + a[1] + a[2]
  return r
}

Down to just a return of the value 6. And should eventually allow us to remove
the overhead of vararg calls.

rdar://19958821
2015-12-14 12:03:41 -08:00
Mark Lacey
0358592e07 Sort file names in SILOptimizer/Transforms/CMakeLists.txt. 2015-12-14 11:57:39 -08:00
Adrian Prantl
64cbec3805 Add SIL syntax for declaring debug variables.
Debug variable info may be attached to debug_value, debug_value_addr,
alloc_box, and alloc_stack instructions.

In order to write textual SIL -> SIL testcases that exercise the handling
of debug information by SIL passes, we need to make a couple of additions
to the textual SIL language. In memory, the debug information attached to
SIL instructions references information from the AST. If we want to create
debug info from parsing a textual .sil file, these bits need to be made
explicit.

Performance Notes: This is memory neutral for compilations from Swift
source code, because the variable name is still stored in the AST. For
compilations from textual source the variable name is stored in tail-
allocated memory following the SIL instruction that introduces the
variable.

<rdar://problem/22707128>
2015-12-14 10:29:50 -08:00
Roman Levenstein
e6442dc9b2 [sil-devirtualizer] Improve devirtualization of class_method instructions
Use ClassHierarchyAnalysis to check if a given method is effectively final, i.e. cannot be overridden.
This replaces the old approach based on using  isKnownFinal, which was weaker because it didn't use the ClassHierarchyAnalysis.
2015-12-14 10:11:47 -08:00
Roman Levenstein
ed38ce409c [sil-devirtualizer] Add a helper function to compute all subclasses of a given class.
The new function uses the ClassHierarchyAnalysis to do its job.
2015-12-14 10:11:47 -08:00
Roman Levenstein
fd0b383570 [sil-devirtualizer] Handle devirtualization of generic classes 2015-12-14 10:11:47 -08:00
Roman Levenstein
c909ff4cf2 [sil-devirtualizer] Improve getInstanceWithExactDynamicType
It is now able to cover some new cases where the instance is a parameter of a function. If it can be proven that the static type of instance cannot be derived, then it's static type is also a dynamic type of the instance.

The new functionality is not directly triggered in the current setup, because isKnownFinalMethod is currently invoked before it and subsumes this cases. But getInstanceWithExactDynamicType got this functionality anyways to be self-contained, so that it can be used in other contexts, where it is not invoked after isKnownFinalMethod.
2015-12-14 10:11:47 -08:00
Roman Levenstein
e05a72a1cb [sil-devirtualizer] Add a ClassHierarchyAnalysis parameter to tryDevirtualizeApply.
Not functionality changes yet. Subsequent patches will make use of this parameter.
2015-12-14 10:11:47 -08:00
Roman Levenstein
cbcd008ac4 [sil-devirtualizer] Rename isClassWithUnboundGenericParameters and extend it to work with any nominal types 2015-12-14 10:11:46 -08:00
Roman Levenstein
d6bb64a84c [sil-devirtualizer] Only check accessibility if it is available. 2015-12-14 10:11:46 -08:00
Roman Levenstein
3a4184dad9 Extend a few lookup APIs to use AbstractFunctionDecl instead of FuncDecl. NFC.
This is required for upcoming changes in the devirtualizer.
2015-12-14 10:11:46 -08:00
Erik Eckstein
0880ddd6c7 [ReleaseDevirtualizer] fix non-detriministic crash.
rdar://problem/23868367
2015-12-14 09:57:05 -08:00
practicalswift
c6e8459187 Fix typos. 2015-12-14 11:13:30 +01:00
Dmitri Gribenko
f957a68170 Merge pull request #513 from practicalswift/fix-typos-17
Fix typos (17 of 30)
2015-12-14 01:11:28 -08:00
Dmitri Gribenko
c8b67f6f6c Merge pull request #511 from practicalswift/fix-typos-15
Fix typos (15 of 30)
2015-12-14 01:08:44 -08:00
Dmitri Gribenko
a50b8cd659 Merge pull request #510 from practicalswift/fix-typos-14
Fix typos (14 of 30)
2015-12-14 01:07:49 -08:00
Dmitri Gribenko
126a018c4e Merge pull request #509 from practicalswift/fix-typos-13
Fix typos (13 of 30)
2015-12-14 01:06:53 -08:00
Dmitri Gribenko
ac79855ebd Merge pull request #507 from practicalswift/fix-typos-11
Fix typos (11 of 30)
2015-12-14 01:05:49 -08:00
Mark Lacey
6c4bc75d3f Use a work list when running function passes.
Rather than iterating over an array of functions, build a work list and
pop functions off of it.

This is a small step towards allowing function passes to create new
functions to be processed.
2015-12-13 20:42:07 -08:00
Dmitri Gribenko
23366f2001 Merge pull request #506 from practicalswift/fix-typos-10
Fix typos (10 of 30)
2015-12-13 20:17:38 -08:00
Dmitri Gribenko
ac57add3a2 Merge pull request #504 from practicalswift/fix-typos-8
Fix typos (8 of 30)
2015-12-13 20:11:40 -08:00
Dmitri Gribenko
7001cfa2e0 Merge pull request #503 from practicalswift/fix-typos-7
Fix typos (7 of 30)
2015-12-13 20:11:12 -08:00
Michael Gottesman
b838e121ed Merge pull request #502 from practicalswift/fix-typos-6
Fix typos (6 of 30)
2015-12-13 19:03:41 -06:00
Michael Gottesman
d94fa0a515 Merge pull request #501 from practicalswift/fix-typos-5
Fix typos (5 of 30)
2015-12-13 18:55:20 -06:00
Dmitri Gribenko
15be903fe2 Merge pull request #500 from practicalswift/fix-typos-4
Fix typos (4 of 30)
2015-12-13 16:21:02 -08:00
Dmitri Gribenko
78a568b4bd Merge pull request #499 from practicalswift/fix-typos-3
Fix typos (3 of 30)
2015-12-13 16:20:07 -08:00
practicalswift
41c5b46791 Fix incorrect typo fix. 2015-12-14 00:50:41 +01:00
Dmitri Gribenko
e17457c2f8 Merge pull request #498 from practicalswift/fix-typos-2
Fix typos (2 of 30)
2015-12-13 15:30:32 -08:00
practicalswift
67f6f9308d Fix typo: visiblity → visibility 2015-12-14 00:12:38 +01:00
practicalswift
2c98764fdb Fix typo: invertion → inversion 2015-12-14 00:12:00 +01:00
practicalswift
a297b26278 Fix typo: invaliate → invalidate 2015-12-14 00:12:00 +01:00
practicalswift
5cefd90204 Fix typo: intializer → initializer 2015-12-14 00:11:59 +01:00
practicalswift
4e757bd493 Fix typo: intialization → initialization 2015-12-14 00:11:59 +01:00
practicalswift
163cb4a062 Fix typo: intefering → interfering 2015-12-14 00:11:58 +01:00
practicalswift
448880afe4 Fix typo: indentity → identity 2015-12-14 00:11:54 +01:00
practicalswift
c0051bfd72 Fix typo: incomming → incoming 2015-12-14 00:11:54 +01:00
practicalswift
8d3aa261c8 Fix typo: incomming → incoming 2015-12-14 00:11:54 +01:00
practicalswift
a0428d1993 Fix typo: guarantuees → guarantees 2015-12-14 00:11:49 +01:00