Martin Möhrmann
6ed4661807
cmd/compile: optimize make+copy pattern to avoid memclr
...
match:
m = make([]T, x); copy(m, s)
for pointer free T and x==len(s) rewrite to:
m = mallocgc(x*elemsize(T), nil, false); memmove(&m, &s, x*elemsize(T))
otherwise rewrite to:
m = makeslicecopy([]T, x, s)
This avoids memclear and shading of pointers in the newly created slice
before the copy.
With this CL "s" is only be allowed to bev a variable and not a more
complex expression. This restriction could be lifted in future versions
of this optimization when it can be proven that "s" is not referencing "m".
Triggers 450 times during make.bash..
Reduces go binary size by ~8 kbyte.
name old time/op new time/op delta
MakeSliceCopy/mallocmove/Byte 71.1ns ± 1% 65.8ns ± 0% -7.49% (p=0.000 n=10+9)
MakeSliceCopy/mallocmove/Int 71.2ns ± 1% 66.0ns ± 0% -7.27% (p=0.000 n=10+8)
MakeSliceCopy/mallocmove/Ptr 104ns ± 4% 99ns ± 1% -5.13% (p=0.000 n=10+10)
MakeSliceCopy/makecopy/Byte 70.3ns ± 0% 68.0ns ± 0% -3.22% (p=0.000 n=10+9)
MakeSliceCopy/makecopy/Int 70.3ns ± 0% 68.5ns ± 1% -2.59% (p=0.000 n=9+10)
MakeSliceCopy/makecopy/Ptr 102ns ± 0% 99ns ± 1% -2.97% (p=0.000 n=9+9)
MakeSliceCopy/nilappend/Byte 75.4ns ± 0% 74.9ns ± 2% -0.63% (p=0.015 n=9+9)
MakeSliceCopy/nilappend/Int 75.6ns ± 0% 76.4ns ± 3% ~ (p=0.245 n=9+10)
MakeSliceCopy/nilappend/Ptr 107ns ± 0% 108ns ± 1% +0.93% (p=0.005 n=9+10)
Fixes #26252
Change-Id: Iec553dd1fef6ded16197216a472351c8799a8e71
Reviewed-on: https://go-review.googlesource.com/c/go/+/146719
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-05-07 17:50:24 +00:00
..
2017-01-20 05:55:53 +00:00
2019-03-06 18:53:12 +00:00
2020-03-25 22:22:20 +00:00
2019-04-02 16:34:03 +00:00
2020-05-07 17:50:24 +00:00
2016-05-02 13:43:18 +00:00
2013-01-11 22:00:48 +01:00
2020-05-06 04:34:54 +00:00
2016-05-02 13:43:18 +00:00
2015-10-07 14:37:44 +00:00
2019-11-06 09:09:59 +00:00
2017-03-16 02:44:16 +00:00
2019-09-08 17:28:20 +00:00
2019-09-16 15:30:51 +00:00
2014-01-07 13:26:48 +01:00
2019-04-16 16:20:39 +00:00
2018-03-01 21:11:16 +00:00
2019-08-28 19:27:20 +00:00
2016-05-02 13:43:18 +00:00
2020-02-21 22:57:52 +00:00
2016-07-06 20:48:41 +00:00
2013-01-30 20:21:08 +01:00
2016-04-24 21:36:52 +00:00
2016-05-02 13:43:18 +00:00
2018-04-05 22:01:17 +00:00
2017-01-20 05:55:53 +00:00
2016-05-02 13:43:18 +00:00
2018-04-09 18:57:37 +00:00
2018-05-06 04:28:23 +00:00
2018-05-06 04:28:23 +00:00
2012-11-08 09:04:27 -08:00
2017-05-11 13:53:54 +00:00
2014-10-06 17:16:39 -04:00
2016-03-17 04:20:02 +00:00
2013-02-12 13:17:49 -05:00
2012-05-24 22:41:07 -04:00
2020-03-29 17:12:56 +00:00
2013-10-08 14:36:20 -04:00
2012-09-10 13:03:07 -07:00
2016-05-02 13:43:18 +00:00
2018-05-29 02:39:16 +00:00
2018-11-26 14:06:28 +00:00
2020-03-29 17:12:56 +00:00
2019-03-06 20:04:07 +00:00
2014-10-31 11:08:27 -04:00
2015-01-29 13:07:30 +00:00
2019-09-08 17:28:20 +00:00
2018-10-06 15:40:03 +00:00
2018-08-14 09:19:38 +00:00
2012-07-01 21:59:50 +04:00
2014-01-31 00:30:56 +01:00
2015-06-26 03:38:21 +00:00
2019-03-14 21:00:20 +00:00
2017-03-15 22:45:17 +00:00
2017-03-15 22:45:17 +00:00
2017-03-15 22:45:17 +00:00
2019-09-26 18:45:53 +00:00
2016-05-02 13:43:18 +00:00
2019-03-28 17:46:55 +00:00
2012-09-28 08:30:30 -07:00
2015-07-11 14:36:33 +00:00
2015-07-11 14:36:33 +00:00
2016-05-02 13:43:18 +00:00
2019-09-26 23:54:29 +00:00
2016-05-02 13:43:18 +00:00
2016-10-04 17:10:47 +00:00
2019-09-06 23:15:48 +00:00
2012-07-03 09:09:05 +10:00
2019-03-14 21:00:20 +00:00
2013-02-12 13:17:49 -05:00
2019-09-06 23:15:48 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2013-02-12 13:17:49 -05:00
2012-10-07 21:52:57 +02:00
2013-02-12 13:17:49 -05:00
2020-02-26 16:54:17 +00:00
2014-01-24 22:35:11 +04:00
2019-10-16 00:05:37 +00:00
2018-05-31 17:36:45 +00:00
2020-04-13 21:56:15 +00:00
2020-04-21 16:47:01 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2020-04-21 20:49:34 +00:00
2020-04-21 20:49:34 +00:00
2016-05-02 13:43:18 +00:00
2019-04-02 16:34:03 +00:00
2019-09-03 17:52:06 +00:00
2019-09-16 15:30:51 +00:00
2019-09-16 15:30:51 +00:00
2019-09-16 15:30:51 +00:00
2019-09-16 15:30:51 +00:00
2019-09-06 01:35:46 +00:00
2019-11-16 20:31:45 +00:00
2019-09-25 17:07:09 +00:00
2019-09-16 15:30:51 +00:00
2019-09-03 17:52:06 +00:00
2019-09-03 17:52:06 +00:00
2019-10-07 18:50:14 +00:00
2019-04-17 22:55:26 +00:00
2019-04-17 16:36:56 +00:00
2020-03-31 21:51:51 +00:00
2019-09-16 15:30:51 +00:00
2019-09-16 15:30:51 +00:00
2019-08-28 19:27:20 +00:00
2019-04-17 19:09:15 +00:00
2019-09-03 17:52:06 +00:00
2013-02-12 13:17:49 -05:00
2014-12-08 22:22:58 +00:00
2019-09-08 17:28:20 +00:00
2016-09-14 16:39:47 +00:00
2016-05-02 13:43:18 +00:00
2013-02-12 13:17:49 -05:00
2013-02-12 13:17:49 -05:00
2013-03-15 15:24:13 -04:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2018-04-30 19:39:18 +00:00
2018-05-08 21:15:48 +00:00
2016-05-02 13:43:18 +00:00
2019-10-10 19:38:06 +00:00
2017-04-19 02:27:58 +00:00
2019-03-07 21:05:15 +00:00
2018-05-31 17:36:45 +00:00
2013-12-12 19:02:11 -08:00
2016-05-02 13:43:18 +00:00
2012-10-07 23:22:01 +02:00
2017-03-24 20:07:15 +00:00
2017-02-10 01:22:30 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2019-09-08 17:28:20 +00:00
2016-05-02 13:43:18 +00:00
2019-03-18 20:10:55 +00:00
2019-11-04 20:19:15 +00:00
2017-04-24 12:37:49 +00:00
2015-09-05 02:25:01 +00:00
2020-02-26 14:44:24 +00:00
2019-01-08 21:54:04 +00:00
2019-01-08 21:54:04 +00:00
2017-03-03 21:29:32 +00:00
2018-08-30 22:48:28 +00:00
2020-03-25 01:11:15 +00:00
2018-03-13 20:34:03 +00:00
2020-04-03 21:43:52 +00:00
2020-03-25 01:11:15 +00:00
2016-09-19 19:03:01 +00:00
2017-04-12 14:27:45 +00:00
2016-05-02 13:43:18 +00:00
2019-11-18 14:40:07 +00:00
2016-05-02 13:43:18 +00:00
2019-08-28 19:27:20 +00:00
2018-04-30 19:39:18 +00:00
2019-10-03 18:08:32 +00:00
2019-11-01 20:13:05 +00:00
2019-02-19 22:45:09 +00:00
2013-02-12 13:17:49 -05:00
2016-05-02 13:43:18 +00:00
2019-09-03 19:33:04 +00:00
2019-09-16 15:30:51 +00:00
2020-01-29 16:34:44 +00:00
2018-04-05 10:53:40 +00:00
2019-09-26 18:47:12 +00:00
2020-04-19 07:51:23 +00:00
2020-04-19 07:51:23 +00:00
2017-04-24 12:37:49 +00:00
2020-05-07 17:50:24 +00:00
2017-04-24 12:37:49 +00:00
2014-08-06 17:02:55 -04:00
2018-05-08 21:15:16 +00:00
2014-10-27 18:59:02 -04:00
2017-09-03 14:29:38 +00:00
2016-03-17 00:38:15 +00:00
2017-10-12 20:50:20 +00:00
2012-10-07 23:22:01 +02:00
2016-05-02 13:43:18 +00:00
2017-10-12 20:50:20 +00:00
2018-04-06 15:39:11 +00:00
2013-02-11 18:20:52 -05:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2013-02-12 13:17:49 -05:00
2016-05-02 13:43:18 +00:00
2019-05-11 03:02:33 +00:00
2018-11-26 14:13:53 +00:00
2016-05-02 13:43:18 +00:00
2018-11-27 15:36:08 +00:00
2018-11-26 14:13:53 +00:00
2018-11-26 14:13:53 +00:00
2018-11-26 14:13:53 +00:00
2018-11-26 14:13:53 +00:00
2020-04-07 21:51:03 +00:00
2016-10-15 17:58:14 +00:00
2018-12-05 21:54:54 +00:00
2018-11-02 19:53:59 +00:00
2020-04-03 21:43:52 +00:00
2016-10-25 22:28:40 +00:00
2019-09-08 17:28:20 +00:00
2018-04-30 19:39:18 +00:00
2016-09-13 20:06:13 +00:00
2018-05-31 17:36:45 +00:00
2017-09-26 04:08:38 +00:00
2018-05-31 17:36:45 +00:00
2020-02-26 13:11:53 +00:00
2017-09-12 05:50:54 +00:00
2018-03-03 19:52:00 +00:00
2016-05-02 13:43:18 +00:00
2019-09-03 20:41:29 +00:00
2016-05-02 13:43:18 +00:00
2018-01-10 01:35:45 +00:00
2017-04-24 12:37:49 +00:00
2016-05-02 13:43:18 +00:00
2016-03-11 21:19:20 +00:00
2016-03-11 21:19:20 +00:00
2016-03-11 21:19:20 +00:00
2016-03-11 22:07:02 +00:00
2020-04-19 03:12:32 +00:00
2020-04-19 03:12:32 +00:00
2019-09-06 23:15:48 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2017-02-11 21:46:21 +00:00
2018-03-01 21:11:16 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2020-03-25 14:19:25 +00:00
2016-05-02 13:43:18 +00:00
2017-03-01 01:06:32 +00:00
2019-09-06 23:15:48 +00:00
2016-05-02 13:43:18 +00:00
2018-05-31 17:36:45 +00:00
2019-11-18 14:40:07 +00:00
2018-12-03 16:48:21 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2018-03-08 22:25:25 +00:00
2018-10-03 19:54:29 +00:00
2018-10-03 19:54:16 +00:00
2018-10-03 19:54:16 +00:00
2018-06-12 19:10:34 +00:00
2019-09-08 17:28:20 +00:00
2013-12-12 17:17:02 -08:00
2012-08-08 14:01:23 -07:00
2016-05-02 13:43:18 +00:00
2016-08-19 01:10:21 +00:00
2012-08-03 21:47:26 +02:00
2013-03-15 00:35:09 -04:00
2018-10-16 21:54:35 +00:00
2017-02-02 17:36:43 +00:00
2017-05-19 18:11:51 +00:00
2013-03-15 00:35:09 -04:00
2015-11-03 18:57:18 +00:00
2014-07-01 09:20:51 +02:00
2020-04-17 13:30:49 +00:00
2015-09-06 23:50:51 +00:00
2019-09-11 23:33:11 +00:00
2019-10-28 23:34:13 +00:00
2018-10-04 00:49:49 +00:00
2019-11-05 00:26:30 +00:00
2019-11-05 00:26:30 +00:00
2016-07-06 20:48:41 +00:00
2016-05-02 13:43:18 +00:00
2016-05-02 13:43:18 +00:00
2020-03-22 08:42:38 +00:00
2020-04-14 17:34:31 +00:00
2016-12-23 17:35:24 +00:00