Commit Graph

162517 Commits

Author SHA1 Message Date
Nathan Sidwell
42a98b43bb Reorg line_map data structures for better packing.
* include/line-map.h (enum lc_reason): Add LC_HWM.
	(LINE_MAP_MAX_LOCATION): Define here.
	(struct line_map): Move reason field to line_map_ordinary.  Adjust
	GTY tagging.
	(struct line_map_ordinary): Reorder fields for less padding.
	(struct line_map_macro): Likewise.
	(MAP_ORDINARY_P): New.
	(linemap_check_ordinary, linemap_check_macro): Adjust.
	* line-map.c (LINE_MAP_MAX_SOURCE_LOCATION): Delete.
	(new_linemap): Take start_location, not reason.  Adjust.
	(linemap_add, linemap_enter_macro): Adjust.
	(linemap_line_start): Likewise.
	(linemap_macro_expansion_map_p): Use MAP_ORDINARY_P.
	(linemap_macro_loc_to_spelling_point): Likewise.
	(linemap_macro_loc_to_def_point): Likewise.
	(linemap_dump): Likewise.

From-SVN: r262348
2018-07-03 14:47:11 +00:00
Richard Sandiford
42addb5adf [17/n] PR85694: AArch64 support for AVG_FLOOR/CEIL
This patch adds AArch64 patterns for the new AVG_FLOOR/CEIL operations.
AVG_FLOOR is [SU]HADD and AVG_CEIL is [SU]RHADD.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR tree-optimization/85694
	* config/aarch64/iterators.md (HADD, RHADD): New int iterators.
	(u): Handle UNSPEC_SHADD, UNSPEC_UHADD, UNSPEC_SRHADD and
	UNSPEC_URHADD.
	* config/aarch64/aarch64-simd.md (<u>avg<mode>3_floor)
	(<u>avg<mode>3_ceil): New patterns.

gcc/testsuite/
	PR tree-optimization/85694
	* lib/target-supports.exp (check_effective_target_vect_avg_qi):
	Return true for AArch64 without SVE.
	* gcc.target/aarch64/vect_hadd_1.h: New file.
	* gcc.target/aarch64/vect_shadd_1.c: New test.
	* gcc.target/aarch64/vect_srhadd_1.c: Likewise.
	* gcc.target/aarch64/vect_uhadd_1.c: Likewise.
	* gcc.target/aarch64/vect_urhadd_1.c: Likewise.

From-SVN: r262347
2018-07-03 14:27:28 +00:00
David Malcolm
25d861fef3 Remove "note: " prefix from some scan-tree-dump directives
gcc/testsuite/ChangeLog:
	* gcc.dg/vect/slp-perm-1.c: Remove "note: " prefix from
	scan-tree-dump directive.
	* gcc.dg/vect/slp-perm-2.c: Likewise.
	* gcc.dg/vect/slp-perm-3.c: Likewise.
	* gcc.dg/vect/slp-perm-5.c: Likewise.
	* gcc.dg/vect/slp-perm-6.c: Likewise.
	* gcc.dg/vect/slp-perm-7.c: Likewise.
	* gcc.dg/vect/slp-perm-8.c: Likewise.

From-SVN: r262346
2018-07-03 14:26:56 +00:00
Marek Polacek
a9ad62b699 re PR c++/84306 (Wrong overload selected with -std=c++17, explicit and {})
PR c++/84306
	* g++.dg/overload/conv-op3.C: New test.

From-SVN: r262345
2018-07-03 14:25:38 +00:00
Marek Polacek
3f27391f45 re PR middle-end/86202 (ICE in get_range_info calling an invalid memcpy() declaration)
PR middle-end/86202
	* gimple-fold.c (size_must_be_zero_p): Check the type of the size.

	* gcc.dg/Wint-conversion-2.c: New test.

From-SVN: r262344
2018-07-03 14:21:15 +00:00
Jason Merrill
2831d6814a PR c++/86378 - functional cast in noexcept-specifier.
* tree.c (strip_typedefs_expr) [TREE_LIST]: Fix iteration.

From-SVN: r262343
2018-07-03 10:13:02 -04:00
Jeff Law
a6bac46b65 h8300.md (HSI, [...]): New mode iterators.
* config/h8300/h8300.md (HSI, QHSI, QHSIF): New mode iterators.
	(shifts): New code iterator.
	(movqi, movhi, movsi, movsf expanders): Consolidate into a single
	expander.  Fix HImode handling on H8/SX.
	(addqi3, addhi3, addsi3 expanders): Consolidate into a single expander.
	(subqi3, subhi3, subsi3 expanders): Likewise.
	(andqi3, andhi3, andsi3 expanders): Likewise.
	(iorqi3, iorhi3, iorsi3 expanders): Likewise.
	(xorqi3, xorhi3, xorsi3 expanders): Likewise.
	(negqi2, neghi2, negsi2, negsf2 expanders): Likewise.
	(one_cmplqi2, one_cmplhi2, one_cmplsi2): Likewise.
	(zero_extendqihi2, zero_extendqisi2): Likewise.
	(extendqihi2, extendqisi2): Likewise.
	(rotlqi3, rotlhi3, rotlsi3): Likewise.
	(neghi2_h8300, negsi2_h8300): Likewise for these patterns.
	(rotlqi3_1, rotlhi3_1): Likewise.
	(logicalhi3_sn, logicalsi3_sn): Likewise.
	(logicalhi3, logicalsi3): Likewise.

From-SVN: r262342
2018-07-03 07:59:06 -06:00
Richard Biener
abee268202 re PR ipa/86389 (execute FAILs with -fipa-pta)
2018-07-03  Richard Biener  <rguenther@suse.de>

	PR ipa/86389
	* tree-ssa-structalias.c (find_func_clobbers): Properly
	handle indirect calls.

	* gcc.dg/torture/pr86389.c: New testcase.

From-SVN: r262341
2018-07-03 13:56:58 +00:00
Segher Boessenkool
d3435784e7 Remove powerpc-linux_paired from config-list.mk
The target has been removed, so we shouldn't try to build it.


	PR target/86382
	* contrib/config-list.mk: Remove powerpc-linux_paired.

From-SVN: r262340
2018-07-03 13:22:24 +02:00
Richard Sandiford
776bfceac8 Pass more vector types to append_pattern_def_seq
The PR85694 series added a vectype argument to append_pattern_def_seq.
This patch makes more callers use it.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (vect_recog_rotate_pattern)
	(vect_recog_vector_vector_shift_pattern, vect_recog_divmod_pattern)
	(vect_recog_mixed_size_cond_pattern, adjust_bool_pattern_cast)
	(adjust_bool_pattern, vect_recog_bool_pattern): Pass the vector
	type to append_pattern_def_seq instead of creating a stmt_vec_info
	directly.
	(build_mask_conversion): Likewise.  Remove vinfo argument.
	(vect_add_conversion_to_patterm): Likewise, renaming to...
	(vect_add_conversion_to_pattern): ...this.
	(vect_recog_mask_conversion_pattern): Update call to
	build_mask_conversion.  Pass the vector type to
	append_pattern_def_seq here too.
	(vect_recog_gather_scatter_pattern): Update call to
	vect_add_conversion_to_pattern.

From-SVN: r262338
2018-07-03 10:04:28 +00:00
Richard Sandiford
9c58fb7aa5 Ensure PATTERN_DEF_SEQ is empty before recognising patterns
Various recognisers set PATTERN_DEF_SEQ to null before adding
statements to it, but it should always be null at that point anyway.
This patch asserts for that in vect_pattern_recog_1 and removes
the redundant code.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (new_pattern_def_seq): Delete.
	(vect_recog_dot_prod_pattern, vect_recog_sad_pattern)
	(vect_recog_widen_op_pattern, vect_recog_over_widening_pattern)
	(vect_recog_rotate_pattern, vect_synth_mult_by_constant): Don't set
	STMT_VINFO_PATTERN_DEF_SEQ to null here.
	(vect_recog_pow_pattern, vect_recog_vector_vector_shift_pattern)
	(vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern): Use
	append_pattern_def_seq instead of new_pattern_def_seq.
	(vect_recog_divmod_pattern): Do both of the above.
	(vect_pattern_recog_1): Assert that STMT_VINO_PATTERN_DEF_SEQ
	is null.

From-SVN: r262337
2018-07-03 10:04:20 +00:00
Richard Sandiford
ba9728b034 Clean up interface to vector pattern recognisers
The PR85694 series removed the only cases in which a pattern recogniser
could attach patterns to more than one statement.  I think it would be
better to avoid adding any new instances of that, since it interferes
with the normal matching order.

This patch therefore switches the interface back to passing a single
statement instead of a vector.  It also gets rid of the clearing of
STMT_VINFO_RELATED_STMT on failure, since no recognisers use it now.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (vect_recog_dot_prod_pattern):
	(vect_recog_sad_pattern, vect_recog_widen_op_pattern)
	(vect_recog_widen_mult_pattern, vect_recog_pow_pattern):
	(vect_recog_widen_sum_pattern, vect_recog_over_widening_pattern)
	(vect_recog_average_pattern, vect_recog_cast_forwprop_pattern)
	(vect_recog_widen_shift_pattern, vect_recog_rotate_pattern)
	(vect_recog_vector_vector_shift_pattern, vect_synth_mult_by_constant)
	(vect_recog_mult_pattern, vect_recog_divmod_pattern)
	(vect_recog_mixed_size_cond_pattern, vect_recog_bool_pattern)
	(vect_recog_mask_conversion_pattern): Replace vec<gimple *>
	parameter with a single stmt_vec_info.
	(vect_recog_func_ptr): Likewise.
	(vect_recog_gather_scatter_pattern): Likewise, folding in...
	(vect_try_gather_scatter_pattern): ...this.
	(vect_pattern_recog_1): Remove stmts_to_replace and just pass
	the stmt_vec_info of the statement to be matched.  Don't clear
	STMT_VINFO_RELATED_STMT.
	(vect_pattern_recog): Update call accordingly.

From-SVN: r262336
2018-07-03 10:04:09 +00:00
Richard Sandiford
0267732bae [16/n] PR85694: Add detection of averaging operations
This patch adds detection of average instructions:

       a = (((wide) b + (wide) c) >> 1);
   --> a = (wide) .AVG_FLOOR (b, c);

       a = (((wide) b + (wide) c + 1) >> 1);
   --> a = (wide) .AVG_CEIL (b, c);

in cases where users of "a" need only the low half of the result,
making the cast to (wide) redundant.  The heavy lifting was done by
earlier patches.

This showed up another problem in vectorizable_call: if the call is a
pattern definition statement rather than the main pattern statement,
the type of vectorised call might be different from the type of the
original statement.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR tree-optimization/85694
	* doc/md.texi (avgM3_floor, uavgM3_floor, avgM3_ceil)
	(uavgM3_ceil): Document new optabs.
	* doc/sourcebuild.texi (vect_avg_qi): Document new target selector.
	* internal-fn.def (IFN_AVG_FLOOR, IFN_AVG_CEIL): New internal
	functions.
	* optabs.def (savg_floor_optab, uavg_floor_optab, savg_ceil_optab)
	(savg_ceil_optab): New optabs.
	* tree-vect-patterns.c (vect_recog_average_pattern): New function.
	(vect_vect_recog_func_ptrs): Add it.
	* tree-vect-stmts.c (vectorizable_call): Get the type of the zero
	constant directly from the associated lhs.

gcc/testsuite/
	PR tree-optimization/85694
	* lib/target-supports.exp (check_effective_target_vect_avg_qi): New
	proc.
	* gcc.dg/vect/vect-avg-1.c: New test.
	* gcc.dg/vect/vect-avg-2.c: Likewise.
	* gcc.dg/vect/vect-avg-3.c: Likewise.
	* gcc.dg/vect/vect-avg-4.c: Likewise.
	* gcc.dg/vect/vect-avg-5.c: Likewise.
	* gcc.dg/vect/vect-avg-6.c: Likewise.
	* gcc.dg/vect/vect-avg-7.c: Likewise.
	* gcc.dg/vect/vect-avg-8.c: Likewise.
	* gcc.dg/vect/vect-avg-9.c: Likewise.
	* gcc.dg/vect/vect-avg-10.c: Likewise.
	* gcc.dg/vect/vect-avg-11.c: Likewise.
	* gcc.dg/vect/vect-avg-12.c: Likewise.
	* gcc.dg/vect/vect-avg-13.c: Likewise.
	* gcc.dg/vect/vect-avg-14.c: Likewise.

From-SVN: r262335
2018-07-03 10:03:44 +00:00
Richard Sandiford
4ef79c960a [15/n] PR85694: Try to split existing casts in widened patterns
The main over-widening patch can introduce quite a few extra casts,
and in many cases those casts simply "tap into" an intermediate
point in an existing extension.  E.g. if we have:

    unsigned char a;
    int ax = (int) a;

and a later operation using ax is shortened to "unsigned short",
we would need:

    unsigned short ax' = (unsigned short) a;

The a->ax extension requires one set of unpacks to get to unsigned
short and another set of unpacks to get to int.  The first set are
then duplicated for ax'.  If both ax and ax' are needed, the a->ax'
extension would end up counting twice during cost calculations.

This patch rewrites the original:

    int ax = (int) a;

into a pattern:

    unsigned short ax' = (unsigned short) a;
    int ax = (int) ax';

so that each extension only counts once.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (vect_split_statement): New function.
	(vect_convert_input): Use it to try to split an existing cast.

gcc/testsuite/
	* gcc.dg/vect/vect-over-widen-5.c: Test that the extensions
	get split into two for use by the over-widening pattern.
	* gcc.dg/vect/vect-over-widen-6.c: Likewise.
	* gcc.dg/vect/vect-over-widen-7.c: Likewise.
	* gcc.dg/vect/vect-over-widen-8.c: Likewise.
	* gcc.dg/vect/vect-over-widen-9.c: Likewise.
	* gcc.dg/vect/vect-over-widen-10.c: Likewise.
	* gcc.dg/vect/vect-over-widen-11.c: Likewise.
	* gcc.dg/vect/vect-over-widen-12.c: Likewise.
	* gcc.dg/vect/vect-over-widen-13.c: Likewise.
	* gcc.dg/vect/vect-over-widen-14.c: Likewise.
	* gcc.dg/vect/vect-over-widen-15.c: Likewise.
	* gcc.dg/vect/vect-over-widen-16.c: Likewise.
	* gcc.dg/vect/vect-over-widen-22.c: New test.

From-SVN: r262334
2018-07-03 10:03:17 +00:00
Richard Sandiford
370c2ebe8f [14/n] PR85694: Rework overwidening detection
This patch is the main part of PR85694.  The aim is to recognise at least:

  signed char *a, *b, *c;
  ...
  for (int i = 0; i < 2048; i++)
    c[i] = (a[i] + b[i]) >> 1;

as an over-widening pattern, since the addition and shift can be done
on shorts rather than ints.  However, it ended up being a lot more
general than that.

The current over-widening pattern detection is limited to a few simple
cases: logical ops with immediate second operands, and shifts by a
constant.  These cases are enough for common pixel-format conversion
and can be detected in a peephole way.

The loop above requires two generalisations of the current code: support
for addition as well as logical ops, and support for non-constant second
operands.  These are harder to detect in the same peephole way, so the
patch tries to take a more global approach.

The idea is to get information about the minimum operation width
in two ways:

(1) by using the range information attached to the SSA_NAMEs
    (effectively a forward walk, since the range info is
    context-independent).

(2) by back-propagating the number of output bits required by
    users of the result.

As explained in the comments, there's a balance to be struck between
narrowing an individual operation and fitting in with the surrounding
code.  The approach is pretty conservative: if we could narrow an
operation to N bits without changing its semantics, it's OK to do that if:

- no operations later in the chain require more than N bits; or

- all internally-defined inputs are extended from N bits or fewer,
  and at least one of them is single-use.

See the comments for the rationale.

I didn't bother adding STMT_VINFO_* wrappers for the new fields
since the code seemed more readable without.

2018-06-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* poly-int.h (print_hex): New function.
	* dumpfile.h (dump_dec, dump_hex): Declare.
	* dumpfile.c (dump_dec, dump_hex): New poly_wide_int functions.
	* tree-vectorizer.h (_stmt_vec_info): Add min_output_precision,
	min_input_precision, operation_precision and operation_sign.
	* tree-vect-patterns.c (vect_get_range_info): New function.
	(vect_same_loop_or_bb_p, vect_single_imm_use)
	(vect_operation_fits_smaller_type): Delete.
	(vect_look_through_possible_promotion): Add an optional
	single_use_p parameter.
	(vect_recog_over_widening_pattern): Rewrite to use new
	stmt_vec_info infomration.  Handle one operation at a time.
	(vect_recog_cast_forwprop_pattern, vect_narrowable_type_p)
	(vect_truncatable_operation_p, vect_set_operation_type)
	(vect_set_min_input_precision): New functions.
	(vect_determine_min_output_precision_1): Likewise.
	(vect_determine_min_output_precision): Likewise.
	(vect_determine_precisions_from_range): Likewise.
	(vect_determine_precisions_from_users): Likewise.
	(vect_determine_stmt_precisions, vect_determine_precisions): Likewise.
	(vect_vect_recog_func_ptrs): Put over_widening first.
	Add cast_forwprop.
	(vect_pattern_recog): Call vect_determine_precisions.

gcc/testsuite/
	* gcc.dg/vect/vect-widen-mult-u8-u32.c: Check specifically for a
	widen_mult pattern.
	* gcc.dg/vect/vect-over-widen-1.c: Update the scan tests for new
	over-widening messages.
	* gcc.dg/vect/vect-over-widen-1-big-array.c: Likewise.
	* gcc.dg/vect/vect-over-widen-2.c: Likewise.
	* gcc.dg/vect/vect-over-widen-2-big-array.c: Likewise.
	* gcc.dg/vect/vect-over-widen-3.c: Likewise.
	* gcc.dg/vect/vect-over-widen-3-big-array.c: Likewise.
	* gcc.dg/vect/vect-over-widen-4.c: Likewise.
	* gcc.dg/vect/vect-over-widen-4-big-array.c: Likewise.
	* gcc.dg/vect/bb-slp-over-widen-1.c: New test.
	* gcc.dg/vect/bb-slp-over-widen-2.c: Likewise.
	* gcc.dg/vect/vect-over-widen-5.c: Likewise.
	* gcc.dg/vect/vect-over-widen-6.c: Likewise.
	* gcc.dg/vect/vect-over-widen-7.c: Likewise.
	* gcc.dg/vect/vect-over-widen-8.c: Likewise.
	* gcc.dg/vect/vect-over-widen-9.c: Likewise.
	* gcc.dg/vect/vect-over-widen-10.c: Likewise.
	* gcc.dg/vect/vect-over-widen-11.c: Likewise.
	* gcc.dg/vect/vect-over-widen-12.c: Likewise.
	* gcc.dg/vect/vect-over-widen-13.c: Likewise.
	* gcc.dg/vect/vect-over-widen-14.c: Likewise.
	* gcc.dg/vect/vect-over-widen-15.c: Likewise.
	* gcc.dg/vect/vect-over-widen-16.c: Likewise.
	* gcc.dg/vect/vect-over-widen-17.c: Likewise.
	* gcc.dg/vect/vect-over-widen-18.c: Likewise.
	* gcc.dg/vect/vect-over-widen-19.c: Likewise.
	* gcc.dg/vect/vect-over-widen-20.c: Likewise.
	* gcc.dg/vect/vect-over-widen-21.c: Likewise.

From-SVN: r262333
2018-07-03 09:59:37 +00:00
Richard Sandiford
3239dde940 Avoid matching the same pattern statement twice
r262275 allowed pattern matching on pattern statements.  Testing for
SVE on more benchmarks showed a case where this interacted badly
with 14/n.

The new over-widening detection could narrow a COND_EXPR A to another
COND_EXPR B, which mixed_size_cond could then match.  This was working
as expected.  However, we left B (now dead) in the pattern definition
sequence with a non-null PATTERN_DEF_SEQ.  mask_conversion also
matched B, and unlike most recognisers, didn't clear PATTERN_DEF_SEQ
before adding statements to it.  This meant that the statements
created by mixed_size_cond appeared in two supposedy separate
sequences, causing much confusion.

This patch removes pattern statements that are replaced by further
pattern statements.  As a belt-and-braces fix, it also nullifies
PATTERN_DEF_SEQ on failure, in the same way Richard B. did recently
for RELATED_STMT.

I have patches to clean up the PATTERN_DEF_SEQ handling, but they
only apply after the complete PR85694 sequence, whereas this needs
to go in before 14/n.

2018-07-03  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (vect_mark_pattern_stmts): Remove pattern
	statements that have been replaced by further pattern statements.
	(vect_pattern_recog_1): Clear STMT_VINFO_PATTERN_DEF_SEQ on failure.

gcc/testsuite/
	* gcc.dg/vect/vect-mixed-size-cond-1.c: New test.

From-SVN: r262332
2018-07-03 09:58:47 +00:00
Richard Biener
30f502edde tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, always set *dt.
2018-07-03  Richard Biener  <rguenther@suse.de>

	* tree-vect-stmts.c (vect_is_simple_use): Consolidate dumping,
	always set *dt.  Dump vectype in vectype overload.
	* dumpfile.h (dump_gimple_expr): New function.
	(dump_gimple_expr_loc): Likewise.
	* dumpfile.c (dump_gimple_expr): New function.
	(dump_gimple_expr_loc): Likewise.

From-SVN: r262330
2018-07-03 09:39:59 +00:00
Jeff Law
cbdb1229e3 h8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants into a single pattern.
* config/h8300/h8300.md (movqi_h8300, movqi_h8300hs): Consolidate
	the H8/300, H8/300H and H8/S variants into a single pattern.
	(movhi_h8300, movqi_h8300hs): Similarly.
	(pushqi_h8300hs, pushhi_h8300hs): Consolidate into a single pattern.
	(QHI mode iterator): New.

From-SVN: r262329
2018-07-02 23:14:10 -06:00
Jeff Law
fabd753f9e * config/h8300/h8300.md: Remove trailing whitespace.
From-SVN: r262328
2018-07-02 21:39:56 -06:00
Jim Wilson
eb153f07b3 RISC-V: Fix interrupt support for -g.
gcc/
	* config/riscv/riscv.c (riscv_expand_epilogue): Use emit_jump_insn
	instead of emit_insn for interrupt returns.
	* config/riscv/riscv.md (riscv_met): Add (return) to rtl.
	(riscv_sret, riscv_uret): Likewise.

	gcc/testsuite/
	* gcc.target/riscv/interrupt-debug.c: New.

From-SVN: r262327
2018-07-02 17:19:59 -07:00
GCC Administrator
ccf266dbb8 Daily bump.
From-SVN: r262326
2018-07-03 00:16:40 +00:00
Jonathan Wakely
8df27fcb91 P0758R1 Implicit conversion traits
Extend __is_convertible_helper to also detect whether the conversion is
non-throwing, for std::is_nothrow_convertible in C++2a,

	* include/std/type_traits [__cplusplus > 201703]
	(__is_convertible_helper::__is_nothrow_type): Define new member.
	(__is_convertible_helper<_From, _To, false>::__test_aux1): Add
	noexcept.
	(__is_convertible_helper<_From, _To, false>::__test_nothrow)
	(__is_convertible_helper<_From, _To, false>::__is_nothrow_type): Add
	new members.
	(is_nothrow_convertible, is_nothrow_convertible_v): Define for C++2a.
	* testsuite/20_util/is_nothrow_convertible/value.cc: New.
	* testsuite/20_util/is_nothrow_convertible/requirements/
	explicit_instantiation.cc: New.
	* testsuite/20_util/is_nothrow_convertible/requirements/typedefs.cc:
	New.

From-SVN: r262322
2018-07-02 23:09:25 +01:00
Paolo Carlini
a5eae716f6 parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error message about __thread and thread_local...
/cp
2018-07-02  Paolo Carlini  <paolo.carlini@oracle.com>

	* parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range
	in error message about __thread and thread_local at the same time.

/testsuite
2018-07-02  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/diagnostic/thread-thread_local.C: New.

From-SVN: r262321
2018-07-02 21:42:10 +00:00
Jonathan Wakely
ee896276f6 P0887R1 The identity metafunction
* include/std/type_traits (type_identity, type_identity_t): Define
        for C++2a.
	* testsuite/20_util/type_identity/requirements/alias_decl.cc: New.
	* testsuite/20_util/type_identity/requirements/
	explicit_instantiation.cc:New.
	* testsuite/20_util/type_identity/requirements/typedefs.cc: New.

From-SVN: r262319
2018-07-02 22:05:08 +01:00
Jonathan Wakely
e112d53aca Optimize std::sub_match comparisons using string_view-like type
Avoid creation of unnecessary basic_string objects by using a simplified
string_view type and performing comparisons on that type instead. A
temporary basic_string object is still used when the sub_match's
iterators are not contiguous, in order to get an object that the
__string_view can reference.

	* include/bits/regex.h (sub_match::operator string_type): Call str().
	(sub_match::compare): Use _M_str() instead of str().
	(sub_match::_M_compare): New public function.
	(sub_match::__string_view): New helper type.
	(sub_match::_M_str): New overloaded functions to avoid creating a
	string_type object when not needed.
	(operator==, operator!=, operator<, operator>, operator<=, operator>=):
	Use sub_match::_M_compare instead of creating string_type objects.
	Fix Doxygen comments.
	* include/bits/regex_compiler.h (__has_contiguous_iter): Remove.
	(__is_contiguous_normal_iter): Rename to __is_contiguous_iter and
	simplify.
	(__enable_if_contiguous_iter, __disable_if_contiguous_iter): Use
	__enable_if_t.
	* include/std/type_traits (__enable_if_t): Define for C++11.
	* testsuite/28_regex/sub_match/compare.cc: New.
	* testsuite/util/testsuite_iterators.h (remove_cv): Add transformation
	trait.
	(input_iterator_wrapper): Use remove_cv for value_type argument of
	std::iterator base class.

From-SVN: r262318
2018-07-02 21:31:11 +01:00
David Malcolm
dbf96d4945 selftest: introduce class auto_fix_quotes
This patch moves a workaround for locale differences from a
selftest in pretty-print.c to selftest.h/c to make it reusable; I need
this for a selftest in a followup patch.

gcc/ChangeLog:
	* pretty-print.c (selftest::test_pp_format): Move save and restore
	of quotes to class auto_fix_quotes, and add an instance.
	* selftest.c: Include "intl.h".
	(selftest::auto_fix_quotes::auto_fix_quotes): New ctor.
	(selftest::auto_fix_quotes::~auto_fix_quotes): New dtor.
	* selftest.h (selftest::auto_fix_quotes): New class.

From-SVN: r262317
2018-07-02 20:05:21 +00:00
Ian Lance Taylor
7edd4c1885 re PR go/86331 (the gccgo's "go" tool looks like failing to invoke any sub go command)
PR go/86331
    os: check return value as well as error from waitid
    
    https://gcc.gnu.org/PR86331 indicates that if a signal handler runs it
    is possible for syscall.Syscall6 to return a non-zero errno value even
    if no error occurs. That is a problem in general, but this fix will
    let us work around the general problem for the specific case of
    calling waitid.
    
    Reviewed-on: https://go-review.googlesource.com/121595

From-SVN: r262313
2018-07-02 16:28:43 +00:00
Richard Henderson
a08acce83a aarch64: Add movprfx patterns alternatives
* config/aarch64/aarch64-protos.h, config/aarch64/aarch64.c
    (aarch64_sve_prepare_conditional_op): Remove.
    * config/aarch64/aarch64-sve.md (cond_<SVE_INT_BINARY><SVE_I>):
    Allow aarch64_simd_reg_or_zero as select operand; remove
    the aarch64_sve_prepare_conditional_op call.
    (cond_<SVE_INT_BINARY_SD><SVE_SDI>): Likewise.
    (cond_<SVE_COND_FP_BINARY><SVE_F>): Likewise.
    (*cond_<SVE_INT_BINARY><SVE_I>_z): New pattern.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_z): New pattern.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_z): New pattern.
    (*cond_<SVE_INT_BINARY><SVE_I>_any): New pattern.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_any): New pattern.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_any): New pattern
    and a splitters to match all of the *_any patterns.
    * config/aarch64/predicates.md (aarch64_sve_any_binary_operator): New.

    * config/aarch64/iterators.md (SVE_INT_BINARY_REV): Remove.
    (SVE_COND_FP_BINARY_REV): Remove.
    (sve_int_op_rev, sve_fp_op_rev): New.
    * config/aarch64/aarch64-sve.md (*cond_<SVE_INT_BINARY><SVE_I>_0): New.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_0): New.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_0): New.
    (*cond_<SVE_INT_BINARY><SVE_I>_2): Rename, add movprfx alternative.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_2): Similarly.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_2): Similarly.
    (*cond_<SVE_INT_BINARY><SVE_I>_3): Similarly; use sve_int_op_rev.
    (*cond_<SVE_INT_BINARY_SD><SVE_SDI>_3): Similarly.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>_3): Similarly; use sve_fp_op_rev.

    * config/aarch64/aarch64-sve.md (cond_<SVE_COND_FP_BINARY><SVE_F>):
    Remove match_dup 1 from the inner unspec.
    (*cond_<SVE_COND_FP_BINARY><SVE_F>): Likewise.

    * config/aarch64/aarch64.md (movprfx): New attr.
    (length): Default movprfx to 8.
    * config/aarch64/aarch64-sve.md (*mul<SVE_I>3): Add movprfx alt.
    (*madd<SVE_I>, *msub<SVE_I): Likewise.
    (*<su>mul<SVE_I>3_highpart): Likewise.
    (*<SVE_INT_BINARY_SD><SVE_SDI>3): Likewise.
    (*v<ASHIFT><SVE_I>3): Likewise.
    (*<su><MAXMIN><SVE_I>3): Likewise.
    (*<su><MAXMIN><SVE_F>3): Likewise.
    (*fma<SVE_F>4, *fnma<SVE_F>4): Likewise.
    (*fms<SVE_F>4, *fnms<SVE_F>4): Likewise.
    (*div<SVE_F>4): Likewise.

From-SVN: r262312
2018-07-02 08:29:16 -07:00
Martin Liska
1234faf487 Fix GCOV scan pattern (PR testsuite/86366).
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR testsuite/86366
	* gcc.dg/profile-dir-1.c: Fix scanned pattern.
	* gcc.dg/profile-dir-2.c: Likewise.
	* gcc.dg/profile-dir-3.c: Likewise.

From-SVN: r262311
2018-07-02 14:54:07 +00:00
Christophe Lyon
6b632b5e68 [ARM][testsuite] Fix arm-soft-strd-even.c
2018-07-02  Christophe Lyon  <christophe.lyon@linaro.org>

	* gcc.target/arm/arm-soft-strd-even.c: Skip if -mfloat-abi is
	overriden.

From-SVN: r262309
2018-07-02 16:23:19 +02:00
Richard Sandiford
d379ac227d Fix typo in vect_recog_widen_shift_pattern
Noticed by Christophe on arm-none-linux-gnueabihf.

2018-07-02  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vect-patterns.c (vect_recog_widen_shift_pattern): Fix typo
	in dump string.

From-SVN: r262308
2018-07-02 13:34:49 +00:00
Richard Biener
92590cd35f re PR tree-optimization/86363 (wrong code with __builtin_memset() at -O1)
2018-07-02  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/86363
	* tree-ssa-sccvn.c (vn_reference_lookup_3): Check the
	memset argument refers to a non-variable address.

	* gcc.dg/torture/pr86363.c: New testcase.

From-SVN: r262307
2018-07-02 13:32:26 +00:00
Aldy Hernandez
94ee1558a8 Abstract a lot of the {PLUS,MINUS}_EXPR code in
extract_range_from_binary_expr_1 into separate functions.

From-SVN: r262306
2018-07-02 12:18:00 +00:00
Aldy Hernandez
d9957cf9a9 tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR code...
* tree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR
	code...
	(extract_range_from_abs_expr): ...here.

From-SVN: r262305
2018-07-02 12:17:47 +00:00
Martin Liska
108e1a8581 Add new tests for --completion option.
2018-07-02  Martin Liska  <mliska@suse.cz>

	* gcc.dg/completion-1.c: New test.
	* gcc.dg/completion-2.c: New test.
	* gcc.dg/completion-3.c: New test.

From-SVN: r262304
2018-07-02 10:30:43 +00:00
Eric Botcazou
ee24c8e14e i386.c (ix86_finalize_stack_frame_flags): Do not overrule -fno-omit-frame-pointer when not optimizing.
* config/i386/i386.c (ix86_finalize_stack_frame_flags): Do not overrule
	-fno-omit-frame-pointer when not optimizing.

From-SVN: r262302
2018-07-02 10:15:42 +00:00
Richard Biener
5d4e9f7bee re PR lto/86321 (ICE: in splice_child_die, at dwarf2out.c:5693 for several Fortran tests with -g -flto)
2018-07-02  Richard Biener  <rguenther@suse.de>

	PR lto/86321
	* trans-types.c (gfc_get_array_type_bounds): Unshare TYPE_FIELDs
	for the distinct type copy.

From-SVN: r262301
2018-07-02 08:00:47 +00:00
Paul Thomas
e057d3e550 re PR fortran/45305 (Array-valued calles to elementals are not simplified)
2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/45305
	* expr.c : Add a prototype for scalarize_intrinsic_call.
	(gfc_simplify_expr): Use scalarize_intrinsic_call for elemental
	intrinsic function calls.
	(scalarize_intrinsic_call): Add 'init_flag' argument. Check if
	the expression or any of the actual argument expressions are
	NULL. Before calling gfc_check_init_expr, check 'init_flag'.
	Only simplify the scalarized expressions if there are no errors
	on the stack.
	(gfc_check_init_expr): Set 'init_flag' true in the call to
	scalarize_intrinsic_call.

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/45305
	* gfortran.dg/scalarize_parameter_array_2.f90: New test.

From-SVN: r262300
2018-07-02 07:24:43 +00:00
Paul Thomas
87c789f1c0 re PR fortran/45305 (Array-valued calles to elementals are not simplified)
2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/45305
	* expr.c : Add a prototype for scalarize_intrinsic_call.
	(gfc_simplify_expr): Use scalarize_intrinsic_call for elemental
	intrinsic function calls.
	(scalarize_intrinsic_call): Add 'init_flag' argument. Check if
	the expression or any of the actual argument expressions are
	NULL. Before calling gfc_check_init_expr, check 'init_flag'.
	Only simplify the scalarized expressions if there are no errors
	on the stack.
	(gfc_check_init_expr): Set 'init_flag' true in the call to
	scalarize_intrinsic_call.

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/45305
	* gfortran.dg/scalarize_parameter_array_2.f90: New test.

From-SVN: r262299
2018-07-02 07:20:27 +00:00
Martin Liska
61c74e84bb Revert 2 ::get to ::get_create for IPA summaries (PR ipa/86279).
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86279
	* ipa-pure-const.c (malloc_candidate_p): Revert usage of ::get.
	(propagate_nothrow): Likewise.
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86279
	* gcc.dg/ipa/pr86279.c: New test.

From-SVN: r262298
2018-07-02 07:04:20 +00:00
Martin Liska
b412559eaf Revert one ipa_call_summaries::get to get_create (PR ipa/86323).
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86323
	* ipa-inline.c (early_inliner): Revert wrongly added ::get call.
2018-07-02  Martin Liska  <mliska@suse.cz>

        PR ipa/86323
	* g++.dg/ipa/pr86323.C: New test.

From-SVN: r262297
2018-07-02 07:04:01 +00:00
Martin Liska
24e8271910 Bump libgnat to 9.
2018-07-02  Martin Liska  <mliska@suse.cz>

	* gnatvsn.ads: Bump Library_Version to 9.

From-SVN: r262296
2018-07-02 07:03:23 +00:00
David Malcolm
d72596738a Reinstate dump_generic_expr_loc
gcc/ChangeLog:
	* dumpfile.c (dump_generic_expr_loc): Undo removal of this
	function in r262149, changing "loc" param from source_location to
	const dump_location_t &.
	* dumpfile.h (dump_generic_expr_loc): Undo removal of this
	declaration, as above.

From-SVN: r262295
2018-07-02 03:39:48 +00:00
GCC Administrator
4d78796dba Daily bump.
From-SVN: r262294
2018-07-02 00:16:24 +00:00
Tom de Vries
2d0bc0af9c Revert "[testsuite/guality] Prevent optimization of local in vla-1.c"
2018-07-01  Tom de Vries  <tdevries@suse.de>

	revert:
	2018-07-01  Tom de Vries  <tdevries@suse.de>

	* gcc.dg/guality/prevent-optimization.h (VOLATILE): Define.
	* gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE.

From-SVN: r262290
2018-07-01 20:25:55 +00:00
Paul Koning
4aef57c991 Add -mgnu-asm; change -mdec-asm to generate DEC assembler
compatible output.

	* common/config/pdp11/pdp11-common.c (pdp11_handle_option): Handle
	-munit-asm, -mgnu-asm, -mdec-asm.
	* config/pdp11/pdp11-protos.h (pdp11_gen_int_label): New.
	(pdp11_output_labelref): New.
	(pdp11_output_def): New.
	(pdp11_output_addr_vec_elt): New.
	* config/pdp11/pdp11.c: Use tab between opcode and operands.  Use
	%# and %@ format codes.
	(pdp11_option_override): New.
	(TARGET_ASM_FILE_START_FILE_DIRECTIVE): Define.
	(pdp11_output_ident): New.
	(pdp11_asm_named_section): New.
	(pdp11_asm_init_sections): New.
	(pdp11_file_start): New.
	(pdp11_file_end): New.
	(output_ascii): Use .ascii/.asciz for -mdec-asm.
	(pdp11_asm_print_operand): Update %# and %$ for -mdec-asm.  Add
	%o, like %c but octal.
	(pdp11_option_override): New.
	* config/pdp11/pdp11.h (TEXT_SECTION_ASM_OP): Update for
	-mdec-asm.
	(DATA_SECTION_ASM_OP): Ditto.
	(READONLY_DATA_SECTION_ASM_OP): New.
	(IS_ASM_LOGICAL_LINE_SEPARATOR): New.
	(ASM_GENERATE_INTERNAL_LABEL): Use new function.
	(ASM_OUTPUT_LABELREF): Ditto.
	(ASM_OUTPUT_DEF): Ditto.
	(ASM_OUTPUT_EXTERNAL): New.
	(ASM_OUTPUT_SOURCE_FILENAME): New.
	(ASM_OUTPUT_ADDR_VEC_ELT): Use new function.
	(ASM_OUTPUT_SKIP): Update for -mdec-asm.
	* config/pdp11/pdp11.md: Use tab between opcode and operands.  Use
	%# and %@ format codes.
	* config/pdp11/pdp11.opt (mgnu-asm): New.
	(mdec-asm): Conflicts with -mgnu-asm and -munix-asm.
	(munix-asm): Conflicts with -mdec-asm and -mgnu-asm.
	* doc/invoke.txt (PDP-11 Options): Add -mgnu-asm.

From-SVN: r262289
2018-07-01 15:19:39 -04:00
Tom de Vries
518ab2a0ec [testsuite/guality] Use @main as bp loc instead of line nrs in const-volatile.c
2018-07-01  Tom de Vries  <tdevries@suse.de>

	* lib/gcc-gdb-test.exp (gdb-test): Handle '@' prefix in line number
	argument.
	* gcc.dg/guality/const-volatile.c: Replace gdb-test line nrs 50 and 58
	with @main.

From-SVN: r262288
2018-07-01 18:28:24 +00:00
Tom de Vries
81d3b8f702 [testsuite/guality] Prevent optimization of local in vla-1.c
2018-07-01  Tom de Vries  <tdevries@suse.de>

	* gcc.dg/guality/prevent-optimization.h (VOLATILE): Define.
	* gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE.

From-SVN: r262287
2018-07-01 15:54:48 +00:00
Tom de Vries
c2e755187e [testsuite/guality] Use relative line numbers in vla-1.c
2018-07-01  Tom de Vries  <tdevries@suse.de>

	* lib/gcc-dg.exp (get-absolute-line): Handle '.'.
	* gcc.dg/guality/vla-1.c: Use relative line numbers.

From-SVN: r262286
2018-07-01 15:54:38 +00:00
Tom de Vries
2d43b86277 [testsuite] Fix get-absolute-line error handling
2018-07-01  Tom de Vries  <tdevries@suse.de>

	* gcc.dg-selftests/dg-final.exp (verify_call_1): Factor out of ...
	(verify_call): ... here.  Move to toplevel.
	(verify_call_np, dg_final_directive_check_utils): New proc.
	(toplevel): Call dg_final_directive_check_utils.
	* lib/gcc-dg.exp (get-absolute-line): Fix typo in variable reference.

From-SVN: r262284
2018-07-01 14:56:09 +00:00