Avi Kivity
ed483647a4
interval: specialize interval_data<T> for trivial types
...
C++ data movement algorithms (std::uninitialized_copy()) and friends
and the containers that use them optimize for trivially copyable
and destructible types by calling memcpy instead of using a loop
around constructors/destructors. Make intervals of trivially
copyable and destructible types also trivially copyable and
destructible by specializing interval_data<T> not to have
user-defined special member functions. This requires that T have
a default constructor since we can't skip construction when
!_start_exists or !_end_exists.
To choose whether we specialize or not, we look at default
constructiblity (see above) and trivial destructibility. This is
wider than trivial copyablity (a user-defined copy constructor
can exist) but is still beneficial, since the generated copy
constructor for interval_data<T> will be branch-free.
We don't implement the poison words in debug mode; nor are they
necessary, since we no don't manage the lifetime of _start_value
and _end_value manually any more but let the compiler do that for us.
Note [1] prevents full conversion to memcpy for now, but we still
get branch free code.
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121789
2025-09-06 18:38:24 +03:00
..
2024-12-18 17:45:13 +02:00
2025-07-16 17:14:08 +03:00
2025-09-01 18:03:44 +00:00
2025-08-31 11:37:39 +03:00
2025-04-28 12:30:13 +02:00
2025-09-01 18:03:44 +00:00
2025-08-14 16:18:43 +03:00
2024-12-23 23:37:02 +01:00
2025-03-17 10:03:06 +02:00
2025-02-19 12:12:28 +03:00
2025-07-15 23:29:21 +02:00
2025-07-15 23:29:21 +02:00
2025-05-29 13:05:08 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-09-01 08:57:50 +03:00
2025-07-16 17:14:08 +03:00
2025-06-26 15:29:28 +03:00
2025-01-14 07:56:39 -05:00
2025-07-23 17:03:05 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-02-26 23:17:27 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-08-05 08:23:35 +03:00
2024-12-18 17:45:13 +02:00
2025-08-05 00:56:50 +02:00
2025-03-06 10:22:05 +02:00
2025-07-29 13:43:17 +08:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-09-03 09:46:00 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-09-01 14:58:32 +03:00
2025-02-25 10:32:32 +03:00
2025-02-25 10:32:32 +03:00
2025-02-06 11:33:59 +03:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2025-07-08 10:38:23 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-10-21 11:21:52 +03:00
2025-04-01 00:07:28 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-02-26 23:15:16 +02:00
2025-01-14 07:56:39 -05:00
2025-08-28 18:06:37 +02:00
2025-08-28 18:06:37 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-02-26 23:17:27 +02:00
2025-01-07 13:22:00 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-08-27 10:23:04 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-06-26 12:25:38 +02:00
2025-03-26 11:15:13 +01:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-04-12 11:47:02 +03:00
2025-07-03 13:34:04 +03:00
2025-07-03 13:34:04 +03:00
2025-01-09 11:14:49 +02:00
2024-12-18 17:45:13 +02:00
2025-04-01 00:07:28 +02:00
2025-04-01 00:07:28 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-09-01 18:03:44 +00:00
2025-09-01 18:03:44 +00:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-09-06 18:38:24 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-03-20 14:54:09 +00:00
2025-03-20 14:54:09 +00:00
2025-03-03 16:58:38 +02:00
2025-09-01 14:58:21 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-03-06 10:22:05 +02:00
2025-01-14 07:56:39 -05:00
2025-04-30 16:43:22 +03:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-05-29 22:11:41 +03:00
2025-05-29 22:11:41 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-07-29 23:51:43 +03:00
2024-12-18 17:45:13 +02:00
2025-06-30 19:12:08 +02:00
2025-04-28 12:30:13 +02:00
2025-07-21 11:56:40 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-08-01 02:15:04 +03:00
2025-08-01 02:15:04 +03:00
2025-03-06 12:17:32 +01:00
2024-12-18 17:45:13 +02:00
2025-04-12 11:47:00 +03:00
2025-04-12 11:47:00 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-23 23:37:02 +01:00
2024-12-23 23:37:02 +01:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-07-03 13:34:04 +03:00
2025-01-14 07:56:39 -05:00
2025-07-17 16:40:02 +02:00
2025-07-14 18:41:34 +03:00
2025-07-14 18:41:34 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-08-01 02:15:04 +03:00
2024-12-18 17:45:13 +02:00
2025-07-08 16:29:55 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-04-01 00:07:28 +02:00
2024-12-18 17:45:13 +02:00
2025-07-03 13:34:04 +03:00
2025-02-26 23:23:53 +02:00
2025-08-11 14:22:01 +03:00
2025-05-27 12:43:11 +03:00
2025-05-27 12:43:11 +03:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-08-05 08:23:35 +03:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-21 16:24:45 +08:00
2024-12-18 17:45:13 +02:00
2025-06-23 17:54:01 +02:00
2025-01-14 07:56:39 -05:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00
2025-09-03 09:46:00 +03:00
2024-12-18 17:45:13 +02:00
2025-07-23 15:36:45 +02:00
2025-07-23 15:36:45 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2024-12-18 17:45:13 +02:00
2025-01-14 07:56:39 -05:00