Commit Graph

2543 Commits

Author SHA1 Message Date
practicalswift
8f0330e424 Merge pull request #6347 from practicalswift/namespace-normalization
[gardening] Normalize end-of-namespace comments
2016-12-17 23:14:28 +01:00
practicalswift
ed0098a5c6 [gardening] Use correct header formatting. 2016-12-17 22:33:09 +01:00
practicalswift
ddedf240ec [gardening] Use correct Swift URLs. 2016-12-17 22:33:09 +01:00
practicalswift
9d0b2abfc2 [gardening] Normalize end-of-namespace comments 2016-12-17 22:29:07 +01:00
Michael Gottesman
cd59d96292 Merge pull request #6342 from gottesmm/some_small_fixes
[sil-ownership] Fix some cases in SILValue::getOwnershipKind().
2016-12-17 12:45:13 -08:00
swift-ci
268c2b668d Merge pull request #6325 from practicalswift/gardening-20161216 2016-12-17 09:19:24 -08:00
Michael Gottesman
a178ac97e0 [sil-ownership] Fix some cases in SILValue::getOwnershipKind().
I fixed a few things. Now I am finally hitting cases where we have
guaranteed/owned arguments, so I really need to do the SILGen work. But this was
a good first step.

rdar://29671437
2016-12-17 01:23:52 -08:00
Joe Groff
c10cae2830 Merge pull request #6333 from jckarter/capture-box-generic-context
SIL: Lower captures to boxes with an appropriate generic context.
2016-12-16 20:49:32 -08:00
Joe Groff
4444d83756 SIL: Lower captures to boxes with an appropriate generic context.
Officially kick SILBoxType over to be "nominal" in its layout, with generic layouts structurally parameterized only by formal types. Change SIL to lower a capture to a nongeneric box when possible, or a box capturing the enclosing generic context when necessary.
2016-12-16 20:23:25 -08:00
Michael Gottesman
d4fb21d50f [semantic-sil] Define ValueOwnershipKind SILValue::getOwnershipKind().
The implementation will rely on a SILVisitor to ensure that we properly handle
all relevant cases. Right now, there are only stubs and we assert in all of
them.

rdar://29671437
2016-12-16 17:00:54 -08:00
Michael Gottesman
57d3f848a6 [semantic-sil] Define ValueOwnershipKind enum.
This enum models the various froms of ownership semantics that a specific
SILValue can have.

rdar://29671437
2016-12-16 16:50:49 -08:00
Michael Gottesman
e7c4065987 [semantic-sil] Add a new visitor called SILBuiltinVisitor.
I am going to use this to ensure that I am properly handling all Builtin cases.
The intrinsic cases from LLVM are simpler and can be handled at a high level
(namely that all ownership uses are trivial since LLVM has no concept of
ownership.

rdar://29671437
2016-12-16 16:47:39 -08:00
practicalswift
16d6dce62e [gardening] Fix recently introduced typos. 2016-12-16 21:42:09 +01:00
Michael Gottesman
6213550239 [semantic-sil] Create copy_unowned_value.
This was in the first high level ARC instruction proposal, but I have not needed
it until now. The use case for this is to ahandle strong_retain_unowned (which
takes in an unowned value, asserts it is still alive, performs a strong_retain,
and returns the @owned value). This @owned value needs a destroy_value.

rdar://29671437
2016-12-14 19:22:24 -08:00
Michael Gottesman
bf3116d105 [semantic-sil] Expose support for getting SILResultInfo from an ApplyInstBase.
We just never needed this information before. And I need it now for the SIL
Ownership Verifier to cleanly get the result info so I can determine the
ownership convention of an ApplyInstBase's return value.

rdar://29671437
2016-12-14 17:24:38 -08:00
Joe Groff
b6823b930b SIL: Change SILType::subst to be SubstitutionMap-based.
This simplifies the SILType substitution APIs and brings them in line with Doug and Slava's refactorings to improve AST-level type substitution. NFC intended.
2016-12-14 14:33:32 -08:00
Bob Wilson
deddf19aae Merge remote-tracking branch 'origin/master' into master-next 2016-12-13 10:23:03 -08:00
Arnold Schwaighofer
7194613b2d Merge pull request #6229 from aschwaighofer/fix_existential_metatype_memory_effect
The address form of existential_metatype does read from memory
2016-12-12 16:50:37 -08:00
Michael Gottesman
66cff7e37e [semantic-arc] Add StoreBorrowInst and BeginBorrowInst. 2016-12-12 13:06:18 -08:00
Arnold Schwaighofer
6f881b1d0e The address form of existential_metatype does read from memory
rdar://29625413
2016-12-12 12:56:51 -08:00
Joe Groff
3871cda205 Push SILBoxType::getFieldType into SIL and make it take a SILModule.
Applying nontrivial generic arguments to a nontrivial SIL layout requires lowered SILType substitution, which requires a SILModule. NFC yet, just an API change.
2016-12-09 16:21:13 -08:00
Joe Groff
585ccd59c1 Remove SILBoxType::getBoxedType.
Move the few remaining usages to getFieldType. Removing the old API lets us progress in fully adopting nontrivial layouts in SILGen.
2016-12-09 11:10:03 -08:00
Bob Wilson
13da3fa8b1 Merge remote-tracking branch 'origin/master' into master-next 2016-12-04 18:16:09 -08:00
Joe Groff
13bb6c649a SIL: Remove AllocBoxInst::getElementType().
There's no longer a single element type to speak of. Update uses to either iterate all box fields or to assert that they're working with a single-field box.
2016-12-02 16:37:34 -08:00
Joe Groff
9b858a7431 SIL: Remove the ElementType from DeallocBoxInst's representation.
This was made redundant by typed boxes, and the type operand was already removed from textual SIL, but the field was never removed from the instruction's in memory representation. It becomes wrong in the face of compound boxes with layout.
2016-12-02 15:19:43 -08:00
Joe Groff
277608a69b Print and parse SILBoxTypes with a new syntax.
Use a syntax that declares the layout's generic parameters and fields,
followed by the generic arguments to apply to the layout:

  { var Int, let String } // A concrete box layout with a mutable Int
                          // and immutable String field
  <T, U> { var T, let U } <Int, String> // A generic box layout,
                                        // applied to Int and String
                                        // arguments
2016-12-02 13:44:22 -08:00
Joe Groff
0ca4a374d5 Move SILLayout from SIL to AST.
Trying to contain it in SIL doesn't really work if we want to be able to print or parse SIL box types, since the type parser and printer doesn't otherwise depend on the SIL module.
2016-12-02 12:23:45 -08:00
Bob Wilson
ae3db7c88e Update for llvm r281167: changes to ilist_iterator template arguments.
(cherry picked from commit 97e415ce2a)
2016-12-01 10:47:07 -08:00
Bob Wilson
2c21ef586d Update to match llvm r279473: remove ilist_*sentinel_traits.
(cherry picked from commit 391e7d8b60)
2016-12-01 10:46:38 -08:00
Bob Wilson
26a62b912a Update to match llvm r278513: share code for embedded sentinel traits.
Nothing at all should be changing here, this is just rearranging code.

(cherry picked from commit 9964697f22)
2016-12-01 10:42:59 -08:00
Slava Pestov
835472b14f AST: Remove PolymorphicFunctionType 2016-11-29 03:05:35 -07:00
Robert Widmann
fe586fafd7 Merge pull request #5960 from practicalswift/doxygen-fixes
[gardening] Use proper doxygen comments (///)
2016-11-28 19:04:41 -05:00
Michael Gottesman
c8e119b159 [gardening] Standardize include guard in SILSuccessor.h
We always use all caps.
2016-11-28 12:53:40 -08:00
practicalswift
7d412572e6 [gardening] Use proper doxygen comments (///) 2016-11-28 21:25:30 +01:00
Michael Gottesman
38ec08f45f [gardening] Standardize SILBasicBlock successor/predecessor methods that deal with blocks rather than the full successor data structure to have the suffix 'Block'.
This was already done for getSuccessorBlocks() to distinguish getting successor
blocks from getting the full list of SILSuccessors via getSuccessors(). This
commit just makes all of the successor/predecessor code follow that naming
convention.

Some examples:

getSingleSuccessor() => getSingleSuccessorBlock().
isSuccessor() => isSuccessorBlock().
getPreds() => getPredecessorBlocks().

Really, IMO, we should consider renaming SILSuccessor to a more verbose name so
that it is clear that it is more of an internal detail of SILBasicBlock's
implementation rather than something that one should consider as apart of one's
mental model of the IR when one really wants to be thinking about predecessor
and successor blocks. But that is not what this commit is trying to change, it
is just trying to eliminate a bit of technical debt by making the naming
conventions here consistent.
2016-11-27 12:32:51 -08:00
Michael Gottesman
6a50566a75 [gardening] Use proper doxygen style by inserting a newline between brief and longer comment.
Also a little bit of copy editing.
2016-11-27 11:58:20 -08:00
Michael Gottesman
804df7cac9 [gardening] Standardize a bit of code style. NFC.
In this file, by and large we use 'Type *'.

This file converts a couple of places where we use 'Type*' => 'Type *'.
2016-11-27 11:58:20 -08:00
Michael Gottesman
edce501b71 [gardening] Eliminate unneeded 'public' from inheritance declaration of a struct.
structs always inherit publicly.
2016-11-27 11:58:20 -08:00
Michael Gottesman
529eec30b7 [gardening] Use const_cast rather than implement SILBasicBlock::getSingleSuccessor() twice for const/non-const. 2016-11-27 11:58:20 -08:00
Michael Gottesman
5a1650f0c5 [gardening] doxygenify file level comment. NFC. 2016-11-27 11:58:20 -08:00
Michael Gottesman
96837babda Merge pull request #5920 from gottesmm/vacation_gardening
Vacation gardening
2016-11-25 09:17:21 -06:00
Michael Gottesman
0a8c54d04f [gardening] Always create new SILArguments using SILBasicBlock::createArgument instead of inline placement new.
The reasoning here is the same as in e42bf07.
2016-11-25 01:14:45 -06:00
Michael Gottesman
a998d98924 [gardening] SILBasicBlock::splitBasicBlock() => *::split().
The BasicBlock suffix is redundant.
2016-11-25 01:14:43 -06:00
Michael Gottesman
e936de7b04 [gardening] 0 => nullptr. NFC. 2016-11-25 01:14:41 -06:00
Michael Gottesman
c3d5ace299 [gardening] Move SILBasicBlock::dropAllReferences() out of the argument list manipulation section.
I am not sure why it was put here originally, but I believe it is still there
due to bitrot.
2016-11-25 01:14:40 -06:00
Michael Gottesman
bf6920650c [gardening] Drop BB from all argument related code in SILBasicBlock.
Before this commit all code relating to handling arguments in SILBasicBlock had
somewhere in the name BB. This is redundant given that the class's name is
already SILBasicBlock. This commit drops those names.

Some examples:

getBBArg() => getArgument()
BBArgList => ArgumentList
bbarg_begin() => args_begin()
2016-11-25 01:14:36 -06:00
Michael Gottesman
e42bf07af4 [gardening] Always create SILBasicBlocks via SILFunction::createBasicBlock.
This eliminates all inline creation of SILBasicBlock via placement new.

There are a few reasons to do this:

1. A SILBasicBlock is always created with a parent function. This commit
formalizes this into the SILBasicBlock API by only allowing for SILFunctions to
create SILBasicBlocks. This is implemented via the type system by making all
SILBasicBlock constructors private. Since SILFunction is a friend of
SILBasicBlock, SILFunction can still create a SILBasicBlock without issue.

2. Since all SILBasicBlocks will be created in only a few functions, it becomes
very easy to determine using instruments the amount of memory being allocated
for SILBasicBlocks by simply inverting the call tree in Allocations.

With LTO+PGO, normal inlining can occur if profitable so there shouldn't be
overhead that we care about in shipping compilers.
2016-11-25 01:12:49 -06:00
Dave Abrahams
b6d965b7f2 Squash a noisy warning 2016-11-23 22:39:36 -08:00
practicalswift
797b80765f [gardening] Use the correct base URL (https://swift.org) in references to the Swift website
Remove all references to the old non-TLS enabled base URL (http://swift.org)
2016-11-20 17:36:03 +01:00
Bob Wilson
6ca7872ba5 Merge remote-tracking branch 'origin/master' into master-next 2016-11-16 22:12:23 -08:00