Erik Eckstein
21b4004d69
Devirtualizer: don't de-virtualize witness calls to non-generic thunks which call a generic function.
...
If the callee is a non-generic thunk which calls a (not inlinable) generic function in the defining module,
it's more efficient to not devirtualize, but call the non-generic thunk - even though it's done through the witness table.
Example:
```
protocol P {
func f(x: [Int]) // not generic
}
struct S: P {
func f(x: some RandomAccessCollection<Int>) { ... } // generic
}
```
In the defining module, the generic conformance can be fully specialized (which is not possible in the client module, because it's not inlinable).
rdar://102623022
2022-12-21 08:52:53 +01:00
..
2022-11-08 09:32:30 -08:00
2022-09-01 06:41:44 +03:00
2022-05-05 16:58:25 -07:00
2022-05-20 19:51:23 -07:00
2022-05-10 12:56:17 -04:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2021-10-28 14:36:36 -07:00
2022-04-15 20:13:00 -07:00
2022-11-25 18:43:40 -08:00
2022-08-04 14:19:33 -07:00
2022-11-16 10:40:55 -08:00
2021-09-15 12:36:17 -07:00
2022-05-09 10:08:52 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:12:59 -07:00
2022-04-15 20:12:59 -07:00
2022-04-15 15:50:59 -07:00
2022-09-01 06:41:44 +03:00
2021-05-18 13:21:31 -07:00
2021-08-27 14:50:56 -07:00
2021-05-14 13:04:44 -07:00
2022-11-15 11:08:13 -08:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-04-14 15:09:36 -07:00
2022-12-21 08:52:53 +01:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-09-01 06:41:44 +03:00
2020-12-11 13:50:51 -08:00
2022-11-08 18:35:27 -08:00
2021-08-18 16:22:26 -04:00
2021-07-19 14:14:59 -07:00
2020-10-05 11:52:05 -07:00
2021-11-09 15:58:42 -08:00
2022-04-15 20:13:00 -07:00
2021-10-28 08:16:19 -07:00
2022-04-15 20:13:00 -07:00
2022-01-26 13:57:57 -08:00
2022-04-15 20:12:59 -07:00
2022-05-23 19:43:51 -07:00
2022-08-16 08:36:58 -07:00
2022-12-12 14:58:19 -08:00
2022-02-19 10:32:29 -07:00
2022-04-15 20:13:00 -07:00
2022-11-15 11:08:13 -08:00
2022-10-03 14:49:11 -07:00
2021-06-11 20:04:43 -07:00
2022-04-14 15:09:36 -07:00
2022-10-03 17:22:44 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2021-05-21 14:52:10 -07:00
2022-04-20 10:44:21 -07:00
2022-06-12 20:25:16 -07:00
2022-06-12 20:25:16 -07:00
2022-04-15 20:13:00 -07:00
2021-06-16 22:20:55 -07:00
2022-04-15 20:13:00 -07:00
2022-12-19 09:50:08 -08:00
2022-04-19 21:32:33 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2021-03-23 13:41:16 -04:00
2021-03-25 15:19:30 +01:00
2021-03-18 13:03:51 -07:00
2021-03-09 19:21:14 -08:00
2022-11-18 15:28:16 -08:00
2022-12-14 16:13:48 -08:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2021-03-12 07:42:07 -08:00
2022-12-04 08:20:34 +03:00
2022-11-04 11:10:59 -07:00
2022-04-15 20:13:00 -07:00
2021-02-05 08:25:58 -05:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-01-20 14:48:55 -08:00
2022-09-01 06:41:44 +03:00
2022-04-15 20:13:00 -07:00
2021-10-29 22:35:57 +02:00
2022-04-06 09:46:40 -07:00
2022-06-02 18:15:31 -04:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-12-02 11:15:43 -05:00
2022-11-07 18:38:06 -05:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:12:59 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-08-16 18:31:13 -07:00
2022-04-18 09:12:35 -07:00
2022-04-15 20:13:00 -07:00
2022-07-06 22:16:16 -07:00
2022-04-15 20:13:00 -07:00
2022-05-27 10:43:55 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:12:59 -07:00
2022-04-15 20:12:59 -07:00
2022-08-31 23:55:29 -07:00
2022-04-15 20:13:00 -07:00
2022-06-30 17:25:17 -07:00
2022-04-15 20:13:00 -07:00
2022-03-05 12:00:39 -08:00
2022-04-15 20:13:00 -07:00
2022-07-14 15:04:27 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-04-15 20:13:00 -07:00
2022-05-31 08:24:49 -07:00
2022-05-09 14:10:07 -07:00
2022-12-16 10:34:05 -08:00
2022-04-15 20:13:00 -07:00
2021-04-15 14:06:17 +02:00
2021-05-18 11:04:04 -07:00
2021-01-26 15:36:46 -08:00
2022-08-11 11:02:57 -07:00
2021-06-11 20:04:43 -07:00