Commit Graph

6605 Commits

Author SHA1 Message Date
Doug Gregor
f48829c7a7 API notes: add the ability to translate a binary API notes file (.apinotesc) into YAML
Swift SVN r20333
2014-07-22 21:15:11 +00:00
Anna Zaks
0af674ccec API Notes: Add YAML to binary conversion.
Test that we are on par with known methods for Foundation and NotificationCenter.

Swift SVN r20328
2014-07-22 20:34:10 +00:00
Doug Gregor
ec32bc044d API notes: separate classes from protocols in the binary representation.
Swift SVN r20277
2014-07-21 20:23:55 +00:00
Anna Zaks
59ba50d01a Pass reference to content to the YAML parser, instead of filename.
This also makes sure that the input buffer lives long enough.

Swift SVN r20266
2014-07-21 18:46:59 +00:00
Doug Gregor
2faeb84e0c Rename ObjCClassInfo to ObjCContextInfo, to also cover protocols.
Swift SVN r20262
2014-07-21 17:30:16 +00:00
Dmitri Hrybenko
26277fc41d Demangler: remove StringRef dependencies in the demangler interface and
PrettyStackTrace dependencies in the implementation


Swift SVN r20248
2014-07-21 12:46:58 +00:00
Ben Langmuir
9c267d5dc7 Add some missing cmake dependencies
The only interesting bit is that for stdlib/objc to build reliably, its
.o files all need to depend on the generated swiftmodule files for any
of its library dependencies.  It looks like cmake treats
target_link_libraries as only implying a dependency between the
resulting libraries, and not the objects.  For now, I've achieved this
by making the objects depend on the whole target (which includes
linking), but only the swiftmodule is actually necessary.

Swift SVN r20240
2014-07-21 04:07:50 +00:00
Jordan Rose
270cf80a6c [swift-demangle] Teach swift-demangle to filter stdin if given no arguments.
That is, teach swift-demangle to also be swift-filt.

Swift SVN r20231
2014-07-20 18:24:06 +00:00
Anna Zaks
993b822280 API Notes: complete parsing of the YAML format
This parses all the fields we are interested in.

Also, add the up-to-date spec of the YAML format in the comments.

Swift SVN r20205
2014-07-19 02:46:00 +00:00
Arnold Schwaighofer
f6b0682988 Array bounds check optimization pass
Implements redundant bounds check elimination for basic blocks and along the
dominator tree of loops.

No induction variable based hoisting yet.

O3:
NBody          ,  473.00     ,  122.00    ,  294.2%
QuickSort      ,  477.00     ,  310.00    ,  53.9%
RC4            ,  1022.00    ,  736.00    ,  38.6%
Walsh          ,  1781.00    ,  1142.00   ,  55.5%

No effect on Ofast.

Disabled for now.

Swift SVN r20199
2014-07-19 01:18:50 +00:00
Doug Gregor
076d310132 Remove -import-tighter-objc-types option; we're turning it on by default.
Swift SVN r20191
2014-07-18 23:25:38 +00:00
Doug Gregor
422fc4b00a API notes: factor 'unavailable' into a common base for methods/classes/properties.
Now that we have this, move the ban on NSInvocation into
KnownObjCMethods.def so that it's enforced via API notes.

Swift SVN r20190
2014-07-18 23:25:37 +00:00
Anna Zaks
ae3e822c2c Add a skeleton for API Notes YAML-to-binary conversion
Reapplies r20137 with most comments addressed.

Parses a YAML file (but not the final/full format yet).

Adds an entry to the driver for the apinotes "tool". We want the tool
to be visible to the user so it has to go to the driver.

Very limited testing as of now.

Swift SVN r20173
2014-07-18 19:54:11 +00:00
Andrew Trick
250bb973bb Add an array optimization pass that hoists make_mutable calls.
This gives us a 10x speedup on -Ofast memset, which was the original
goal. We're now within 2x of C, but the C code produces movdqu instead
of movups for twice the throughput:
<rdar://problem/17722727> Memset at -Ofast is 2x slower than C

-O3 results:
| benchmark     | baserun0 |  optrun0 |   delta | speedup |
| Memset        | 39885.00 | 33978.00 | 5907.00 |   17.4% |
| NBody         |   459.00 |   440.00 |   19.00 |    4.3% |
| QuickSort     |   456.00 |   439.00 |   17.00 |    3.9% |
| StringWalk    |   625.00 |   647.00 |   22.00 |   -3.4% |
| SmallPT       |   557.00 |   575.00 |   18.00 |   -3.1% |
| Phonebook     |  1804.00 |  1862.00 |   58.00 |   -3.1% |

Memset, NBody, and Quicksort are the ones we expected to improve.

We don't get much gain on O3 because retains/release and bounds checks
are still there.
<rdar://problem/17719220> QuickSort -O3 has retains/releases in the inner loop.

Given the Ofast results, I think the small degradations at O3 are noise.

-Ofast results:
| benchmark     | baserun0 |  optrun0 |   delta | speedup |
| Memset        |  5453.00 |   452.00 | 5001.00 | 1106.4% |
| NBody         |   772.00 |   437.00 |  335.00 |   76.7% |
| Walsh         |  1530.00 |  1096.00 |  434.00 |   39.6% |
| QuickSort     |   682.00 |   524.00 |  158.00 |   30.2% |
| Phonebook     |  1453.00 |  1561.00 |  108.00 |   -6.9% |
| Hash          |   993.00 |   958.00 |   35.00 |    3.7% |
| StringWalk    |   458.00 |   446.00 |   12.00 |    2.7% |
| StringBuilder |  1603.00 |  1568.00 |   35.00 |    2.2% |

Swift SVN r20145
2014-07-18 06:52:17 +00:00
Greg Parker
00060d67d0 Revert r20137 because it breaks the arm64 build.
Swift SVN r20142
2014-07-18 06:34:43 +00:00
Anna Zaks
7fab0c91e2 Add a skeleton for API Notes YAML-to-binary conversion
Parses a YAML file (but not the final/full format yet).

Adds an entry to the driver for the apinotes "tool". We want the tool
to be visible to the user so it has to go to the driver.

Very limited testing as of now.

Swift SVN r20137
2014-07-18 03:39:03 +00:00
Ben Langmuir
47be33af12 Combine lines to attempt to appease the bots
Swift SVN r20131
2014-07-18 01:56:11 +00:00
Ben Langmuir
ea131614bf Add swiftc as a symlink to swift
For now, the interface is identical.

Swift SVN r20130
2014-07-18 01:10:52 +00:00
Jordan Rose
fce31decdc Serialize bridging headers into the merged module file.
We do this so that the swiftmodule file contains all info necessary to
reconstruct the AST for debugging purposes. If the swiftmodule file is copied
into a dSYM bundle, it can (in theory) be used to debug a built app months
later. The header is processed with -frewrite-includes so that it includes
any non-modular content; the user will not have to recreate their project
structure and header maps to reload the AST.

There is some extra complexity here: a target with a bridging header
(such as a unit test target) may depend on another target with a bridging
header (such as an app target). This is a rare case, but one we'd like to
still keep working. However, if both bridging headers import some common.h,
we have a problem, because -frewrite-includes will lose the once-ness
of #import. Therefore, we /also/ store the path, size, and mtime of a
bridging header in the swiftmodule, and prefer to use a regular parse from
the original file if it can be located and hasn't been changed.

<rdar://problem/17688408>

Swift SVN r20128
2014-07-18 00:22:53 +00:00
Doug Gregor
bedb5f116a Move KnownObjCMethods.def into swift-ide-test; that's the only place using it.
Swift SVN r20121
2014-07-17 23:26:55 +00:00
Doug Gregor
31ced1260d Finish renaming "side car" to "API notes"
Swift SVN r20088
2014-07-17 15:05:40 +00:00
Doug Gregor
72a6ea1193 Rename SideCar library to the APINotes library
Swift SVN r20087
2014-07-17 15:05:39 +00:00
Dmitri Hrybenko
3f4436a272 Code completion: add simplistic support for keywords
rdar://15992120


Swift SVN r20082
2014-07-17 12:02:21 +00:00
Doug Gregor
d4e702dc47 Side car: simplify binary format by removing the module ID.
Since we'll be keeping per-module data, there is no need to index the
Objective-C class table via the module as well.


Swift SVN r20074
2014-07-17 05:16:11 +00:00
Doug Gregor
702ed73987 Side car: split "known Objective-C methods" by module.
Update the swift-ide-test harness to look at the data for specific
modules, rather than as one large model.


Swift SVN r20073
2014-07-17 05:11:33 +00:00
Doug Gregor
e804dabfe0 Fix spacing in diagnostic
Swift SVN r20060
2014-07-16 23:51:22 +00:00
Doug Gregor
a0f09b5ce3 Side car reader: wire up the Objective-C selector and method tables.
We can now round-trip all of KnownObjCMethods.def through the side-car
writer and reader.


Swift SVN r20059
2014-07-16 23:44:42 +00:00
Doug Gregor
b73b33ed8b Side car reader: load Objective-C property information.
Validate it against KnownObjCMethods.def.


Swift SVN r20056
2014-07-16 22:53:24 +00:00
Doug Gregor
84c5af60b2 Side car reader: wire up identifier table and Objective-C class table.
Verify this by round-tripping the class information in KnownObjCMethods.def.


Swift SVN r20054
2014-07-16 22:42:53 +00:00
Doug Gregor
b3a18ee2d4 Add a skeleton of a side-car reader, along with basic testing.
Swift SVN r20044
2014-07-16 21:46:53 +00:00
Doug Gregor
74f29fe955 Side car test: encode all method information in the side car data.
At this point, we should be capturing all of the information in
KnownObjCMethods.def within the binary side car data file.


Swift SVN r20017
2014-07-16 07:20:59 +00:00
Doug Gregor
b3d7c2e924 Side car test: handle data associated with Objective-C properties.
Swift SVN r20016
2014-07-16 07:14:30 +00:00
Doug Gregor
5a8b0f44ad Side car testing: start emitting Objective-C methods
Swift SVN r20015
2014-07-16 07:11:50 +00:00
Michael Gottesman
e5d7111db8 [load-store-opts] Change load store opts single BB pass to be a simple forward dataflow with an intersection merge operation.
This is not run by default unless one passes in the flag -Xllvm -enable-global-load-store-opts.

Also in order to make sure in the face of multi-bbs dead store elimination is
still correct, we use the post order dominator tree to determine if the dead
store is post dominated by the store that is causing it to be dead.

With this pass enabled, we see a 3.5% decrease in overall time in the precommit
bench and the following tests increase in speed by > 5%:

2Sum:          8.9%
Rectangles:    7.35%
Ackermann:     6.43%
StringBuilder: 6.16%
EditDistance:  5.71%
StringWalk:    5.58%

That means that 30% of our benchmarks increased in speed by > 5%. Many of the
other benchmarks increased in speed significantly but not as drmatically.

The only benchmark that regressed is SmallPt which I am looking into.

rdar://17680758

Swift SVN r20009
2014-07-16 06:01:37 +00:00
Doug Gregor
4c7a1e598f Side car: clean up representation of Objective-C properties and methods.
We don't need module names for properties and methods, since they're
effectively unique within a class. Moreover, use all of the
distinguishing characteristics as the key for the stored
representation in the side car writer. No visible functionality
change; this is staging.



Swift SVN r20008
2014-07-16 05:58:37 +00:00
Doug Gregor
19488ac835 Side car data: emit Objective-C class information into the side car file.
For Objective-C classes, we only record the default nullability of the
class.


Swift SVN r19995
2014-07-16 00:34:33 +00:00
Doug Gregor
e36c31d03c Side car data: emit side car file from KnownObjCMethods.def.
Extend swift-ide-test with a mode that generates a side car file from
the built-in KnownObjCMethods.def, which gives us an easy way to
source the information we want in the side car. This is a temporary
measure until we have a textual format for side car data and the
ability to translate that into the binary format.



Swift SVN r19994
2014-07-16 00:03:50 +00:00
Argyrios Kyrtzidis
7b62fa0c44 [ASTPrinter] Introduce a callback invoked after printing the name of the declaration (the signature for functions).
Swift SVN r19973
2014-07-15 05:56:54 +00:00
Michael Gottesman
7d5751594d Add in a post order analysis that lazily recomputes post orders for functions when they are invalidated.
This ensures that if we have a bunch of passes in a row which modify the CFG, we
do not continually rebuild the post order, while at the same time preserving the
property of multiple passes which do not touch the CFG sharing the same post
order, reverse post order rather than recomputing them.

rdar://17654239

Swift SVN r19913
2014-07-14 01:32:24 +00:00
Mark Lacey
021983017a Add a SIL SCC visitor and an induction variable analysis.
The induction variable analysis derives from the SCC visitor CRTP-style
and uses it to drive analysis to find the IVs of a function.

The current definition of induction variable is very weak, but enough to
use for very basic bounds-check elimination.

This is not quite ready for real use. There is an assert that I've
commented out that is firing but should not be, and that will require
some more investigation.

Swift SVN r19845
2014-07-11 02:48:03 +00:00
Connor Wakamo
0fe539f579 Renamed swift::createDriverOptTable() to swift::createSwiftOptTable().
Swift SVN r19827
2014-07-10 20:51:54 +00:00
Connor Wakamo
465eeb9d17 Moved everything in swift/Option/Options.h into the swift namespace (from swift::driver).
The options themselves are now in swift::options (from swift::driver::options).
The soon-to-be-renamed createDriverOptTable() is now directly in the swift namespace.

Swift SVN r19825
2014-07-10 20:51:51 +00:00
Connor Wakamo
2d6c9e9062 Moved Swift's option table from swiftDriver into a new swiftOption library.
This allows swiftFrontend to drop its dependency on swiftDriver, and could
someday allow us to move the integrated frontend's option parsing out of
swiftFrontend (which would allow other tools which use swiftFrontend to
exclude the option table entirely).

Swift SVN r19824
2014-07-10 20:51:50 +00:00
Sonny Falk
6b053e6252 [IDE] Add support for Swift extension declarations to the document substructure.
Add tests for struct, protocol and extension.
This addresses the first part of <rdar://problem/15818966>.

Swift SVN r19766
2014-07-10 00:23:00 +00:00
Jordan Rose
c90cd11aff [PrintAsObjC] Only include internal decls if we have a bridging header.
The upshot of this is that internal decls in an app target will be in the
generated header but internal decls in a framework target will not. This
is important since the generated header is part of a framework's public
interface. Users always have the option to add members via category to an
internal framework type they need to use from Objective-C, or to write the
@interface themselves if the entire type is missing. Only internal protocols
are left out by this.

The presence of the bridging header isn't a /perfect/ way to decide this,
but it's close enough. In an app target without a bridging header, it's
unlikely that there will be ObjC sources depending on the generated header.

Swift SVN r19763
2014-07-09 23:58:57 +00:00
Arnold Schwaighofer
51eb9269ab Add a SIL LICM pass
The main purpose of this pass is to hoist invariant loads out of loops. This
will enable llvm to vectorize loops with array accesses in Ofast once we hoist
the makeUnique functions.

Disabled for now.

rdar://17142604

Swift SVN r19713
2014-07-08 23:51:48 +00:00
Ben Langmuir
f6645eb39a Fix argv when using -i in the frontend
In the frontend, only arguments after '--' will be passed as arguments
to the new process.  Also, add the input filename as argv[0], to follow
the usual conventions.

Still to come is fixing swift -i from the driver.

Swift SVN r19690
2014-07-08 19:38:29 +00:00
Arnold Schwaighofer
5ad13207e5 Add a loop rotation pass
This is to support loop invariant code motion and bound check
hoisting.

Disabled for now.

Swift SVN r19635
2014-07-07 21:05:23 +00:00
Pete Cooper
0d0defff9a Update which matches clang r212408, ie, using ErrorOr for file loading
Swift SVN r19607
2014-07-07 14:49:01 +00:00
Anna Zaks
37c3ec4ed1 Rename the -import-tighter-objc-types option and add it to the frontend.
Swift SVN r19535
2014-07-03 21:46:38 +00:00