· 5 years ago · Mar 11, 2020, 11:30 AM
1https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92398
2commit r9-8357-g85c08558c66dd8e2000a4ad282ca03368028fce3
3Author: Xionghu Luo <luoxhu@linux.ibm.com>
4Date: Mon Mar 9 20:25:20 2020 -0500
5
6 Backport to gcc-9: PR92398: Fix testcase failure of pr72804.c
7
8 Backport the patch to fix failures on P9 and P8BE, P7LE for PR94036.
9 Tested pass on P9/P8/P7.
10 (gcc-8 is not needed as the test doesn't exists.)
11
12 P9LE generated instruction is not worse than P8LE.
13 mtvsrdd;xxlnot;stxv vs. not;not;std;std.
14 It can have longer latency, but latency via memory is not so critical,
15 and this does save decode and other resources. It's hard to choose
16 which is best. Update the test case to fix failures.
17
18 gcc/testsuite/ChangeLog:
19
20 2020-03-10 Luo Xiong Hu <luoxhu@linux.ibm.com>
21
22 backport from master.
23 PR testsuite/94036
24
25 2019-12-02 Luo Xiong Hu <luoxhu@linux.ibm.com>
26
27 PR testsuite/92398
28 * gcc.target/powerpc/pr72804.c: Split the store function to...
29 * gcc.target/powerpc/pr92398.h: ... this one. New.
30 * gcc.target/powerpc/pr92398.p9+.c: New.
31 * gcc.target/powerpc/pr92398.p9-.c: New.
32 * lib/target-supports.exp (check_effective_target_p8): New.
33 (check_effective_target_p9+): New.
34https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94036
35commit r9-8357-g85c08558c66dd8e2000a4ad282ca03368028fce3
36Author: Xionghu Luo <luoxhu@linux.ibm.com>
37Date: Mon Mar 9 20:25:20 2020 -0500
38
39 Backport to gcc-9: PR92398: Fix testcase failure of pr72804.c
40
41 Backport the patch to fix failures on P9 and P8BE, P7LE for PR94036.
42 Tested pass on P9/P8/P7.
43 (gcc-8 is not needed as the test doesn't exists.)
44
45 P9LE generated instruction is not worse than P8LE.
46 mtvsrdd;xxlnot;stxv vs. not;not;std;std.
47 It can have longer latency, but latency via memory is not so critical,
48 and this does save decode and other resources. It's hard to choose
49 which is best. Update the test case to fix failures.
50
51 gcc/testsuite/ChangeLog:
52
53 2020-03-10 Luo Xiong Hu <luoxhu@linux.ibm.com>
54
55 backport from master.
56 PR testsuite/94036
57
58 2019-12-02 Luo Xiong Hu <luoxhu@linux.ibm.com>
59
60 PR testsuite/92398
61 * gcc.target/powerpc/pr72804.c: Split the store function to...
62 * gcc.target/powerpc/pr92398.h: ... this one. New.
63 * gcc.target/powerpc/pr92398.p9+.c: New.
64 * gcc.target/powerpc/pr92398.p9-.c: New.
65 * lib/target-supports.exp (check_effective_target_p8): New.
66 (check_effective_target_p9+): New.
67https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94124
68commit r10-7117-ge11d05c1ed26257493130762a8ae240f1bc06e87
69Author: Marek Polacek <polacek@redhat.com>
70Date: Tue Mar 10 18:55:42 2020 -0400
71
72 c++: Fix wrong conversion error with non-viable overload [PR94124]
73
74 This is a bad interaction between sharing a constructor for an array
75 and stripping its trailing zero-initializers. Here we reuse a ctor
76 and then strip its 0s. This breaks overload resolution in this test:
77 D can be initialized from {} but not from {0}, so if we truncate the
78 constructor not to include the zero, the F(D) overload becomes valid
79 and then we get the ambiguous conversion error.
80
81 PR c++/94124 - wrong conversion error with non-viable overload.
82 * decl.c (reshape_init_array_1): Unshare a constructor if we
83 stripped trailing zero-initializers.
84
85 * g++.dg/cpp0x/initlist-overload1.C: New test.
86https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93956
87commit r10-7115-gdf15a82804e1f7f4a7432670b33387779de46549
88Author: Jason Merrill <jason@redhat.com>
89Date: Tue Mar 10 17:51:46 2020 -0400
90
91 c++: Fix ICE with omitted template args [PR93956].
92
93 reshape_init only wants to work on BRACE_ENCLOSED_INITIALIZER_P, i.e. raw
94 initializer lists, and here was getting a CONSTRUCTOR that had already been
95 processed for type A<int>. maybe_aggr_guide should also use that test.
96
97 gcc/cp/ChangeLog
98 2020-03-10 Jason Merrill <jason@redhat.com>
99
100 PR c++/93956
101 * pt.c (maybe_aggr_guide): Check BRACE_ENCLOSED_INITIALIZER_P.
102https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93709
103commit r10-7114-g37e0df8a9be5a8232f4ccb73cdadb02121ba523f
104Author: Jiufu Guo <guojiufu@linux.ibm.com>
105Date: Tue Mar 10 13:51:57 2020 +0800
106
107 rs6000: Check -+0 and NaN for smax/smin generation
108
109 PR93709 mentioned regressions on maxlocval_4.f90 and minlocval_f.f90 which
110 relates to max of '-inf' and 'nan'. This regression occur on P9 because
111 P9 new instruction 'xsmaxcdp' is generated.
112 And for C code `a < b ? b : a` is also generated as `xsmaxcdp` under -O2
113 for P9. While this instruction behavior more like C/C++ semantic (a>b?a:b).
114
115 This generates prevents 'xsmaxcdp' to be generated for those cases.
116 'xsmincdp' also is handled in patch.
117
118 gcc/
119 2020-03-10 Jiufu Guo <guojiufu@linux.ibm.com>
120
121 PR target/93709
122 * gcc/config/rs6000/rs6000.c (rs6000_emit_p9_fp_minmax): Check
123 NAN and SIGNED_ZEROR for smax/smin.
124
125 gcc/testsuite
126 2020-03-10 Jiufu Guo <guojiufu@linux.ibm.com>
127
128 PR target/93709
129 * gcc.target/powerpc/p9-minmax-3.c: New test.
130https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90763
131commit r10-7109-ge00cb200f39d8144de226e76c5d0257b613dbbf6
132Author: Will Schmidt <will_schmidt@vnet.ibm.com>
133Date: Tue Mar 10 14:38:13 2020 -0500
134
135 PR90763: PowerPC vec_xl_len should take const argument.
136
137 PR target/90763
138 * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Add
139 clause to handle P9V_BUILTIN_VEC_LXVL with const arguments.
140
141 * gcc.target/powerpc/pr90763.c: New.
142https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94117
143commit r10-7103-gc222eabcf8be0e3f644e4bd4c3316b40dba4b514
144Author: Jonathan Wakely <jwakely@redhat.com>
145Date: Tue Mar 10 10:50:40 2020 +0000
146
147 libstdc++: Fix invalid noexcept-specifier (PR 94117)
148
149 G++ fails to diagnose this non-dependent expression, but Clang doesn't
150 like it.
151
152 PR c++/94117
153 * include/std/ranges (ranges::transform_view::_Iterator::iter_move):
154 Change expression in noexcept-specifier to match function body.
155https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91465
156commit r10-7096-gd417b4f5414d9076300ab41974a14424f722688c
157Author: Marek Polacek <polacek@redhat.com>
158Date: Fri Feb 28 16:57:04 2020 -0500
159
160 c++: Fix convert_like in template [PR91465, PR93870, PR92031, PR94068]
161
162 The point of this patch is to fix the recurring problem of trees
163 generated by convert_like while processing a template that break when
164 substituting. For instance, when convert_like creates a CALL_EXPR
165 while in a template, substituting such a call breaks in finish_call_expr
166 because we have two 'this' arguments. Another problem is that we
167 can create &TARGET_EXPR<> and then fail when substituting because we're
168 taking the address of an rvalue. I've analyzed some of the already fixed
169 PRs and also some of the currently open ones:
170
171 In c++/93870 we create EnumWrapper<E>::operator E(&operator~(E)).
172 In c++/87145 we create S::operator int (&{N}).
173 In c++/92031 we create &TARGET_EXPR <0>.
174
175 The gist of the problem is when convert_like_real creates a call for
176 a ck_user or wraps a TARGET_EXPR in & in a template. So in these cases
177 use IMPLICIT_CONV_EXPR. In a template we shouldn't need to perform the
178 actual conversion, we only need it's result type.
179 perform_direct_initialization_if_possible and
180 perform_implicit_conversion_flags can also create an IMPLICIT_CONV_EXPR.
181
182 Given the change above, build_converted_constant_expr can return an
183 IMPLICIT_CONV_EXPR so call fold_non_dependent_expr rather than
184 maybe_constant_value to deal with that.
185
186 To avoid the problem of instantiating something twice in a row I'm
187 removing a call to instantiate_non_dependent_expr_sfinae in
188 compute_array_index_type_loc. And the build_converted_constant_expr
189 pattern can now be simplified.
190
191 2020-03-09 Marek Polacek <polacek@redhat.com>
192
193 PR c++/92031 - bogus taking address of rvalue error.
194 PR c++/91465 - ICE with template codes in check_narrowing.
195 PR c++/93870 - wrong error when converting template non-type arg.
196 PR c++/94068 - ICE with template codes in check_narrowing.
197 * call.c (convert_like_real): Return IMPLICIT_CONV_EXPR
198 in a template when not ck_identity and we're dealing with a class.
199 (convert_like_real) <case ck_ref_bind>: Return IMPLICIT_CONV_EXPR
200 in a template if we need a temporary.
201 * decl.c (compute_array_index_type_loc): Remove
202 instantiate_non_dependent_expr_sfinae call. Call
203 fold_non_dependent_expr instead of maybe_constant_value.
204 (build_explicit_specifier): Don't instantiate or create a sentinel
205 before converting the expression.
206 * except.c (build_noexcept_spec): Likewise.
207 * pt.c (convert_nontype_argument): Don't build IMPLICIT_CONV_EXPR.
208 Set IMPLICIT_CONV_EXPR_NONTYPE_ARG if that's what
209 build_converted_constant_expr returned.
210 * typeck2.c (check_narrowing): Call fold_non_dependent_expr instead
211 of maybe_constant_value.
212
213 * g++.dg/cpp0x/conv-tmpl2.C: New test.
214 * g++.dg/cpp0x/conv-tmpl3.C: New test.
215 * g++.dg/cpp0x/conv-tmpl4.C: New test.
216 * g++.dg/cpp0x/conv-tmpl5.C: New test.
217 * g++.dg/cpp0x/conv-tmpl6.C: New test.
218 * g++.dg/cpp1z/conv-tmpl1.C: New test.
219https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92031
220commit r10-7096-gd417b4f5414d9076300ab41974a14424f722688c
221Author: Marek Polacek <polacek@redhat.com>
222Date: Fri Feb 28 16:57:04 2020 -0500
223
224 c++: Fix convert_like in template [PR91465, PR93870, PR92031, PR94068]
225
226 The point of this patch is to fix the recurring problem of trees
227 generated by convert_like while processing a template that break when
228 substituting. For instance, when convert_like creates a CALL_EXPR
229 while in a template, substituting such a call breaks in finish_call_expr
230 because we have two 'this' arguments. Another problem is that we
231 can create &TARGET_EXPR<> and then fail when substituting because we're
232 taking the address of an rvalue. I've analyzed some of the already fixed
233 PRs and also some of the currently open ones:
234
235 In c++/93870 we create EnumWrapper<E>::operator E(&operator~(E)).
236 In c++/87145 we create S::operator int (&{N}).
237 In c++/92031 we create &TARGET_EXPR <0>.
238
239 The gist of the problem is when convert_like_real creates a call for
240 a ck_user or wraps a TARGET_EXPR in & in a template. So in these cases
241 use IMPLICIT_CONV_EXPR. In a template we shouldn't need to perform the
242 actual conversion, we only need it's result type.
243 perform_direct_initialization_if_possible and
244 perform_implicit_conversion_flags can also create an IMPLICIT_CONV_EXPR.
245
246 Given the change above, build_converted_constant_expr can return an
247 IMPLICIT_CONV_EXPR so call fold_non_dependent_expr rather than
248 maybe_constant_value to deal with that.
249
250 To avoid the problem of instantiating something twice in a row I'm
251 removing a call to instantiate_non_dependent_expr_sfinae in
252 compute_array_index_type_loc. And the build_converted_constant_expr
253 pattern can now be simplified.
254
255 2020-03-09 Marek Polacek <polacek@redhat.com>
256
257 PR c++/92031 - bogus taking address of rvalue error.
258 PR c++/91465 - ICE with template codes in check_narrowing.
259 PR c++/93870 - wrong error when converting template non-type arg.
260 PR c++/94068 - ICE with template codes in check_narrowing.
261 * call.c (convert_like_real): Return IMPLICIT_CONV_EXPR
262 in a template when not ck_identity and we're dealing with a class.
263 (convert_like_real) <case ck_ref_bind>: Return IMPLICIT_CONV_EXPR
264 in a template if we need a temporary.
265 * decl.c (compute_array_index_type_loc): Remove
266 instantiate_non_dependent_expr_sfinae call. Call
267 fold_non_dependent_expr instead of maybe_constant_value.
268 (build_explicit_specifier): Don't instantiate or create a sentinel
269 before converting the expression.
270 * except.c (build_noexcept_spec): Likewise.
271 * pt.c (convert_nontype_argument): Don't build IMPLICIT_CONV_EXPR.
272 Set IMPLICIT_CONV_EXPR_NONTYPE_ARG if that's what
273 build_converted_constant_expr returned.
274 * typeck2.c (check_narrowing): Call fold_non_dependent_expr instead
275 of maybe_constant_value.
276
277 * g++.dg/cpp0x/conv-tmpl2.C: New test.
278 * g++.dg/cpp0x/conv-tmpl3.C: New test.
279 * g++.dg/cpp0x/conv-tmpl4.C: New test.
280 * g++.dg/cpp0x/conv-tmpl5.C: New test.
281 * g++.dg/cpp0x/conv-tmpl6.C: New test.
282 * g++.dg/cpp1z/conv-tmpl1.C: New test.
283https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93870
284commit r10-7096-gd417b4f5414d9076300ab41974a14424f722688c
285Author: Marek Polacek <polacek@redhat.com>
286Date: Fri Feb 28 16:57:04 2020 -0500
287
288 c++: Fix convert_like in template [PR91465, PR93870, PR92031, PR94068]
289
290 The point of this patch is to fix the recurring problem of trees
291 generated by convert_like while processing a template that break when
292 substituting. For instance, when convert_like creates a CALL_EXPR
293 while in a template, substituting such a call breaks in finish_call_expr
294 because we have two 'this' arguments. Another problem is that we
295 can create &TARGET_EXPR<> and then fail when substituting because we're
296 taking the address of an rvalue. I've analyzed some of the already fixed
297 PRs and also some of the currently open ones:
298
299 In c++/93870 we create EnumWrapper<E>::operator E(&operator~(E)).
300 In c++/87145 we create S::operator int (&{N}).
301 In c++/92031 we create &TARGET_EXPR <0>.
302
303 The gist of the problem is when convert_like_real creates a call for
304 a ck_user or wraps a TARGET_EXPR in & in a template. So in these cases
305 use IMPLICIT_CONV_EXPR. In a template we shouldn't need to perform the
306 actual conversion, we only need it's result type.
307 perform_direct_initialization_if_possible and
308 perform_implicit_conversion_flags can also create an IMPLICIT_CONV_EXPR.
309
310 Given the change above, build_converted_constant_expr can return an
311 IMPLICIT_CONV_EXPR so call fold_non_dependent_expr rather than
312 maybe_constant_value to deal with that.
313
314 To avoid the problem of instantiating something twice in a row I'm
315 removing a call to instantiate_non_dependent_expr_sfinae in
316 compute_array_index_type_loc. And the build_converted_constant_expr
317 pattern can now be simplified.
318
319 2020-03-09 Marek Polacek <polacek@redhat.com>
320
321 PR c++/92031 - bogus taking address of rvalue error.
322 PR c++/91465 - ICE with template codes in check_narrowing.
323 PR c++/93870 - wrong error when converting template non-type arg.
324 PR c++/94068 - ICE with template codes in check_narrowing.
325 * call.c (convert_like_real): Return IMPLICIT_CONV_EXPR
326 in a template when not ck_identity and we're dealing with a class.
327 (convert_like_real) <case ck_ref_bind>: Return IMPLICIT_CONV_EXPR
328 in a template if we need a temporary.
329 * decl.c (compute_array_index_type_loc): Remove
330 instantiate_non_dependent_expr_sfinae call. Call
331 fold_non_dependent_expr instead of maybe_constant_value.
332 (build_explicit_specifier): Don't instantiate or create a sentinel
333 before converting the expression.
334 * except.c (build_noexcept_spec): Likewise.
335 * pt.c (convert_nontype_argument): Don't build IMPLICIT_CONV_EXPR.
336 Set IMPLICIT_CONV_EXPR_NONTYPE_ARG if that's what
337 build_converted_constant_expr returned.
338 * typeck2.c (check_narrowing): Call fold_non_dependent_expr instead
339 of maybe_constant_value.
340
341 * g++.dg/cpp0x/conv-tmpl2.C: New test.
342 * g++.dg/cpp0x/conv-tmpl3.C: New test.
343 * g++.dg/cpp0x/conv-tmpl4.C: New test.
344 * g++.dg/cpp0x/conv-tmpl5.C: New test.
345 * g++.dg/cpp0x/conv-tmpl6.C: New test.
346 * g++.dg/cpp1z/conv-tmpl1.C: New test.
347https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94068
348commit r10-7096-gd417b4f5414d9076300ab41974a14424f722688c
349Author: Marek Polacek <polacek@redhat.com>
350Date: Fri Feb 28 16:57:04 2020 -0500
351
352 c++: Fix convert_like in template [PR91465, PR93870, PR92031, PR94068]
353
354 The point of this patch is to fix the recurring problem of trees
355 generated by convert_like while processing a template that break when
356 substituting. For instance, when convert_like creates a CALL_EXPR
357 while in a template, substituting such a call breaks in finish_call_expr
358 because we have two 'this' arguments. Another problem is that we
359 can create &TARGET_EXPR<> and then fail when substituting because we're
360 taking the address of an rvalue. I've analyzed some of the already fixed
361 PRs and also some of the currently open ones:
362
363 In c++/93870 we create EnumWrapper<E>::operator E(&operator~(E)).
364 In c++/87145 we create S::operator int (&{N}).
365 In c++/92031 we create &TARGET_EXPR <0>.
366
367 The gist of the problem is when convert_like_real creates a call for
368 a ck_user or wraps a TARGET_EXPR in & in a template. So in these cases
369 use IMPLICIT_CONV_EXPR. In a template we shouldn't need to perform the
370 actual conversion, we only need it's result type.
371 perform_direct_initialization_if_possible and
372 perform_implicit_conversion_flags can also create an IMPLICIT_CONV_EXPR.
373
374 Given the change above, build_converted_constant_expr can return an
375 IMPLICIT_CONV_EXPR so call fold_non_dependent_expr rather than
376 maybe_constant_value to deal with that.
377
378 To avoid the problem of instantiating something twice in a row I'm
379 removing a call to instantiate_non_dependent_expr_sfinae in
380 compute_array_index_type_loc. And the build_converted_constant_expr
381 pattern can now be simplified.
382
383 2020-03-09 Marek Polacek <polacek@redhat.com>
384
385 PR c++/92031 - bogus taking address of rvalue error.
386 PR c++/91465 - ICE with template codes in check_narrowing.
387 PR c++/93870 - wrong error when converting template non-type arg.
388 PR c++/94068 - ICE with template codes in check_narrowing.
389 * call.c (convert_like_real): Return IMPLICIT_CONV_EXPR
390 in a template when not ck_identity and we're dealing with a class.
391 (convert_like_real) <case ck_ref_bind>: Return IMPLICIT_CONV_EXPR
392 in a template if we need a temporary.
393 * decl.c (compute_array_index_type_loc): Remove
394 instantiate_non_dependent_expr_sfinae call. Call
395 fold_non_dependent_expr instead of maybe_constant_value.
396 (build_explicit_specifier): Don't instantiate or create a sentinel
397 before converting the expression.
398 * except.c (build_noexcept_spec): Likewise.
399 * pt.c (convert_nontype_argument): Don't build IMPLICIT_CONV_EXPR.
400 Set IMPLICIT_CONV_EXPR_NONTYPE_ARG if that's what
401 build_converted_constant_expr returned.
402 * typeck2.c (check_narrowing): Call fold_non_dependent_expr instead
403 of maybe_constant_value.
404
405 * g++.dg/cpp0x/conv-tmpl2.C: New test.
406 * g++.dg/cpp0x/conv-tmpl3.C: New test.
407 * g++.dg/cpp0x/conv-tmpl4.C: New test.
408 * g++.dg/cpp0x/conv-tmpl5.C: New test.
409 * g++.dg/cpp0x/conv-tmpl6.C: New test.
410 * g++.dg/cpp1z/conv-tmpl1.C: New test.
411https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94063
412commit r10-7095-gea182fe63634bb5b7913b3f1b6846e1900c5e0c4
413Author: Jonathan Wakely <jwakely@redhat.com>
414Date: Mon Mar 9 23:22:57 2020 +0000
415
416 libstdc++: Handle type-changing path concatenations (PR 94063)
417
418 The filesystem::path::operator+= and filesystem::path::concat functions
419 operate directly on the native format of the path and so can cause a
420 path to mutate to a completely different type.
421
422 For Windows combining a filename "x" with a filename ":" produces a
423 root-name "x:". Similarly, a Cygwin root-directory "/" combined with a
424 root-directory and filename "/x" produces a root-name "//x".
425
426 Before this patch the implemenation didn't support those kind of
427 mutations, assuming that concatenating two filenames would always
428 produce a filename and concatenating with a root-dir would still have a
429 root-dir.
430
431 This patch fixes it simply by checking for the problem cases and
432 creating a new path by re-parsing the result of the string
433 concatenation. This is slightly suboptimal because the argument has
434 already been parsed if it's a path, but more importantly it doesn't
435 reuse any excess capacity that the path object being modified might
436 already have allocated. That can be fixed later though.
437
438 PR libstdc++/94063
439 * src/c++17/fs_path.cc (path::operator+=(const path&)): Add kluge to
440 handle concatenations that change the type of the first component.
441 (path::operator+=(basic_string_view<value_type>)): Likewise.
442 * testsuite/27_io/filesystem/path/concat/94063.cc: New test.
443https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93564
444commit r10-7093-g5dc1390b41db5c1765e25fd21dad1a930a015aac
445Author: Vladimir N. Makarov <vmakarov@redhat.com>
446Date: Mon Mar 9 14:05:09 2020 -0400
447
448 Revert: One more patch for PR93564: Prefer smaller hard regno when we do not honor reg alloc order.
449
450 2020-03-09 Vladimir Makarov <vmakarov@redhat.com>
451
452 Revert:
453
454 2020-02-28 Vladimir Makarov <vmakarov@redhat.com>
455
456 PR rtl-optimization/93564
457 * ira-color.c (assign_hard_reg): Prefer smaller hard regno when we
458 do not honor reg alloc order.
459https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94095
460commit r10-7092-ga931bb50fe77446058166b50eea4e53223ad7ef7
461Author: Andrew Pinski <apinski@marvell.com>
462Date: Mon Mar 9 09:45:23 2020 -0700
463
464 Fix 'A' operand modifier: PR inline-asm/94095
465
466 The problem here is there was a typo in the documentation
467 for the 'A' modifier in the table, it was recorded as 'a'
468 in the table on the modifier column.
469
470 Committed as obvious.
471
472 2020-03-09 Andrew Pinski <apinski@marvell.com>
473
474 PR inline-asm/94095
475 * doc/extend.texi (x86 Operand Modifiers): Fix column
476 for 'A' modifier.
477https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94019
478commit r10-7084-gcb2c60206f4f2218f84ccde21663b00de068d8c7
479Author: Kewen Lin <linkw@linux.ibm.com>
480Date: Sun Mar 8 21:55:11 2020 -0500
481
482 [testsuite] Fix PR94019 to check vector char when vect_hw_misalign
483
484 As PR94019 shows, without misaligned vector access support but with
485 realign load, the vectorized loop will end up with realign scheme.
486 It generates mask (control vector) with return type vector signed
487 char which breaks the not check.
488
489 gcc/testsuite/ChangeLog
490
491 2020-03-09 Kewen Lin <linkw@gcc.gnu.org>
492
493 PR testsuite/94019
494 * gcc.dg/vect/vect-over-widen-17.c: Don't expect vector char if
495 it's without misaligned vector access support.
496https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94023
497commit r10-7083-gd5114529228f97c2a433fa72ddea3fadeb6465b3
498Author: Kewen Lin <linkw@linux.ibm.com>
499Date: Sun Mar 8 21:34:13 2020 -0500
500
501 [testsuite] Fix PR94023 to guard case under vect_hw_misalign
502
503 As PR94023 shows, the expected SLP requires misaligned vector access
504 support. This patch is to guard the check under the target condition
505 vect_hw_misalign to ensure that.
506
507 gcc/testsuite/ChangeLog
508
509 2020-03-09 Kewen Lin <linkw@gcc.gnu.org>
510
511 PR testsuite/94023
512 * gcc.dg/vect/slp-perm-12.c: Expect loop vectorized messages only on
513 vect_hw_misalign targets.
514https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93729
515commit r10-7080-g5e1b4e60c1823115ba7ff0e8c4b35f6058ad9969
516Author: Patrick Palka <ppalka@redhat.com>
517Date: Tue Mar 3 12:27:33 2020 -0500
518
519 c++: Fix missing SFINAE when binding a bit-field to a reference (PR 93729)
520
521 We are unconditionally emitting an error here, without first checking complain.
522
523 gcc/cp/ChangeLog:
524
525 PR c++/93729
526 * call.c (convert_like_real): Check complain before emitting an error
527 about binding a bit-field to a reference.
528
529 gcc/testsuite/ChangeLog:
530
531 PR c++/93729
532 * g++.dg/concepts/pr93729.C: New test.
533https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89229
534commit r10-7078-g6733ecaf3fe77871d86bfb36bcda5497ae2aaba7
535Author: H.J. Lu <hjl.tools@gmail.com>
536Date: Sun Mar 8 05:01:03 2020 -0700
537
538 gcc.target/i386/pr89229-3c.c: Include "pr89229-3a.c"
539
540 PR target/89229
541 PR target/89346
542 * gcc.target/i386/pr89229-3c.c: Include "pr89229-3a.c", instead
543 of "pr89229-5a.c".
544https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89346
545commit r10-7078-g6733ecaf3fe77871d86bfb36bcda5497ae2aaba7
546Author: H.J. Lu <hjl.tools@gmail.com>
547Date: Sun Mar 8 05:01:03 2020 -0700
548
549 gcc.target/i386/pr89229-3c.c: Include "pr89229-3a.c"
550
551 PR target/89229
552 PR target/89346
553 * gcc.target/i386/pr89229-3c.c: Include "pr89229-3a.c", instead
554 of "pr89229-5a.c".
555https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94027
556commit r10-7074-g191bcd0f30dd37dec773efb0125afdcae9bd90ef
557Author: Nathan Sidwell <nathan@acm.org>
558Date: Fri Mar 6 10:51:26 2020 -0800
559
560 Fix mangling ICE [PR94027]
561
562 PR c++/94027
563 * mangle.c (find_substitution): Don't call same_type_p on template
564 args that cannot match.
565
566 Now same_type_p rejects argument packs, we need to be more careful
567 calling it with template argument vector contents.
568
569 The mangler needs to do some comparisons to find the special
570 substitutions. While that code looks a little ugly, this seems the
571 smallest fix.
572https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91598
573commit r10-7073-g0b8393221177617f19e7c5c5c692b8c59f85fffb
574Author: Wilco Dijkstra <wdijkstr@arm.com>
575Date: Fri Mar 6 18:29:02 2020 +0000
576
577 [AArch64] Use intrinsics for widening multiplies (PR91598)
578
579 Inline assembler instructions don't have latency info and the scheduler does
580 not attempt to schedule them at all - it does not even honor latencies of
581 asm source operands. As a result, SIMD intrinsics which are implemented using
582 inline assembler perform very poorly, particularly on in-order cores.
583 Add new patterns and intrinsics for widening multiplies, which results in a
584 63% speedup for the example in the PR, thus fixing the reported regression.
585
586 gcc/
587 PR target/91598
588 * config/aarch64/aarch64-builtins.c (TYPES_TERNOPU_LANE): Add define.
589 * config/aarch64/aarch64-simd.md
590 (aarch64_vec_<su>mult_lane<Qlane>): Add new insn for widening lane mul.
591 (aarch64_vec_<su>mlal_lane<Qlane>): Likewise.
592 * config/aarch64/aarch64-simd-builtins.def: Add intrinsics.
593 * config/aarch64/arm_neon.h:
594 (vmlal_lane_s16): Expand using intrinsics rather than inline asm.
595 (vmlal_lane_u16): Likewise.
596 (vmlal_lane_s32): Likewise.
597 (vmlal_lane_u32): Likewise.
598 (vmlal_laneq_s16): Likewise.
599 (vmlal_laneq_u16): Likewise.
600 (vmlal_laneq_s32): Likewise.
601 (vmlal_laneq_u32): Likewise.
602 (vmull_lane_s16): Likewise.
603 (vmull_lane_u16): Likewise.
604 (vmull_lane_s32): Likewise.
605 (vmull_lane_u32): Likewise.
606 (vmull_laneq_s16): Likewise.
607 (vmull_laneq_u16): Likewise.
608 (vmull_laneq_s32): Likewise.
609 (vmull_laneq_u32): Likewise.
610 * config/aarch64/iterators.md (Vcondtype): New iterator for lane mul.
611 (Qlane): Likewise.