Jonathan Wakely [Wed, 1 Nov 2017 17:09:14 +0000 (17:09 +0000)]
PR libstdc++/82777 fix path normalization for dot-dot
PR libstdc++/82777
* src/filesystem/std-path.cc (path::lexically_normal): Remove dot-dot
elements correctly.
* testsuite/27_io/filesystem/path/generation/normal.cc: Add testcase.
* testsuite/util/testsuite_fs.h (compare_paths): Improve exception
text.
From-SVN: r254317
Richard Sandiford [Wed, 1 Nov 2017 17:06:17 +0000 (17:06 +0000)]
revert: combine.c (can_change_dest_mode): Reject changes in REGMODE_NATURAL_SIZE.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
Revert accidental duplicate:
* combine.c (can_change_dest_mode): Reject changes in
REGMODE_NATURAL_SIZE.
From-SVN: r254316
Segher Boessenkool [Wed, 1 Nov 2017 16:40:42 +0000 (17:40 +0100)]
combine: Fix bug in giving up placing REG_DEAD notes (PR82683)
When we have a REG_DEAD note for a reg that is set in the new I2, we
drop the note on the floor (we cannot find whether to place it on I2
or on I3). But the code I added to do this has a bug and does not
always actually drop it. This patch fixes it.
But that on its own is too pessimistic, it turns out, and we generate
worse code. One case where we do know where to place the note is if
it came from I3 (it should go to I3 again). Doing this fixes all of
the regressions.
PR rtl-optimization/64682
PR rtl-optimization/69567
PR rtl-optimization/69737
PR rtl-optimization/82683
* combine.c (distribute_notes) <REG_DEAD>: If the new I2 sets the same
register mentioned in the note, drop the note, unless it came from I3,
in which case it should go to I3 again.
From-SVN: r254315
Nathan Sidwell [Wed, 1 Nov 2017 15:46:42 +0000 (15:46 +0000)]
[C++ PATCH] overloaded operator fns [6/N]
https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00019.html
gcc/cp/
* cp-tree.h (assign_op_identifier, call_op_identifier): Use
compressed code.
(struct lang_decl_fn): Use compressed operator code.
(DECL_OVERLOADED_OPERATOR_CODE): Replace with ...
(DECL_OVERLOADED_OPERATOR_CODE_RAW): ... this.
(DECL_OVERLOADED_OPERATOR_CODE_IS): Use it.
* decl.c (duplicate_decls): Use DECL_OVERLOADED_OPERATOR_CODE_RAW.
(build_library_fn): Likewise.
(grok_op_properties): Likewise.
* mangle.c (write_unqualified_name): Likewise.
* method.c (implicitly_declare_fn): Likewise.
* typeck.c (check_return_expr): Use DECL_OVERLOADED_OPERATOR_IS.
libcc1/
* libcp1plugin.cc (plugin_build_decl): Use
DECL_OVERLOADED_OPERATOR_CODE_RAW.
From-SVN: r254314
Richard Sandiford [Wed, 1 Nov 2017 15:44:18 +0000 (15:44 +0000)]
Make tree-ssa-dse.c:normalize_ref return a bool
This patch moves the check for an overlapping byte to normalize_ref
from its callers, so that it's easier to convert to poly_ints later.
It's not really worth it on its own.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* tree-ssa-dse.c (normalize_ref): Check whether the ranges overlap
and return false if not.
(clear_bytes_written_by, live_bytes_read): Update accordingly.
From-SVN: r254313
Richard Sandiford [Wed, 1 Nov 2017 15:08:32 +0000 (15:08 +0000)]
Don't treat zero-sized ranges as overlapping
Most GCC ranges seem to be represented as an offset and a size (rather
than a start and inclusive end or start and exclusive end). The usual
test for whether X is in a range is of course:
x >= start && x < start + size
or:
x >= start && x - start < size
which means that an empty range of size 0 contains nothing. But other
range tests aren't as obvious.
The usual test for whether one range is contained within another
range is:
start1 >= start2 && start1 + size1 <= start2 + size2
while the test for whether two ranges overlap (from ranges_overlap_p) is:
(start1 >= start2 && start1 < start2 + size2)
|| (start2 >= start1 && start2 < start1 + size1)
i.e. the ranges overlap if one range contains the start of the other
range. This leads to strange results like:
(start X, size 0) is a subrange of (start X, size 0) but
(start X, size 0) does not overlap (start X, size 0)
Similarly:
(start 4, size 0) is a subrange of (start 2, size 2) but
(start 4, size 0) does not overlap (start 2, size 2)
It seems like "X is a subrange of Y" should imply "X overlaps Y".
This becomes harder to ignore with the runtime sizes and offsets
added for SVE. The most obvious fix seemed to be to say that
an empty range does not overlap anything, and is therefore not
a subrange of anything.
Using the new definition of subranges didn't seem to cause any
codegen differences in the testsuite. But there was one change
with the new definition of overlapping ranges. strncpy-chk.c has:
memset (dst, 0, sizeof (dst));
if (strncpy (dst, src, 0) != dst || strcmp (dst, ""))
abort();
The strncpy is detected as a zero-size write, and so with the new
definition of overlapping ranges, we treat the strncpy as having
no effect on the strcmp (which is true). The reaching definition
is the memset instead.
This patch makes ranges_overlap_p return false for zero-sized
ranges, even if the other range has an unknown size.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* tree-ssa-alias.h (ranges_overlap_p): Return false if either
range is known to be empty.
From-SVN: r254312
Richard Sandiford [Wed, 1 Nov 2017 14:06:50 +0000 (14:06 +0000)]
Use (CONST_VECTOR|GET_MODE)_NUNITS in simplify-rtx.c
This patch avoids some calculations of the form:
GET_MODE_SIZE (vector_mode) / GET_MODE_SIZE (element_mode)
in simplify-rtx.c. If we're dealing with CONST_VECTORs, it's better
to use CONST_VECTOR_NUNITS, since that remains constant even after the
SVE patches. In other cases we can get the number from GET_MODE_NUNITS.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* simplify-rtx.c (simplify_const_unary_operation): Use GET_MODE_NUNITS
and CONST_VECTOR_NUNITS instead of computing the number of units from
the byte sizes of the vector and element.
(simplify_binary_operation_1): Likewise.
(simplify_const_binary_operation): Likewise.
(simplify_ternary_operation): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254311
Nathan Sidwell [Wed, 1 Nov 2017 14:03:27 +0000 (14:03 +0000)]
[C++ PATCH] overloaded operator fns [6/N]
https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00018.html
* cp-tree.h (IDENTIFIER_CP_INDEX): Define.
(enum ovl_op_flags): Add OVL_OP_FLAG_AMBIARY.
(enum ovl_op_code): New.
(struct ovl_op_info): Add ovl_op_code field.
(ovl_op_info): Size by OVL_OP_MAX.
(ovl_op_mapping, ovl_op_alternate): Declare.
(OVL_OP_INFO): Adjust for mapping array.
(IDENTIFIER_OVL_OP_INFO): New.
* decl.c (ambi_op_p, unary_op_p): Delete.
(grok_op_properties): Use IDENTIFIER_OVL_OP_INFO and
ovl_op_alternate.
* lex.c (ovl_op_info): Adjust and static initialize.
(ovl_op_mappings, ovl_op_alternate): Define.
(init_operators): Iterate over ovl_op_info array and init mappings
& alternate arrays.
* mangle.c (write_unqualified_id): Use IDENTIFIER_OVL_OP_INFO.
* operators.def (DEF_OPERATOR): Remove KIND parm.
(DEF_SIMPLE_OPERATOR): Delete.
(OPERATOR_TRANSITION): Expand if defined.
From-SVN: r254310
Richard Sandiford [Wed, 1 Nov 2017 13:56:09 +0000 (13:56 +0000)]
Turn var-tracking.c:INT_MEM_OFFSET into a function
This avoids the double evaluation mentioned in the comments and
simplifies the change to make MEM_OFFSET variable.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* var-tracking.c (INT_MEM_OFFSET): Replace with...
(int_mem_offset): ...this new function.
(var_mem_set, var_mem_delete_and_set, var_mem_delete)
(find_mem_expr_in_1pdv, dataflow_set_preserve_mem_locs)
(same_variable_part_p, use_type, add_stores, vt_get_decl_and_offset):
Update accordingly.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254309
Richard Sandiford [Wed, 1 Nov 2017 13:51:28 +0000 (13:51 +0000)]
Factor out the mode handling in lower-subreg.c
This patch adds a helper routine (interesting_mode_p) to lower-subreg.c,
to make the decision about whether a mode can be split and, if so,
calculate the number of bytes and words in the mode. At present this
function always returns true; a later patch will add cases in which it
can return false.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* lower-subreg.c (interesting_mode_p): New function.
(compute_costs, find_decomposable_subregs, decompose_register)
(simplify_subreg_concatn, can_decompose_p, resolve_simple_move)
(resolve_clobber, dump_choices): Use it.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254308
Richard Sandiford [Wed, 1 Nov 2017 13:35:22 +0000 (13:35 +0000)]
Use more specific hash functions in rtlhash.c
Avoid using add_object when we have more specific routines available.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* rtlhash.c (add_rtx): Use add_hwi for 'w' and add_int for 'i'.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254307
Richard Sandiford [Wed, 1 Nov 2017 13:33:18 +0000 (13:33 +0000)]
More is_a <scalar_int_mode>
alias.c:find_base_term and find_base_value checked:
if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
but (a) comparing the precision seems more correct, since it's possible
for modes to have the same memory size as Pmode but fewer bits and
(b) the functions are called on arbitrary rtl, so there's no guarantee
that we're handling an integer truncation.
Since there's no point processing truncations of anything other than an
integer, this patch checks that first.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* alias.c (find_base_value, find_base_term): Only process integer
truncations. Check the precision rather than the size.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254306
Richard Sandiford [Wed, 1 Nov 2017 13:30:34 +0000 (13:30 +0000)]
Add an is_narrower_int_mode helper function
This patch adds a function for testing whether an arbitrary mode X
is an integer mode that is narrower than integer mode Y. This is
useful for code like expand_float and expand_fix that could in
principle handle vectors as well as scalars.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* machmode.h (is_narrower_int_mode): New function
* optabs.c (expand_float, expand_fix): Use it.
* dwarf2out.c (rotate_loc_descriptor): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254305
Richard Sandiford [Wed, 1 Nov 2017 12:52:50 +0000 (12:52 +0000)]
Add narrower_subreg_mode helper function
This patch adds a narrowing equivalent of wider_subreg_mode. At present
there is only one user.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* rtl.h (narrower_subreg_mode): New function.
* ira-color.c (update_costs_from_allocno): Use it.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254304
Richard Sandiford [Wed, 1 Nov 2017 12:30:39 +0000 (12:30 +0000)]
Widening optab cleanup
widening_optab_handler had the comment:
/* ??? Why does find_widening_optab_handler_and_mode attempt to
widen things that can't be widened? E.g. add_optab... */
if (op > LAST_CONV_OPTAB)
return CODE_FOR_nothing;
I think it comes from expand_binop using
find_widening_optab_handler_and_mode for two things: to test whether
a "normal" optab like add_optab is supported for a standard binary
operation and to test whether a "convert" optab is supported for a
widening operation like umul_widen_optab. In the former case from_mode
and to_mode must be the same, in the latter from_mode must be narrower
than to_mode.
For the former case, find_widening_optab_handler_and_mode is only really
testing the modes that are passed in. permit_non_widening must be true
here.
For the latter case, find_widening_optab_handler_and_mode should only
really consider new from_modes that are wider than the original
from_mode and narrower than the original to_mode. Logically
permit_non_widening should be false, since widening optabs aren't
supposed to take operands that are the same width as the destination.
We get away with permit_non_widening being true because no target
would/should define a widening .md pattern with matching modes.
But really, it seems better for expand_binop to handle these two
cases itself rather than pushing them down. With that change,
find_widening_optab_handler_and_mode is only ever called with
permit_non_widening set to false and is only ever called with
a "proper" convert optab. We then no longer need widening_optab_handler,
we can just use convert_optab_handler directly.
The patch also passes the instruction code down to expand_binop_directly.
This should be more efficient and removes an extra call to
find_widening_optab_handler_and_mode.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* optabs-query.h (convert_optab_p): New function, split out from...
(convert_optab_handler): ...here.
(widening_optab_handler): Delete.
(find_widening_optab_handler): Remove permit_non_widening parameter.
(find_widening_optab_handler_and_mode): Likewise. Provide an
override that operates on mode class wrappers.
* optabs-query.c (widening_optab_handler): Delete.
(find_widening_optab_handler_and_mode): Remove permit_non_widening
parameter. Assert that the two modes are the same class and that
the "from" mode is narrower than the "to" mode. Use
convert_optab_handler instead of widening_optab_handler.
* expmed.c (expmed_mult_highpart_optab): Use convert_optab_handler
instead of widening_optab_handler.
* expr.c (expand_expr_real_2): Update calls to
find_widening_optab_handler.
* optabs.c (expand_widen_pattern_expr): Likewise.
(expand_binop_directly): Take the insn_code as a parameter.
(expand_binop): Only call find_widening_optab_handler for
conversion optabs; use optab_handler otherwise. Update calls
to find_widening_optab_handler and expand_binop_directly.
Use convert_optab_handler instead of widening_optab_handler.
* tree-ssa-math-opts.c (convert_mult_to_widen): Update calls to
find_widening_optab_handler and use scalar_mode rather than
machine_mode.
(convert_plusminus_to_widen): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254302
Richard Sandiford [Wed, 1 Nov 2017 11:49:34 +0000 (11:49 +0000)]
Add a fixed_size_mode class
This patch adds a fixed_size_mode machine_mode wrapper
for modes that are known to have a fixed size. That applies
to all current modes, but future patches will add support for
variable-sized modes.
The use of this class should be pretty restricted. One important
use case is to hold the mode of static data, which can never be
variable-sized with current file formats. Another is to hold
the modes of registers involved in __builtin_apply and
__builtin_result, since those interfaces don't cope well with
variable-sized data.
The class can also be useful when reinterpreting the contents of
a fixed-length bit string as a different kind of value.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* machmode.h (fixed_size_mode): New class.
* rtl.h (get_pool_mode): Return fixed_size_mode.
* gengtype.c (main): Add fixed_size_mode.
* target.def (get_raw_result_mode): Return a fixed_size_mode.
(get_raw_arg_mode): Likewise.
* doc/tm.texi: Regenerate.
* targhooks.h (default_get_reg_raw_mode): Return a fixed_size_mode.
* targhooks.c (default_get_reg_raw_mode): Likewise.
* config/ia64/ia64.c (ia64_get_reg_raw_mode): Likewise.
* config/mips/mips.c (mips_get_reg_raw_mode): Likewise.
* config/msp430/msp430.c (msp430_get_raw_arg_mode): Likewise.
(msp430_get_raw_result_mode): Likewise.
* config/avr/avr-protos.h (regmask): Use as_a <fixed_side_mode>
* dbxout.c (dbxout_parms): Require fixed-size modes.
* expr.c (copy_blkmode_from_reg, copy_blkmode_to_reg): Likewise.
* gimple-ssa-store-merging.c (encode_tree_to_bitpos): Likewise.
* omp-low.c (lower_oacc_reductions): Likewise.
* simplify-rtx.c (simplify_immed_subreg): Take fixed_size_modes.
(simplify_subreg): Update accordingly.
* varasm.c (constant_descriptor_rtx::mode): Change to fixed_size_mode.
(force_const_mem): Update accordingly. Return NULL_RTX for modes
that aren't fixed-size.
(get_pool_mode): Return a fixed_size_mode.
(output_constant_pool_2): Take a fixed_size_mode.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254300
Richard Sandiford [Wed, 1 Nov 2017 11:22:35 +0000 (11:22 +0000)]
Add a VEC_SERIES rtl code
This patch adds an rtl representation of a vector linear series
of the form:
a[I] = BASE + I * STEP
Like vec_duplicate;
- the new rtx can be used for both constant and non-constant vectors
- when used for constant vectors it is wrapped in a (const ...)
- the constant form is only used for variable-length vectors;
fixed-length vectors still use CONST_VECTOR
At the moment the code is restricted to integer elements, to avoid
concerns over floating-point rounding.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* doc/rtl.texi (vec_series): Document.
(const): Say that the operand can be a vec_series.
* rtl.def (VEC_SERIES): New rtx code.
* rtl.h (const_vec_series_p_1): Declare.
(const_vec_series_p): New function.
* emit-rtl.h (gen_const_vec_series): Declare.
(gen_vec_series): Likewise.
* emit-rtl.c (const_vec_series_p_1, gen_const_vec_series)
(gen_vec_series): Likewise.
* optabs.c (expand_mult_highpart): Use gen_const_vec_series.
* simplify-rtx.c (simplify_unary_operation): Handle negations
of vector series.
(simplify_binary_operation_series): New function.
(simplify_binary_operation_1): Use it. Handle VEC_SERIES.
(test_vector_ops_series): New function.
(test_vector_ops): Call it.
* config/powerpcspe/altivec.md (altivec_lvsl): Use
gen_const_vec_series.
(altivec_lvsr): Likewise.
* config/rs6000/altivec.md (altivec_lvsl, altivec_lvsr): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254297
Richard Sandiford [Wed, 1 Nov 2017 10:37:03 +0000 (10:37 +0000)]
Allow vector CONSTs
This patch allows (const ...) wrappers to be used for rtx vector
constants, as an alternative to const_vector. This is useful
for SVE, where the number of elements isn't known until runtime.
It could also be useful in future for fixed-length vectors, to
reduce the amount of memory needed to represent simple constants
with high element counts. However, one nice thing about keeping
it restricted to variable-length vectors is that there is never
any need to handle combinations of (const ...) and CONST_VECTOR.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* doc/rtl.texi (const): Update description of address constants.
Say that vector constants are allowed too.
* common.md (E, F): Use CONSTANT_P instead of checking for
CONST_VECTOR.
* emit-rtl.c (gen_lowpart_common): Use const_vec_p instead of
checking for CONST_VECTOR.
* expmed.c (make_tree): Use build_vector_from_val for a CONST
VEC_DUPLICATE.
* expr.c (expand_expr_real_2): Check for vector modes instead
of checking for CONST_VECTOR.
* rtl.h (const_vec_p): New function.
(const_vec_duplicate_p): Check for a CONST VEC_DUPLICATE.
(unwrap_const_vec_duplicate): Handle them here too.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254296
Richard Sandiford [Wed, 1 Nov 2017 09:41:48 +0000 (09:41 +0000)]
Add more vec_duplicate simplifications
This patch adds a vec_duplicate_p helper that tests for constant
or non-constant vector duplicates. Together with the existing
const_vec_duplicate_p, this complements the gen_vec_duplicate
and gen_const_vec_duplicate added by a previous patch.
The patch uses the new routines to add more rtx simplifications
involving vector duplicates. These mirror simplifications that
we already do for CONST_VECTOR broadcasts and are needed for
variable-length SVE, which uses:
(const:M (vec_duplicate:M X))
to represent constant broadcasts instead. The simplifications do
trigger on the testsuite for variable duplicates too, and in each
case I saw the change was an improvement.
The best way of testing the new simplifications seemed to be
via selftests. The patch cribs part of David's patch here:
https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00270.html .
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
David Malcolm <dmalcolm@redhat.com>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* rtl.h (vec_duplicate_p): New function.
* selftest-rtl.c (assert_rtx_eq_at): New function.
* selftest-rtl.h (ASSERT_RTX_EQ): New macro.
(assert_rtx_eq_at): Declare.
* selftest.h (selftest::simplify_rtx_c_tests): Declare.
* selftest-run-tests.c (selftest::run_tests): Call it.
* simplify-rtx.c: Include selftest.h and selftest-rtl.h.
(simplify_unary_operation_1): Recursively handle vector duplicates.
(simplify_binary_operation_1): Likewise. Handle VEC_SELECTs of
vector duplicates.
(simplify_subreg): Handle subregs of vector duplicates.
(make_test_reg, test_vector_ops_duplicate, test_vector_ops)
(selftest::simplify_rtx_c_tests): New functions.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Malcolm <dmalcolm@redhat.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254294
Richard Sandiford [Wed, 1 Nov 2017 09:20:15 +0000 (09:20 +0000)]
Add gen_(const_)vec_duplicate helpers
This patch adds helper functions for generating constant and
non-constant vector duplicates. These routines help with SVE because
it is then easier to use:
(const:M (vec_duplicate:M X))
for a broadcast of X, even if the number of elements in M isn't known
at compile time. It also makes it easier for general rtx code to treat
constant and non-constant duplicates in the same way.
In the target code, the patch uses gen_vec_duplicate instead of
gen_rtx_VEC_DUPLICATE if handling constants correctly is potentially
useful. It might be that some or all of the call sites only handle
non-constants in practice, in which case the change is a harmless
no-op (and a saving of a few characters).
Otherwise, the target changes use gen_const_vec_duplicate instead
of gen_rtx_CONST_VECTOR if the constant is obviously a duplicate.
They also include some changes to use CONSTxx_RTX for easy global
constants.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* emit-rtl.h (gen_const_vec_duplicate): Declare.
(gen_vec_duplicate): Likewise.
* emit-rtl.c (gen_const_vec_duplicate_1): New function, split
out from...
(gen_const_vector): ...here.
(gen_const_vec_duplicate, gen_vec_duplicate): New functions.
(gen_rtx_CONST_VECTOR): Use gen_const_vec_duplicate for constants
whose elements are all equal.
* optabs.c (expand_vector_broadcast): Use gen_const_vec_duplicate.
* simplify-rtx.c (simplify_const_unary_operation): Likewise.
(simplify_relational_operation): Likewise.
* config/aarch64/aarch64.c (aarch64_simd_gen_const_vector_dup):
Likewise.
(aarch64_simd_dup_constant): Use gen_vec_duplicate.
(aarch64_expand_vector_init): Likewise.
* config/arm/arm.c (neon_vdup_constant): Likewise.
(neon_expand_vector_init): Likewise.
(arm_expand_vec_perm): Use gen_const_vec_duplicate.
(arm_block_set_unaligned_vect): Likewise.
(arm_block_set_aligned_vect): Likewise.
* config/arm/neon.md (neon_copysignf<mode>): Likewise.
* config/i386/i386.c (ix86_expand_vec_perm): Likewise.
(expand_vec_perm_even_odd_pack): Likewise.
(ix86_vector_duplicate_value): Use gen_vec_duplicate.
* config/i386/sse.md (one_cmpl<mode>2): Use CONSTM1_RTX.
* config/ia64/ia64.c (ia64_expand_vecint_compare): Use
gen_const_vec_duplicate.
* config/ia64/vect.md (addv2sf3, subv2sf3): Use CONST1_RTX.
* config/mips/mips.c (mips_gen_const_int_vector): Use
gen_const_vec_duplicate.
(mips_expand_vector_init): Use CONST0_RTX.
* config/powerpcspe/altivec.md (abs<mode>2, nabs<mode>2): Likewise.
(define_split): Use gen_const_vec_duplicate.
* config/rs6000/altivec.md (abs<mode>2, nabs<mode>2): Use CONST0_RTX.
(define_split): Use gen_const_vec_duplicate.
* config/s390/vx-builtins.md (vec_genmask<mode>): Likewise.
(vec_ctd_s64, vec_ctd_u64, vec_ctsl, vec_ctul): Likewise.
* config/spu/spu.c (spu_const): Likewise.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254292
Richard Sandiford [Wed, 1 Nov 2017 08:54:22 +0000 (08:54 +0000)]
Prevent invalid register mode changes in combine
This patch stops combine from changing the mode of an existing register
in-place if doing so would change the size of the underlying register
allocation size, as given by REGMODE_NATURAL_SIZE. Without this,
many tests fail in adjust_reg_mode after SVE is added. One example
is gcc.c-torture/compile/
20090401-1.c.
2017-11-01 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* combine.c (can_change_dest_mode): Reject changes in
REGMODE_NATURAL_SIZE.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254291
Uros Bizjak [Wed, 1 Nov 2017 07:47:19 +0000 (08:47 +0100)]
sqrt.c: New test.
* gcc.target/alpha/sqrt.c: New test.
From-SVN: r254289
Sandra Loosemore [Wed, 1 Nov 2017 02:14:19 +0000 (22:14 -0400)]
configure.ac (--enable-libssp): New.
2017-10-31 Sandra Loosemore <sandra@codesourcery.com>
gcc/
* configure.ac (--enable-libssp): New.
(gcc_cv_libc_provides_ssp): Check for explicit setting before
trying to determine target-specific default. Adjust indentation.
* configure: Regenerated.
* doc/install.texi (Configuration): Expand --disable-libssp
documentation.
From-SVN: r254288
GCC Administrator [Wed, 1 Nov 2017 00:16:20 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r254287
Daniel Santos [Tue, 31 Oct 2017 21:48:55 +0000 (21:48 +0000)]
PR target/82002 Part 1: Correct ICE caused by wrong calculation
gcc:
config/i386/i386.c (ix86_expand_epilogue): Correct stack
calculation.
gcc/testsuite:
gcc.target/i386/pr82002-1.c: New test.
gcc.target/i386/pr82002-2a.c: New xfail test.
gcc.target/i386/pr82002-2b.c: New xfail test.
From-SVN: r254284
Martin Jambor [Tue, 31 Oct 2017 21:36:51 +0000 (22:36 +0100)]
[PR 81702] Remove devirtualization assert
2017-10-31 Martin Jambor <mjambor@suse.cz>
PR c++/81702
* gimple-fold.c (gimple_get_virt_method_for_vtable): Remove assert.
testsuite/
* g++.dg/tree-ssa/pr81702.C: New test.
From-SVN: r254283
David Malcolm [Tue, 31 Oct 2017 20:40:10 +0000 (20:40 +0000)]
jit: add a way to preserve testsuite executables
gcc/jit/ChangeLog:
* docs/internals/index.rst (Running the test suite): Document
PRESERVE_EXECUTABLES.
(Running under valgrind): Add markup to RUN_UNDER_VALGRIND.
* docs/_build/texinfo/libgccjit.texi: Regenerate.
gcc/testsuite/ChangeLog:
* jit.dg/jit.exp (jit-dg-test): If PRESERVE_EXECUTABLES is set in
the environment, don't delete the generated executable.
From-SVN: r254282
David Malcolm [Tue, 31 Oct 2017 20:30:51 +0000 (20:30 +0000)]
pt.c: add missing %< and %>
gcc/cp/ChangeLog:
* pt.c (listify): Use %< and %> for description of #include.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/auto21.C: Update dg-error to reflect addition of
quotes.
* g++.dg/cpp0x/missing-initializer_list-include.C: Likewise.
From-SVN: r254281
David Malcolm [Tue, 31 Oct 2017 20:21:58 +0000 (20:21 +0000)]
diagnostics: get rid of *_at_rich_loc in favor of overloading
Adding a fix-it hint currently involves changing e.g.:
error_at (token->location,
"unknown type name %qE; did you mean %qs?",
token->value, hint);
to:
gcc_rich_location richloc (token->location);
richloc.add_fixit_replace (hint);
error_at_rich_loc (&richloc,
"unknown type name %qE; did you mean %qs?",
token->value, hint);
to make the change from taking a location_t to a rich_location *.
This patch renames the "*_at_rich_loc" diagnostic entrypoints to use
the same function names for rich_location * as for location_t,
via overloading, to simplify the above change to just changing from:
error_at (token->location,
"unknown type name %qE; did you mean %qs?",
token->value, hint);
to:
gcc_rich_location richloc (token->location);
richloc.add_fixit_replace (hint);
error_at (&richloc,
"unknown type name %qE; did you mean %qs?",
token->value, hint);
thus saving space (and typing) and usually avoiding the need to reindent
the "error_at" invocation.
With this change, 0 is no longer acceptable as a location_t to these
entrypoints, as e.g.:
../../src/gcc/auto-profile.c:855:37: error: call of overloaded
'inform(int, const char [18])' is ambiguous
inform (0, "Not expected TAG.");
^
In file included from ../../src/gcc/auto-profile.c:35:0:
../../src/gcc/diagnostic-core.h:88:13: note: candidate:
'void inform(location_t, const char*, ...)'
extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
^~~~~~
../../src/gcc/diagnostic-core.h:89:13: note: candidate:
'void inform(rich_location*, const char*, ...)'
extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
^~~~~~
Such locations now need to be spelled out as UNKNOWN_LOCATION,
rather than 0.
I considered making the API take a rich_location & rather than a
rich_location *, but doing so would mean replacing
diagnostic_set_info
and
diagnostic_set_info_translated
with a constructor for diagnostic_info, which was a more invasive
change. Maybe in the future.
gcc/ChangeLog:
* auto-profile.c (autofdo_source_profile::read): Use
UNKNOWN_LOCATION rather than 0.
* diagnostic-core.h (warning_at_rich_loc): Rename to...
(warning_at): ...this overload.
(warning_at_rich_loc_n): Rename to...
(warning_n): ...this overload.
(error_at_rich_loc): Rename to...
(error_at): ...this overload.
(pedwarn_at_rich_loc): Rename to...
(pedwarn): ...this overload.
(permerror_at_rich_loc): Rename to...
(permerror): ...this overload.
(inform_at_rich_loc): Rename to...
(inform): ...this overload.
* diagnostic.c: (diagnostic_n_impl): Delete location_t-based decl.
(diagnostic_n_impl_richloc): Rename to...
(diagnostic_n_impl): ...this rich_location *-based decl.
(inform_at_rich_loc): Rename to...
(inform): ...this, and add an assertion.
(inform_n): Update for removal of location_t-based diagnostic_n_impl.
(warning_at_rich_loc): Rename to...
(warning_at): ...this, and add an assertion.
(warning_at_rich_loc_n): Rename to...
(warning_n): ...this, and add an assertion.
(warning_n): Update location_t-based implementation for removal of
location_t-based diagnostic_n_impl.
(pedwarn_at_rich_loc): Rename to...
(pedwarn): ...this, and add an assertion.
(permerror_at_rich_loc): Rename to...
(permerror): ...this, and add an assertion.
(error_n): Update for removal of location_t-based diagnostic_n_impl.
(error_at_rich_loc): Rename to...
(error_at): ...this, and add an assertion.
* gcc.c (do_spec_1): Use UNKNOWN_LOCATION rather than 0.
(driver::do_spec_on_infiles): Likewise.
* substring-locations.c (format_warning_va): Update for renaming
of inform_at_rich_loc.
gcc/c-family/ChangeLog:
* c-common.c (binary_op_error): Update for renaming of
error_at_rich_loc.
(c_parse_error): Likewise.
* c-warn.c (warn_logical_not_parentheses): Likewise for
renaming of inform_at_rich_loc.
(warn_for_restrict): Likewise for renaming of
warning_at_rich_loc_n.
gcc/c/ChangeLog:
* c-decl.c (implicit_decl_warning): Update for renaming of
pedwarn_at_rich_loc and warning_at_rich_loc.
(implicitly_declare): Likewise for renaming of inform_at_rich_loc.
(undeclared_variable): Likewise for renaming of error_at_rich_loc.
* c-parser.c (c_parser_declaration_or_fndef): Likewise.
(c_parser_struct_or_union_specifier): Likewise for renaming of
pedwarn_at_rich_loc.
(c_parser_parameter_declaration): Likewise for renaming of
error_at_rich_loc.
* c-typeck.c (build_component_ref): Likewise.
(build_unary_op): Likewise for renaming of inform_at_rich_loc.
(pop_init_level): Likewise for renaming of warning_at_rich_loc.
(set_init_label): Likewise for renaming of error_at_rich_loc.
gcc/cp/ChangeLog:
* class.c (explain_non_literal_class): Use UNKNOWN_LOCATION rather
than 0.
* name-lookup.c (suggest_alternatives_for): Update for renaming of
inform_at_rich_loc.
(maybe_suggest_missing_header): Likewise.
(suggest_alternative_in_explicit_scope): Likewise.
* parser.c (cp_parser_diagnose_invalid_type_name): Likewise for
renaming of error_at_rich_loc.
(cp_parser_string_literal): Likewise.
(cp_parser_nested_name_specifier_opt): Likewise.
(cp_parser_cast_expression): Likewise for renaming of
warning_at_rich_loc.
(cp_parser_decl_specifier_seq): Likewise for renaming of
error_at_rich_loc and warning_at_rich_loc.
(cp_parser_elaborated_type_specifier): Likewise for renaming of
pedwarn_at_rich_loc.
(cp_parser_cv_qualifier_seq_opt): Likewise for renaming of
error_at_rich_loc.
(cp_parser_virt_specifier_seq_opt): Likewise.
(cp_parser_class_specifier_1): Likewise.
(cp_parser_class_head): Likewise.
(cp_parser_member_declaration): Likewise for renaming of
pedwarn_at_rich_loc, warning_at_rich_loc, and error_at_rich_loc.
(cp_parser_enclosed_template_argument_list): Likewise for renaming
of error_at_rich_loc.
(set_and_check_decl_spec_loc): Likewise.
* pt.c (listify): Likewise.
* rtti.c (typeid_ok_p): Likewise.
* semantics.c (process_outer_var_ref): Use UNKNOWN_LOCATION rather
than 0.
* typeck.c (access_failure_info::maybe_suggest_accessor): Update
for renaming of inform_at_rich_loc.
(finish_class_member_access_expr): Likewise for renaming of
error_at_rich_loc.
gcc/objc/ChangeLog:
* objc-gnu-runtime-abi-01.c (objc_gnu_runtime_abi_01_init): Use
UNKNOWN_LOCATION rather than 0.
gcc/testsuite/ChangeLog:
* gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree): Update
for renaming of error_at_rich_loc and inform_at_rich_loc.
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
(test_show_locus): Likewise for renaming of warning_at_rich_loc.
libcpp/ChangeLog:
* directives.c (_cpp_handle_directive): Update for renaming of
cpp_error_at_richloc to cpp_error_at.
* errors.c (cpp_diagnostic_at_richloc): Rename to...
(cpp_diagnostic_at): ...this, dropping the location_t-based
implementation.
(cpp_diagnostic): Update for removal of location_t-based
cpp_diagnostic_at.
(cpp_error_at): Likewise.
(cpp_error_at_richloc): Rename to...
(cpp_error_at): ...this, and update for renaming of
cpp_diagnostic_at_richloc.
* include/cpplib.h (cpp_error_at_richloc): Rename to...
(cpp_error_at): ...this.
From-SVN: r254280
Nathan Sidwell [Tue, 31 Oct 2017 20:08:51 +0000 (20:08 +0000)]
[C++ PATCH] overloaded operator fns [5/N]
https://gcc.gnu.org/ml/gcc-patches/2017-10/
* cp-tree.h (struct operator_name_info_t): Rename to ...
(struct ovl_op_info_t): ... here. Add tree_code field.
(operator_name_info, assignment_operator_name_info): Delete.
(ovl_op_info): Declare.
(OVL_OP_INFO): Adjust.
* decl.c (grok_op_properties): Use ovl_op_flags.
* lex.c (operator_name_info, assignment_operator_name_info):
Delete.
(ovl_op_info): Define.
(set_operator_ident): Adjust.
(init_operators): Set tree_code.
* mangle.c (write_unqualified_id): Adjust operator array scan.
From-SVN: r254279
Michael Meissner [Tue, 31 Oct 2017 18:56:05 +0000 (18:56 +0000)]
builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and _Float<N>X built-in functions so that the variant...
2017-10-31 Michael Meissner <meissner@linux.vnet.ibm.com>
* builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and
_Float<N>X built-in functions so that the variant without the
"__builtin_" prefix is only enabled for the GNU C and Objective C
languages when they are in non-strict ANSI/ISO mode.
(DEF_EXT_LIB_FLOATN_NX_BUILTINS): Likewise.
* target.def (floatn_builtin_p): Add a target hook to control
whether _Float<N> and _Float<N>X built-in functions without the
"__builtin_" prefix are enabled, and return true for C and
Objective C in the default hook. Include langhooks.h in
targhooks.c.
* targhooks.h (default_floatn_builtin_p): Likewise.
* targhooks.c (default_floatn_builtin_p): Likewise.
* doc/tm.texi.in (TARGET_FLOATN_BUILTIN_P): Document the
floatn_builtin_p target hook.
* doc/tm.texi (TARGET_FLOATN_BUILTIN_P): Likewise.
From-SVN: r254277
Nathan Sidwell [Tue, 31 Oct 2017 18:29:08 +0000 (18:29 +0000)]
[C++ PATCH] overloaded operator fns [4/N]
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02362.html
* lex.c (init_operators): Allow NULL operator name. Don't add
special cases.
* operators.def: Use NULL for mangling only operators. Move to
after regular operators but move assignment operators last.
From-SVN: r254276
Matthew Fortune [Tue, 31 Oct 2017 18:27:52 +0000 (18:27 +0000)]
re PR rtl-optimization/81803 (miscompilation at -O1 on mips64el)
PR rtl-optimization/81803
* lra-constraints.c (curr_insn_transform): Also reload the whole
register for a strict subreg no wider than a word if this is for
a WORD_REGISTER_OPERATIONS target.
Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com>
From-SVN: r254275
Eric Botcazou [Tue, 31 Oct 2017 17:29:26 +0000 (17:29 +0000)]
re PR ada/82785 (gnat bootstrap fails on m68k-linux-gnu)
PR ada/82785
* gcc-interface/Makefile.in (m68k/Linux): Fix typo.
From-SVN: r254274
Jason Merrill [Tue, 31 Oct 2017 17:13:46 +0000 (13:13 -0400)]
* gdbinit.in: Skip over inlines from timevar.h.
From-SVN: r254273
Jason Merrill [Tue, 31 Oct 2017 17:09:09 +0000 (13:09 -0400)]
constexpr.c, pt.c: Adjust comments.
* constexpr.c, pt.c: Adjust comments.
* g++.dg/cpp1y/lambda-generic-69078-1.C: Remove #include.
From-SVN: r254272
Nathan Sidwell [Tue, 31 Oct 2017 16:27:59 +0000 (16:27 +0000)]
[C++ PATCH] overloaded operator fns [3/N]
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02343.html
* cp-tree.h (enum ovl_op_flags): New.
(struct operator_name_info_t): Rename arity to flags.
* lex.c (set_operator_ident): New.
(init_operators): Use it. Adjust for flags.
* mangle.c (write_unqualified_id): Adjust for flags.
* operators.def: Replace arity with flags.
From-SVN: r254271
James E Wilson [Tue, 31 Oct 2017 16:04:19 +0000 (09:04 -0700)]
Fix fortran build error on AIX.
gcc/fortran/
* parse.c (unexpected_eof): Call gcc_unreachable before return.
From-SVN: r254270
Martin Liska [Tue, 31 Oct 2017 15:31:25 +0000 (16:31 +0100)]
GCOV: add -j argument (human readable format).
2017-10-31 Martin Liska <mliska@suse.cz>
* doc/gcov.texi: Document new option.
* gcov.c (print_usage): Likewise print it.
(process_args): Support the argument.
(format_count): New function.
(format_gcov): Use the function.
2017-10-31 Martin Liska <mliska@suse.cz>
* g++.dg/gcov/loop.C: New test.
* lib/gcov.exp: Support human readable format for counts.
From-SVN: r254269
Segher Boessenkool [Tue, 31 Oct 2017 15:18:23 +0000 (16:18 +0100)]
Fix typo in my email, in changelog.
From-SVN: r254268
Nathan Sidwell [Tue, 31 Oct 2017 14:39:44 +0000 (14:39 +0000)]
[C++ PATCH] overloaded operator fns [2/N]
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02326.html
gcc/cp/
* cp-tree.h (ovl_op_identifier): New.
(assign_op_identifier, call_op_identifier): Adjust.
(cp_operator_id, cp_assignment_operator_ide): Delete.
(SET_OVERLOADED_OPERATOR_CODE): Delete.
(OVL_OP_INFO): New.
* call.c (op_error): Use OVL_OP_INFO.
(build_conditional_expr_1): Use ovl_op_identifier.
(build_new_op_1): Use OVL_OP_INFO & ovl_op_identifier.
(build_op_delete_call): Likewise.
* class.c (type_requires_array_cookie): Use ovl_op_identifier.
* decl.c (duplicate_decls): Directly copy operator code.
(builtin_function_1): Do not set operator code.
(build_library_fn): Directly set operator code.
(push_cp_library_fn): Use ovl_op_identifier.
(grok_op_properties): Directly set operator code.
* decl2.c (maybe_warn_sized_delete): Use ovl_op_identifier.
* error.c (dump_expr): Use OVL_OP_INFO.
(op_to_string): Add assop arg. Use OVL_OP_INFO.
(assop_to_string): Delete.
(args_to_string): Adjust.
* init.c (build_new_1): Use ovl_op_identifier.
* mangle.c (write_unqualified_name): Use OVL_OP_INFO.
(write_expression): Likewise.
* method.c (synthesized_method_walk): Use ovl_op_identifier.
(implicitly_declare_fn): Use assign_op_identifier. Directly set
operator code.
* name-lookup.c (get_class_binding): Use assign_op_identifier.
* parser.c (cp_parser_operator): Use ovl_op_identifier.
(cp_parser_omp_clause_reduction): Likewise.
* semantics.c (omp_reduction_id): Likewise.
* typeck.c (cxx_sizeof_or_alignof_type): Use OVL_OP_INFO.
libcc1/
* libcp1plugin.cc (plugin_build_decl): Use ovl_op_identifier.
Directly set operator code.
(plugin_build_dependent_expr): Use ovl_op_identifier.
From-SVN: r254267
Henry Linjamäki [Tue, 31 Oct 2017 13:00:53 +0000 (13:00 +0000)]
[BRIGFE] Fix PR 82771.
From-SVN: r254265
Tom de Vries [Tue, 31 Oct 2017 12:56:41 +0000 (12:56 +0000)]
Remove semicolon after do {} while (false) in HSA_LOG
2017-10-31 Tom de Vries <tom@codesourcery.com>
* plugin/plugin-hsa.c (HSA_LOG): Remove semicolon after
"do {} while (false)".
(init_single_kernel, GOMP_OFFLOAD_async_run): Add missing semicolon
after HSA_DEBUG call.
From-SVN: r254264
Nathan Sidwell [Tue, 31 Oct 2017 12:50:19 +0000 (12:50 +0000)]
[C++ PATCH] overloaded operator fns [1/N]
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02315.html
* cp-tree.h (assign_op_identifier, call_op_identifier): Define.
(LAMBDA_FUNCTION_P): Use DECL_OVERLOADED_OPERATOR_IS.
(DECL_OVERLOADED_OPERATOR_P): Just retuurn true/false.
(DECL_OVERLOADED_OPERATOR_CODE, DECL_OVERLOADED_OPERATOR_IS): Define.
* call.c (add_function_candidate): Use
DECL_OVERLOADED_OPERATOR_IS.
(build_op_call_1): Use call_op_identifier &
DECL_OVERLOADED_OPERATOR_IS.
(build_over_call): Likewise.
(has_trivial_copy_assign_p): Use assign_op_identifier.
(build_special_member_call): Likewise.
* class.c (dfs_declare_virt_assop_and_dtor): Likewise.
(vbase_has_user_provided_move_assign,
classtype_has_move_assign_or_move_ctor_p): Likewise.
* decl.c (duplicate_decls): Use DECL_OVERLOADED_OPERATOR_CODE.
(grok_special_member_properties): Use assign_op_identifier.
(start_preparsed_function): Use DECL_OVERLOADED_OPERATOR_IS.
* decl2.c (mark_used): Use DECL_CONV_FN_P.
* dump.c (dump_access): Delete prototype.
(dump_op): Delete.
(cp_dump_tree): Don't call it.
* lambda.c (lambda_function): Use call_op_identifier.
(maybe_add_lambda_conv_op): Not an overloaded operator. Remove
unneeded braces.
* mangle.c (write_unqualified_name): Use DECL_OVERLOADED_OPERTOR_CODE.
* method.c (do_build_copy_assign): Use assign_op_identifier.
(synthesize_method): Use DECL_OVERLOADED_OPERATOR_IS.
(get_copy_assign): Use assign_op_identifier.
(synthesized_method_walk): Likewise.
(defaultable_fn_check): Use DECL_OVERLOADED_OPERATOR_IS.
* parser.c (cp_parser_lambda_declarator_opt): Use
call_op_identifier.
* semanitics.c (classtype_has_nothrow_assign_or_copy_p): Use
assign_op_identifier.
* tree.c (special_function_p): Use DECL_OVERLOADED_OPERATOR_IS.
* typeck.c (check_return_expr): Use DECL_OVERLOADED_OPERATOR_CODE.
(check_return_expr): Use assign_op_identifier.
From-SVN: r254263
Martin Liska [Tue, 31 Oct 2017 11:59:32 +0000 (12:59 +0100)]
GCOV: std::vector refactoring III
2017-10-31 Martin Liska <mliska@suse.cz>
* gcov.c (struct name_map): do not use typedef.
Define operator== and operator<.
(name_search): Remove.
(name_sort): Remove.
(main): Do not allocate names.
(process_file): Add vertical space.
(generate_results): Use std::find.
(release_structures): Do not release memory.
(find_source): Use std::find.
From-SVN: r254262
Martin Liska [Tue, 31 Oct 2017 11:59:14 +0000 (12:59 +0100)]
GCOV: Vector refactoring II
2017-10-31 Martin Liska <mliska@suse.cz>
* gcov.c (struct line_info): Remove it's typedef.
(line_info::line_info): Add proper ctor.
(line_info::has_block): Do not use a typedef.
(struct source_info): Do not use typedef.
(circuit): Likewise.
(get_cycles_count): Likewise.
(output_intermediate_file): Iterate via vector iterator.
(add_line_counts): Use std::vector methods.
(accumulate_line_counts): Likewise.
(output_lines): Likewise.
From-SVN: r254261
Martin Liska [Tue, 31 Oct 2017 11:58:53 +0000 (12:58 +0100)]
GCOV: std::vector refactoring.
2017-10-31 Martin Liska <mliska@suse.cz>
* gcov.c (struct source_info): Remove typedef.
(source_info::source_info): Add proper ctor.
(accumulate_line_counts): Use struct, not it's typedef.
(output_gcov_file): Likewise.
(output_lines): Likewise.
(main): Do not allocate an array.
(output_intermediate_file): Use size of vector container.
(process_file): Resize the vector.
(generate_results): Do not preallocate, use newly added vector
lines.
(release_structures): Do not release sources.
(find_source): Use vector methods.
(add_line_counts): Do not use typedef.
From-SVN: r254260
Martin Liska [Tue, 31 Oct 2017 11:57:43 +0000 (12:57 +0100)]
GCOV: add support for lines with an unexecuted lines.
2017-10-31 Martin Liska <mliska@suse.cz>
* doc/gcov.texi: Document that.
* gcov.c (add_line_counts): Mark lines with a non-executed
statement.
(output_line_beginning): Handle such lines.
(output_lines): Pass new argument.
(output_intermediate_file): Print it in intermediate format.
2017-10-31 Martin Liska <mliska@suse.cz>
* g++.dg/gcov/ternary.C: New test.
* g++.dg/gcov/gcov-threads-1.C (main): Update expected line
count.
* lib/gcov.exp: Support new format for intermediate file format.
From-SVN: r254259
Martin Liska [Tue, 31 Oct 2017 11:57:10 +0000 (12:57 +0100)]
GCOV: introduce usage of terminal colors.
2017-10-31 Martin Liska <mliska@suse.cz>
* color-macros.h: New file.
* diagnostic-color.c: Factor out color related to macros to
color-macros.h.
* doc/gcov.texi: Document -k option.
* gcov.c (INCLUDE_STRING): Include string.h.
(print_usage): Add -k option.
(process_args): Parse it.
(pad_count_string): New function.
(output_line_beginning): Likewise.
(DEFAULT_LINE_START): New macro.
(output_lines): Support color output.
From-SVN: r254258
Martin Liska [Tue, 31 Oct 2017 11:55:19 +0000 (12:55 +0100)]
GCOV: document behavior of -fkeep-{static,inline}-functions (PR gcov-profile/82633).
2017-10-31 Martin Liska <mliska@suse.cz>
PR gcov-profile/82633
* doc/gcov.texi: Document -fkeep-{static,inline}-functions and
their interaction with GCOV infrastructure.
* configure.ac: Add -fkeep-{inline,static}-functions to
coverage_flags.
* configure: Regenerate.
From-SVN: r254257
Uros Bizjak [Tue, 31 Oct 2017 10:33:12 +0000 (11:33 +0100)]
re PR target/82772 (GCC crashes as compiling ags_thread.c source file on alpha architecture)
PR target/82772
* config/alpha/sync.md (fetchop_constr) <and>: Change to "rINM".
From-SVN: r254253
Segher Boessenkool [Tue, 31 Oct 2017 09:49:40 +0000 (10:49 +0100)]
Subject: [PATCH] rs6000: Fix crash with big stack clash interval (PR82674)
If the user asks for a stack clash probe interval of 64kB, we currently
generate a "stdu rX,-65536(r1)" instruction. That instruction does not
exist (the offset is a 16-bit signed number). If the offset is too big
we should force it into a register and generate a "stdux rX,rY,r1"
instruction, instead.
PR target/82674
* config/rs6000/rs6000.md (allocate_stack): Force update interval
into a register if it does not fit into an immediate offset field.
From-SVN: r254252
Olivier Hainque [Tue, 31 Oct 2017 09:09:33 +0000 (09:09 +0000)]
Makefile.in (FLAGS_TO_PASS): Pass libsubdir as well.
2017-10-31 Olivier Hainque <hainque@adacore.com>
* gcc/Makefile.in (FLAGS_TO_PASS): Pass libsubdir as well.
From-SVN: r254251
Julia Koval [Tue, 31 Oct 2017 06:20:49 +0000 (07:20 +0100)]
GFNI enabling [2/4]
gcc/
* config.gcc: Add gfniintrin.h.
* config/i386/gfniintrin.h: New.
* config/i386/i386-builtin-types.def (
__builtin_ia32_vgf2p8affineinvqb_v64qi,
__builtin_ia32_vgf2p8affineinvqb_v64qi_mask,
__builtin_ia32_vgf2p8affineinvqb_v32qi
__builtin_ia32_vgf2p8affineinvqb_v32qi_mask,
__builtin_ia32_vgf2p8affineinvqb_v16qi,
__builtin_ia32_vgf2p8affineinvqb_v16qi_mask): New builtins.
* config/i386/i386-builtin.def (V64QI_FTYPE_V64QI_V64QI_INT_V64QI_UDI,
V32QI_FTYPE_V32QI_V32QI_INT_V32QI_USI,
V16QI_FTYPE_V16QI_V16QI_INT_V16QI_UHI,
V64QI_FTYPE_V64QI_V64QI_INT): New types.
* config/i386/i386.c (ix86_expand_args_builtin): Handle new types.
* config/i386/immintrin.h: Include gfniintrin.h.
* config/i386/sse.md (vgf2p8affineinvqb_*) New pattern.
gcc/testsuite/
* gcc.target/i386/avx-1.c: Handle new intrinsics.
* gcc.target/i386/avx512-check.h: Check GFNI bit.
* gcc.target/i386/avx512f-gf2p8affineinvqb-2.c: Runtime test.
* gcc.target/i386/avx512vl-gf2p8affineinvqb-2.c: Runtime test.
* gcc.target/i386/gfni-1.c: New.
* gcc.target/i386/gfni-2.c: New.
* gcc.target/i386/gfni-3.c: New.
* gcc.target/i386/gfni-4.c: New.
* gcc.target/i386/i386.exp: (check_effective_target_gfni): New.
* gcc.target/i386/sse-12.c: Handle new intrinsics.
* gcc.target/i386/sse-13.c: Ditto.
* gcc.target/i386/sse-14.c: Ditto.
* gcc.target/i386/sse-22.c: Ditto.
* gcc.target/i386/sse-23.c: Ditto.
* g++.dg/other/i386-2.C: Ditto.
* g++.dg/other/i386-3.C: Ditto.
From-SVN: r254250
GCC Administrator [Tue, 31 Oct 2017 00:16:14 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r254249
Eric Botcazou [Mon, 30 Oct 2017 23:19:21 +0000 (23:19 +0000)]
* gcc.c (HAVE_TARGET_EXECUTABLE_SUFFIX): Remove old kludge.
From-SVN: r254246
Paolo Carlini [Mon, 30 Oct 2017 22:41:21 +0000 (22:41 +0000)]
re PR c++/67595 (concepts code causes segfault)
2017-10-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67595
* g++.dg/concepts/pr67595.C: New.
From-SVN: r254245
Paul Thomas [Mon, 30 Oct 2017 22:07:25 +0000 (22:07 +0000)]
re PR libfortran/80850 (Sourced allocate() fails to allocate a pointer)
2017-10-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80850
* trans_expr.c (gfc_conv_procedure_call): When passing a class
argument to an unlimited polymorphic dummy, it is wrong to cast
the passed expression as unlimited, unless it is unlimited. The
correct way is to assign to each of the fields and set the _len
field to zero.
2017-10-30 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80850
* gfortran.dg/class_64_f90 : New test.
From-SVN: r254244
Uros Bizjak [Mon, 30 Oct 2017 20:05:20 +0000 (21:05 +0100)]
pr82725.C: Move to ...
* g++.dg/pr82725.C: Move to ...
* g++.dg/cpp0x/pr82725.C: ... here. Add c++11 target directive.
From-SVN: r254242
Steven G. Kargl [Mon, 30 Oct 2017 19:33:12 +0000 (19:33 +0000)]
resolve.c (resolve_transfer): Set derived to correct symbol for BT_CLASS.
2017-10-30 Steven G. Kargl <kargl@gcc.gnu.org>
* resolve.c (resolve_transfer): Set derived to correct symbol for
BT_CLASS.
2017-10-30 Steven G. Kargl <kargl@gcc.gnu.org>
* gfortran.dg/dtio_13.f90: Remove TODO comment and dg-error test.
From-SVN: r254241
Paolo Carlini [Mon, 30 Oct 2017 19:16:29 +0000 (19:16 +0000)]
re PR c++/82085 (ICE: Template variable reference used in nested template alias)
/cp
2017-10-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/82085
* pt.c (tsubst_copy_and_build, [INDIRECT_REF]): For a REFERENCE_REF_P,
unconditionally call convert_from_reference.
/testsuite
2017-10-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/82085
* g++.dg/cpp1y/var-templ56.C: New.
From-SVN: r254239
Nathan Sidwell [Mon, 30 Oct 2017 19:04:53 +0000 (19:04 +0000)]
[C++ PATCH] operator name cleanup prepatch
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg02240.html
cp/
* call.c (build_op_call_1): Test for FUNCTION_DECL in same manner
as a few lines earlier.
* cp-tree.h (PACK_EXPANSION_PATTERN): Fix white space.
* decl.c (grokfndecl): Fix indentation.
(compute_array_index_type): Use processing_template_decl_sentinel.
(grok_op_properties): Move warnings to end. Reorder other checks
to group similar entities. Tweak diagnostics.
* lex.c (unqualified_name_lookup_error): No need to check name is
not ERROR_MARK operator.
* parser.c (cp_parser_operator): Select operator code before
looking it up.
* typeck.c (check_return_expr): Fix indentation and line wrapping.
testsuite/
* g++.dg/other/operator2.C: Adjust diagnostic.
* g++.old-deja/g++.jason/operator.C: Likewise.
From-SVN: r254238
Wilco Dijkstra [Mon, 30 Oct 2017 18:46:02 +0000 (18:46 +0000)]
Remove DImode expansions for 1-bit shifts
A left shift of 1 can always be done using an add, so slightly adjust rtx
cost for DImode left shift by 1 so that adddi3 is preferred in all cases,
and the arm_ashldi3_1bit is redundant.
DImode right shifts of 1 are rarely used (6 in total in the GCC binary),
so there is little benefit of the arm_ashrdi3_1bit and arm_lshrdi3_1bit
patterns. The generated code is better and faster without these shifts
as it allows early expansion, optimization and better register allocation.
gcc/
* config/arm/arm.md (ashldi3): Remove shift by 1 expansion.
(arm_ashldi3_1bit): Remove pattern.
(ashrdi3): Remove shift by 1 expansion.
(arm_ashrdi3_1bit): Remove pattern.
(lshrdi3): Remove shift by 1 expansion.
(arm_lshrdi3_1bit): Remove pattern.
* config/arm/arm.c (arm_rtx_costs_internal): Slightly increase
cost of ashldi3 by 1.
* config/arm/neon.md (ashldi3_neon): Remove shift by 1 expansion.
(<shift>di3_neon): Likewise.
From-SVN: r254237
Dominik Infuehr [Mon, 30 Oct 2017 18:35:32 +0000 (18:35 +0000)]
Wrong type-attribute for stp and str
Fix the type attributes of the integer stores in aarch64_simd_mov.
gcc/
* config/aarch64/aarch64-simd.md (*aarch64_simd_mov): Rename
both identically named patterns to (*aarch64_simd_mov<VD:mode>)
and (*aarch64_simd_mov<VQ:mode>).
(*aarch64_simd_mov<VD:mode>): Change type attribute to match
pattern alternative.
(*aarch64_simd_mov<VQ:mode>): Re-order and change type
attributes to match pattern alternative.
From-SVN: r254236
Steven Munroe [Mon, 30 Oct 2017 18:32:07 +0000 (18:32 +0000)]
Part 2/2 for contributing PPC64LE support for X86 SSE2 instrisics.
This patch includes testsuite/gcc.target tests for the intrinsics
in emmintrin.h. For these tests I added -Wno-psabi to dg-options
to suppress warnings associated with the vector ABI change in GCC5.
From-SVN: r254235
Steven Munroe [Mon, 30 Oct 2017 18:28:36 +0000 (18:28 +0000)]
Part 1/2 for contributing PPC64LE support for X86 SSE2 instrisics.
Part 1/2 for contributing PPC64LE support for X86 SSE2
instrisics. This patch includes the new (for PPC) emmintrin.h,
changes x86intrin.h to include xmmintrin.h, and associated
config.gcc changes.
From-SVN: r254234
Wilco Dijkstra [Mon, 30 Oct 2017 18:01:59 +0000 (18:01 +0000)]
backport: unnecessary duplication and repeating bugs like PR78439 due to changes being applied only to one of the duplicates.
Merge the movdi_vfp_cortexa8 pattern into movdi_vfp and remove it to avoid
unnecessary duplication and repeating bugs like PR78439 due to changes being
applied only to one of the duplicates.
gcc/
* config/arm/vfp.md (movdi_vfp): Merge changes from movdi_vfp_cortexa8.
* (movdi_vfp_cortexa8): Remove pattern.
From-SVN: r254233
Rainer Orth [Mon, 30 Oct 2017 16:43:40 +0000 (16:43 +0000)]
Remove Tru64 UNIX and IRIX references in install.texi
* doc/install.texi (Specific, alpha*-*-*): Remove DEC OSF/1
etc. reference.
(Specific, alpha*-dec-osf5.1): Remove.
(Specific, mips-sgi-irix5): Remove.
(Specific, mips-sgi-irix6): Remove.
From-SVN: r254230
Jonathan Wakely [Mon, 30 Oct 2017 16:28:13 +0000 (16:28 +0000)]
Don't create broken symlink in libstdc++-v3/include/bits
* include/Makefile.am (stamp-bits-sup): Do not create broken symlink
to stamp-bits.
* include/Makefile.in: Regenerate.
From-SVN: r254229
Jakub Jelinek [Mon, 30 Oct 2017 16:20:24 +0000 (17:20 +0100)]
re PR middle-end/22141 (Missing optimization when storing structures)
PR middle-end/22141
* gimple-ssa-store-merging.c (merged_store_group::apply_stores): Fix
arguments to clear_bit_region_be.
From-SVN: r254228
James E Wilson [Mon, 30 Oct 2017 15:38:30 +0000 (08:38 -0700)]
Fix ia64 build failure.
gcc/
* gimplify.c: Include memmodel.h.
From-SVN: r254227
Jonathan Wakely [Mon, 30 Oct 2017 15:35:02 +0000 (15:35 +0000)]
Remove ios_mode::trunc from basic_ofstream openmode arguments
* include/std/fstream (basic_ifstream, basic_ofstream, basic_fstream):
Remove outdated comments about calling c_str() to create a file stream
from a std::string.
(basic_ofstream::basic_ofstream, basic_ofstream::open): Remove
redundant ios_mode::trunc bits from default arguments and comments.
From-SVN: r254226
Martin Jambor [Mon, 30 Oct 2017 15:07:20 +0000 (16:07 +0100)]
[hsa] Add missing guard in OMP gridification
2017-10-30 Martin Jambor <mjambor@suse.cz>
* omp-grid.c (grid_attempt_target_gridification): Also insert a
condition whether loop should be executed at all.
From-SVN: r254225
Jonathan Wakely [Mon, 30 Oct 2017 14:56:23 +0000 (14:56 +0000)]
Minor tweak to libstdc++ FAQ
* doc/xml/faq.xml: Adjust "What is libstdc++?" answer slightly.
From-SVN: r254224
Jonathan Wakely [Mon, 30 Oct 2017 14:54:28 +0000 (14:54 +0000)]
Minor header reorganization for unordered containers
* include/bits/hashtable_policy.h: Include <tuple>.
* include/std/unordered_map: Only include <bits/stl_pair.h> instead
of <utility> and <tuple>.
* include/std/unordered_set: Likewise.
From-SVN: r254223
Ville Voutilainen [Mon, 30 Oct 2017 14:31:04 +0000 (16:31 +0200)]
Implement LWG 2485
* include/debug/array (get(const array<_Tp, _Nm>&&)): New.
* include/std/array (get(const array<_Tp, _Nm>&&)): Likewise.
* include/std/tuple (get(const tuple<_Elements...>&&)): Likewise.
(get(const tuple<_Types...>&&)): Likewise.
* include/std/utility
(__pair_get::__const_move_get(const std::pair<_Tp1, _Tp2>&&)):
Likewise.
(get(const std::pair<_Tp1, _Tp2>&&)): Likewise.
(get(const pair<_Tp, _Up>&&)): Likewise.
(get(const pair<_Up, _Tp>&&)): Likewise.
* testsuite/20_util/pair/astuple/get.cc: Add tests for
new overloads.
* testsuite/20_util/pair/astuple/get_by_type.cc: Likewise.
* testsuite/20_util/tuple/element_access/get2.cc: Likewise.
* testsuite/20_util/tuple/element_access/get2_by_type.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/get.cc: Likewise.
* testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc:
Adjust.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Likewise.
From-SVN: r254222
Will Schmidt [Mon, 30 Oct 2017 14:10:17 +0000 (14:10 +0000)]
rs6000.c (rs6000_gimple_fold_builtin): Add support for gimple folding of vec_madd() intrinsics.
[gcc]
2017-10-30 Will Schmidt <will_schmidt@vnet.ibm.com>
* config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Add support for
gimple folding of vec_madd() intrinsics.
* config/rs6000/altivec.md (mulv8hi3): Rename altivec_vmladduhm to
fmav8hi4. (altivec_vmladduhm): Rename to fmav8hi4.
* config/rs6000/rs6000-builtin.def: Rename vmladduhm to fmav8hi4
From-SVN: r254221
Will Schmidt [Mon, 30 Oct 2017 14:03:15 +0000 (14:03 +0000)]
fold-vec-perm-longlong.c: Update to use long long types for testcase arguments.
2017-10-30 Will Schmidt <will_schmidt@vnet.ibm.com>
* gcc.target/powerpc/fold-vec-perm-longlong.c: Update to use long long
types for testcase arguments.
From-SVN: r254220
Richard Biener [Mon, 30 Oct 2017 12:48:53 +0000 (12:48 +0000)]
re PR lto/82757 (r251560 causes: plugin needed to handle lto object)
2017-10-30 Richard Biener <rguenther@suse.de>
PR lto/82757
* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
Strip two leading _s from the __gnu_lto_* symbols.
From-SVN: r254219
Richard Biener [Mon, 30 Oct 2017 12:45:53 +0000 (12:45 +0000)]
revert: [multiple changes]
2017-10-30 Richard Biener <rguenther@suse.de>
PR tree-optimization/82762
Revert
2017-10-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/82129
Revert
2017-08-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/81181
* tree-ssa-pre.c (compute_antic_aux): Defer clean() to ...
(compute_antic): ... end of iteration here.
* gcc.dg/torture/pr82762.c: New testcase.
From-SVN: r254218
Richard Biener [Mon, 30 Oct 2017 12:43:45 +0000 (12:43 +0000)]
gimple-parser.c (c_parser_gimple_statement): Parse conditional stmts.
2017-10-30 Richard Biener <rguenther@suse.de>
c/
* gimple-parser.c (c_parser_gimple_statement): Parse conditional
stmts.
* gcc.dg/gimplefe-27.c: New testcase.
From-SVN: r254217
Joseph Myers [Mon, 30 Oct 2017 12:17:40 +0000 (12:17 +0000)]
Add -std=c17, -std=gnu17.
C17, a bug-fix version of the C11 standard with DR resolutions
integrated, will soon go to ballot. This patch adds corresponding
options -std=c17, -std=gnu17 (new default version, replacing
-std=gnu11 as the default), -std=iso9899:2017. As a bug-fix version
of the standard, there is no need for flag_isoc17 or any options for
compatibility warnings; however, there is a new __STDC_VERSION__
value, so new cpplib languages CLK_GNUC17 and CLK_STDC17 are added to
support using that new value with the new options. (If the standard
ends up being published in 2018 and being known as C18, option aliases
can be added. Note however that -std=iso9899:199409 corresponds to a
__STDC_VERSION__ value rather than a publication date.)
(There are a couple of DR resolutions needing implementing in GCC, but
that's independent of the new options.)
(I'd propose to add -std=c2x / -std=gnu2x / -Wc11-c2x-compat for the
next major C standard revision once there are actually C2x drafts
being issued with new features included.)
Bootstrapped with no regressions for x86_64-pc-linux-gnu.
gcc:
* doc/invoke.texi (C Dialect Options): Document -std=c17,
-std=iso9899:2017 and -std=gnu17.
* doc/standards.texi (C Language): Document C17 support.
* doc/cpp.texi (Overview): Mention -std=c17.
(Standard Predefined Macros): Document C11 and C17 values of
__STDC_VERSION__. Do not refer to C99 support as incomplete.
* doc/extend.texi (Inline): Do not list individual options for
standards newer than C99.
* dwarf2out.c (highest_c_language, gen_compile_unit_die): Handle
"GNU C17".
* config/rl78/rl78.c (rl78_option_override): Handle "GNU C17"
language name.
gcc/c-family:
* c.opt (std=c17, std=gnu17, std=iso9899:2017): New options.
* c-opts.c (set_std_c17): New function.
(c_common_init_options): Use gnu17 as default C version.
(c_common_handle_option): Handle -std=c17 and -std=gnu17.
gcc/testsuite:
* gcc.dg/c17-version-1.c, gcc.dg/c17-version-2.c: New tests.
libcpp:
* include/cpplib.h (enum c_lang): Add CLK_GNUC17 and CLK_STDC17.
* init.c (lang_defaults): Add GNUC17 and STDC17 data.
(cpp_init_builtins): Handle C17 value of __STDC_VERSION__.
From-SVN: r254216
Maxim Ostapenko [Mon, 30 Oct 2017 11:09:44 +0000 (11:09 +0000)]
asan.c (asan_finish_file): Align asan globals array by shadow granularity.
2017-10-30 Maxim Ostapenko <m.ostapenko@samsung.com>
* asan.c (asan_finish_file): Align asan globals array by shadow
granularity.
From-SVN: r254214
Jakub Jelinek [Mon, 30 Oct 2017 11:04:49 +0000 (12:04 +0100)]
re PR middle-end/22141 (Missing optimization when storing structures)
PR middle-end/22141
* gimple-ssa-store-merging.c: Include rtl.h and expr.h.
(struct store_immediate_info): Add bitregion_start and bitregion_end
fields.
(store_immediate_info::store_immediate_info): Add brs and bre
arguments and initialize bitregion_{start,end} from those.
(struct merged_store_group): Add bitregion_start, bitregion_end,
align_base and mask fields. Drop unnecessary struct keyword from
struct store_immediate_info. Add do_merge method.
(clear_bit_region_be): Use memset instead of loop storing zeros.
(merged_store_group::do_merge): New method.
(merged_store_group::merge_into): Use do_merge. Allow gaps in between
stores as long as the surrounding bitregions have no gaps.
(merged_store_group::merge_overlapping): Use do_merge.
(merged_store_group::apply_stores): Test that bitregion_{start,end}
is byte aligned, rather than requiring that start and width are
byte aligned. Drop unnecessary struct keyword from
struct store_immediate_info. Allocate and populate also mask array.
Make start of the arrays relative to bitregion_start rather than
start and size them according to bitregion_{end,start} difference.
(struct imm_store_chain_info): Drop unnecessary struct keyword from
struct store_immediate_info.
(pass_store_merging::gate): Punt if BITS_PER_UNIT or CHAR_BIT is not 8.
(pass_store_merging::terminate_all_aliasing_chains): Drop unnecessary
struct keyword from struct store_immediate_info.
(imm_store_chain_info::coalesce_immediate_stores): Allow gaps in
between stores as long as the surrounding bitregions have no gaps.
Formatting fixes.
(struct split_store): Add orig non-static data member.
(split_store::split_store): Initialize orig to false.
(find_constituent_stmts): Return store_immediate_info *, non-NULL
if there is exactly a single original stmt. Change stmts argument
to pointer from reference, if NULL, don't push anything to it. Add
first argument, use it to optimize skipping over orig stmts that
are known to be before bitpos already. Simplify.
(split_group): Return unsigned int count how many stores are or
would be needed rather than a bool. Add allow_unaligned argument.
Change split_stores argument from reference to pointer, if NULL,
only do a dry run computing how many stores would be produced.
Rewritten algorithm to use both alignment and misalign if
!allow_unaligned and handle bitfield stores with gaps.
(imm_store_chain_info::output_merged_store): Set start_byte_pos
from bitregion_start instead of start. Compute allow_unaligned
here, if true, do 2 split_group dry runs to compute which one
produces fewer stores and prefer aligned if equal. Punt if
new count is bigger or equal than original before emitting any
statements, rather than during that. Remove no longer needed
new_ssa_names tracking. Replace num_stmts with
split_stores.length (). Use 32-bit stack allocated entries
in split_stores auto_vec. Try to reuse original store lhs/rhs1
if possible. Handle bitfields with gaps.
(pass_store_merging::execute): Ignore bitsize == 0 stores.
Compute bitregion_{start,end} for the stores and construct
store_immediate_info with that. Formatting fixes.
* gcc.dg/store_merging_10.c: New test.
* gcc.dg/store_merging_11.c: New test.
* gcc.dg/store_merging_12.c: New test.
* g++.dg/pr71694.C: Add -fno-store-merging to dg-options.
From-SVN: r254213
Uros Bizjak [Mon, 30 Oct 2017 10:33:40 +0000 (11:33 +0100)]
re PR target/82725 ([x86_64] internal compiler error: in change_address_1, at emit-rtl.c:2162)
PR target/82725
* config/i386/i386.c (legitimate_pic_address_disp_p): Allow
UNSPEC_DTPOFF and UNSPEC_NTPOFF with SImode immediate offset.
testsuite/ChangeLog:
PR target/82725
* g++.dg/pr82725.C: New test.
From-SVN: r254212
James E Wilson [Mon, 30 Oct 2017 01:57:59 +0000 (18:57 -0700)]
Fix cygwin builds, broken by PR sanitizer/82517 fix.
gcc/
* gimplify.c: Include tm_p.h.
From-SVN: r254211
GCC Administrator [Mon, 30 Oct 2017 00:16:21 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r254210
James E Wilson [Sun, 29 Oct 2017 23:01:36 +0000 (16:01 -0700)]
Emit a no longer supported warning for gcoff* options.
gcc/
* common.opt (gcoff): Re-add as ignored option.
(gcoff1, gcoff2, gcoff3): Likewise.
From-SVN: r254207
James E Wilson [Sun, 29 Oct 2017 22:45:41 +0000 (15:45 -0700)]
Delete obsolete SDB debug info support.
gcc/
* Makefile.in (OBJS): Delete sdbout.o.
(GTFILES): Delete $(srcdir)/sdbout.c.
* debug.h: Delete sdb_debug_hooks.
* final.c: Delete sdbout.h include.
(final_scan_insn): Delete SDB_DEBUG check.
(rest_of_clean_state): Likewise.
* output.h: Delete sdb_begin_function_line.
* sdbout.c: Delete.
* sdbout.h: Delete.
* toplev.c: Delete sdbout.h include.
(process_options): Delete SDB_DEBUG check.
* tree-core.h (tree_type_common): Delete pointer field of
tree_type_symtab.
* tree.c (copy_node): Clear TYPE_SYMTAB_DIE instead of
TYPE_SYMTAB_POINTER.
* tree.h (TYPE_SYMTAB_POINTER): Delete.
(TYPE_SYMTAB_IS_POINTER): Delete.
(TYPE_SYMTAB_IS_DIE): Renumber.
* xcoffout.c: Refer to former sdbout.c file.
(xcoffout_begin_prologue): Use past tense for sdbout.c reference.
* doc/install.texi (--with-stabs): Delete COFF and ECOFF info.
* doc/invoke.texi (SEEALSO): Delete adb and sdb references.
(Debugging Options): Delete -gcoff.
(-gstabs): Delete SDB reference.
(-gcoff): Delete.
(-gcoff@var{level}): Delete.
* doc/passes.texi (Debugging information output): Delete SDB and
sdbout.c references.
* doc/tm.texi: Regenerate.
* doc/tm.texi.in (DWARF_CIE_DATA_ALIGNMENT): Delete SDB from xref.
(SDB and DWARF): Change node name to DWARF and delete SDB and COFF
references.
(DEBUGGER_AUTO_OFFSET): Delete COFF and SDB references.
(PREFERRED_DEBUGGING_TYPE): Delete SDB_DEBUG and -gcoff references.
(SDB_DEBUGGING_INFO): Delete.
(PUT_SDB_@dots{}, SDB_DELIM, SDB_ALLOW_UNKNOWN_REFERENCES)
SDB_ALLOW_FORWARD_REFERENCES, SDB_OUTPUT_SOURCE_LINE): Delete.
* target.def (output_source_filename): Delete COFF reference.
* common.opt (gcoff): Delete.
(gxcoff+): Update Negative chain.
* defaults.h: Delete all references to SDB_DEBUGGING_INFO and
SDB_DEBUG.
* dwarf2out.c (gen_array_type_die): Change SDB to debuggers.
* flag-types.h (enum debug_info_type): Delete SDB_DEBUG.
* function.c (number_blocks): Delete SDB_DEBUGGING_INFO, SDB_DEBUG,
and SDB references.
(expand_function_start): Change sdb reference to past tense.
(expand_function_end): Change sdb reference to past tense.
* gcc.c (cpp_unique_options): Delete gcoff3 reference.
* opts.c (debug_type_names): Delete coff entry.
(common_handle_option): Delete OPT_gcoff case.
* system.h (SDB_DEBUG, SDB_DEBUGGING_INFO): Poison.
* config/dbxcoff.h (PREFERRED_DEBUGGING_TYPE): Set to DBX_DEBUG.
* config/cris/cris.h: Delete SDB reference in comment.
* config/i386/cygming.h: Don't define SDB_DEBUGGING_INFO.
(ASM_DECLARE_FUNCTION_NAME): Delete SDB reference from comment.
* config/i386/gas.h: Don't define SDB_DEBUGGING_INFO.
* config/i386/i386.c (svr4_dbx_register_map): Change SDB references
to past tense.
(ix86_expand_prologue): Likewise.
* config/i386/winnt.c (i386_pe_start_function): Don't check SDB_DEBUG.
* config/ia64/ia64.h: Likewise.
* config/m68k/m68kelf.h (DBX_REGISTER_NUMBER): Delete SDB reference.
* config/mips/mips.h (SUBTARGET_ASM_DEBUGGING_SPEC): Delete gcoff*
support.
* config/mmix/mmix.h: Likewise.
* config/nds32/nds32.c: Likewise.
* config/stormy/storym16.h: Likewise.
* config/visium/visium.h: Likewise.
* config/vx-common.h (SDB_DEBUGGING_INFO): Delete undef.
gcc/fortran/
* invoke.texi: Delete adb and sdb references.
gccc/testsuite/
* lib/gcc-dg.exp (gcc-dg-debug-runtest): Delete -gcoff.
* lib/gfortran-dg.exp (gfortran-dg-debug-runtest): Delete
-gcoff.
From-SVN: r254206
Uros Bizjak [Sun, 29 Oct 2017 07:31:56 +0000 (08:31 +0100)]
* gcc.dg/torture/pr82692.c: Move from gcc.target/i386.
From-SVN: r254205
Sandra Loosemore [Sun, 29 Oct 2017 02:55:32 +0000 (22:55 -0400)]
nios2.h (FRAME_GROWS_DOWNWARD): Define to 1.
2017-10-28 Sandra Loosemore <sandra@codesourcery.com>
gcc/
* config/nios2/nios2.h (FRAME_GROWS_DOWNWARD): Define to 1.
* config/nios2/nios2.c (nios2_initial_elimination_offset): Make
FRAME_POINTER_REGNUM point at high end of local var area.
From-SVN: r254204
GCC Administrator [Sun, 29 Oct 2017 00:16:12 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r254203
Uros Bizjak [Sat, 28 Oct 2017 19:42:06 +0000 (21:42 +0200)]
* ChangeLog: Fix whitespace.
From-SVN: r254200
Paolo Carlini [Sat, 28 Oct 2017 16:10:10 +0000 (16:10 +0000)]
re PR c++/70971 (ICE in parameter pack expansion)
2017-10-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70971
* g++.dg/torture/pr70971.C: New.
From-SVN: r254199
Andre Vehreschild [Sat, 28 Oct 2017 12:10:59 +0000 (14:10 +0200)]
check.c (gfc_check_co_reduce): Clarify error message.
gcc/fortran/ChangeLog:
2017-10-28 Andre Vehreschild <vehre@gcc.gnu.org>
* check.c (gfc_check_co_reduce): Clarify error message.
From-SVN: r254197
Paul Thomas [Sat, 28 Oct 2017 08:49:26 +0000 (08:49 +0000)]
re PR fortran/81758 ([OOP] Broken vtab)
2017-10-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/81758
* trans-expr.c (trans_class_vptr_len_assignment): 'vptr_expr'
must only be set if the right hand side expression is of type
class.
2017-10-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/81758
* gfortran.dg/class_63.f90: New test.
From-SVN: r254195
Jakub Jelinek [Sat, 28 Oct 2017 07:02:39 +0000 (09:02 +0200)]
target.c (struct gomp_coalesce_buf): New type.
* target.c (struct gomp_coalesce_buf): New type.
(MAX_COALESCE_BUF_SIZE, MAX_COALESCE_BUF_GAP): Define.
(gomp_coalesce_buf_add, gomp_to_device_kind_p): New functions.
(gomp_copy_host2dev): Add CBUF argument, if copying into
the cached ranges, memcpy into buffer instead of copying
into device.
(gomp_map_vars_existing, gomp_map_pointer, gomp_map_fields_existing):
Add CBUF argument, pass it through to other calls.
(gomp_map_vars): Aggregate copies from host to device if small enough
and with small enough gaps in between into memcpy into a buffer and
fewer host to device copies from the buffer.
(gomp_update): Adjust gomp_copy_host2dev caller.
From-SVN: r254194
Steven G. Kargl [Sat, 28 Oct 2017 01:06:18 +0000 (01:06 +0000)]
re PR fortran/82620 ([PDT] ICE: free_expr0(): Bad expr type (at fortran/expr.c:497))
2017-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/82620
* match.c (gfc_match_allocate): Exit early on syntax error.
2017-10-27 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/82620
* gfortran.dg/allocate_error_7.f90: new test.
From-SVN: r254193
GCC Administrator [Sat, 28 Oct 2017 00:16:19 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r254192
Paolo Carlini [Fri, 27 Oct 2017 23:14:43 +0000 (23:14 +0000)]
re PR c++/82218 ([C++1x] constexpr on static member function causes segfault)
2017-10-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/82218
* g++.dg/cpp1y/constexpr-82218.C: New.
From-SVN: r254189