Commit Graph

673 Commits

Author SHA1 Message Date
Jake Petroules
96c0083d02 [Driver] Provide executed command as an actual array (#15012)
This patch adds additional entries to the JSON command messages output
by the Swift compiler. It's now possible to get the command executable
("command_executable") and arguments ("command_arguments") as a single
string and array, respectively, rather than having to parse the
shell-escaped command line provided in the "command" key.

<rdar://problem/35701809>
2018-03-07 10:40:38 -08:00
Graydon Hoare
954db4bc22 [BatchMode] Disable fussy exec-arg-length-limit test on asan, rdar://38192626. 2018-03-06 14:10:09 -08:00
David Ungar
90d2740817 Merge pull request #14961 from davidungar/PR-18-10-HHH
[Batch mode] Restore -### functionality for batch-mode by extending OutputLevel.
2018-03-06 09:54:03 -08:00
David Ungar
1dd49c8277 Added a test. 2018-03-05 16:15:10 -08:00
Graydon Hoare
babd8375f3 Merge pull request #14976 from graydon/rdar-38123690-task-queue-exec-errors
rdar://38123690 (overlarge batches) and rdar://37865437 (task queue exec errors)
2018-03-05 15:42:29 -08:00
Graydon Hoare
6c9029ead8 [BatchMode] Fix rdar://38123690 a little more robustly. 2018-03-05 13:43:30 -08:00
Graydon Hoare
e64d810f54 Merge pull request #14975 from graydon/batch-mode-bridging-pch-inputactions
[BatchMode] Collect InputActions correctly when merging jobs.
2018-03-05 12:29:35 -08:00
Graydon Hoare
eb315e74ed [BatchMode] Temporarily cap max batch size, fixing rdar://38123690 2018-03-05 12:28:48 -08:00
Graydon Hoare
899c1f5b87 [Driver] Handle failure-to-exec somewhat more politely, rdar://37865437. 2018-03-05 12:28:48 -08:00
David Ungar
17a81f6981 Restore -### functionality for batch-mode by extending OutputLevel. 2018-03-05 11:07:20 -08:00
Graydon Hoare
2de60a4a0b [BatchMode] Collect InputActions correctly when merging jobs. 2018-03-05 01:03:09 -08:00
David Zarzycki
991ba7aab3 [Tests] Add missing 'REQUIRES: asan_runtime' 2018-03-03 09:50:54 -05:00
Graydon Hoare
bf01c4e978 [BatchMode] Remove uses of -bypass-batch-mode-checks in tests, no longer needed. 2018-03-02 19:29:44 -08:00
Graydon Hoare
a9b49a9f60 Merge pull request #14931 from graydon/batch-mode-exit-per-batch
[BatchMode] Make driver report exits per-batch, not per-constituent.
2018-03-02 17:53:05 -08:00
George Karpenkov
a65da887f2 Determine whether a given sanitizer is available based on the presenc… (#14919)
Determine whether a given sanitizer is available based on the presence of the library.

rdar://37192887
2018-03-02 16:57:45 -08:00
Graydon Hoare
5edded1d57 [BatchMode] Add test for -parseable-output. 2018-03-02 14:23:08 -08:00
Ben Langmuir
d991452367 Merge pull request #14746 from benlangmuir/working-directory
[driver] Add -working-directory option
2018-02-21 14:56:56 -08:00
Ben Langmuir
20cb3e3eb2 [driver] Add -working-directory option
Adds a -working-directory option which can be used to modify how
relative paths are resolved. It affects all other paths used in driver
options (controlled by a new ArgumentIsPath flag on options) as well as
the contents of output file maps and auxilliary file paths generated
implicitly by the compiler itself.

rdar://37713856
2018-02-21 09:42:05 -08:00
Graydon Hoare
263c4c54d5 [BatchMode] Preserve intra-batch order, add a seed mode. 2018-02-20 18:31:41 -08:00
Kuba Mracek
db29d0d1f0 Fix the temp-files.swift to work with when building swift against a non-default toolchain 2018-01-15 15:40:24 -08:00
John McCall
7f0f8830cd Split AccessorDecl out from FuncDecl. NFC.
This has three principal advantages:

- It gives some additional type-safety when working
  with known accessors.

- It makes it significantly easier to test whether a declaration
  is an accessor and encourages the use of a common idiom.

- It saves a small amount of memory in both FuncDecl and its
  serialized form.
2018-01-12 14:20:27 -05:00
David Ungar
c1f81867d7 Merge pull request #13268 from davidungar/PR3A-rb
FrontendInputs data structure redo, rebased.
2017-12-11 20:44:10 -08:00
David Ungar
724d1c36cd Last round of small changes 2017-12-11 17:19:06 -08:00
Adam Nemet
004c7d2748 Include module in demangled name in opt remarks
This allows filtering noisy generic specialization and inlining remarks for
stdlib functions based on the module name.
2017-12-05 22:49:13 -08:00
Adam Nemet
1520cbe6dd Prefix opt-remark ID with sil "namespace"
This is so that we can unambiguously distinguish from LLVM opt remarks.
2017-12-05 20:42:53 -08:00
David Ungar
28b206008f FrontendInputs data structure redo.
- Outlaw duplicate input files, fix driver, fix tests, and add test.
- Reflect that no buffer is present without a (possibly pseudo) named file.
- Reflect fact that every input has a (possible pseudo) name.
- Break up CompilerInstance::setup.

Don't bail on dups.
2017-12-05 17:28:03 -08:00
Saleem Abdulrasool
0c42b57962 ELF: restructure image metadata registration
Restructure the ELF handling to be completely agnostic to the OS.
Rather than usng the loader to query the section information, use the
linker to construct linker tables and synthetic markers for the
beginning and of the table.  Save off the values of these pointers and
pass them along through the constructor to the runtime for registration.

This removes the need for the begin/end objects.  Remove the special
construction of the begin/end objects through the special assembly
constructs, preferring to do this in C with a bit of inline assembly to
ensure that the section is always allocated.

Remove the special handling for the various targets, the empty object
file can be linked on all the targets.

The new object file has no requirements on the ordering.  It needs to
simply be injected into the link.

Name the replacement file `swiftrt.o` mirroring `crt.o` from libc.  Merge
the constructor and the definition into a single object file.

This approach is generally more portable, overall simpler to implement,
and more robust.

Thanks to Orlando Bassotto for help analyzing some of the odd behaviours
when switching over.
2017-11-28 10:04:04 -08:00
Erik Eckstein
89ffd4ca29 driver: fix handling of hidden option -assume-single-threaded
It had no effect, because it was not passed to the frontend
2017-11-17 13:33:55 -08:00
Erik Eckstein
416082ccd5 driver: Make -remove-runtime-asserts a driver option, which is passed to the frontend
rdar://problem/35602951
2017-11-17 13:33:55 -08:00
Jordan Rose
30589d608b [Driver] Use simpler idiom for forwarding -target-cpu
No functionality change, but now at least we're testing this more
explicitly than just in test/Misc/tbi.sil.
2017-11-16 13:58:47 -08:00
Jordan Rose
23897e136c -embed-bitcode: Pass -O options to backend jobs too! (#12971)
Otherwise, we leave optimization opportunities on the table, and in
some cases even fail to remove marker intrinsics inserted by earlier
optimization.

Background: under -embed-bitcode, compilation happens in two stages: a
"frontend" job that compiles Swift code, generates LLVM IR, optimizes
it, and then emits a .bc file; and a "backend" job that takes that
.bc, converts it to assembly, and emits an object file with the
original bitcode embedded. However, there are actually optimization
passes that run before and during that "convert to assembly" step that
were getting completely skipped.

rdar://problem/34864094
2017-11-16 13:45:31 -08:00
Adam Nemet
18a588ee46 Mention callee in missed inliner remark 2017-11-14 17:24:34 -08:00
Brian Gesiak
97f7f276e9 Merge pull request #12708 from modocache/sr-2660-swiftmodule-inputs-with-g
[SR-2660][Driver] Pass .swiftmodule to linker
2017-11-13 22:26:21 -05:00
Brian Gesiak
12a1702f2f Merge pull request #12897 from modocache/quote-driver-test
[Driver] Quote env to support paths with spaces
2017-11-13 13:54:54 -05:00
Brian Gesiak
fe56692063 [SR-2660][Driver] Pass .swiftmodule to linker
Summary:
The following two invocations of `swiftc` behave differently, despite
their only difference being the `-g` option:

```
swiftc foo.swift bar.o baz.swiftmodule -o foo
swiftc -g foo.swift bar.o baz.swiftmodule -o foo
```

The first invocation compiles `foo.swift`, links it with `bar.o`, and
passes the AST information from `baz.swiftmodule` to the linker. The
second invocation results in the following error:

```
<unknown>:0: error: cannot load module 'baz' as 'foo'
```

The source of the problem is that the driver determines whether to
generate a module based on the debug info level that has been
requested, and merges all .swiftmodule inputs if a module is being
generated.

Modify this behavior to instead pass .swiftmodule inputs directly to the
linker if our output is to be linked. This results in both the `swiftc` and
the `swiftc -g` invocations above succeeding.

Test Plan:
1. `utils/build-script --test` passes.
2. After cloning https://github.com/modocache/SR-2660 and modifying its
   `build-driver.sh` to point at the local Swift source build
   directory, running `build-driver.sh` succeeds, and lldb is able to
   print descriptions with accurate debug info.
2017-11-13 13:52:46 -05:00
Brian Gesiak
0f523ec049 [Driver] Quote env to support paths with spaces
When a user's PATH includes spaces, tests in `test/Driver/filelists.swift`
would fail. Quoting the PATH variable fixes this issue.
2017-11-13 13:27:15 -05:00
Adam Nemet
65b24eb9d5 Demangle function names in remarks 2017-11-07 22:04:26 -08:00
swift-ci
b382fa1f76 Merge pull request #12443 from modocache/driver-inferred-dylib-name-fixme 2017-11-01 16:10:49 -07:00
Adam Nemet
66085a8aef Save optimization remarks in an external YAML file
This brings the capability from clang to save remarks in an external YAML files.
YAML files can be viewed with tools like the opt-viewer.

Saving the remarks is activated with the new option -save-optimization-record.

Similarly to -emit-tbd, I've only added support for single-compile mode for now.
In this case the default filename is determined by
getOutputFilenameFromPathArgOrAsTopLevel, i.e. unless explicitly specified
with -save-optimization-record-path, the file is placed in the directory of the
main output file as <modulename>.opt.yaml.
2017-10-27 10:14:27 -07:00
swift-ci
b006d07342 Merge pull request #12294 from anemet/opt-remarks 2017-10-20 20:45:50 -07:00
Adam Nemet
9b9805420d Add optimization remarks
This allows reporting successful and unsuccessful optimizations similar to
clang/llvm.

This first patch adds support for the
options -Rpass=<pass-name-regex> -Rpass-missed=<pass-name-regex>.  These allow
reporting successful/unsuccessful optimization on the compiler output for passes
specified by the regex.  I've also added one missed and one passed remark type
to the inliner to test the infrastructure.

Clang also has the option of collecting these records in an external YAML data
file.  This will be added in a later patch.

A few notes:
* The goal is to use this facility for both user-lever "performance" warnings
and expert-level performance analysis.  There will probably be a flag in the
future differentiating the verbosity.

* The intent is match clang/llvm as much as it makes sense.  On the other hand I
did make some changes.  Unlike in llvm, the emitter is not a pass which
simplifies things.  Also the remark class hierarchy is greatly simplified since
we don't derive from DiagnosticInfo.  We also don't derive from Diagnostic to
support the streaming API for arbitrary named-value pairs.

* Currently function names are printed mangled which should be fixed.
2017-10-20 12:41:37 -07:00
Brian Gesiak
162c4c78dd [Driver] Fix linker test by preparing empty dir
This fixes an intermittent failure introduced by
https://github.com/apple/swift/pull/12507.
2017-10-19 17:21:02 -07:00
Brian Gesiak
b81ad22cab [SR-2660][Driver] Handle .swiftmodule inputs
Allow users to pass `.swiftmodule` files into the Swift driver when
compiling without `-g`. The `.swiftmodule` files are then passed to the
linker via `-add_ast_path` so that LLDB can access their AST
information.

This addresses one of two driver changes suggested in the comments of
https://bugs.swift.org/browse/SR-2660.
2017-10-19 15:03:03 -07:00
Brian Gesiak
e2aa7a619c [Driver] Infer target-specific dylib names
When the Swift driver is invoked with the `-emit-library` option, but
without an `-o` option that specifies the emitted library's filename,
logic in the `getOutputFilename()` function derives a filename:
`"lib" + <a plasible base name>"`, and then the value of the
`LTDL_SHLIB_EXT` macro.

There are two problems here:

1. Windows shared library file names, by convention, do not begin with "lib".
2. The `LTDL_SHLIB_EXT` macro is set by
   `llvm/cmake/modules/HandleLLVMOptions.cmake`, based on
   `CMAKE_SHARED_LIBRARY_SUFFIX`, a built-in CMake variable that is set
   at the time LLVM is configured to be built. So, if LLVM and Swift
   were built on a Linux machine, but the `swiftc` executable that was
   built was then invoked to produce a shared library for a Darwin target,
   the library would have a ".so" suffix, not ".dylib". (It's for this
   reason that the tests for this name inference, in
   `test/Driver/linker.swift`, must use a regular expression that
   matches both ".dylib" and ".so", despite specifying a Darwin
   `-target`.)

In order to produce conventionally correct prefixes and suffixes based
on the target, modify the `getOutputFilename()` function to take an
`llvm::Triple` argument.
2017-10-15 00:25:14 -04:00
Jordan Rose
98949efe93 [test] Tweak tests to not depend on the host stdlib or SDK (#12423)
Otherwise, we get into trouble when only building iOS libraries and
then running tests (on macOS).

rdar://problem/33971531&33971705
2017-10-13 17:22:40 -07:00
Roman Levenstein
06efb77e4e Fix tests 2017-10-05 15:51:32 -07:00
Vedant Kumar
1621facc6c [SwiftPGO] Add driver support for -profile-use=<path>
This option tells the compiler where to find a profdata file. The
information in this file enables PGO. For more information about the PGO
infrastructure, look for the -profile-generate option and for the
llvm-profdata tool [1].

[1] http://llvm.org/docs/CommandGuide/llvm-profdata.html
2017-09-26 10:52:08 -07:00
Arnold Schwaighofer
c665c326d4 Add missing REQUIRES: executable_test
To get check-swift-only_non_executable clean again.
2017-09-12 14:50:15 -07:00
Jordan Rose
43ad758b76 Merge pull request #11669 from gmilos/test-pie-flag
Build -shared libs without -pie (on Linux), add tests
2017-09-01 08:56:17 -07:00
Grzegorz Miłoś
5bb433315f Add driver test for linux dynamic libraries. 2017-08-29 15:34:18 +01:00