Commit Graph

1220 Commits

Author SHA1 Message Date
Robert Widmann
2efbeb3912 Merge pull request #21451 from CodaFi/logicd
[SR-8272] Drop the last remnants of LogicValue
2018-12-20 23:33:20 -05:00
Innovimax
335fe49b0e fix typo (#21473) 2018-12-20 21:37:55 -05:00
Robert Widmann
426fe886dc [SR-8272] Drop the last remnants of LogicValue
Removes the _getBuiltinLogicValue intrinsic in favor of an open-coded
struct_extract in SIL.  This removes Sema's last non-literal use of builtin
integer types and unblocks a bunch of cleanup.

This patch would be NFC, but it improves line information for conditional expression codegen.
2018-12-19 23:14:59 -05:00
Michael Gottesman
40a09c9c21 Fixup tests for -assume-parsing-unqualified-ownership-sil => [ossa] transition. 2018-12-18 00:49:32 -08:00
Saleem Abdulrasool
5175ecd677 test: improve DebugInfo test coverage on Windows
This makes a number of tests now pass on Windows.  One additional test
should also be repaired on Linux (XFAIL -> PASS).
2018-12-16 14:10:46 -08:00
Davide Italiano
56e3da97cd Revert "[TypeRecontruction] Remove handling of InOutTypes."
This reverts commit 751550be1a.
2018-12-07 09:13:09 -08:00
Davide Italiano
751550be1a [TypeRecontruction] Remove handling of InOutTypes. 2018-12-06 17:31:43 -08:00
Davide Italiano
854dffb200 [DebugInfo] Stop handling InOut types, they'll be gone soon.
<rdar://problem/46043909>
2018-12-06 13:38:34 -08:00
Michael Gottesman
0af0d5fddc [ownership] Replace ValueOwnershipKind::Trivial with ValueOwnershipKind::Any.
In a previous commit, I banned in the verifier any SILValue from producing
ValueOwnershipKind::Any in preparation for this.

This change arises out of discussions in between John, Andy, and I around
ValueOwnershipKind::Trivial. The specific realization was that this ownership
kind was an unnecessary conflation of the a type system idea (triviality) with
an ownership idea (@any, an ownership kind that is compatible with any other
ownership kind at value merge points and can only create). This caused the
ownership model to have to contort to handle the non-payloaded or trivial cases
of non-trivial enums. This is unnecessary if we just eliminate the any case and
in the verifier separately verify that trivial => @any (notice that we do not
verify that @any => trivial).

NOTE: This is technically an NFC intended change since I am just replacing
Trivial with Any. That is why if you look at the tests you will see that I
actually did not need to update anything except removing some @trivial ownership
since @any ownership is represented without writing @any in the parsed sil.

rdar://46294760
2018-12-04 23:01:43 -08:00
Karoy Lorentey
666a22feff [test] Modernize hashing throughout the test suite 2018-11-29 17:38:29 +00:00
Adrian Prantl
936fead1b9 Remove DebugTypeInfo::isImplicitlyIndirect().
I found the corresponding code in LLDB that depended on this hack and
am now removing both. This makes it possible to share the same code
path for top-level archetypes and member types.

rdar://problem/45462765
2018-11-27 16:11:05 -08:00
Andrew Trick
702981f775 Fix MandatoryInlining to not be quadratic.
Inlining has always been quadratic for no good reason. There was a
special hack for single-block callees that allowed linear inlining.

Instead, the now iterates over blocks and instructions in reverse,
splitting blocks as it inlines. There no longer needs to be special
case for single block callees, and the inliner is linear for all kinds
of callees.

This further simplifies and cleans up the code. There are just a few
basic invariants that the common inliner needs to provide about how
blocks are split and laid out. We can do this if we don't add hacks
for special cases within the inliner. Those invariants allow the
inliner clients to be much simpler and more efficient.

PerformanceInliner still needs to be fixed.

Fixes SR-9223: Inliner exhibits slow compilation time with a large
static array.
2018-11-26 09:41:28 -08:00
Andrew Trick
9c46b2a053 Fix block merging after inlining to help avoid quadratic inlining.
A recent SILCloner rewrite removed a special case hack for single
basic block callee functions:

commit c6865c0dff
Merge: 76e6c4157e 9e440d13a6
Author: Andrew Trick <atrick@apple.com>
Date:   Thu Oct 11 14:23:32 2018

    Merge pull request #19786 from atrick/silcloner-cleanup

    SILCloner and SILInliner rewrite.

Instead, the new inliner simply merges trivial unconditional branches
after inlining the return block. This way, the CFG is always in
canonical state after inlining. This is more robust, and avoids
interfering with subsequent SIL passes when non-single-block callees
are inlined.

The problem is that inlining a series of calls within a large block
could result in interleaved block splitting and merging operations,
which is quadratic in the block size. This showed up when inlining the
tens of thousands of array subscript calls emitted for a large array
initialization.

The first half of the fix is to simply defer block merging until all
calls are inlined. We can't expect SimplifyCFG to run immediately
after inlining, nor would we want to do that, *especially* for
mandatory inlining. This fix instead exposes block merging as a
trivial utility.

Note: by eliminating some unconditional branches, this change could
reduce the number of debug locations emitted. This does not
fundamentally change any debug information guarantee, and I was unable
to observe any behavior difference in the debugger.
2018-11-26 09:41:28 -08:00
Pavel Yaskevich
a1df238d47 Associate @autoclosure only with parameter types
Mangled implicit closures shouldn't have `@autoclosure` flag
associated with them, because their type is just a regular
function type.
2018-11-10 11:59:28 -08:00
Slava Pestov
cc1e70d458 IRGen: Value witness functions don't need shared linkage 2018-11-09 20:51:18 -05:00
Slava Pestov
6786ceb3a8 AST: Fix mangling of nominal types with a type alias parent type
The mangling AST cannot represent this, and we were incorrectly
pulling generic arguments from the type alias type. Instead let's
just desugar the parent type when mangling a nominal type.

Fixes <rdar://problem/45900947>.
2018-11-09 00:44:29 -05:00
Doug Gregor
5e439f7647 [Mangling] Mangle types as generic only when they have generic arguments.
The `isSpecialized()` check didn’t account for the possibility that a
typealias in a parent of a nominal type could be non-generic when the
parent declaration was generic, leading to incorrect mangling that stated
that they were generic but had no generic arguments.

Fixes SR-8930 / rdar://problem/45216653 and rdar://problem/45813164.
2018-11-05 23:31:32 -08:00
John McCall
abdba1d3f4 Change the integer-literal type from Int2048 to IntLiteral.
Part of SR-290.
2018-10-31 23:14:58 -04:00
Xi Ge
539eb28a67 Revert "Revert "[test] disable a failing test DebugInfo/local-vars.swift.gyb. rdar://45708367"" 2018-10-31 14:07:02 -07:00
adrian-prantl
4038eeed87 Revert "[test] disable a failing test DebugInfo/local-vars.swift.gyb. rdar://45708367" 2018-10-31 13:05:26 -07:00
Xi Ge
8f4ea96309 [test] disable a failing test DebugInfo/local-vars.swift.gyb. rdar://45708367 2018-10-31 12:38:01 -07:00
Slava Pestov
38fdb6b7ff Update various tests to not use Swift 3 code
Completely mechanical changes:

- Explicit @objc in a few places
- Some imported APIs changed
- For the mix-and-match tests, just test version 4/5 instead of 3/4
2018-10-26 20:15:01 -04:00
Adrian Prantl
0b32799972 Debug Info: Normalize paths when creating DIFile objects.
For a yet-to-be-determined reason the Clang SourceManager returns
source file paths with a ./ component before the filename if the
module cache is cold.

<rdar://problem/43439465>
2018-10-04 17:45:01 -07:00
Erik Eckstein
39bb14b094 change mangling prefix from $S to $s
This is the final ABI mangling prefix

rdar://problem/38471478
2018-09-19 13:55:11 -07:00
Adrian Prantl
9cb0b8ef25 Zero-initialize -Onone debug shadow copies for exploded values
and simplify the initialization code by emitting a memset intrinsic.

rdar://problem/43566087
2018-09-14 17:20:11 -07:00
Adrian Prantl
beb32f3821 Enable debug info for inlined generics by default. It works now. 2018-09-10 14:48:53 -07:00
Mike Ash
0c2d874bf8 Merge pull request #18920 from mikeash/willthrow-error-register
[Runtime][ABI] Have swift_willThrow take the error value in the return register.
2018-09-06 18:00:43 -04:00
Adrian Prantl
909f95cc5f Use <compiler-generated> as the filename for SILLocation-less functions
to avoid misleading source locations in backtraces.

rdar://problem/39116765
2018-09-05 08:49:46 -07:00
Jonas Devlieghere
9e6206c87f Unfail DebugInfo/local-vars.swift.gyb 2018-09-03 14:42:15 -07:00
Mike Ash
940c0fd1ba Merge branch 'master' into willthrow-error-register 2018-08-31 17:21:55 -04:00
Adrian Prantl
81f9ea33be SILGen: Preserve function argument debug info for arguments needing alloc_stack
This fixes a logic error in the existing code that cause these
function arguments to appear twice, once as local variable and once as
formal parameter.

rdar://problem/37410759
2018-08-31 10:35:52 -07:00
swift-ci
6e16e29aa1 Merge pull request #19024 from adrian-prantl/40241256 2018-08-29 17:28:43 -07:00
Andrew Trick
b3a3220e38 Merge pull request #19020 from atrick/fix-critical-edges
Fix critical edges
2018-08-29 09:51:05 -07:00
John McCall
b3120907d5 Merge pull request #15691 from rjmccall/max-alignment-16
Cap the alignment of all types in Swift at 16
2018-08-28 21:14:23 -04:00
Mike Ash
0e670df941 XFAIL the DebugInfo/local-vars.swift.gyb test on Linux until it's fixed. 2018-08-28 17:41:46 -04:00
John McCall
c1f99b5fdb Cap type alignment in Swift at 16.
rdar://31411216
2018-08-28 16:13:50 -04:00
Adrian Prantl
97cbd3b1cf Deserialize Swift compatibility version in CompilerInvocation::loadFromSerializedAST()
LLDB needs the -swift-version because the -D__swift__ macro affects
how Clang modules are built. This currently has the really odd effect
that when debugging a Swift program that is not using the very latest
Swift version, the first "po" takes several seconds, because the
module cache needs to be rebuilt.

rdar://problem/40241256
2018-08-28 13:04:27 -07:00
Andrew Trick
763ae6712a Update test cases for critical edge verification. 2018-08-27 23:56:52 -07:00
Mike Ash
add0189c66 [Runtime][ABI] Fix up additional tests for the swift_willThrow ABI change.
rdar://problem/37578477
2018-08-24 12:37:16 -04:00
Davide Italiano
72df014a84 Merge pull request #18447 from sparkasaurusRex/codeview-linetables
Reduce breaks in CodeView linetables
2018-08-06 17:08:56 -07:00
Ellis Hoag
924d51fb1e Fix CHECK to work across platforms 2018-08-06 11:34:33 -07:00
Ellis Hoag
a9765e9b68 Reduce breaks in CodeView linetables
Summary:
CodeView does not recognize zero as an artificial line location
and so a line location of zero causes unexpected behavior when
stepping through user code. If we find a line location of zero
and our scope has not changed, we use the most recent debug
location. That is expected to be the user code that most likely
relates to the current instruction and is similar to the behavior
in LLDB.

Test Plan:
test/DebugInfo/linetable-codeview.swift
2018-08-01 10:40:33 -07:00
swift-ci
72304d7b4a Merge remote-tracking branch 'origin/master' into master-next 2018-08-01 07:29:57 -07:00
adrian-prantl
796489960f Merge pull request #18366 from adrian-prantl/28859432
Add debug info support for inlined and specialized generic variables.
2018-08-01 07:19:01 -07:00
swift-ci
c7b52aaea9 Merge remote-tracking branch 'origin/master' into master-next 2018-08-01 00:28:53 -07:00
eeckstein
af3765e95b Revert "Reduce breaks in Codeview linetables" 2018-07-31 22:28:43 -07:00
swift-ci
fe2b1bbd3a Merge remote-tracking branch 'origin/master' into master-next 2018-07-31 19:29:10 -07:00
Adrian Prantl
58475ef1ad Add debug info support for inlined and specialized generic variables.
This patch adds SIL-level debug info support for variables whose
static type is rewritten by an optimizer transformation. When a
function is (generic-)specialized or inlined, the static types of
inlined variables my change as they are remapped into the generic
environment of the inlined call site. With this patch all inlined
SILDebugScopes that point to functions with a generic signature are
recursively rewritten to point to clones of the original function with
new unique mangled names. The new mangled names consist of the old
mangled names plus the new substituions, similar (or exactly,
respectively) to how generic specialization is handled.

On libSwiftCore.dylib (x86_64), this yields a 17% increase in unique
source vars and a ~24% increase in variables with a debug location.

rdar://problem/28859432
rdar://problem/34526036
2018-07-31 16:59:56 -07:00
Robert Widmann
0e58b7fd14 Plumbing for a Virtual File System
Adds the -vfsoverlay frontend option that enables the user to pass
VFS overlay YAML files to Swift. These files define a (potentially
many-layered) virtual mapping on which we predicate a VFS.

Switch all input-based memory buffer reads in the Frontend to the new
FileSystem-based approach.
2018-07-31 13:16:14 -07:00
swift-ci
100bec92a7 Merge remote-tracking branch 'origin/master' into master-next 2018-07-31 11:09:58 -07:00