Commit Graph

12848 Commits

Author SHA1 Message Date
Chris Lattner
4494a988f4 implement support for default arguments and varargs in ScalarToTupleExpr lowering.
There is an apparent case where sema isn't computing the varargs injection function when it should (example 'd'), I'll look at that next.


Swift SVN r3028
2012-10-19 22:42:27 +00:00
John McCall
36b4ebb9c6 Change the representation of existential types to always store
a type pointer;  in the case of protocol<>, this replaces the
mandatory trivial witness table, and in all other cases it simply
grows the representation by a pointer.  We've discussed shrinking
the representation by making the witness-table lookup a (cached)
lookup from the type metadata;  this needs more investigation.

Swift SVN r3018
2012-10-18 06:08:06 +00:00
Chris Lattner
e475986dbc adapt to mainline llvm API changes.
Swift SVN r3006
2012-10-16 17:54:16 +00:00
John McCall
2353465f3f Add an API for reemitting as a substituted type and change
protocol witnesses over to the new API.  There's some badness
that we're papering over here involving generic types, but
this is a necessary first step.

Swift SVN r3003
2012-10-14 07:36:22 +00:00
Chris Lattner
acde227dc6 Now that CFGNodes.def is straightened out, add a BBArgument class to represent
basic block arguments.  Nothing generates them yet though.


Swift SVN r3000
2012-10-12 22:32:56 +00:00
Eli Friedman
6a34b36e67 Attempt to handle empty global variables correctly. <rdar://problem/12490628>
Swift SVN r2999
2012-10-12 22:18:42 +00:00
Dave Zarzycki
89bf1a0fc9 Fix unused variable warnings with asserts disabled
Swift SVN r2996
2012-10-12 21:52:09 +00:00
John McCall
e298448e7d Compensate for a trunk LLVM change.
Swift SVN r2983
2012-10-11 20:14:08 +00:00
John McCall
261731a8aa Make a function for reemitting an unsubstituted explosion
as a substituted one, which is critical for thunk emission.

Swift SVN r2976
2012-10-11 04:29:32 +00:00
John McCall
64c8346afc Promote reemitUnderSubstitutions to API and give it a better
name that makes the direction of substitution clear.

Swift SVN r2975
2012-10-11 04:29:29 +00:00
John McCall
17944ddefe Rename emitRValueUnderSubstitutions to make clear the
direction of substitution.

Swift SVN r2974
2012-10-11 04:29:24 +00:00
John McCall
f4dd62dee7 Metatypes for class types have non-trivial representation.
Swift SVN r2971
2012-10-11 00:36:05 +00:00
John McCall
98aa71f424 Move EmptyTypeInfo into GenType.cpp
Swift SVN r2970
2012-10-11 00:36:04 +00:00
Chris Lattner
4135441203 update to build with mainline API changes.
Swift SVN r2968
2012-10-10 22:22:06 +00:00
John McCall
ae978371ac Make calls to non-static methods on classes use virtual
dispatch.  Currently there is no possibility of override.

This was really not as difficult as I managed to make it
the first time through.

Swift SVN r2960
2012-10-10 01:31:47 +00:00
Eli Friedman
dd299a35af Fix for LLVM TargetData -> DataLayout rename.
Swift SVN r2959
2012-10-09 23:18:24 +00:00
John McCall
37d024bd38 bindGenericArchetypes is now just how we emit polymorphic
functions on class types, so we can kill all that special code.

Swift SVN r2943
2012-10-05 01:54:52 +00:00
Chris Lattner
b9279c7239 Remove some dead code from emitCondition: unlike clang, it is impossible
for Swift's IRGen (or CFGGen) to get a constant folded condition when 
emitting a branch: this is because all constants are obfuscated behind
function calls.  This is verified to never trigger on the testsuite.


Swift SVN r2940
2012-10-05 01:01:54 +00:00
John McCall
6e9a2aab8b Fix a conceptual bug in class metadata: the parent pointer
of a class is part of the class members section and is not
global to the entire class metadata.  This is crucial for
correct operation of functions expecting a base-class
metadata object.

That gives us the correct foundation to implement an
optimization under which generic arguments that can be
inferred from the 'this' pointer need not actually be
separately passed.  This has the important result of
making all class member functions with the same signature
up to abstraction actually have the same physical
signature.

Swift SVN r2936
2012-10-04 23:44:31 +00:00
John McCall
526e2d7c54 Flesh out some code to decide when we can avoid passing
metadata and witness tables separately to polymorphic
functions.

Swift SVN r2935
2012-10-04 23:44:24 +00:00
John McCall
1f5b775bc7 Use metatype pointers as generic type arguments. Movements
towards optimizing generic calls to derive things from the
'this' pointer, which is actually crucial for virtual
dispatch (to get all methods to agree about how the
implicit arguments are passed).  Fix a number of assorted
bugs in metadata emission.  Lots of assorted enhancements.

This was proving surprisingly difficult to actually tease
apart into smaller patches.

Swift SVN r2927
2012-10-03 08:57:40 +00:00
John McCall
179e260ea3 Add an abstraction to encapsulate a Decl + explosion level +
uncurrying level, which is something I find myself passing around
quite a bit.  Make sure that it can propagate getter/setter
references in the same way.

Swift SVN r2902
2012-09-28 05:21:24 +00:00
John McCall
3467e63516 Emit pointers to final overriders of member functions into
the metadata objects for classes.  This is currently only
done for methods defined in the main class body, and it's
(naturally) totally fragile, and it's screwed up in a
couple known ways w.r.t. generic classes:  there's no
thunking when the overrider differs by abstraction from
the overridden method, and methods on classes currently
expect to get all the type arguments passed directly
and thus will disagree in signature from members of
non-generic classes.  Also, of course, we're not using
any of this in the call infrastructure.  But it's progress.

Swift SVN r2901
2012-09-27 06:17:46 +00:00
John McCall
a07ecb14f5 IR-gen version of previous commit.
Swift SVN r2900
2012-09-27 06:17:43 +00:00
John McCall
ee012c0903 Make IR-gen use canonical types as the basic type currency.
This is kindof a pain in a few places where the type system
doesn't propagate canonicality.  Also, member initializations
are always direct-initializations and so are allowed to use
explicit constructors, which is a hole in our canonicality
tracking.  But overall I like the idea of always working
with canonical types.

Swift SVN r2893
2012-09-21 07:53:08 +00:00
John McCall
32cc48dc84 More restructuring and start emitting struct metadata.
Swift SVN r2892
2012-09-21 07:53:02 +00:00
John McCall
2d03d842f5 Move class metadata emission into GenMeta.cpp. The main
motivation for this is to re-use code involving generic nominal
types.

Swift SVN r2891
2012-09-21 07:52:58 +00:00
John McCall
fe97523a2a Extract out a header for doing class metadata layout.
Also rename a bunch of things to say 'Class' in them in
preparation for other refactoring.

Swift SVN r2890
2012-09-21 07:52:54 +00:00
Eli Friedman
d8b84d6cd0 Add ScalarToTupleExpr to represent an implicit conversion from a scalar to a tuple. Part of <rdar://problem/12337042>.
Swift SVN r2887
2012-09-21 00:45:33 +00:00
Eli Friedman
919f63cf0e Zap extra semicolons (which some versions of clang warn about).
Swift SVN r2885
2012-09-20 23:26:08 +00:00
John McCall
a695354dc1 Make heap metadata use the metadata scheme.
Swift SVN r2871
2012-09-19 06:33:41 +00:00
John McCall
34da6d1650 Implement grabbing an external value witness table. I
described this mangling in a previous commit, and the runtime
is already using it for some standard tables.

Swift SVN r2870
2012-09-19 06:33:36 +00:00
John McCall
14489d4cad Fix test.
Swift SVN r2865
2012-09-18 07:23:54 +00:00
John McCall
2c21ee7796 Add the compiler infrastructure for emitting references to tuple and
function metadata.

Swift SVN r2864
2012-09-18 07:23:51 +00:00
John McCall
5b10c5df32 Move emitClassMetadataRef to GenMeta.cpp and make it work for
an arbitrary metadata type.

Swift SVN r2862
2012-09-18 07:23:44 +00:00
John McCall
c4c8c5cbe7 Expose an API to fetch a class metadata pointer.
Swift SVN r2861
2012-09-18 07:23:40 +00:00
John McCall
77ac36ce66 This hack is no longer necessary. Thanks, Doug!
Swift SVN r2860
2012-09-18 07:23:36 +00:00
John McCall
1529e0ddd4 Arrange for general mangling of type metadata.
Swift SVN r2853
2012-09-13 21:26:07 +00:00
John McCall
d84d024f52 Fix an uninitialized-memory bug.
Swift SVN r2852
2012-09-13 21:26:05 +00:00
John McCall
ab8677cf7f Change the mangling of metadata objects to be more consistent.
Swift SVN r2850
2012-09-13 21:26:02 +00:00
John McCall
8499117b59 The value witnesses for size/alignment/stride can just be size_t's.
This requires us to potentially copy the value witness tables for
generic struct types as part of computing layout, but that's not
the end of the world (although it will rely on a future patch
to split value witnesses out from protocol witness tables).

Oh, and add a value witness for stride, changing Builtin.strideof
to use that.

Swift SVN r2829
2012-09-06 08:23:14 +00:00
Chris Lattner
7055cfe43a move DiverseList and DiverseStack to swift/Basic, out of IRGen.
Swift SVN r2784
2012-08-26 20:10:10 +00:00
Chris Lattner
2a8a6b04d8 microoptimize IRGen's emitCondition a bit: instead of emitting a xor to
invert a condition, just output an inverted conditional branch (swap the 
true/false dests).


Swift SVN r2778
2012-08-26 17:20:23 +00:00
Ted Kremenek
a5ec0af7e8 Rename 'BraceStmt::elements()' to 'getElements()' to match Swift
naming style for accessors.

Swift SVN r2742
2012-08-24 14:17:28 +00:00
John McCall
e7b9ae47fa Defer to the value witness when moving an archetype. This
is really a deficiency in TypeInfo::initializeWithTake, which
is now virtual and not implemented in TypeInfo anymore.  This
fixes rdar://problem/12153619.

While I'm at it, fix an inefficiency in how we were handling
ignored results of generic calls, and add 4 new builtins:
  Builtin.strideof is like sizeof, but guarantees that it
  returns a multiple of the alignment (i.e., like C sizeof,
  it is the appropriate allocation size for members of an
  array).
  Builtin.destroy destroys something "in place";  previously
  this was being simulated by moving and ignoring the result.
  Builtin.allocRaw allocates raw, uninitialized memory, given
  a size and alignment.
  Builtin.deallocRaw deallocates a pointer allocated with
  Builtin.allocRaw;  it must be given the allocated size.

Swift SVN r2720
2012-08-23 05:21:31 +00:00
Eli Friedman
ae7c99020b Fix use of uninitialized member.
Swift SVN r2715
2012-08-22 22:50:03 +00:00
Eli Friedman
eb1689710f Delete isa, cast, and dyn_cast on Type. Hopefully, this will lead to fewer stupid mistakes.
Swift SVN r2691
2012-08-20 22:15:10 +00:00
John McCall
8e735aec52 Bind generic parameter witnesses when emitting a generic
class destructor.

Swift SVN r2672
2012-08-17 07:45:09 +00:00
John McCall
20bfc9c1ec Initial, untested support for uniquing generic class metadata,
which is necessary to embed the value witnesses there.

Swift SVN r2671
2012-08-17 06:47:33 +00:00
John McCall
e74432a7b9 More incremenetal progress on metadata layout.
Swift SVN r2670
2012-08-17 06:47:29 +00:00