platform/upstream/gcc.git
6 years ago[15/n] PR85694: Try to split existing casts in widened patterns
Richard Sandiford [Tue, 3 Jul 2018 10:03:17 +0000 (10:03 +0000)]
[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

6 years ago[14/n] PR85694: Rework overwidening detection
Richard Sandiford [Tue, 3 Jul 2018 09:59:37 +0000 (09:59 +0000)]
[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

6 years agoAvoid matching the same pattern statement twice
Richard Sandiford [Tue, 3 Jul 2018 09:58:47 +0000 (09:58 +0000)]
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

6 years agotree-vect-stmts.c (vect_is_simple_use): Consolidate dumping, always set *dt.
Richard Biener [Tue, 3 Jul 2018 09:39:59 +0000 (09:39 +0000)]
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

6 years agoh8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants...
Jeff Law [Tue, 3 Jul 2018 05:14:10 +0000 (23:14 -0600)]
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

6 years ago* config/h8300/h8300.md: Remove trailing whitespace.
Jeff Law [Tue, 3 Jul 2018 03:39:56 +0000 (21:39 -0600)]
* config/h8300/h8300.md: Remove trailing whitespace.

From-SVN: r262328

6 years agoRISC-V: Fix interrupt support for -g.
Jim Wilson [Tue, 3 Jul 2018 00:19:59 +0000 (00:19 +0000)]
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

6 years agoDaily bump.
GCC Administrator [Tue, 3 Jul 2018 00:16:40 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262326

6 years agoP0758R1 Implicit conversion traits
Jonathan Wakely [Mon, 2 Jul 2018 22:09:25 +0000 (23:09 +0100)]
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

6 years agoparser.c (set_and_check_decl_spec_loc): Use rich_location::add_range in error message...
Paolo Carlini [Mon, 2 Jul 2018 21:42:10 +0000 (21:42 +0000)]
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

6 years agoP0887R1 The identity metafunction
Jonathan Wakely [Mon, 2 Jul 2018 21:05:08 +0000 (22:05 +0100)]
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

6 years agoOptimize std::sub_match comparisons using string_view-like type
Jonathan Wakely [Mon, 2 Jul 2018 20:31:11 +0000 (21:31 +0100)]
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

6 years agoselftest: introduce class auto_fix_quotes
David Malcolm [Mon, 2 Jul 2018 20:05:21 +0000 (20:05 +0000)]
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

6 years agore PR go/86331 (the gccgo's "go" tool looks like failing to invoke any sub go command)
Ian Lance Taylor [Mon, 2 Jul 2018 16:28:43 +0000 (16:28 +0000)]
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

6 years agoaarch64: Add movprfx patterns alternatives
Richard Henderson [Mon, 2 Jul 2018 15:29:16 +0000 (15:29 +0000)]
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

6 years agoFix GCOV scan pattern (PR testsuite/86366).
Martin Liska [Mon, 2 Jul 2018 14:54:07 +0000 (16:54 +0200)]
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

6 years ago[ARM][testsuite] Fix arm-soft-strd-even.c
Christophe Lyon [Mon, 2 Jul 2018 14:23:19 +0000 (14:23 +0000)]
[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

6 years agoFix typo in vect_recog_widen_shift_pattern
Richard Sandiford [Mon, 2 Jul 2018 13:34:49 +0000 (13:34 +0000)]
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

6 years agore PR tree-optimization/86363 (wrong code with __builtin_memset() at -O1)
Richard Biener [Mon, 2 Jul 2018 13:32:26 +0000 (13:32 +0000)]
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

6 years agoAbstract a lot of the {PLUS,MINUS}_EXPR code in
Aldy Hernandez [Mon, 2 Jul 2018 12:18:00 +0000 (12:18 +0000)]
Abstract a lot of the {PLUS,MINUS}_EXPR code in
extract_range_from_binary_expr_1 into separate functions.

From-SVN: r262306

6 years agotree-vrp.c (extract_range_from_unary_expr): Abstract ABS_EXPR code...
Aldy Hernandez [Mon, 2 Jul 2018 12:17:47 +0000 (12:17 +0000)]
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

6 years agoAdd new tests for --completion option.
Martin Liska [Mon, 2 Jul 2018 10:30:43 +0000 (12:30 +0200)]
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

6 years agoi386.c (ix86_finalize_stack_frame_flags): Do not overrule -fno-omit-frame-pointer...
Eric Botcazou [Mon, 2 Jul 2018 10:15:42 +0000 (10:15 +0000)]
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

6 years agore PR lto/86321 (ICE: in splice_child_die, at dwarf2out.c:5693 for several Fortran...
Richard Biener [Mon, 2 Jul 2018 08:00:47 +0000 (08:00 +0000)]
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

6 years agore PR fortran/45305 (Array-valued calles to elementals are not simplified)
Paul Thomas [Mon, 2 Jul 2018 07:24:43 +0000 (07:24 +0000)]
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

6 years agore PR fortran/45305 (Array-valued calles to elementals are not simplified)
Paul Thomas [Mon, 2 Jul 2018 07:20:27 +0000 (07:20 +0000)]
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

6 years agoRevert 2 ::get to ::get_create for IPA summaries (PR ipa/86279).
Martin Liska [Mon, 2 Jul 2018 07:04:20 +0000 (09:04 +0200)]
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

6 years agoRevert one ipa_call_summaries::get to get_create (PR ipa/86323).
Martin Liska [Mon, 2 Jul 2018 07:04:01 +0000 (09:04 +0200)]
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

6 years agoBump libgnat to 9.
Martin Liska [Mon, 2 Jul 2018 07:03:23 +0000 (09:03 +0200)]
Bump libgnat to 9.

2018-07-02  Martin Liska  <mliska@suse.cz>

* gnatvsn.ads: Bump Library_Version to 9.

From-SVN: r262296

6 years agoReinstate dump_generic_expr_loc
David Malcolm [Mon, 2 Jul 2018 03:39:48 +0000 (03:39 +0000)]
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

6 years agoDaily bump.
GCC Administrator [Mon, 2 Jul 2018 00:16:24 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262294

6 years agoRevert "[testsuite/guality] Prevent optimization of local in vla-1.c"
Tom de Vries [Sun, 1 Jul 2018 20:25:55 +0000 (20:25 +0000)]
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

6 years agoAdd -mgnu-asm; change -mdec-asm to generate DEC assembler
Paul Koning [Sun, 1 Jul 2018 19:19:39 +0000 (15:19 -0400)]
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

6 years ago[testsuite/guality] Use @main as bp loc instead of line nrs in const-volatile.c
Tom de Vries [Sun, 1 Jul 2018 18:28:24 +0000 (18:28 +0000)]
[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

6 years ago[testsuite/guality] Prevent optimization of local in vla-1.c
Tom de Vries [Sun, 1 Jul 2018 15:54:48 +0000 (15:54 +0000)]
[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

6 years ago[testsuite/guality] Use relative line numbers in vla-1.c
Tom de Vries [Sun, 1 Jul 2018 15:54:38 +0000 (15:54 +0000)]
[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

6 years ago[testsuite] Fix get-absolute-line error handling
Tom de Vries [Sun, 1 Jul 2018 14:56:09 +0000 (14:56 +0000)]
[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

6 years agoAllow jump threading of multiple paths that start from the same BB.
Aldy Hernandez [Sun, 1 Jul 2018 10:54:45 +0000 (10:54 +0000)]
Allow jump threading of multiple paths that start from the same BB.

From-SVN: r262283

6 years agoDaily bump.
GCC Administrator [Sun, 1 Jul 2018 00:16:18 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262282

6 years agoRISC-V: Add patterns to convert AND mask to two shifts.
Jim Wilson [Sat, 30 Jun 2018 21:52:01 +0000 (21:52 +0000)]
RISC-V: Add patterns to convert AND mask to two shifts.

gcc/
* config/riscv/predicates.md (p2m1_shift_operand): New.
(high_mask_shift_operand): New.
* config/riscv/riscv.md (lshrsi3_zero_extend_3+1): New combiner
pattern using p2m1_shift_operand.
(lshsi3_zero_extend_3+2): New combiner pattern using
high_mask_shift_operand.

gcc/testsuite/
* gcc.target/riscv/shift-shift-1.c: New.
* gcc.target/riscv/shift-shift-2.c: New.
* gcc.target/riscv/shift-shift-3.c: New.

From-SVN: r262278

6 years ago[13/n] PR85694: Try to avoid vectorising casts of invariants
Richard Sandiford [Sat, 30 Jun 2018 13:56:34 +0000 (13:56 +0000)]
[13/n] PR85694: Try to avoid vectorising casts of invariants

vect_recog_rotate_pattern had code to prevent operations
on invariants being vectorised unnecessarily:

  if (dt == vect_external_def
      && TREE_CODE (oprnd1) == SSA_NAME
      && is_a <loop_vec_info> (vinfo))
    {
      struct loop *loop = as_a <loop_vec_info> (vinfo)->loop;
      ext_def = loop_preheader_edge (loop);
      if (!SSA_NAME_IS_DEFAULT_DEF (oprnd1))
        {
          basic_block bb = gimple_bb (SSA_NAME_DEF_STMT (oprnd1));
          if (bb == NULL
              || !dominated_by_p (CDI_DOMINATORS, ext_def->dest, bb))
            ext_def = NULL;
        }
    }
  [..]
      if (ext_def)
        {
          basic_block new_bb
            = gsi_insert_on_edge_immediate (ext_def, def_stmt);
          gcc_assert (!new_bb);
        }

This patch reuses the same idea for casts of invariants created
during widening optimisations.

One hitch was that vect_loop_versioning asserted that the vector loop
preheader was still empty, although the cfg transformation it's doing
should be correct either way.

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

gcc/
* tree-vect-patterns.c (vect_get_external_def_edge): New function,
split out from...
(vect_recog_rotate_pattern): ...here.
(vect_convert_input): Try to insert casts of invariants in the
preheader.
* tree-vect-loop-manip.c (vect_loop_versioning): Don't require the
preheader to be empty.

gcc/testsuite/
* gcc.dg/vect/vect-widen-mult-extern-1.c: New test.

From-SVN: r262277

6 years ago[12/n] PR85694: Rework detection of widened operations
Richard Sandiford [Sat, 30 Jun 2018 12:49:06 +0000 (12:49 +0000)]
[12/n] PR85694: Rework detection of widened operations

This patch adds helper functions for detecting widened operations and
generalises the existing code to handle more cases.

One of the main changes is to recognise multi-stage type conversions,
which are possible even in the original IR and can also occur as a
result of earlier pattern matching (especially after the main
over-widening patch).  E.g. for:

  unsigned int res = 0;
  for (__INTPTR_TYPE__ i = 0; i < N; ++i)
    {
      int av = a[i];
      int bv = b[i];
      short diff = av - bv;
      unsigned short abs = diff < 0 ? -diff : diff;
      res += abs;
    }

we have:

  _9 = _7 - _8;
  diff_20 = (short int) _9;
  _10 = (int) diff_20;
  _11 = ABS_EXPR <_10>;

where the first cast establishes the sign of the promotion done
by the second cast.

vect_recog_sad_pattern didn't handle this kind of intermediate promotion
between the MINUS_EXPR and the ABS_EXPR.  Sign extensions and casts from
unsigned to signed are both OK there.  Unsigned promotions aren't, and
need to be rejected, but should have been folded away earlier anyway.

Also, the dot_prod and widen_sum patterns both required the promotions
to be from one signedness to the same signedness, rather than say signed
char to unsigned int.  That shouldn't be necessary, since it's only the
sign of the input to the promotion that matters.  Nothing requires the
narrow and wide types in a DOT_PROD_EXPR or WIDEN_SUM_EXPR to have the
same sign (and IMO that's a good thing).

Fixing these fixed an XFAIL in gcc.dg/vect/vect-widen-mult-sum.c.

vect_widened_op_tree is a bit more general than the current patch needs,
since it copes with a tree of operations rather than a single statement.
This is used by the later average-detection patch.

The patch also uses a common routine to handle both the WIDEN_MULT_EXPR
and WIDEN_LSHIFT_EXPR patterns.  I hope this could be reused for other
similar operations in future.

Also, the patch means we recognise the index calculations in
vect-mult-const-pattern*.c as widening multiplications, whereas the
scan test was expecting them to be recognised as mult patterns instead.
The patch makes the tests check specifically for the multiplication we
care about.

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

gcc/
* tree-vect-patterns.c (append_pattern_def_seq): Take an optional
vector type.  If given, install it in the new statement's
STMT_VINFO_VECTYPE.
(vect_element_precision): New function.
(vect_unpromoted_value): New struct.
(vect_unpromoted_value::vect_unpromoted_value): New function.
(vect_unpromoted_value::set_op): Likewise.
(vect_look_through_possible_promotion): Likewise.
(vect_joust_widened_integer, vect_joust_widened_type): Likewise.
(vect_widened_op_tree, vect_convert_input): Likewise.
(vect_convert_inputs, vect_convert_output): Likewise.
(vect_recog_dot_prod_pattern): Use vect_look_through_possible_promotion
to handle the optional cast of the multiplication result and
vect_widened_op_tree to detect the widened multiplication itself.
Do not require the input and output of promotion casts to have
the same sign, but base the signedness of the operation on the
input rather than the result.  If the pattern includes two
promotions, check that those promotions have the same sign.
Do not restrict the MULT_EXPR handling to a double-width result;
handle quadruple-width results and wider.  Use vect_convert_inputs
to convert the inputs to the common type.
(vect_recog_sad_pattern):  Use vect_look_through_possible_promotion
to handle the optional cast of the ABS result.  Also allow a sign
change or a sign extension between the ABS and MINUS.
Use vect_widened_op_tree to detect the widened subtraction and use
vect_convert_inputs to convert the inputs to the common type.
(vect_handle_widen_op_by_const): Delete.
(vect_recog_widen_op_pattern): New function.
(vect_recog_widen_mult_pattern): Use it.
(vect_recog_widen_shift_pattern): Likewise.
(vect_recog_widen_sum_pattern): Use
vect_look_through_possible_promotion to handle the promoted
PLUS_EXPR operand.

gcc/testsuite/
* gcc.dg/vect/vect-widen-mult-sum.c: Remove xfail.
* gcc.dg/vect/no-scevccp-outer-6.c: Don't match widened multiplications
by 4 in the computation of a[i].
* gcc.dg/vect/vect-mult-const-pattern-1.c: Test specifically for the
main multiplication constant.
* gcc.dg/vect/vect-mult-const-pattern-2.c: Likewise.
* gcc.dg/vect/vect-widen-mult-const-s16.c: Likewise.
* gcc.dg/vect/vect-widen-mult-const-u16.c: Likewise.  Expect the
pattern to cast the result to int.
* gcc.dg/vect/vect-reduc-dot-1.c: New test.
* gcc.dg/vect/vect-reduc-dot-2.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-3.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-4.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-5.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-6.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-7.c: Likewise.
* gcc.dg/vect/vect-reduc-dot-8.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-1.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-2.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-3.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-4.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-5.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-6.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-7.c: Likewise.
* gcc.dg/vect/vect-reduc-sad-8.c: Likewise.
* gcc.dg/vect/vect-widen-mult-1.c: Likewise.
* gcc.dg/vect/vect-widen-mult-2.c: Likewise.
* gcc.dg/vect/vect-widen-mult-3.c: Likewise.
* gcc.dg/vect/vect-widen-mult-4.c: Likewise.

From-SVN: r262276

6 years ago[11/n] PR85694: Apply pattern matching to pattern definition statements
Richard Sandiford [Sat, 30 Jun 2018 12:48:51 +0000 (12:48 +0000)]
[11/n] PR85694: Apply pattern matching to pattern definition statements

Although the first pattern match wins in the sense that no later
function can match the *old* gimple statement, it still seems worth
letting them match the *new* gimple statements, just like we would if
the original IR had included that sequence from the outset.

This is mostly true after the later patch for PR85694, where e.g. we
could recognise:

   signed char a;
   int ap = (int) a;
   int res = ap * 3;

as the pattern:

   short ap' = (short) a;
   short res = ap' * 3;     // S1: definition statement
   int res = (int) res;     // S2: pattern statement

and then apply the mult pattern to "ap' * 3".  The patch needs to
come first (without its own test cases) so that the main over-widening
patch doesn't regress anything.

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

gcc/
* gimple-iterator.c (gsi_for_stmt): Add a new overload that takes
the containing gimple_seq *.
* gimple-iterator.h (gsi_for_stmt): Declare it.
* tree-vect-patterns.c (vect_recog_dot_prod_pattern)
(vect_recog_sad_pattern, vect_recog_widen_sum_pattern)
(vect_recog_widen_shift_pattern, vect_recog_rotate_pattern)
(vect_recog_vector_vector_shift_pattern, vect_recog_divmod_pattern)
(vect_recog_mask_conversion_pattern): Remove STMT_VINFO_IN_PATTERN_P
checks.
(vect_init_pattern_stmt, vect_set_pattern_stmt): New functions,
split out from...
(vect_mark_pattern_stmts): ...here.  Handle cases in which the
statement being replaced is part of an existing pattern
definition sequence, inserting the new pattern statements before
the original one.
(vect_pattern_recog_1): Don't return a bool.  If the statement
is already part of a pattern, instead apply pattern matching
to the pattern definition statements.  Don't clear the
STMT_VINFO_RELATED_STMT if is_pattern_stmt_p.
(vect_pattern_recog): Don't break after the first match;
continue processing the pattern definition statements instead.
Don't bail out for STMT_VINFO_IN_PATTERN_P here.

From-SVN: r262275

6 years ago[10/n] PR85694: Split out check for vectorizable associative reductions
Richard Sandiford [Sat, 30 Jun 2018 12:47:50 +0000 (12:47 +0000)]
[10/n] PR85694: Split out check for vectorizable associative reductions

This patch adds an overload of vect_reassociating_reduction_p
that checks for a vectorizable associative reduction,
since the check was duplicated in three functions.

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

gcc/
* tree-vect-patterns.c (vect_reassociating_reduction_p): New function.
(vect_recog_dot_prod_pattern, vect_recog_sad_pattern)
(vect_recog_widen_sum_pattern): Use it.

From-SVN: r262274

6 years ago[9b/n] PR85694: Make vect_is_simple_use look through pattern statements
Richard Sandiford [Sat, 30 Jun 2018 12:47:25 +0000 (12:47 +0000)]
[9b/n] PR85694: Make vect_is_simple_use look through pattern statements

As suggested by Richard B., this patch makes vect_is_simple_use check
whether a defining statement has been replaced by a pattern statement,
and if so returns the pattern statement instead.

The reason for doing this is that the main patch for PR85694
makes over_widening handle more general cases.  These over-widened
patterns can still be useful when matching later statements;
e.g. an overwidened MULT_EXPR could be the input to a DOT_PROD_EXPR.

The patch doesn't do anything with the STMT_VINFO_IN_PATTERN_P checks
in vect_recog_over_widening_pattern or vect_recog_widen_shift_pattern
since later patches rewrite them anyway.

Doing this fixed an XFAIL in vect-reduc-dot-u16b.c.

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

gcc/
* tree-vect-loop.c (vectorizable_reduction): Assert that the
phi is not a pattern statement and has not been replaced by
a pattern statement.
* tree-vect-patterns.c (type_conversion_p): Don't check
STMT_VINFO_IN_PATTERN_P.
(vect_recog_vector_vector_shift_pattern): Likewise.
(vect_recog_dot_prod_pattern): Expect vect_is_simple_use to return
the pattern statement rather than the original statement; check
directly for a WIDEN_MULT_EXPR here.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Expect
vect_is_simple_use to return the pattern statement rather
than the original statement; use is_pattern_stmt_p to check
for such a pattern statement.
* tree-vect-stmts.c (process_use): Expect vect_is_simple_use
to return the pattern statement rather than the original statement;
don't do the same transformation here.
(vect_is_simple_use): If the defining statement has been replaced
by a pattern statement, return the pattern statement instead.
Remove the corresponding (local) transformation from the vectype
overload.

gcc/testsuite/
* gcc.dg/vect/vect-reduc-dot-u16b.c: Remove xfail and update the
test for vectorization along the lines described in the comment.

From-SVN: r262273

6 years ago[9a/n] PR85694: Reorder vect_is_simple_use arguments
Richard Sandiford [Sat, 30 Jun 2018 12:46:36 +0000 (12:46 +0000)]
[9a/n] PR85694: Reorder vect_is_simple_use arguments

As suggested by Richard B., this patch reorders the arguments to
vect_is_simple_use so that def_stmt comes last and is optional.
Many callers can then drop it, making it more obvious which of
the remaining calls would be affected by the next patch.

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

gcc/
* tree-vectorizer.h (vect_is_simple_use): Move the gimple ** to the
end and default to null.
* tree-vect-loop.c (vect_create_epilog_for_reduction)
(vectorizable_reduction): Update calls accordingly, dropping the
gimple ** argument if the passed-back statement isn't needed.
* tree-vect-patterns.c (vect_get_internal_def, type_conversion_p)
(vect_recog_rotate_pattern): Likewise.
(vect_recog_mask_conversion_pattern): Likewise.
* tree-vect-slp.c (vect_get_and_check_slp_defs): Likewise.
(vect_mask_constant_operand_p): Likewise.
* tree-vect-stmts.c (is_simple_and_all_uses_invariant, process_use):
(vect_model_simple_cost, vect_get_vec_def_for_operand): Likewise.
(get_group_load_store_type, get_load_store_type): Likewise.
(vect_check_load_store_mask, vect_check_store_rhs): Likewise.
(vectorizable_call, vectorizable_simd_clone_call): Likewise.
(vectorizable_conversion, vectorizable_assignment): Likewise.
(vectorizable_shift, vectorizable_operation): Likewise.
(vectorizable_store, vect_is_simple_cond): Likewise.
(vectorizable_condition, vectorizable_comparison): Likewise.
(get_same_sized_vectype, vect_get_mask_type_for_stmt): Likewise.
(vect_is_simple_use): Rename the def_stmt argument to def_stmt_out
and move it to the end.  Cope with null def_stmt_outs.

From-SVN: r262272

6 years ago018-06-30 Bernd Edlinger <bernd.edlinger@hotmail.de>
Bernd Edlinger [Sat, 30 Jun 2018 12:19:57 +0000 (12:19 +0000)]
018-06-30  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * Makefile.in (FLAGS_TO_PASS): Add RANLIB_FOR_TARGET.

From-SVN: r262271

6 years ago[testsuite/guality] Don't use attribute used in pr45882.c for -O0
Tom de Vries [Sat, 30 Jun 2018 08:09:26 +0000 (08:09 +0000)]
[testsuite/guality] Don't use attribute used in pr45882.c for -O0

2018-06-30  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/guality.exp (guality_transform_options): New proc.
(toplevel): Apply guality_transform_options on DG_TORTURE_OPTIONS and
LTO_TORTURE_OPTIONS.
* gcc.dg/guality/prevent-optimization.h: New file.
* gcc.dg/guality/pr45882.c: Include prevent-optimization.h.
(a): Replace __attribute__((used)) with ATTRIBUTE_USED.

From-SVN: r262270

6 years ago[testsuite/guality] Use relative line numbers in gdb-test
Tom de Vries [Sat, 30 Jun 2018 08:07:01 +0000 (08:07 +0000)]
[testsuite/guality] Use relative line numbers in gdb-test

2018-06-30  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/pr45882.c (foo): Use relative line numbers.
* lib/gcc-dg.exp (dg-final): New proc.
* lib/gcc-gdb-test.exp (gdb-test): Add and handle additional line number
argument.

From-SVN: r262269

6 years agoIntroduce @unless/@endunless and postbootstrap Makefile targets
Alexandre Oliva [Sat, 30 Jun 2018 02:47:29 +0000 (02:47 +0000)]
Introduce @unless/@endunless and postbootstrap Makefile targets

This patch turns dependencies of non-bootstrap targets on bootstrap
targets for bootstrap builds into dependencies on stage_last.  This
arrangement gets stage1-bubble to run from stage_last if we haven't
started a bootstrap yet, and to use the current stage otherwise.  This
was already the case of target libs, just not of non-bootstrapped host
modules.

In order to retain preexisting dependencies in non-bootstrap builds,
or in gcc-less builds, this introduces support for @unless/@endunless
pairs in Makefile.in.

There is a remaining possibility of problem if activating, in a tree
configured for bootstrap, a parallel build of two or more modules, at
least one bootstrapped and one not.  In this case, make might decide
to build stage_current and stage_last in parallel, the latter will
start a submake to build stage1 while the initial make, having
satisfied stage_current, proceeds to build the bootstrapped module in
non-bootstrapped configurations.  The two builds will overlap and will
likely conflict.  This situation does NOT arise in normal settings,
however: a post-bootstrap build of all-host all-target will indeed
activate such targets concurrently, but only after building all
bootstrapped modules successfully, and it will have both stage_last
and stage_current targets already satisfied, so the potential race
between builds will not arise.

Another remaining problem, that is slightly expanded with this patch,
is that of an interrupted build in a tree configured for bootstrap,
continued with a non-bootstrapped target.  Target modules that were
not bootstrapped would already fail to complete the current stage when
activated explicitly in the command line for a retry; host modules,
however, would attempt to build their bootstrapped dependencies, which
is what led to the problem of concurrent builds addressed with this
patch.  An interrupted or failed build might still recover correctly,
if the non-bootstrapped target is activated in both builds, because
then make will remove stage_last when its build command is
interrupted, so that it will attempt to recreate it with stage1-bubble
in the second try.  A bootstrap build, however, will not be attempting
to build stage_last, so the file will remain and the retry won't go
through stage1-bubble.  We have lived with that for target modules, so
we can probably live with that for host modules too.

Another undesirable consequence of this change is that non-boostrapped
host modules, in a tree configured for bootstrap, when activated as
make all-<module>, will build all of stage1 instead of only the
module's usual dependencies.  This is intentional and necessary to fix
the parallel-build problem.  If it's not desirable, disabling the
unnecessary bootstrap configuration will suffice to restore the
original set of dependencies.

for  ChangeLog

* configure.ac: Introduce support for @unless/@endunless.
* Makefile.tpl (dep-kind): Rewrite with cond; return
postbootstrap in some cases.
(make-postboot-dep, postboot-targets): New.
(dependencies): Do not output postbootstrap dependencies at
first.  Output non-target ones changed for configure to depend
on stage_last @if gcc-bootstrap, and the original deps @unless
gcc-bootstrap.
* configure.in, Makefile.in: Rebuilt.

From-SVN: r262267

6 years agoDaily bump.
GCC Administrator [Sat, 30 Jun 2018 00:16:35 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262266

6 years agov850.c (v850_legitimate_address_p): Handle large displacements for TARGET_V850E2V3...
Jeff Law [Fri, 29 Jun 2018 18:42:35 +0000 (12:42 -0600)]
v850.c (v850_legitimate_address_p): Handle large displacements for TARGET_V850E2V3 and newer.

* config/v850/v850.c (v850_legitimate_address_p): Handle large
displacements for TARGET_V850E2V3 and newer.
(TARGET_LRA_P): Remove.  Defaults to LRA now.
* config/v850/v850.md (sign23byte_load): Remove.
(unsign23byte_load, sign23hword_load, unsign23hword_load): Likewise.
(23word_load, 23byte_store, 23hword_store, 23word_store): Likewise.

From-SVN: r262257

6 years agostrlenopt-46.c: Define strnlen for targets like Solaris 10 that don't define the...
Martin Sebor [Fri, 29 Jun 2018 16:37:54 +0000 (16:37 +0000)]
strlenopt-46.c: Define strnlen for targets like Solaris 10 that don't define the function.

gcc/testsuite/ChangeLog:

* gcc.dg/strlenopt-46.c: Define strnlen for targets like Solaris 10
that don't define the function.

From-SVN: r262255

6 years agore PR c++/86184 (Conditional expression with omitted operand cannot use rvalue of...
Marek Polacek [Fri, 29 Jun 2018 15:25:14 +0000 (15:25 +0000)]
re PR c++/86184 (Conditional expression with omitted operand cannot use rvalue of type convertible to bool)

PR c++/86184
* tree.c (cp_save_expr): Don't call save_expr for TARGET_EXPRs.

* g++.dg/ext/cond3.C: New test.

From-SVN: r262254

6 years agoWhen using -fprofile-generate=/some/path mangle absolute path of file (PR lto/85759).
Martin Liska [Fri, 29 Jun 2018 14:03:36 +0000 (16:03 +0200)]
When using -fprofile-generate=/some/path mangle absolute path of file (PR lto/85759).

2018-06-29  Martin Liska  <mliska@suse.cz>

PR lto/85759
* coverage.c (coverage_init): Mangle full path name.
* doc/invoke.texi: Document the change.
* gcov-io.c (mangle_path): New.
* gcov-io.h (mangle_path): Likewise.
* gcov.c (mangle_name): Use mangle_path for path mangling.

From-SVN: r262251

6 years ago[arm] Avoid STRD with odd register for TARGET_ARM in output_move_double
Kyrylo Tkachov [Fri, 29 Jun 2018 13:36:35 +0000 (13:36 +0000)]
[arm] Avoid STRD with odd register for TARGET_ARM in output_move_double

In this testcase the user forces an odd register as the starting reg for a DFmode value.
The output_move_double function tries to store that using an STRD instruction.
But for TARGET_ARM the starting register of an STRD must be an even one.
This is always the case with compiler-allocated registers for DFmode values, but the
inline assembly forced our hand here.

This patch  restricts the STRD-emitting logic in output_move_double to not avoid
odd-numbered source registers in STRD.
I'm not a fan of the whole function, we should be exposing a lot of the logic in there
to RTL rather than at the final output stage, but that would need to be fixed separately.

* config/arm/arm.c (output_move_double): Don't allow STRD instructions
if starting source register is not even.

* gcc.target/arm/arm-soft-strd-even.c: New test.

From-SVN: r262250

6 years agocontrib: introduce Vim addon directory, add match.pd syntax plugin
Alexander Monakov [Fri, 29 Jun 2018 13:14:46 +0000 (16:14 +0300)]
contrib: introduce Vim addon directory, add match.pd syntax plugin

* vim-gcc-dev/README: New file.
* vim-gcc-dev/ftdetect/gcc-dev.vim: New file.
* vim-gcc-dev/syntax/gcc-match.vim: New file.
* gimple.vim: Move under vim-gcc-dev/syntax/.
* gcc-rtl.vim: Likewise.

From-SVN: r262249

6 years ago[testsuite/guality] Use line number vars in gdb-test
Tom de Vries [Fri, 29 Jun 2018 11:25:49 +0000 (11:25 +0000)]
[testsuite/guality] Use line number vars in gdb-test

2018-06-29  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/pr45882.c (foo): Add line number var for breakpoint
line, and use it.
* lib/gcc-dg.exp (get-absolute-line): Factor out of ...
(process-message): ... here.
* lib/gcc-gdb-test.exp (gdb-test): Use get-absolute-line.

From-SVN: r262248

6 years agoFix bit-test expansion for single cluster (PR tree-optimization/86263).
Martin Liska [Fri, 29 Jun 2018 10:57:00 +0000 (12:57 +0200)]
Fix bit-test expansion for single cluster (PR tree-optimization/86263).

2018-06-29  Martin Liska  <mliska@suse.cz>

        PR tree-optimization/86263
* tree-switch-conversion.c (switch_decision_tree::try_switch_expansion):
        Make edge redirection.
2018-06-29  Martin Liska  <mliska@suse.cz>

        PR tree-optimization/86263
* gcc.dg/tree-ssa/pr86263.c: New test.

From-SVN: r262247

6 years agodumpfile.c: add indentation via DUMP_VECT_SCOPE
David Malcolm [Fri, 29 Jun 2018 09:56:40 +0000 (09:56 +0000)]
dumpfile.c: add indentation via DUMP_VECT_SCOPE

This patch adds a concept of nested "scopes" to dumpfile.c's dump_*_loc
calls, and wires it up to the DUMP_VECT_SCOPE macro in tree-vectorizer.h,
so that the nested structure is shown in -fopt-info by indentation.

For example, this converts -fopt-info-all e.g. from:

test.c:8:3: note: === analyzing loop ===
test.c:8:3: note: === analyze_loop_nest ===
test.c:8:3: note: === vect_analyze_loop_form ===
test.c:8:3: note: === get_loop_niters ===
test.c:8:3: note: symbolic number of iterations is (unsigned int) n_9(D)
test.c:8:3: note: not vectorized: loop contains function calls or data references that cannot be analyzed
test.c:8:3: note: vectorized 0 loops in function

to:

test.c:8:3: note: === analyzing loop ===
test.c:8:3: note:  === analyze_loop_nest ===
test.c:8:3: note:   === vect_analyze_loop_form ===
test.c:8:3: note:    === get_loop_niters ===
test.c:8:3: note:   symbolic number of iterations is (unsigned int) n_9(D)
test.c:8:3: note:   not vectorized: loop contains function calls or data references that cannot be analyzed
test.c:8:3: note: vectorized 0 loops in function

showing that the "symbolic number of iterations" message is within
the "=== analyze_loop_nest ===" (and not within the
"=== vect_analyze_loop_form ===").

This is also enabling work for followups involving optimization records
(allowing the records to directly capture the nested structure of the
dump messages).

gcc/ChangeLog:
* dumpfile.c (dump_loc): Add indentation based on scope depth.
(dump_scope_depth): New variable.
(get_dump_scope_depth): New function.
(dump_begin_scope): New function.
(dump_end_scope): New function.
* dumpfile.h (get_dump_scope_depth): New declaration.
(dump_begin_scope): New declaration.
(dump_end_scope): New declaration.
(class auto_dump_scope): New class.
(AUTO_DUMP_SCOPE): New macro.
* tree-vectorizer.h (DUMP_VECT_SCOPE): Reimplement in terms of
AUTO_DUMP_SCOPE.

From-SVN: r262246

6 years agoAdd whitespace to some dejagnu directives in libstdc++ tests
Jonathan Wakely [Fri, 29 Jun 2018 09:54:07 +0000 (10:54 +0100)]
Add whitespace to some dejagnu directives in libstdc++ tests

* testsuite/20_util/add_rvalue_reference/requirements/alias_decl.cc:
Add whitespace to dejagnu directive.
* testsuite/23_containers/array/element_access/at_neg.cc: Likewise.

From-SVN: r262245

6 years agotree-vect-data-refs.c (vect_analyze_data_ref_dependences): Assert compute_all_depende...
Richard Biener [Fri, 29 Jun 2018 09:49:14 +0000 (09:49 +0000)]
tree-vect-data-refs.c (vect_analyze_data_ref_dependences): Assert compute_all_dependences succeeds.

2018-06-29  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_analyze_data_ref_dependences): Assert
compute_all_dependences succeeds.
* tree-vect-loop.c (vect_get_datarefs_in_loop): Fail early if we
exceed --param loop-max-datarefs-for-datadeps.

From-SVN: r262244

6 years ago* config/rs6000/t-rs6000: Append rs6000-modes.h to TM_H.
Jakub Jelinek [Fri, 29 Jun 2018 07:38:59 +0000 (09:38 +0200)]
* config/rs6000/t-rs6000: Append rs6000-modes.h to TM_H.

From-SVN: r262241

6 years agoDaily bump.
GCC Administrator [Fri, 29 Jun 2018 00:16:42 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262240

6 years agoruntime: don't stat a NULL filename
Ian Lance Taylor [Thu, 28 Jun 2018 20:54:04 +0000 (20:54 +0000)]
runtime: don't stat a NULL filename

    Noticed in https://gcc.gnu.org/PR86331.

    Reviewed-on: https://go-review.googlesource.com/121417

From-SVN: r262234

6 years agoC++: less verbose error-recovery for version conflict markers
David Malcolm [Thu, 28 Jun 2018 20:24:49 +0000 (20:24 +0000)]
C++: less verbose error-recovery for version conflict markers

gcc/cp/ChangeLog:
* parser.c (cp_parser_error_1): After issuing a conflict marker
error, consume tokens until the end of the source line.

gcc/testsuite/ChangeLog:
* g++.dg/conflict-markers-2.C: New test.

From-SVN: r262232

6 years agoPR c++/86342 - -Wdeprecated-copy and system headers.
Jason Merrill [Thu, 28 Jun 2018 20:22:21 +0000 (16:22 -0400)]
PR c++/86342 - -Wdeprecated-copy and system headers.

* decl2.c (cp_warn_deprecated_use): Don't warn about declarations
in system headers.

From-SVN: r262231

6 years agop9-extract-1.c: Add test case.
Carl Love [Thu, 28 Jun 2018 19:45:07 +0000 (19:45 +0000)]
p9-extract-1.c: Add test case.

gcc/testsuite/ChangeLog:

2018-06-28  Carl Love  <cel@us.ibm.com>

* gcc.target/p9-extract-1.c: Add test case.
* gcc.target/builtins-3-p9-runnable.c: Add test case to match
name in ABI.

From-SVN: r262230

6 years agore PR target/86348 (ICE: in curr_insn_transform, at lra-constraints.c:3919: unable...
Uros Bizjak [Thu, 28 Jun 2018 19:02:02 +0000 (21:02 +0200)]
re PR target/86348 (ICE: in curr_insn_transform, at lra-constraints.c:3919: unable to generate reloads for: vec_extractv4si_0_zext_sse4)

PR target/86348
* config/i386/sse.md (*vec_extractv4si_0_zext_sse4): Use
alternative 0 in preferred_for_speed attribute.

testsuite/ChangeLog:

PR target/86348
* gcc.target/i386/pr86348.c: New test.

From-SVN: r262228

6 years agoFix insn length for pdp11 shift patterns.
Paul Koning [Thu, 28 Jun 2018 18:50:12 +0000 (14:50 -0400)]
Fix insn length for pdp11 shift patterns.

* config/pdp11/pdp11-protos.h (pdp11_shift_length): New function.
* config/pdp11/pdp11.c (pdp11_shift_length): New function.
* config/pdp11/pdp11.h (ADJUST_INSN_LENGTH): Remove.
* config/pdp11/pdp11.md: Correct "length" attribute calculation
for shift insn patterns.

From-SVN: r262227

6 years agore PR go/86343 (types built by GO share TYPE_FIELDS in unsupported way)
Ian Lance Taylor [Thu, 28 Jun 2018 17:46:36 +0000 (17:46 +0000)]
re PR go/86343 (types built by GO share TYPE_FIELDS in unsupported way)

PR go/86343
* go-gcc.cc (Gcc_backend::set_placeholder_struct_type): Call
build_variant_type_copy rather than build_distinct_type_copy.

From-SVN: r262225

6 years ago[testsuite] Fix f16_mov_immediate_3.c
Wilco Dijkstra [Thu, 28 Jun 2018 16:09:39 +0000 (16:09 +0000)]
[testsuite] Fix f16_mov_immediate_3.c

Fix and simplify the testcase so it generates dup even on latest trunk.

    testsuite/
* gcc.target/aarch64/f16_mov_immediate_3.c: Fix testcase.

From-SVN: r262222

6 years agore PR fortran/82865 (Option -fdec collides with PDT)
Fritz Reese [Thu, 28 Jun 2018 15:31:24 +0000 (15:31 +0000)]
re PR fortran/82865 (Option -fdec collides with PDT)

2018-06-28  Fritz Reese  <fritzoreese@gmail.com>

    gcc/fortran/ChangeLog:

PR fortran/82865
* decl.c (gfc_match_type): Refactor and check for PDT declarations.

    gcc/testsuite/ChangeLog:

PR fortran/82865
* gfortran.dg/dec_type_print_2.f03: New testcase.

From-SVN: r262221

6 years agoHide alt_dump_file within dumpfile.c
David Malcolm [Thu, 28 Jun 2018 14:55:42 +0000 (14:55 +0000)]
Hide alt_dump_file within dumpfile.c

This patch removes alt_dump_file from dumpfile.h, making it static
within dumpfile.c.  This allows for changing how -fopt-info is
implemented, and potentially adding other kinds of dump target, such
as remarks or optimization records.

Doing so requires changing the implementation of dump_enabled_p, so
the patch changes this to a simple lookup of a boolean global, which
is updated any time dump_file or alt_dump_file change.

gcc/ChangeLog:
* cgraph.c (cgraph_node::get_body): Replace assignments to
"dump_file" with calls to set_dump_file.
* dumpfile.c (alt_dump_file): Make static, and group with...
(alt_flags): ...this definition.
(dumps_are_enabled): New variable.
(refresh_dumps_are_enabled): New function.
(set_dump_file): New function.
(set_alt_dump_file): New function.
(gcc::dump_manager::dump_start): Replace assignments to
"dump_file" and "alt_dump_file" with calls to set_dump_file and
set_alt_dump_file.
(gcc::dump_manager::dump_finish): Likewise.
* dumpfile.h (alt_dump_file): Delete decl.
(dumps_are_enabled): New variable decl.
(set_dump_file): New function decl.
(dump_enabled_p): Rewrite in terms of new "dumps_are_enabled"
global.
* tree-nested.c (lower_nested_functions): Replace assignments to
"dump_file" with calls to set_dump_file.

From-SVN: r262220

6 years agotree-cfg.c (verify_gimple_in_cfg): Call verify_location on the goto_locus of each...
Eric Botcazou [Thu, 28 Jun 2018 14:49:15 +0000 (14:49 +0000)]
tree-cfg.c (verify_gimple_in_cfg): Call verify_location on the goto_locus of each outgoing edge of each basic block.

* tree-cfg.c (verify_gimple_in_cfg): Call verify_location on the
goto_locus of each outgoing edge of each basic block.

From-SVN: r262219

6 years agodwarf2out.c (decl_scope_table): Remove.
Richard Biener [Thu, 28 Jun 2018 10:22:38 +0000 (10:22 +0000)]
dwarf2out.c (decl_scope_table): Remove.

2018-06-28  Richard Biener  <rguenther@suse.de>

* dwarf2out.c (decl_scope_table): Remove.
(push_decl_scope): Likewise.
(pop_decl_scope): Likewise.
(gen_type_die_for_member): Do not call push/pop_decl_scope.
(gen_struct_or_union_type_die): Likewise.
(gen_tagged_type_die): Likewise.
(dwarf2out_init): Do not initialize decl_scope_table.
(dwarf2out_c_finalize): Do not free it.

From-SVN: r262218

6 years agodwarf2out.c (gen_subprogram_die): Use is_unit_die when deciding whether to not re...
Richard Biener [Thu, 28 Jun 2018 10:18:27 +0000 (10:18 +0000)]
dwarf2out.c (gen_subprogram_die): Use is_unit_die when deciding whether to not re-use a DIE.

2018-06-28  Richard Biener  <rguenther@suse.de>

* dwarf2out.c (gen_subprogram_die): Use is_unit_die when
deciding whether to not re-use a DIE.

From-SVN: r262217

6 years ago* MAINTAINERS (write after approval): Add myself.
Jackson Woodruff [Thu, 28 Jun 2018 10:17:39 +0000 (10:17 +0000)]
* MAINTAINERS (write after approval): Add myself.

From-SVN: r262216

6 years agore PR c/55976 (-Werror=return-type should error on returning a value from a void...
David Pagan [Thu, 28 Jun 2018 08:42:17 +0000 (08:42 +0000)]
re PR c/55976 (-Werror=return-type should error on returning a value from a void function)

2018-06-28  David Pagan  <dave.pagan@oracle.com>

PR c/55976
* gcc.dg/noncompile/pr55976-1.c: Add dg-prune-output for extraneous
message causing unexpected test FAIL.

From-SVN: r262215

6 years agoAdd missing header file inclusion.
Martin Liska [Thu, 28 Jun 2018 08:18:01 +0000 (10:18 +0200)]
Add missing header file inclusion.

2018-06-28  Martin Liska  <mliska@suse.cz>

* brigspec.c: Add missing header file inclusion.

From-SVN: r262214

6 years agodwarf2out.c (gen_subprogram_die): Always re-use DIEs with an DW_AT_abstract_origin...
Richard Biener [Thu, 28 Jun 2018 07:43:36 +0000 (07:43 +0000)]
dwarf2out.c (gen_subprogram_die): Always re-use DIEs with an DW_AT_abstract_origin attribute.

2018-06-28  Richard Biener  <rguenther@suse.de>

* dwarf2out.c (gen_subprogram_die): Always re-use DIEs with an
DW_AT_abstract_origin attribute.

From-SVN: r262213

6 years agoCome up with jump_table ratio constants used in jump_table_cluster.
Martin Liska [Thu, 28 Jun 2018 07:15:55 +0000 (09:15 +0200)]
Come up with jump_table ratio constants used in jump_table_cluster.

2018-06-28  Martin Liska  <mliska@suse.cz>

* tree-switch-conversion.c (jump_table_cluster::can_be_handled):
        Use newly introduced constants.
* tree-switch-conversion.h (struct jump_table_cluster):
        Define max_ratio_for_size and max_ratio_for_speed.

From-SVN: r262212

6 years agoFix clustering algorithm in switch expansion.
Martin Liska [Thu, 28 Jun 2018 07:14:57 +0000 (09:14 +0200)]
Fix clustering algorithm in switch expansion.

2018-06-28  Martin Liska  <mliska@suse.cz>

* tree-switch-conversion.c (jump_table_cluster::find_jump_tables):
        Add new checking assert to catch invalid state.
(jump_table_cluster::can_be_handled): Handle single case
        clusters.
(jump_table_cluster::is_beneficial): Bail out for such case.
(bit_test_cluster::find_bit_tests):
        Add new checking assert to catch invalid state.
(bit_test_cluster::can_be_handled): Handle single case
        clusters.
(bit_test_cluster::is_beneficial): Bail out for such case.
(switch_decision_tree::analyze_switch_statement):
        Fix comment.
2018-06-28  Martin Liska  <mliska@suse.cz>

* gcc.dg/tree-ssa/switch-1.c: New test.

From-SVN: r262211

6 years agoCome up with new --completion option.
Martin Liska [Thu, 28 Jun 2018 07:11:16 +0000 (09:11 +0200)]
Come up with new --completion option.

2018-06-28  Martin Liska  <mliska@suse.cz>

* common.opt: Introduce -completion option.
* gcc.c (driver_handle_option): Handle it.
(driver::main): Print completions if completion
        is set.
* opt-suggestions.c (option_proposer::get_completions):
        New function.
(option_proposer::suggest_completion): Likewise.
(option_proposer::find_param_completions): Likewise.
(verify_autocompletions): Likewise.
(test_completion_valid_options): Likewise.
(test_completion_valid_params): Likewise.
(in_completion_p): Likewise.
(empty_completion_p): Likewise.
(test_completion_partial_match): Likewise.
(test_completion_garbage): Likewise.
(opt_proposer_c_tests): Likewise.
* opt-suggestions.h: Declare new functions.
* opts.c (common_handle_option): Handle OPT__completion_.
* selftest-run-tests.c (selftest::run_tests): Add
        opt_proposer_c_tests.
* selftest.c (assert_str_startswith): New.
* selftest.h (assert_str_startswith): Likewise.
(opt_proposer_c_tests): New.
(ASSERT_STR_STARTSWITH): Likewise.

From-SVN: r262210

6 years agoMakefile.in: Add opt-suggestions.o.
Martin Liska [Thu, 28 Jun 2018 07:08:01 +0000 (09:08 +0200)]
Makefile.in: Add opt-suggestions.o.

.
2018-06-28  Martin Liska  <mliska@suse.cz>

* Makefile.in: Add opt-suggestions.o.
* gcc-main.c: Include opt-suggestions.h.
* gcc.c (driver::driver): Likewise.
(driver::~driver): Remove m_option_suggestions.
(driver::build_option_suggestions): Moved to option_proposer.
(driver::suggest_option): Likewise.
(driver::handle_unrecognized_options): Use option_proposer.
* gcc.h (class driver): Add new memver m_option_proposer.
* opt-suggestions.c: New file.
* opt-suggestions.h: New file.
2018-06-28  Martin Liska  <mliska@suse.cz>

* cppspec.c: Include opt-suggestions.h.
2018-06-28  Martin Liska  <mliska@suse.cz>

* gfortranspec.c: Include opt-suggestions.h.
2018-06-28  Martin Liska  <mliska@suse.cz>

* jit-playback.c: Include opt-suggestions.h.

From-SVN: r262209

6 years agoIntroduce auto_string_vec class.
Martin Liska [Thu, 28 Jun 2018 07:07:40 +0000 (09:07 +0200)]
Introduce auto_string_vec class.

2018-06-28  Martin Liska  <mliska@suse.cz>

* vec.h (class auto_string_vec): New (moved from auto_argvec).
(auto_string_vec::~auto_string_vec): Likewise.
2018-06-28  Martin Liska  <mliska@suse.cz>

* jit-playback.c (class auto_argvec): Moved to vec.h.
(auto_argvec::~auto_argvec): Likewise.
(compile): Use the renamed name.
(invoke_driver): Likewise.

From-SVN: r262208

6 years agotree-inline.c (remap_gimple_stmt): Force input_location on the new statement if id...
Eric Botcazou [Thu, 28 Jun 2018 06:21:13 +0000 (06:21 +0000)]
tree-inline.c (remap_gimple_stmt): Force input_location on the new statement if id->reset_location is true.

* tree-inline.c (remap_gimple_stmt): Force input_location on the new
statement if id->reset_location is true.
(copy_edges_for_bb): Do not set goto_locus on the new edges if
id->reset_location is true.
(copy_phis_for_bb): Force input_location on the arguments if
id->reset_location is true.
(expand_call_inline): Set id->reset_location if DECL_IGNORED_P
is set on the function to be inlined.
* tree-inline.h (struct copy_body_data): Move remapping_type_depth and
prevent_decl_creation_for_types fields up and add reset_location field.

From-SVN: r262207

6 years ago* doc/invoke.texi (Debugging Options): Add -gsplit-dwarf.
Stephan Bergmann [Thu, 28 Jun 2018 03:48:57 +0000 (03:48 +0000)]
* doc/invoke.texi (Debugging Options): Add -gsplit-dwarf.

From-SVN: r262206

6 years agolra-eliminations.c (update_reg_eliminate): Mark all spanning hard registers for Pmode.
Dimitar Dimitrov [Thu, 28 Jun 2018 03:43:48 +0000 (03:43 +0000)]
lra-eliminations.c (update_reg_eliminate): Mark all spanning hard registers for Pmode.

2018-06-23  Dimitar Dimitrov  <dimitar@dinux.eu>

* lra-eliminations.c (update_reg_eliminate): Mark all spanning hard
registers for Pmode.
* lra-lives.c (check_pseudos_live_through_calls): Mark all spanning
hard registers for the clobbered pseudo.

From-SVN: r262205

6 years agoDaily bump.
GCC Administrator [Thu, 28 Jun 2018 00:16:28 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262203

6 years agoC++: don't offer bogus "._0" suggestions (PR c++/86329)
David Malcolm [Wed, 27 Jun 2018 23:21:46 +0000 (23:21 +0000)]
C++: don't offer bogus "._0" suggestions (PR c++/86329)

PR c++/86329 reports that the C++ frontend can offer bogus suggestions like:

#include <string>

int compare()
{
  return __n1 - __n2;
}

suggested.cc: In function 'int compare()':
suggested.cc:5:10: error: '__n1' was not declared in this scope
   return __n1 - __n2;
          ^~~~
suggested.cc:5:10: note: suggested alternative: '._61'
   return __n1 - __n2;
          ^~~~
          ._61
suggested.cc:5:17: error: '__n2' was not declared in this scope
   return __n1 - __n2;
                 ^~~~
suggested.cc:5:17: note: suggested alternative: '._72'
   return __n1 - __n2;
                 ^~~~
                 ._72

The dot-prefixed names are an implementation detail of how we implement
anonymous enums found in the header files, generated via
anon_aggrname_format in make_anon_name.

This patch uses anon_aggrname_p to filter them out when considering
which names to suggest.

gcc/cp/ChangeLog:
PR c++/86329
* name-lookup.c (consider_binding_level): Filter out names that
match anon_aggrname_p.

gcc/testsuite/ChangeLog:
PR c++/86329
* g++.dg/lookup/pr86329.C: New test.

From-SVN: r262199

6 years agoConvert pdp11 back end to CCmode.
Paul Koning [Wed, 27 Jun 2018 21:58:24 +0000 (17:58 -0400)]
Convert pdp11 back end to CCmode.

* common/config/pdp11/pdp11-common.c (pdp11_handle_option): Handle
mutually exclusive options.
* config/pdp11/constraints.md (h): New constraint.
(O): Update definition to match shift code generation.
(D): New constraint.
* config/pdp11/pdp11-modes.def (CCNZ): Define mode.
(CCFP): Remove.
* config/pdp11/pdp11-protos.h (int_no_side_effect_operand): New
function.
(output_jump): Change arguments.
(pdp11_fixed_cc_regs): New function.
(pdp11_cc_mode): Ditto.
(pdp11_expand_shift): Ditto.
(pdp11_assemble_shift): Ditto.
(pdp11_small_shift): Ditto.
(pdp11_branch_cost): Remove.
* config/pdp11/pdp11.c (pdp11_assemble_integer): Remove comments
from output.
(pdp11_register_move_cost): Update for CC registers.
(pdp11_rtx_costs): Add case for LSHIFTRT.
(pdp11_output_jump): Add CCNZ mode conditional branches.
(notice_update_cc_on_set): Remove.
(pdp11_cc_mode): New function.
(simple_memory_operand): Correct pre/post decrement case.
(no_side_effect_operand): New function.
(pdp11_regno_reg_class): Add CC_REGS class.
(pdp11_fixed_cc_regs): New function.
(pdp11_small_shift): New function.
(pdp11_expand_shift): New function to expand shift insns.
(pdp11_assemble_shift): New function to output shifts.
(pdp11_branch_cost): Remove.
(pdp11_modes_tieable_p): Make QI/HI modes tieable.
* config/pdp11/pdp11.h (SIZE_TYPE): Ensure 16-bit type.
(WCHAR_TYPE): Ditto.
(PTRDIFF_TYPE): Ditto.
(ADJUST_INSN_LENGTH): New macro.
(FIXED_REGISTERS): Add CC registers.
(CALL_USED_REGISTERS): Ditto.
(reg_class): Ditto.
(REG_CLASS_NAMES): Ditto.
(REG_CLASS_CONTENTS): Ditto.
(SELECT_CC_MODE): Use new function.
(TARGET_FLAGS_REGNUM): New macro.
(TARGET_FIXED_CONDITION_CODE_REGS): Ditto.
(cc0_reg_rtx): Remove.
(CC_STATUS_MDEP): Remove.
(CC_STATUS_MDEFP_INIT): Remove.
(CC_IN_FPU): Remove.
(NOTICE_UPDATE_CC): Remove.
(REGISTER_NAMES): Add CC registers.
(BRANCH_COST): Change to constant 1.
* config/pdp11/pdp11.md: Rewrite for CCmode condition code
handling.
* config/pdp11/pdp11.opt (mbcopy): Remove.
(mbcopy-builtin): Remove.
(mbranch-cheap): Remove.
(mbranch-expensive): Remove.
* config/pdp11/predicates.md (expand_shift_operand): Update to
match shift code generation.
(ccnz_operator): New predicate.
* doc/invoke.texi (PDP-11 Options): Remove deleted options
-mbcopy, -mbcopy-builtin, -mbranch-cheap, -mbranch-expensive.
Remove non-existent option -mabshi, -mno-abshi.  Document mutually
exclusive options.
* doc/md.texi (PDP-11): Document new D and h constraints.  Update
description of O constraint.

From-SVN: r262198

6 years agoAdd test case that was supposed to be added in commit 255556 on 2017-12-11.
Carl Love [Wed, 27 Jun 2018 21:50:01 +0000 (21:50 +0000)]
Add test case that was supposed to be added in commit 255556 on 2017-12-11.

gcc/testsuite/ChangeLog:

2018-06-27  Carl Love  <cel@us.ibm.com>

Add test case that was supposed to be added in commit 255556 on 2017-12-11.

* gcc.target/vsx-vector-abss.c: New file to test vec_abss.

From-SVN: r262196

6 years agoFix typo in libgcc/Makefile.in
Rainer Orth [Wed, 27 Jun 2018 20:32:27 +0000 (20:32 +0000)]
Fix typo in libgcc/Makefile.in

* Makefile.in (install_leaf): Use enable_gcov instead of
enable_libgcov.

From-SVN: r262195

6 years agostl_vector.h (struct _Vector_base<>::_Vector_impl_data): New.
François Dumont [Wed, 27 Jun 2018 20:23:20 +0000 (20:23 +0000)]
stl_vector.h (struct _Vector_base<>::_Vector_impl_data): New.

2018-06-27  François Dumont  <fdumont@gcc.gnu.org>

* include/bits/stl_vector.h
(struct _Vector_base<>::_Vector_impl_data): New.
(struct _Vector_base<>::_Vector_impl): Inherit from latter.
(_Vector_base<>::_Vector_impl::_M_swap_data): Move...
(_Vector_base<>::_Vector_impl_data::_M_swap_data): ...here.
(_Vector_base<>::_Vector_impl()): Add noexcept qualification.
(_Vector_base<>::_Vector_impl(_Vector_impl&&)): New.
(_Vector_base<>::_Vector_impl(_Tp_alloc_type&&, _Vector_impl&&)): New.
(_Vector_base(const allocator_type&, _Vector_base&&)): New, use latter.
(_Vector_base()): Default.
(_Vector_base(_Vector_base&&)): Default.
(_Vector_base(size_t)) [_GLIBCXX_INLINE_VERSION]: Delete.
(_Vector_base(_Tp_alloc_type&&)) [_GLIBCXX_INLINE_VERSION]: Delete.
(_Vector_base::_M_create_storage(size_t)): Make protected.
(vector()): Default.
(vector(vector&&)): Default.
(vector(vector&&, const allocator_type&, true_type)): New.
(vector(vector&&, const allocator_type&, false_type)): New.
(vector(vector&&, const allocator_type&)): Use latters.
(vector(_InputIte, _InputIte, const allocator_type&)): Call
_M_range_initialize directly.
* include/debug/vector
(vector(vector&&, const allocator_type&)): Add noexcept qualification.
* testsuite/23_containers/vector/allocator/default_init.cc: New.
* testsuite/23_containers/vector/cons/noexcept_move_construct.cc: Add
static assertions.

From-SVN: r262194

6 years agov850.md (addsi3_set_flags): New pattern.
Jeff Law [Wed, 27 Jun 2018 18:32:48 +0000 (12:32 -0600)]
v850.md (addsi3_set_flags): New pattern.

* config/v850/v850.md (addsi3_set_flags): New pattern.
(subsi3_set_flags, negsi2_set_flags, andsi3_set_flags): Likewise.
(iorsi3_set_flags, xorsi3_set_flags, one_cmplsi2_set_flags): Likewise.
(zero_extendhisi2_v850_set_flags): Likewise.
(zero_extendqisi2_v850_set_flags): Likewise.
(ashlsi3_set_flags, ashlsi3_v850e2_set_flags): Likewise.
(lshrsi3_set_flags, lshrsi3_v850e2_set_flags): Likewise.
(ashrsi3_set_flags, ashrsi3_v850e2_set_flags): Likewise.

Co-Authored-By: Austin Law <austinklaw@gmail.com>
From-SVN: r262192

6 years agov850-protos.h (notice_update_cc): Remove.
Jeff Law [Wed, 27 Jun 2018 18:31:10 +0000 (12:31 -0600)]
v850-protos.h (notice_update_cc): Remove.

* config/v850/v850-protos.h (notice_update_cc): Remove.
* config/v850/v850.c (v850_compare_op0, v850_compare_op1): Remove.
(v850_print_operand): Handle 'D' and "d".
(v850_select_cc_mode): Remove ATTRIBUTE_UNUSED for last argument.
Add handling of arithmetic/logical operations compared against zero.
(v850_gen_float_compare): Remove ATTRIBUTE_UNUSED for last argument.
Do not look at v850_compare_op, instead get mode from last argument.
(v850_gen_compare): Remove
(increment_stack): Use addsi3_clobber_flags to avoid splitting failure
after reload for prologue insns.
(expand_prologue): Account for CLOBBER of CC_REGNUM in various
patterns.
(construct_save_jarl): Likewise.
(TARGET_FLAGS_REGNUM): Define.
* config/v850/v850.h (v850_compare_op0, v850_compare_op1): Remove.
(NOTICE_UPDATE_CC): Remove.
* config/v850/v850.md (v850_tst1): Use (reg:CCZ CC_REGNUM) rather
than cc0.  Conditionalize on reload_completed.
(cmpsi_insn, setfcc_insn): Likewise.
(tst1 splitter): Turn into define_and_split which sets the flags
after reload.
(cstoresi4, cbranchsf4, cbranchdf4, cbranchsi4_insn): Likewise.
(cbranchsi4, branch_normal, branch_invert): Do not expose cc0 here.
(cstoresf4, cstoredf4): Clobber the flags.
(cmpsi, cmpsf, cmpdf): Remove expanders.
(setf_insn): Remove pattern.
(addsi3): Turn into define_and_split which clobbers the flags after
reload and a suitable pattern (addsi3_clobber_flags) for use after
reload.
(subsi3, negsi2, andsi3, iorsi3, xorsi3, one_cmplsi2) Likewise.
(ashlsi3, ashlsi3_v850e2, lshrsi3, lsh4si3_v850e2): Likewise.
(ashrsi3, ashrsi3_v850e2): Likewise.
(bins): Clobber the flags.
(movsicc_normal_cc, movsicc_normal, movsicc_tst1): Likewise.
(movsicc_tst1_revesed, sasf, swap and rotate patterns): Likewise.
(fix_loop_counter, call_internal_short, call_internal_long): Likewise.
(call_value_internal_short, call_value_internal_long): Likewise.
(callt_save_interrupt, callt_return_interrupt): Likewise.
(save_interrupt, return_interrupt): Likewise.
(callt_save_all_interrupt, save_all_interrupt): Likewise.
(_save_all_interrupt, callt_restore_all_interrupt): Likewise.
(restore_all_interrupt, _restore_all_interrupt): Likewise.
(All FP comparisons): Only allow after reload has completed.
(trfsr): Likewise.
(divh, divhu): Tweak output template.
(branch_z_normal, branch_z_invert): Remove
(branch_nz_normal, branch_nz_invert): Likewise.
(extendhisi_insn, extendqisi_insn): Do not clobber flags.

Co-Authored-By: Austin Law <austinklaw@gmail.com>
From-SVN: r262190

6 years agov850-modes.def (CCZ, CCNZ): Add new modes.
Jeff Law [Wed, 27 Jun 2018 18:30:06 +0000 (12:30 -0600)]
v850-modes.def (CCZ, CCNZ): Add new modes.

* config/v850/v850-modes.def (CCZ, CCNZ): Add new modes.
* config/v850/v850.c (notice_update_cc): Remove.
* config/v850/v850.h  (CC_OVERFLOW_UNUSABLE): Remove
(CC_NO_CARRY): Likewise.
(NOTICE_UPDATE_CC): Define to nothing.
* config/v850/v850.md: Remove block comment on cc0 handling
Remove "cc" attribute from all patterns.  Remove cc_status handling
from all patterns.  Minor formatting fixes.

Co-Authored-By: Austin Law <austinklaw@gmail.com>
From-SVN: r262189

6 years agoAvoid crash on friend in nested class template.
Jason Merrill [Wed, 27 Jun 2018 17:29:51 +0000 (13:29 -0400)]
Avoid crash on friend in nested class template.

* name-lookup.c (do_pushtag): If we skip a class level, also skip
its template level.

From-SVN: r262188

6 years ago[AArch64] Add support for Arm Cortex-A76
Kyrylo Tkachov [Wed, 27 Jun 2018 14:33:16 +0000 (14:33 +0000)]
[AArch64] Add support for Arm Cortex-A76

The Cortex-A76 is an Armv8.2-A processor with dotproduct and FP16 support.
It can be paired with the Cortex-A55 and hence the option
-mcpu/-mtune=cortex-a76.cortex-a55 is also introduced.

Bootstrapped and tested on aarch64-none-linux-gnu.

* config/aarch64/aarch64-cores.def (cortex-a76): New entry.
(cortex-a76.cortex-a55): Likewise.
* config/aarch64/aarch64-tune.md: Regenerate.
* doc/invoke.texi (AArch64 Options): Document cortex-a76 and
cortex-a76.cortex-a55.

From-SVN: r262186