Commit Graph

205 Commits

Author SHA1 Message Date
Michael Gottesman
7e39f33f98 [mangle] Include a pass id in the mangling, just to be careful.
I am starting to reuse manglings for different passes. I want to make sure that
when we reuse functions we actually get a function created by the same pass.

Swift SVN r23924
2014-12-14 10:29:11 +00:00
Michael Gottesman
45b5389854 [mangle] Add support for mangling CapturePromotion specializations and wire it up.
<rdar://problem/19216281>

Swift SVN r23923
2014-12-14 08:17:32 +00:00
Michael Gottesman
c4f3043280 [mangle] Specify sizes for various specialization enums and make the underlying type configurable via a using statement.
Also added comments about how various parts of the enum are
used (i.e. options vs option sets).

Swift SVN r23922
2014-12-14 08:17:31 +00:00
Michael Gottesman
1e63e0e22d [mangle] Add support for mangling dead, owned2guaranteed, and sroa args. Wire up function sig opts.
Now all SIL function specialization passes use the new mangling infrastructure.
Lets keep it that way for future passes as well. = ).

Implements:
<rdar://problem/18831609>

Fixes:
<rdar://problem/19065735>
<rdar://problem/18906781>
<rdar://problem/18956916>

Swift SVN r23859
2014-12-11 05:51:26 +00:00
Michael Gottesman
185d9aaafd [mangle] Add support for mangling constant propagated specializations and wire CapturePropagation to use it.
I also fixed a few bugs in the mangling that this exposed.

Swift SVN r23858
2014-12-11 03:22:07 +00:00
Michael Gottesman
355f791621 [mangle] Add support for function signature specialization mangling and teach closure specialization how to use it.
Swift SVN r23816
2014-12-09 23:21:08 +00:00
Michael Gottesman
4d48d2aaae [mangle] Add initial code for SIL specializations manglings and refactor Generic Specialization mangling code to there from the pass itself.
This is apart of creating the infrastructure for creating special manglings for
all of the passes that we specialize. The main motiviations for this
infrastructure is:

1. Create an easy method with examples on how to create these manglings.
2. Support multiple specializations. This is important once we allow for partial
specialization and can already occur if we perform function signature
optimizations on specialized functions.

The overall scheme is as follows:

_TTS<MANGLINGINFO>__<FUNCNAME>

Thus if we specialize twice, the first specialization will just be treated as
the function name for the second specialization.

<MANGLINGINFO> is defined as:

_<SPECIALIZATIONKINDID>_<SPECIALIZATIONUNIQUEINFO>

Where specialization kind is an enum that specifies the specific sort of
specialization we are performing and specialization unique info is enough
information to ensure that the identity of the function is appropriately
preserved.

Swift SVN r23801
2014-12-09 02:53:05 +00:00
Joe Groff
08fe138808 Runtime: Generate a human-understandable name for Any.Type.
Expose this in the stdlib as _typeName(Any.Type) -> String, pending API review.

Swift SVN r23254
2014-11-11 23:38:24 +00:00
Manman Ren
276af26e12 [Global Opt] adds GlobalGetter as one kind of SILDeclRef.
Also handles mangling, demangling, printing and parsing.

This is the first patch to use global getter for "let" globals.

rdar://16614767


Swift SVN r23106
2014-11-05 00:40:32 +00:00
Joe Groff
0bafa4d05b Restore the module context and generic parameter list to protocol conformance mangling.
We don't need to game the mangling to be easily predictable by conformsToProtocol anymore.

Swift SVN r23089
2014-11-03 21:56:54 +00:00
Joe Groff
5a2f48e3be Add a Builtin.BridgeObject type.
This is a type that has ownership of a reference while allowing access to the
spare bits inside the pointer, but which can also safely hold an ObjC tagged pointer
reference (with no spare bits of course). It additionally blesses one
Foundation-coordinated bit with the meaning of "has swift refcounting" in order
to get a faster short-circuit to native refcounting. It supports the following
builtin operations:

- Builtin.castToBridgeObject<T>(ref: T, bits: Builtin.Word) ->
  Builtin.BridgeObject

  Creates a BridgeObject that contains the bitwise-OR of the bit patterns of
  "ref" and "bits". It is the user's responsibility to ensure "bits" doesn't
  interfere with the reference identity of the resulting value. In other words,
  it is undefined behavior unless:

    castReferenceFromBridgeObject(castToBridgeObject(ref, bits)) === ref

  This means "bits" must be zero if "ref" is a tagged pointer. If "ref" is a real
  object pointer, "bits" must not have any non-spare bits set (unless they're
  already set in the pointer value). The native discriminator bit may only be set
  if the object is Swift-refcounted.

- Builtin.castReferenceFromBridgeObject<T>(bo: Builtin.BridgeObject) -> T

  Extracts the reference from a BridgeObject.

- Builtin.castBitPatternFromBridgeObject(bo: Builtin.BridgeObject) -> Builtin.Word

  Presents the bit pattern of a BridgeObject as a Word.

BridgeObject's bits are set up as follows on the various platforms:

i386, armv7:

  No ObjC tagged pointers
  Swift native refcounting flag bit: 0x0000_0001
  Other available spare bits:        0x0000_0002

x86_64:

  Reserved for ObjC tagged pointers: 0x8000_0000_0000_0001
  Swift native refcounting flag bit: 0x0000_0000_0000_0002
  Other available spare bits:        0x7F00_0000_0000_0004

arm64:

  Reserved for ObjC tagged pointers: 0x8000_0000_0000_0000
  Swift native refcounting flag bit: 0x4000_0000_0000_0000
  Other available spare bits:        0x3F00_0000_0000_0007

TODO: BridgeObject doesn't present any extra inhabitants. It ought to at least provide null as an extra inhabitant for Optional.

Swift SVN r22880
2014-10-23 00:09:23 +00:00
Dmitri Hrybenko
8fdd6aca87 Fix warnings about falling off the end of a function without a return
Swift SVN r22317
2014-09-27 23:34:22 +00:00
John McCall
671613644d Demangling support for mutableAddressor.
Note that the demangling for 'a' accessors changes from
'addressor' to 'mutableAddressor'.  This is correct for
the existing use-case of global variables, which permit
modification through the result.

Swift SVN r22254
2014-09-24 04:19:30 +00:00
Joe Groff
2f2a9ba30f Demangle: Preserve generic contexts after generic types have been demangled.
They may be backreferenced by contexts nested inside the generic context, namely closures. Fixes the remainder of rdar://problem/18306777.

Swift SVN r22041
2014-09-17 21:17:58 +00:00
Joe Groff
0add2f32b2 Remove dead method.
Swift SVN r22040
2014-09-17 21:17:57 +00:00
John McCall
75050f8166 Generate an implicit 'materializeForSet' accessor
along with getters and setters.

Just generate it for now.

Swift SVN r22011
2014-09-17 08:08:03 +00:00
Joe Groff
c864101f05 Demangle: Fix demangling of existential metatypes.
Handles several of the cases in rdar://problem/18306777.

Swift SVN r22002
2014-09-17 03:57:30 +00:00
Jordan Rose
47658c87eb Start mangling names of private declarations specially.
We currently mangle private declarations exactly like public declarations,
which means that private entities with the same name and same type will
have the same symbol even if defined in separate files.

This commit introduces a new mangling production, private-decl-name, which
includes a discriminator string to identify the file a decl came from.
Actually producing a unique string has not yet been implemented, nor
serialization, nor lookup using such a discriminator.

Part of rdar://problem/17632175.

Swift SVN r21598
2014-08-30 00:17:18 +00:00
Manman Ren
2cb20d4e62 [Mangler] mangle the module where an extension is defined if necessary.
If a method is defined within an extension of a class or struct that is
defined in a different module, we mangle the module where the extension is
defined.

If we define function f in module A, and redefine it again in an extension in
module B, we use different mangling to prevent linking in the wrong
SILFunction.

rdar://18057875


Swift SVN r21488
2014-08-27 19:57:21 +00:00
Joe Groff
fb4fe43e3b Handle '?' as an operator character in mangling.
Alphabetize it like the other operator characters are mangled.

Swift SVN r21062
2014-08-06 05:27:29 +00:00
John McCall
584795e505 Replace the typeOf value witness with an
initializeBufferWithTakeOfBuffer value witness.

Attempt to use initializeBufferWithTakeOfBuffer in
some appropriate places.

There are some changes enabled by this which are
coming in a follow-up patch.

Swift SVN r20741
2014-07-30 08:24:12 +00:00
John McCall
1ae1f750d0 Move most type metadata lookups into their own readnone
functions, and make those functions memoize the result.

This memoization can be both threadsafe and extremely
fast because of the memory ordering rules of the platforms
we're targeting: x86 is very permissive, and ARM has a
very convenient address-dependence rule which happens to
exactly match the semantics we need.

Swift SVN r20381
2014-07-23 07:38:26 +00:00
Dmitri Hrybenko
e7b4e6c370 Punycode encoder/decoder: separate core and parts that depend on UTF8
encoder/decoder


Swift SVN r20309
2014-07-22 15:01:12 +00:00
Dmitri Hrybenko
734c0a9ba1 Revert "Punycode encoder/decoder: separate core and parts that depend on UTF8"
It broke tests.

Swift SVN r20308
2014-07-22 14:44:20 +00:00
Dmitri Hrybenko
56342b0cfa Punycode encoder/decoder: separate core and parts that depend on UTF8
encoder/decoder


Swift SVN r20307
2014-07-22 14:37:37 +00:00
Dmitri Hrybenko
f24f98b05f Demangler: remove dependencies on llvm::raw_ostream and swift::QuotedString
Swift SVN r20305
2014-07-22 12:59:00 +00:00
Enrico Granata
d8e4b2c468 The Demangler should only use one currency to vend nodes externally, as it makes clients' lives much much easier - I am specifically thinking LLDB here, since the debugger likes to store nodes it gets out of the demangler as it generates types out of them. Since we are storing everything as a shared_ptr<Node>, having some accessors return Node* and some NodePointer is really not buying us much. Fix things here
Swift SVN r20268
2014-07-21 19:05:32 +00:00
Dmitri Hrybenko
d0823e5e59 Demangler: simplify code
Swift SVN r20264
2014-07-21 17:42:07 +00:00
Dmitri Hrybenko
bd92c01f69 Demangler: print fatal errors to stderr
Swift SVN r20263
2014-07-21 17:42:02 +00:00
Dmitri Hrybenko
23ed1c0b40 Demangler: remove dependency on SmallString
Swift SVN r20256
2014-07-21 15:49:55 +00:00
Chris Lattner
bc481f0fe1 implement <rdar://problem/16859927> remove the underscore in "auto_closure"
autoclosure is one work, not two.



Swift SVN r20253
2014-07-21 15:23:50 +00:00
Dmitri Hrybenko
e33bb4c8de Demangler: remove SmallVector from punycode encoder and decoder interface
Swift SVN r20250
2014-07-21 14:37: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
Dmitri Hrybenko
18c5b7325e Demangler: remove dependency on swift::Optional
Not strictly required, but we are going to make the demangler self-contained
C++11 code for the benefit of users out of the compiler tree.


Swift SVN r20247
2014-07-21 09:23:09 +00:00
Dmitri Hrybenko
96e2e8d50c Demangler: replace llvm::SmallVector with std::vector
Swift SVN r20095
2014-07-17 16:09:42 +00:00
Dmitri Hrybenko
70e0577767 Demangler: replace LLVM reference counting with std::shared_ptr (which is not
actually necessary here, since all tree nodes could be just allocated from a
single pool)

Steps towards rdar://16929868


Swift SVN r20090
2014-07-17 15:35:29 +00:00
Joe Groff
a14a94942d SILGen: Give dynamic thunks a proper mangling.
This lets us make them 'shared' and teach the demangler about them.

Swift SVN r19945
2014-07-14 21:01:45 +00:00
Chris Lattner
8991456ff2 Switch infix/postfix/prefix to be declaration modifiers instead of attributes,
eliminating the @'s from them when used on func's.  This is progress towards
<rdar://problem/17527000> change operator declarations from "operator prefix" to "prefix operator" & make operator a keyword

This also consolidates rejection of custom operator definitions into one
place and makes it consistent, and adds postfix "?" to the list of rejected
operators.

This also changes the demangler to demangle weak/inout/postfix and related things
without the @.



Swift SVN r19929
2014-07-14 15:51:49 +00:00
Chris Lattner
02999cac51 Reinstate the @ on the @objc attribute. This is largely a revert of r19555 with a few tweaks.
Swift SVN r19706
2014-07-08 21:50:34 +00:00
Chris Lattner
67aeb2e7c0 adjust to mainline API change (IntrusiveRefCntPtr::getPtr() renamed to get())
Swift SVN r19605
2014-07-07 14:37:16 +00:00
Chris Lattner
7a56499d61 Start making @objc not start with an @ sign:
- Change the parser to accept "objc" without an @ sign as a contextual
   keyword, including the dance to handle the general parenthesized case.
 - Update all comments to refer to "objc" instead of "@objc".
 - Update all diagnostics accordingly.
 - Update all tests that fail due to the diagnostics change.
 - Switch the stdlib to use the new syntax.

This does not switch all tests to use the new syntax, nor does it warn about
the old syntax yet.  That will be forthcoming.  Also, this needs a bit of 
refactoring, which will be coming up.



Swift SVN r19555
2014-07-04 05:57:57 +00:00
Doug Gregor
12ad12f1b4 Teach the demangler to print implicitly unwrapped optional sugar.
Just a drive-by noticed while doing dictionary type sugar.


Swift SVN r19257
2014-06-26 21:47:44 +00:00
Doug Gregor
6df8f63913 Teach the demangler to print dictionary type sugar
Swift SVN r19256
2014-06-26 21:43:12 +00:00
Doug Gregor
6a47e4de22 Use type-simple to decide whether to parenthesize a type in the demangler.
Swift SVN r19225
2014-06-26 06:30:26 +00:00
Doug Gregor
acadc936b3 Teach the demangler to print array types as [T] rather than T[]
Swift SVN r19196
2014-06-26 00:03:15 +00:00
Enrico Granata
dd8a5a0063 ImplicitlyUnwrappedOptional is an enum, not a struct. Fix the demangling
Swift SVN r19171
2014-06-25 18:07:24 +00:00
Joe Groff
0de9be20c4 Remove dead function.
Swift SVN r17777
2014-05-09 15:26:58 +00:00
Joe Groff
6607f6c235 Demangler: Demangle Unicode symbol names.
Implement the decoding half of RFC 3492 so we can demangle our Punycode-encoded Unicode symbol names.

Swift SVN r17759
2014-05-09 05:00:54 +00:00
Enrico Granata
8d21def542 Change the demangling of _TtSf from Swift.Float32 to Swift.Float; and that of _TtSd from Swift.Float64 to Swift.Double
There has been a shuffling of which are structs and which are typealiases - the demangler should emit the struct names



Swift SVN r17590
2014-05-07 00:17:01 +00:00
Ted Kremenek
050fd53af7 Rename UncheckedOptional to ImplicitlyUnwrappedOptional.
Swift SVN r17232
2014-05-02 06:13:57 +00:00