Commit Graph

21803 Commits

Author SHA1 Message Date
Anna Zaks
084bdfd05f Change the signature of the trunc builtins to return a tuple containing teh overflow bit as well as the result.
This is a first step in generalizing the builtin to handle non-constant int to int truncations.

Swift SVN r10341
2013-11-11 21:20:04 +00:00
Dmitri Hrybenko
e36ebb217c Remove empty files
Swift SVN r10074
2013-11-09 08:01:08 +00:00
Joe Groff
554abf2d7a IRGen/Runtime: Expose extra inhabitants of class types.
Start using null-page values as extra inhabitants when laying out single-payload enums that contain class pointers as their payload type. Don't use inhabitants that set the lowest bit, to avoid trampling potential ObjC tagged pointer representations. This means that 'T?' for class type T now has a null pointer representation. Enums with multiple empty cases, as well as nested enums like 'T??', should now have optimal representations for class type T as well.

Note that we don't yet expose extra inhabitants for aggregates that contain heap object references, such as structs with class fields, Swift function types, or class-bounded existentials (even when the existential has no witness tables).

Swift SVN r10061
2013-11-09 00:43:40 +00:00
Dave Abrahams
38b9e6808f [stdlib] CharacterEncoding.swift => Unicode.swift
Also enshrine the tests in the test suite

Swift SVN r10057
2013-11-08 22:17:50 +00:00
Dave Abrahams
645ce0b664 [stdlib] Add support for bound protocols
Protocols with associated types can't currently be used as existential
types.  Combined with the inability to create type constraints on
generic functions nested in generic types based on the outer type and
the inability to create closures of generic type and the inability to
create protocol constraints that require generic functions and the
inability to create protocols with init() requirements... and this is
what we get.

Swift SVN r10034
2013-11-08 06:29:29 +00:00
Howard Hinnant
46f26de87b Inlined countLeadingZeros per Dmitri's suggestion.
Swift SVN r9970
2013-11-05 20:20:19 +00:00
Howard Hinnant
ec70f480a6 Set Dictionary up to use only power-of-2 bucket counts. Introduce countLeadingZeros helper to accomplish this. It would be really nice if we could figure out how to inline countLeadingZeros.
Swift SVN r9967
2013-11-05 18:52:44 +00:00
Chris Lattner
50054458e7 remove SIMD vector support from the stdlib. I think we all really want this,
but we don't have time right now to make it great.  This shrinks the stdlib
by 9000 lines :-)


Swift SVN r9902
2013-11-03 16:10:57 +00:00
Chris Lattner
68af974227 Remove 'axle' related code and build machinery. It turns out that we
will not be pursuing this project in the immediate future.



Swift SVN r9901
2013-11-03 16:04:27 +00:00
Dave Abrahams
21d196a9ef [stdlib] Implement basic transcoding of UTF8 and UTF16
Swift SVN r9896
2013-11-02 01:32:49 +00:00
Dmitri Hrybenko
91ce21666d Change 'func' keyword to 'def'
I tried hard find all references to 'func' in documentation, comments and
diagnostics, but I am sure that I missed a few.  If you find something, please
let me know.

rdar://15346654


Swift SVN r9886
2013-11-02 01:00:42 +00:00
Joe Groff
bbddf41693 IRGen: Instantiate existential metadata through the runtime.
When we need a reference to protocol or protocol composition type metadata, ask for it through the runtime, instead of referencing statically-emitted protocol metadata.

Swift SVN r9871
2013-11-01 17:13:49 +00:00
Greg Parker
beaa56d8e9 Add Builtin.Word and use it to implement swift.Word.
Swift SVN r9864
2013-11-01 00:11:22 +00:00
Joe Groff
fe7ecec60c Runtime: Provide value witness implementations for class existentials.
Same deal as for opaque existentials--pre-instantiate a static witness table for one-witness-table types (the zero-witness-tables case is nicely handled by Builtin.ObjCPointer's value witness), and generate a vwtable using dynamic witness implementations for each different-sized container on demand as necessary.

Swift SVN r9850
2013-10-31 18:38:54 +00:00
Greg Parker
b342f68392 Fix Float80 suppression.
Swift SVN r9838
2013-10-31 01:47:27 +00:00
Joe Groff
c38ad6458e Runtime: Expose assignExistentialWithCopy entry points.
The assign-with-copy operation on existentials is complex enough to be emitted as a function call, which is currently generated on-demand by IRGen for every existential layout. We can instead use the implementation out of the runtime. Provide entry points for zero, one, and any number of witness tables.

Swift SVN r9815
2013-10-30 21:58:36 +00:00
Dmitri Hrybenko
c216a848b9 stdlib/FloatingPoint: port floating point implementation to gyb
No changes in functionality intended.


Swift SVN r9799
2013-10-30 17:14:12 +00:00
Joe Groff
922358797d Runtime: Provide a specialization for zero-witness-table existential container layout.
So compilers don't complain about nonstandard use of zero-sized arrays.

Swift SVN r9797
2013-10-30 17:07:04 +00:00
Dmitri Hrybenko
462bc95c6a stdlib/FixedPoint: use camel case names in generator script
Swift SVN r9796
2013-10-30 17:06:55 +00:00
Chris Lattner
cb6cf87f1e revert r9785, it isn't correct.
Swift SVN r9793
2013-10-30 16:02:55 +00:00
Chris Lattner
9ed8986d12 silence a warning:
Metadata.cpp:1280:26: warning: zero size arrays are an extension [-Wzero-length-array]
  const void *_witnesses[NUM_VALUE_WITNESSES];
                         ^~~~~~~~~~~~~~~~~~~
Metadata.cpp:1366:12: note: in instantiation of member class
      '<anonymous>::OpaqueExistentialValueWitnesses<0>::Container' requested here
  /*size*/ Container::size(),
           ^
Metadata.cpp:1448:51: note: in instantiation of static data member '<anonymous
      namespace>::OpaqueExistentialValueWitnesses<0>::ValueWitnessTable' requested here
      return &OpaqueExistentialValueWitnesses<0>::ValueWitnessTable;
                                                  ^
1 warning generated.

As an aside, putting a template argument in ALL_CAPS is kinda wierd.



Swift SVN r9787
2013-10-30 13:49:43 +00:00
Joe Groff
45d0ae05f8 Runtime: Add value witness forwarders to Metadata type.
Add member functions to Metadata that call into the value witness table and pass 'self' automatically.

Swift SVN r9758
2013-10-29 16:07:22 +00:00
Joe Groff
47a77e1c8c Runtime: Provide implementations of opaque existential witnesses.
Instantiate static value witness implementations for the common zero- and one-witness-table cases, which correspond to the "Any" type protocol<> and to single-protocol types. For protocol compositions, instantiate a value witness table that uses the layout information from existential metadata to perform the value witness operations.

Swift SVN r9752
2013-10-29 03:08:21 +00:00
Joe Groff
37e652b2ba Runtime: Add swift_getExistentialMetadata entry point.
Set up a metadata cache for existential type metadata. Instantiate existential metadata by first sorting the protocol list, so that it is order invariant, precomputing the overall witness table count and class constraint of the composition so it can be cached in the existential metadata.

We still need to implement value witnesses for existential containers in the runtime before this is complete. We can at least test the uniquing and flags computations at this point.

Swift SVN r9727
2013-10-28 20:53:20 +00:00
Greg Parker
569f98de00 Fix Makefile build.
Swift SVN r9599
2013-10-22 21:33:30 +00:00
Joe Groff
5711ec1626 stdlib: Trap overflows with condfail instead of if { trap }.
Swift SVN r9594
2013-10-22 16:08:33 +00:00
Joe Groff
2e0d554720 runtime: Minimal implementation of swift_conditionalFailure.
It'd be nice to eventually report some context information, maybe derived from the location info on the originating 'cond_fail' SIL instruction, but this is a start.

Swift SVN r9589
2013-10-22 15:53:06 +00:00
Greg Parker
c81077dfa6 Build FastEntryPoints.s using C compiler when generating for not-Xcode.
Swift SVN r9513
2013-10-19 00:59:46 +00:00
Dave Abrahams
3a09877034 [stdlib] Remove unintended flotsam
Swift SVN r9508
2013-10-19 00:17:36 +00:00
Dave Abrahams
f3053a8bea [stdlib] WIP: prototype the basic data structure of the new string design.
Nothing is tested yet, but it all compiles

Swift SVN r9507
2013-10-19 00:10:02 +00:00
Greg Parker
fbd1c95292 Add support for iOS builds using cmake.
Swift SVN r9499
2013-10-18 21:52:37 +00:00
Dave Zarzycki
62d3b16cd8 Workaround 15254902 -- Simple generic functions aren't inlined
Swift SVN r9464
2013-10-17 21:21:59 +00:00
Jordan Rose
9a4528c904 Move gyb from tools/ to utils/
For consistency with the vague idea that things that are only useful for
compiler developers should go in utils/, not tools/. Unless they need
build system support.

Swift SVN r9433
2013-10-17 00:08:48 +00:00
Howard Hinnant
b78fefdf0b Vector is dead. Long live Array.
Swift SVN r9432
2013-10-16 23:57:29 +00:00
Dmitri Hrybenko
13b834c9c0 stdlib/FixedPoint: move more @transparent annotations to extensions, as
suggested by Anna


Swift SVN r9431
2013-10-16 23:57:16 +00:00
Dmitri Hrybenko
2aed708565 stdlib/FixedPoint, stdlib/Float: mark constructors and comparison functions as @transparent
Swift SVN r9430
2013-10-16 23:35:11 +00:00
Dmitri Hrybenko
381d6ffec2 stdlib/FixedPoint: Fix coding style
Swift SVN r9416
2013-10-16 19:29:21 +00:00
Anna Zaks
740fc0a9d9 Revert "Revert "Reimplement integer arithmetic overflow checking to use special, error on overflow builtins""
(This only fails under -DSWIFT_OPTIMIZED=NO; most likely due to an llvm bug.)

We've decided that it's best to specialize each arithmetic builtin that could overflow, instead of calling a separate generic "staticReport" builtin and passing it enough info to produce the message. The main advantage of this approach is that it would be possible for the compiler to customize the message and better link it to the builtin that overflows. For example, the constants that participated in the computation could be printed. In addition, less code will be generated and the compiler could, in the future, automatically emit the overflow diagnostics/trap at runtime.

This patch introduces new versions of op_with_overflow swift builtins. Which are lowered to llvm.op_with_overflow builtins in IRGen after the static diagnostics. If the last argument to the builtins evaluates to true, the overflow is unintentional. CCP uses the builtins to diagnose the overflow detectable at compile time. FixedPoint is changed to rely on these in implementation of primitive arithmetic operations.

Swift SVN r9328
2013-10-14 21:42:33 +00:00
Dave Zarzycki
78406b4e51 14834091 swift_allocObject should not sleep when memory is unavailable
Swift SVN r9317
2013-10-14 17:39:41 +00:00
Dave Zarzycki
a73952a77b Abort if single threaded and the address space is exhausted
This is part of 14834091.

Swift SVN r9314
2013-10-14 16:50:06 +00:00
Mon Ping Wang
00467ba953 Reintroduce "Add support for Axle library." from 9292. Added an dependency to prevent building the
core and axle core at the same time.


Swift SVN r9309
2013-10-14 07:51:19 +00:00
Dmitri Hrybenko
f40ba621a8 Make integer literals 2048-bit. This covers the whole Float64 range.
Swift SVN r9308
2013-10-14 05:18:55 +00:00
Dmitri Hrybenko
3d8e8d1e8f Remove fixed FIXMEs
Swift SVN r9304
2013-10-14 04:13:16 +00:00
Joe Groff
b233f5fd2a runtime: Start class layout from superclass's size and alignment.
If we instantiate metadata for a generic class, start laying out its fields relative to its base class's fragile size and alignment.

Swift SVN r9300
2013-10-14 02:45:58 +00:00
Joe Groff
cf457d2210 Revert "Add support for Axle library." It breaks the build.
This reverts commit r9292.

Swift SVN r9296
2013-10-13 22:38:22 +00:00
Mon Ping Wang
41aca3e7e6 Add support for Axle library. Please note that AxeBuiltins.gyb will be
expanded soon for the other graphics builtins.


Swift SVN r9294
2013-10-13 19:54:01 +00:00
Dmitri Hrybenko
011284e9c9 Make minus sign part of IntegerLiteralExpr and make integers literals 136-bits
wide

Currently integer literals are 64-bit.  In order to allow checking for overflow
while converting an integer literal to swift.UInt/Int* types we need at least
65 bits.  But floating point numbers (Float32, Float64, Float80) are
BuiltinIntegerLiteralConvertible.  In order to allow spelling large floating
point constants, we allow 136-bit literals.

Rationale: 128 bits are enough to represent the absolute value of min/max IEEE
Binary32, and we need 1 bit to represent the sign.  136 is 129 rounded to the
next 8 bits.

The plan is to have builtins that do the overflow check and convert 136-bit
numbers to the required width.  We need these builtins for both integers and
floating point numbers to ensure that 136-bit numbers are folded into sane
constants in SIL and don’t escape to LLVM IR.


Swift SVN r9253
2013-10-12 04:52:11 +00:00
Joe Groff
280fc60ce9 IRGen, runtime: Poke generic size and alignment into class metadata.
This should get us actually allocating and deallocating generic root class instances.

Swift SVN r9251
2013-10-12 03:34:27 +00:00
Joe Groff
43dd2f76d3 runtime: Add swift_initClassMetadata function.
Similar to swift_initStructMetadata, takes a vector of field type metadata and calculates the offsets of all of the fields.

Swift SVN r9237
2013-10-11 23:56:53 +00:00
Anna Zaks
1d646a8ba8 Implement overflow checking on integer literals (1 of 2)
- Added 2 new builtins strunc_with_overflow and utrunc_with_overflow
  that perform truncation and produce a compile time error when truncation
  overflows.

- Used these builtins instead of trunc to implement "_convertFromBuiltinIntegerLiteral".

- Currently, the builtins are converted to trunc in IRGen, but we should
  not be IRGenning code that uses them, since all uses of
  "_convertFromBuiltinIntegerLiteral" should be inlined and the arguments
  constant folded.

- I had to change a test and the implementation of operator '~' in the standard library
  because they assumed that '0xFF' is a valid signed Int8. It is questionable if we should
  allow this and if we should treat signed and unsigned integers differently depending on
  how they are spelled (decimal or hexadecimal).

* This patch will be further improved (Ex: will start finding overflows on Int64, better
  deal with '-128' after the negative integer literal patch is committed.)

Swift SVN r9226
2013-10-11 22:19:14 +00:00