Commit Graph

9332 Commits

Author SHA1 Message Date
Adrian Prantl
bb726461b0 Ensure that the line table for the new SIL-generated main function begins
with user code and that the boilerplate is counted towards the prologue.

<rdar://problem/18563763> Setting a breakpoint on "main" in a Swift program doesn't stop at user code

Swift SVN r22611
2014-10-09 02:15:00 +00:00
Roman Levenstein
ed22906964 Add helper methods to strip upcasts. This is required for upcoming devirtualizer patches.
Swift SVN r22602
2014-10-08 13:09:05 +00:00
John McCall
89e60f31aa Add protocol witness tables to existential metatype
layouts.  Introduce new SIL instructions to initialize
and open existential metatype values.

Don't actually, y'know, lift any of the restriction on
existential metatypes; just pointlessly burn extra
memory storing them.

Swift SVN r22592
2014-10-08 01:20:13 +00:00
Manman Ren
695cced1f6 [SILPrinter] we print all top level function decls.
For top level function decls, even if their SILFunctions are emitted, we still
print them. They are needed to satisfy protocol requirements.


Swift SVN r22586
2014-10-08 00:19:16 +00:00
Joe Groff
ca8b168188 SIL: Add select_enum and select_enum_addr insns.
Similar to LLVM's "select" instruction, the instruction picks one of its operands based on the case tag of an enum value.

Swift SVN r22578
2014-10-07 21:45:08 +00:00
Michael Gottesman
05f25e9b52 Add the utility SILFunction::isPossiblyUsedExternally().
This just calls swift::isPossiblyUsedExternally() behind the scenes.

Swift SVN r22563
2014-10-07 05:48:18 +00:00
Michael Gottesman
b4c06632e2 Add a helper method SILInstruction::replaceAllUsesWithUndef().
This should really be on ValueBase, but currently ValueBase does not
have access to a SILModule.

Swift SVN r22559
2014-10-07 00:53:56 +00:00
Michael Gottesman
c7c30bf962 [verifier] shared_external is a valid linkage for a fragile ref like shared since both are semantically the same things.
Swift SVN r22557
2014-10-07 00:07:43 +00:00
Michael Gottesman
c97ab1f11f [func-sig-opts] When splicing BB from one function to another, change
the debug scope of each instruction to be the debug scope of the new
function.

This will be tested by the functionality in function signature opts.

Swift SVN r22553
2014-10-06 23:16:52 +00:00
Michael Gottesman
2bb3269869 Add code to the verifier to make sure that functions with shared visibility always have bodies.
Since both shared and shared_external both lower to linkonce_odr, neither of
them can be declarations. This commit puts a check into the verifier to ensure
that this does not happen at the SIL level allowing us to catch such issues
earlier.

Swift SVN r22552
2014-10-06 23:16:51 +00:00
Joe Groff
cac5807ae2 SILGen: Emit "main" as a SIL function.
Eliminate the intermediate top_level_code function. Now that SIL is expressive enough to express a "main" function, there's no reason for it, and this eliminates a bunch of mystery code in IRGen to thunk from main to top_level_code by reaching for hardcoded symbol names. Demystify the special code for setting up C_ARGC and C_ARGV by having SILGen look for a transparent "_didEnterMain" hook in the stdlib and emit a call to it.

Swift SVN r22525
2014-10-05 04:13:24 +00:00
Doug Gregor
49e3762038 Archetype builder: eliminate the "archetype assignment" phase.
Of course, all clients basically just walk the "all archetypes" list
anyway, so this is NFC.

Swift SVN r22505
2014-10-03 22:39:23 +00:00
Doug Gregor
56f8e8c5b0 Eliminate the primary archetype map from the archetype builder. NFC
The information in the primary archetype map was redundant with what is
stored in the potential archetypes map and the potential archetypes
themselves.

Swift SVN r22502
2014-10-03 22:39:20 +00:00
Erik Eckstein
43f68b6974 Enable dead function removal for internal function in whole-module compilation.
This is controlled by a new isWholeModule() attribute in SILModule.

It gives about 9% code size reduction on the benchmark executables.
For test-suite reasons it is currently not done for the stdlib.



Swift SVN r22491
2014-10-03 14:14:23 +00:00
Joe Groff
949e0b0741 Drop the @sil_self attribute.
We no longer need to abuse Self archetypes to represent values inside existential containers.

Swift SVN r22487
2014-10-03 03:09:45 +00:00
Jordan Rose
042569a3be Optional: Replace uses of Nothing with None.
llvm::Optional (like Swift.Optional!) uses None as its placeholder value,
not Nothing.

Swift SVN r22476
2014-10-02 18:51:42 +00:00
Jordan Rose
2a76f18e4b Drop uses of Optional::cache.
In preparation for the switch to llvm::Optional, which doesn't have a 'cache'
method. Given how long we spent bikeshedding over the name and how few places
we ended up using it, I didn't feel like trying to push it through on the
LLVM side.

Swift SVN r22471
2014-10-02 18:51:36 +00:00
Dmitri Hrybenko
3b06080157 Fix a warning about fallthrough in builds without assertions
Swift SVN r22463
2014-10-02 09:58:35 +00:00
Joe Groff
782833f054 SIL: Remove the project_existential* instructions.
Swift SVN r22457
2014-10-02 04:06:10 +00:00
Joe Groff
3a606b9eb8 SIL: Drop the protocol_method instruction.
Swift SVN r22446
2014-10-01 23:35:41 +00:00
Manman Ren
699cee5f00 [Printer] print AST types used by SILDeclRef in SIL mode.
This enables us parsing stdlib in non-optimized mode.


Swift SVN r22445
2014-10-01 22:06:41 +00:00
Joe Groff
be45322668 SIL: Drop the upcast_existential* instructions.
Swift SVN r22388
2014-09-30 16:11:54 +00:00
John McCall
8c303ef7a6 Representational changes towards get-and-mutableAddress
properties.

The main design change here is that, rather than having
purportedly orthogonal storage kinds and has-addressor
bits, I've merged them into an exhaustive enum of the
possibilities.  I've also split the observing storage kind
into stored-observing and inherited-observing cases, which
is possible to do in the parser because the latter are
always marked 'override' and the former aren't.  This
should lead to much better consideration for inheriting
observers, which were otherwise very easy to forget about.
It also gives us much better recovery when override checking
fails before we can identify the overridden declaration;
previously, we would end up spuriously considering the
override to be a stored property despite the user's
clearly expressed intent.

Swift SVN r22381
2014-09-30 08:39:38 +00:00
Michael Gottesman
27363b24fb Fix 80+. NFC.
Swift SVN r22380
2014-09-30 03:08:50 +00:00
Michael Gottesman
ed124f6651 [func-sig-opts] Expose the ValueDecl argument of SILArgument's
constructor in SILBasicBlock::createArgument.

By default the argument is nullptr so any place that currently does not
need to pass in the ValueDecl will not need to be updated given the new
behavior.

Swift SVN r22379
2014-09-30 03:08:50 +00:00
Michael Gottesman
fe95e64321 [func-sig-opts] Add SILArgument::isSelf() and SILFunction::hasSelfArgument().
SILFunction::hasSelfArgument() returns true if the SILFunction has a
calling convention with self.

SILArgument::isSelf() returns true if the SILArgument is the last
argument of the first BB of a function for which
SILFunction::hasSelfArgument() is true.

Swift SVN r22378
2014-09-30 03:08:47 +00:00
Manman Ren
c6d4cc05c6 [Printer] add sil-disable-ast-dump to disable dumping top AST decls.
This will be used for parsing sil generated from stdlib. We will ignore
the AST decls and instead import them from the module.

rdar://17979145


Swift SVN r22367
2014-09-29 22:04:15 +00:00
Manman Ren
c4233e98ff [Printer] use SIL print options when printing SILWitnessTable.
Add PrintOptions to Substitution::print and ProtocolConformance::printName.
rdar://18021102


Swift SVN r22366
2014-09-29 21:59:03 +00:00
Joe Groff
c098645f34 SIL: Conformances relate to formal types, so change witness_method's lookup type to a CanType.
Should be NFC in practice, since only nominal types can currently conform to protocols anyway, but improves modeling of the system.

Swift SVN r22360
2014-09-29 20:44:00 +00:00
Joe Groff
152aa9e244 Revert "SIL: Drop the upcast_existential* instructions."
This reverts commit r22345.

Swift SVN r22353
2014-09-29 13:46:41 +00:00
Erik Eckstein
35cfa7d2a0 fix a memory corruption introduced in r22301
(Don't increment refcounts of inlined SILFunctions for the purpose of debug info generation.)



Swift SVN r22349
2014-09-29 09:12:27 +00:00
Dmitri Hrybenko
dd1826a801 Fix some link errors on systems with more strict linkers
Swift SVN r22347
2014-09-28 21:18:04 +00:00
Joe Groff
1e343fb430 SIL: Drop the upcast_existential* instructions.
Swift SVN r22345
2014-09-28 19:24:33 +00:00
Joe Groff
0518f2067f Revert "SIL: Drop the upcast_existential* instructions."
This reverts commit r22333.

Swift SVN r22337
2014-09-28 18:41:05 +00:00
Joe Groff
04872c86d9 SIL: Verify that init_existential instructions are fed a lowering of their formal concrete type.
Swift SVN r22335
2014-09-28 17:59:47 +00:00
Joe Groff
727c9b5ed7 SIL: Drop the upcast_existential* instructions.
Swift SVN r22333
2014-09-28 16:38:13 +00:00
Dmitri Hrybenko
fb6f195cd1 Portability: use std::make_tuple instead of relying on a libc++
extension (an implicit constructor in std::tuple)

Swift SVN r22331
2014-09-28 02:21:23 +00:00
Erik Eckstein
92dc4ee237 Don't increment refcounts of inlined SILFunctions for the purpose of debug info generation.
This prevented dead function removal of inlined dead functions. Beside the stdlib it's mostly
an issue of SIL size (and therefore compiletime), because llvm did remove such functions anyway.



Swift SVN r22301
2014-09-26 16:07:26 +00:00
Joe Groff
a3126706da SIL: Eliminate the dead 'alloc_array' insn.
Swift SVN r22292
2014-09-26 02:28:10 +00:00
Roman Levenstein
1f635d0510 Add a CSE support for 15 SIL instructions that were not covered by the CSE pass yet.
rdar://16652567

Swift SVN r22281
2014-09-25 11:44:51 +00:00
Erik Eckstein
502a5b4bdc Remove a change which accidentially went into the previous commit
Swift SVN r22276
2014-09-25 08:51:15 +00:00
Erik Eckstein
a4c7d89671 fix coding style in stdlib: move non-attribute keywords in same line as function declaration
Swift SVN r22275
2014-09-25 08:43:55 +00:00
John McCall
defaf07046 SILGen support for addressors.
Addressors now appear to pass a simple smoke-test; in
order to allow some parallel developement, I'll be
committing actual SILGen tests for this later and
separately.

Swift SVN r22243
2014-09-23 23:46:52 +00:00
John McCall
16cb523c3a AST support for accessors.
Swift SVN r22228
2014-09-23 20:34:19 +00:00
Erik Eckstein
c16c510167 Set SILLinkage according to visibility.
Now the SILLinkage for functions and global variables is according to the swift visibility (private, internal or public).

In addition, the fact whether a function or global variable is considered as fragile, is kept in a separate flag at SIL level.
Previously the linkage was used for this (e.g. no inlining of less visible functions to more visible functions). But it had no effect,
because everything was public anyway.

For now this isFragile-flag is set for public transparent functions and for everything if a module is compiled with -sil-serialize-all,
i.e. for the stdlib.

For details see <rdar://problem/18201785> Set SILLinkage correctly and better handling of fragile functions.

The benefits of this change are:
*) Enable to eliminate unused private and internal functions
*) It should be possible now to use private in the stdlib
*) The symbol linkage is as one would expect (previously almost all symbols were public).

More details:

Specializations from fragile functions (e.g. from the stdlib) now get linkonce_odr,default
linkage instead of linkonce_odr,hidden, i.e. they have public visibility.
The reason is: if such a function is called from another fragile function (in the same module),
then it has to be visible from a third module, in case the fragile caller is inlined but not
the specialized function.

I had to update lots of test files, because many CHECK-LABEL lines include the linkage, which has changed.

The -sil-serialize-all option is now handled at SILGen and not at the Serializer.
This means that test files in sil format which are compiled with -sil-serialize-all
must have the [fragile] attribute set for all functions and globals.

The -disable-access-control option doesn't help anymore if the accessed module is not compiled
with -sil-serialize-all, because the linker will complain about unresolved symbols.

A final note: I tried to consider all the implications of this change, but it's not a low-risk change.
If you have any comments, please let me know.



Swift SVN r22215
2014-09-23 12:33:18 +00:00
Doug Gregor
44c1709505 Add EnumElementDecl::getArgumentInterfaceType().
Use this in calls to TypeBase::getTypeOfMember() that were relying on
archetypes solely because they were using EnumElementDecl::getArgumentType().

Swift SVN r22205
2014-09-23 03:44:00 +00:00
Joe Groff
6cd5123712 SILGen: Use the formal type when taking dynamicTypes of values.
The metatype is associated with the formal AST type of the value, not whatever lowered SIL type we happen to have lying around. Adjust the SIL verifier to check that value_metatype instructions produce a metatype for which the instance is a potential lowering rather than by exact type match. This lets us take the metatype of metatypes (and incidentally, of functions, and of tuples thereof), fixing rdar://problem/17242770.

Swift SVN r22202
2014-09-23 02:56:48 +00:00
Joe Groff
bfb6fc72bc IRGen: Reabstract lowered dependent types when substituting into a generic context.
Fixes rdar://problem/17218632.

Swift SVN r22189
2014-09-22 21:56:52 +00:00
Joe Groff
232cec4b61 SIL: Rename TypeConverter::getInterfaceType{In,OutOf}Context
It extracts an interface type out of a contextual type, but the name made it sound like it put it into a context. NFC.

Swift SVN r22188
2014-09-22 21:56:47 +00:00
Michael Gottesman
a30dbd1fc0 Add some helper methods to CondBranchInst for getting True, False operands and a swapSuccessor method.
Swift SVN r22157
2014-09-21 10:56:28 +00:00