platform/upstream/gcc.git
6 years agolibcpp: move line typedef and column-numbering comment to top of file
David Malcolm [Mon, 13 Nov 2017 19:07:26 +0000 (19:07 +0000)]
libcpp: move line typedef and column-numbering comment to top of file

The description of our 1-based column-numbering convention was in
a non-obvious place withn line-map.h; this patch moves it to the top
of that header.

libcpp/ChangeLog:
* include/line-map.h (linenum_type): Move this typedef and the
comment describing column numbering to near the top of the file.

From-SVN: r254703

6 years agomatch.pd: Convert fminf<N>...
Michael Meissner [Mon, 13 Nov 2017 19:06:49 +0000 (19:06 +0000)]
match.pd: Convert fminf<N>...

[gcc]
2017-11-13  Michael Meissner  <meissner@linux.vnet.ibm.com>

* match.pd: Convert fminf<N>, fminf<N>x, fmax<N>, and fmax<N>x
into the min/max operations for _Float<N> and _Float<N>X types.

[gcc/testsuite]
2017-11-13  Michael Meissner  <meissner@linux.vnet.ibm.com>

* gcc.target/powerpc/float128-minmax.c: New test.

From-SVN: r254702

6 years agore PR lto/81351 (Many LTO testcases FAIL)
Eric Botcazou [Mon, 13 Nov 2017 17:29:37 +0000 (17:29 +0000)]
re PR lto/81351 (Many LTO testcases FAIL)

PR lto/81351
* dwarf2out.c (do_eh_frame): New static variable.
(dwarf2out_begin_prologue): Set it.
(dwarf2out_frame_finish): Test it instead of dwarf2out_do_eh_frame.

From-SVN: r254700

6 years ago* tree-ssa-coalesce.c (coalesce_cost): Fix formating.
Jan Hubicka [Mon, 13 Nov 2017 17:28:01 +0000 (18:28 +0100)]
* tree-ssa-coalesce.c (coalesce_cost): Fix formating.

From-SVN: r254699

6 years ago* tree-ssa-sink.c (select_best_block): Do not use frequencies.
Jan Hubicka [Mon, 13 Nov 2017 17:27:13 +0000 (18:27 +0100)]
* tree-ssa-sink.c (select_best_block): Do not use frequencies.

From-SVN: r254698

6 years agore PR lto/81351 (Many LTO testcases FAIL)
Eric Botcazou [Mon, 13 Nov 2017 17:26:41 +0000 (17:26 +0000)]
re PR lto/81351 (Many LTO testcases FAIL)

PR lto/81351
* debug.h (dwarf2out_do_eh_frame): Declare.
* dwarf2cfi.c (dwarf2out_do_eh_frame): New predicate.
(dwarf2out_do_frame): Use it.
(dwarf2out_do_cfi_asm): Likewise.
* dwarf2out.c (dwarf2out_frame_finish): Likewise.
(dwarf2out_assembly_start): Likewise.
(dwarf2out_begin_prologue): Fix comment.
* toplev.c (compile_file): Always call dwarf2out_frame_finish
if the target needs either debug or unwind DWARF2 info.
* lto-opts.c (lto_write_options): Do not save -fexceptions,
-fnon-call-exceptions, -ffp-contract, -fmath-errno, -fsigned-zeros,
-ftrapping-math, -ftrapv and -fwrapv.

From-SVN: r254697

6 years agocgraph.c (cgraph_edge::sreal_frequency): New function.
Jan Hubicka [Mon, 13 Nov 2017 17:23:25 +0000 (18:23 +0100)]
cgraph.c (cgraph_edge::sreal_frequency): New function.

* cgraph.c (cgraph_edge::sreal_frequency): New function.
* cgraph.h (cgraph_edge::sreal_frequency): Declare.
* ipa-fnsummary.c (dump_ipa_call_summary): Use sreal_frequency.
(estimate_edge_size_and_time): Likewise.
(ipa_merge_fn_summary_after_inlining): Likewise.
* ipa-inline.c (cgraph_freq_base_rec): Remove.
(compute_uninlined_call_time): Use sreal_frequency.
(compute_inlined_call_time): Likewise.
(ipa_inline): Do not initialize cgraph_freq_base_rec.
* profile-count.c: Include sreal.h.
(profile_count::to_sreal_scale): New.
* profile-count.h: Forward declare sreal.
(profile_count::to_sreal_scale): Declare.

From-SVN: r254696

6 years agoRemove the null check from placement new in all modes
Ville Voutilainen [Mon, 13 Nov 2017 17:02:06 +0000 (19:02 +0200)]
Remove the null check from placement new in all modes

gcc/cp/

Remove the null check from placement new in all modes
* init.c (build_new_1): Don't do a null check for
a namespace-scope non-replaceable placement new
in any mode unless -fcheck-new is provided.

testsuite/

Remove the null check from placement new in all modes
* g++.dg/init/pr35878_1.C: Adjust.
* g++.dg/init/pr35878_4.C: New.
* g++.dg/torture/pr48695.C: Adjust.
* g++.dg/tree-ssa/pr31146-2.C: Likewise.
* g++.dg/tree-ssa/pr41428.C: Adjust.

From-SVN: r254694

6 years ago[ARM] Fix more -Wreturn-type fallout (gcc.target/arm/pr67989.C).
Christophe Lyon [Mon, 13 Nov 2017 16:36:10 +0000 (16:36 +0000)]
[ARM] Fix more -Wreturn-type fallout (gcc.target/arm/pr67989.C).

2017-11-13  Christophe Lyon  <christophe.lyon@linaro.org>

* gcc.target/arm/pr67989.C: Add -Wno-return-type to
dg-additional-options.

From-SVN: r254692

6 years ago[Diagnostic Patch] don't print column zero
Nathan Sidwell [Mon, 13 Nov 2017 15:32:34 +0000 (15:32 +0000)]
[Diagnostic Patch] don't print column zero

https://gcc.gnu.org/ml/gcc-patches/2017-10/msg01911.html
* diagnostic.c (maybe_line_and_column): New.
(diagnostic_get_location_text): Use it.
(diagnostic_report_current_module): Likewise.
(test_diagnostic_get_location_text): Add tests.

* lib/gcc-dg.exp (process-message): Use -: for no column.
* c-c++-common/cilk-plus/CK/cilk_for_grain_errors.c: Mark elided
column messages.
* c-c++-common/cpp/pr58844-1.c: Likewise.
* c-c++-common/cpp/pr58844-2.c: Likewise.
* c-c++-common/cpp/warning-zero-location.c: Likewise.
* g++.dg/diagnostic/pr77949.C: Likewise.
* g++.dg/gomp/macro-4.C: Likewise.
* gcc.dg/Wunknownprag.c: Likewise.
* gcc.dg/builtin-redefine.c: Likewise.
* gcc.dg/cpp/Wunknown-pragmas-1.c: Likewise.
* gcc.dg/cpp/Wunused.c: Likewise.
* gcc.dg/cpp/misspelled-directive-1.c: Likewise.
* gcc.dg/cpp/redef2.c: Likewise.
* gcc.dg/cpp/redef3.c: Likewise.
* gcc.dg/cpp/redef4.c: Likewise.
* gcc.dg/cpp/trad/Wunused.c: Likewise.
* gcc.dg/cpp/trad/argcount.c: Likewise.
* gcc.dg/cpp/trad/comment-3.c: Likewise.
* gcc.dg/cpp/trad/comment.c: Likewise.
* gcc.dg/cpp/trad/defined.c: Likewise.
* gcc.dg/cpp/trad/directive.c: Likewise.
* gcc.dg/cpp/trad/funlike-3.c: Likewise.
* gcc.dg/cpp/trad/funlike.c: Likewise.
* gcc.dg/cpp/trad/literals-2.c: Likewise.
* gcc.dg/cpp/trad/macro.c: Likewise.
* gcc.dg/cpp/trad/pr65238-4.c: Likewise.
* gcc.dg/cpp/trad/recurse-1.c: Likewise.
* gcc.dg/cpp/trad/recurse-2.c: Likewise.
* gcc.dg/cpp/trad/redef2.c: Likewise.
* gcc.dg/cpp/ucnid-11.c: Likewise.
* gcc.dg/cpp/unc1.c: Likewise.
* gcc.dg/cpp/unc2.c: Likewise.
* gcc.dg/cpp/unc3.c: Likewise.
* gcc.dg/cpp/unc4.c: Likewise.
* gcc.dg/cpp/undef2.c: Likewise.
* gcc.dg/cpp/warn-redefined-2.c: Likewise.
* gcc.dg/cpp/warn-redefined.c: Likewise.
* gcc.dg/cpp/warn-unused-macros-2.c: Likewise.
* gcc.dg/cpp/warn-unused-macros.c: Likewise.
* gcc.dg/empty-source-2.c: Likewise.
* gcc.dg/empty-source-3.c: Likewise.
* gcc.dg/gomp/macro-4.c: Likewise.
* gcc.dg/noncompile/pr35447-1.c: Likewise.
* gcc.dg/plugin/location-overflow-test-1.c: Likewise.
* gcc.dg/pr20245-1.c: Likewise.
* gcc.dg/pr28419.c: Likewise.
* gcc.dg/rtl/truncated-rtl-file.c: Likewise.
* gcc.dg/unclosed-init.c: Likewise.

From-SVN: r254691

6 years agoieee_8.f90: xfail for aarch64*-*-gnu*
Charles Baylis [Mon, 13 Nov 2017 13:38:16 +0000 (13:38 +0000)]
ieee_8.f90: xfail for aarch64*-*-gnu*

gcc/testsuite/ChangeLog:

2017-11-13  Charles Baylis  <charles.baylis@linaro.org>

        * gfortran.dg/ieee/ieee_8.f90: xfail for aarch64*-*-gnu*

From-SVN: r254689

6 years ago[Documentation] Fix latency in pipeline description example
Luis Machado [Mon, 13 Nov 2017 10:29:33 +0000 (10:29 +0000)]
[Documentation] Fix latency in pipeline description example

2017-11-09  Luis Machado  <luis.machado@linaro.org>

gcc/
* doc/md.texi (Specifying processor pipeline description): Fix
incorrect latency for the div instruction example.

From-SVN: r254680

6 years agore PR tree-optimization/78821 (GCC7: Copying whole 32 bits structure field by field...
Jakub Jelinek [Mon, 13 Nov 2017 10:26:13 +0000 (11:26 +0100)]
re PR tree-optimization/78821 (GCC7: Copying whole 32 bits structure field by field not optimised into copying whole 32 bits at once)

PR tree-optimization/78821
* gimple-ssa-store-merging.c (compatible_load_p): Don't require
that bit_not_p is the same.
(imm_store_chain_info::coalesce_immediate_stores): Likewise.
(split_group): Count precisely bit_not_p bits in each statement.
(invert_op): New function.
(imm_store_chain_info::output_merged_store): Use invert_op to
emit BIT_XOR_EXPR with a xor_mask instead of BIT_NOT_EXPR if some
but not all orig_stores have BIT_NOT_EXPR in the corresponding spots.

* gcc.dg/store_merging_15.c: New test.

From-SVN: r254679

6 years agoGCOV: remove typedef of coverage_t.
Martin Liska [Mon, 13 Nov 2017 09:06:54 +0000 (10:06 +0100)]
GCOV: remove typedef of coverage_t.

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (struct coverage_info): Remove typedef of coverage_t.
(struct source_info): Likewise.
(add_branch_counts): Likewise.
(add_line_counts): Likewise.
(function_summary): Likewise.
(output_intermediate_line): Likewise.
(generate_results): Likewise.

From-SVN: r254678

6 years agoGCOV: remove typedef for block_t
Martin Liska [Mon, 13 Nov 2017 09:06:43 +0000 (10:06 +0100)]
GCOV: remove typedef for block_t

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (struct block_info): Remove typedef for block_t.
(struct line_info): Likewise.
(line_info::has_block): Likewise.
(EXIT_BLOCK): Likewise.
(unblock): Likewise.
(circuit): Likewise.
(get_cycles_count): Likewise.
(process_file): Likewise.
(read_graph_file): Likewise.
(solve_flow_graph): Likewise.
(find_exception_blocks): Likewise.
(add_line_counts): Likewise.
(accumulate_line_info): Likewise.
(output_line_details): Likewise.

From-SVN: r254677

6 years agoGCOV: remove typedef for arc_t
Martin Liska [Mon, 13 Nov 2017 09:06:26 +0000 (10:06 +0100)]
GCOV: remove typedef for arc_t

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (struct arc_info): Remove typedef for arc_t.
(struct line_info): Likewise.
(add_branch_counts): Likewise.
(output_branch_count): Likewise.
(function_info::~function_info): Likewise.
(circuit): Likewise.
(output_intermediate_line): Likewise.
(read_graph_file): Likewise.
(solve_flow_graph): Likewise.
(find_exception_blocks): Likewise.
(add_line_counts): Likewise.
(accumulate_line_info): Likewise.
(output_line_details): Likewise.
(output_function_details): Likewise.

From-SVN: r254676

6 years agoGCOV: remove typedef for function_t
Martin Liska [Mon, 13 Nov 2017 09:06:13 +0000 (10:06 +0100)]
GCOV: remove typedef for function_t

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (struct function_info): Remove typedef for function_t.
(struct source_info): Likewise.
(source_info::get_functions_at_location): Likewise.
(solve_flow_graph): Likewise.
(find_exception_blocks): Likewise.
(add_line_counts): Likewise.
(output_intermediate_file): Likewise.
(process_file): Likewise.
(generate_results): Likewise.
(release_structures): Likewise.
(read_graph_file): Likewise.
(read_count_file): Likewise.
(accumulate_line_counts): Likewise.
(output_lines): Likewise.

From-SVN: r254675

6 years agoGCOV: introduce vector for function_info::counts.
Martin Liska [Mon, 13 Nov 2017 09:05:55 +0000 (10:05 +0100)]
GCOV: introduce vector for function_info::counts.

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (function_info::function_info): Remove num_counts
and add vector<gcov_type>.
(function_info::~function_info): Use the vector.
(process_file): Likewise.
(read_graph_file): Likewise.
(read_count_file): Likewise.
(solve_flow_graph): Likewise.

From-SVN: r254674

6 years agoGCOV: simplify usage of function_info::artificial.
Martin Liska [Mon, 13 Nov 2017 09:05:38 +0000 (10:05 +0100)]
GCOV: simplify usage of function_info::artificial.

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (function_info::is_artificial): New function.
(process_file): Erase all artificial early.
(generate_results): Skip as all artificial are already
removed.

From-SVN: r254673

6 years agoGCOV: introduce global vector of functions
Martin Liska [Mon, 13 Nov 2017 09:05:20 +0000 (10:05 +0100)]
GCOV: introduce global vector of functions

2017-11-13  Martin Liska  <mliska@suse.cz>

* gcov.c (read_graph_file): Store to global vector of functions.
(read_count_file): Iterate the vector.
(process_file): Likewise.
(generate_results): Likewise.
(release_structures): Likewise.

From-SVN: r254672

6 years agore PR tree-optimization/82954 (ICE in fold_binary_loc, at fold-const.c:9061)
Jakub Jelinek [Mon, 13 Nov 2017 09:01:24 +0000 (10:01 +0100)]
re PR tree-optimization/82954 (ICE in fold_binary_loc, at fold-const.c:9061)

PR tree-optimization/82954
* gimple-ssa-store-merging.c
(imm_store_chain_info::coalesce_immediate_stores): If
!infof->ops[N].base_addr, split group if info->ops[N].base_addr.

* gcc.c-torture/execute/pr82954.c: New test.

From-SVN: r254671

6 years ago[AArch64] More aarch64_endian_lane_rtx
Richard Sandiford [Mon, 13 Nov 2017 08:21:16 +0000 (08:21 +0000)]
[AArch64] More aarch64_endian_lane_rtx

r254466 failed to update some uses of ENDIAN_LANE_N that were added after
the patch was initially written, which meant that we were treating the
mode number as an element count.

2017-11-13  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/aarch64/aarch64-simd.md (aarch64_store_lane0<mode>):
Upddate call to ENDIAN_LANE_N.
(aarch64_<sur>dot_lane<vsi2qi>): Use aarch64_endian_lane_rtx.
(aarch64_<sur>dot_laneq<vsi2qi>): Likewise.
(*aarch64_simd_vec_copy_lane<mode>): Update calls to ENDIAN_LANE_N
and use aarch64_endian_lane_rtx.
(*aarch64_simd_vec_copy_lane_<vswap_width_name><mode>): Likewise.

From-SVN: r254670

6 years agoDaily bump.
GCC Administrator [Mon, 13 Nov 2017 00:16:19 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r254669

6 years ago[riscv] Wrap ASM_OUTPUT_LABELREF in do {} while (0)
Tom de Vries [Sun, 12 Nov 2017 16:07:30 +0000 (16:07 +0000)]
[riscv] Wrap ASM_OUTPUT_LABELREF in do {} while (0)

2017-11-12  Tom de Vries  <tom@codesourcery.com>

* config/riscv/riscv.h (ASM_OUTPUT_LABELREF): Wrap in do {} while (0).

From-SVN: r254666

6 years agoRemove semicolon after ASM_OUTPUT_ASCII
Tom de Vries [Sun, 12 Nov 2017 16:07:19 +0000 (16:07 +0000)]
Remove semicolon after ASM_OUTPUT_ASCII

2017-11-12  Tom de Vries  <tom@codesourcery.com>

* config/elfos.h (ASM_OUTPUT_ASCII): Remove semicolon after macro body.

From-SVN: r254665

6 years ago[cr16, powerpcspe, rs6000] Remove semicolon after ASM_OUTPUT_LABELREF macro body
Tom de Vries [Sun, 12 Nov 2017 16:07:08 +0000 (16:07 +0000)]
[cr16, powerpcspe, rs6000] Remove semicolon after ASM_OUTPUT_LABELREF macro body

2017-11-12  Tom de Vries  <tom@codesourcery.com>

* config/cr16/cr16.h (ASM_OUTPUT_LABELREF): Remove semicolon after macro
body.
* config/powerpcspe/xcoff.h (ASM_OUTPUT_LABELREF): Same.
* config/rs6000/xcoff.h (ASM_OUTPUT_LABELREF): Same.
* defaults.h (ASM_OUTPUT_LABELREF): Same.

From-SVN: r254664

6 years agoDaily bump.
GCC Administrator [Sun, 12 Nov 2017 00:16:16 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r254663

6 years agore PR fortran/82932 ([OOP] ICE in update_compcall_arglist, at fortran/resolve.c:5837)
Janus Weil [Sat, 11 Nov 2017 21:54:41 +0000 (22:54 +0100)]
re PR fortran/82932 ([OOP] ICE in update_compcall_arglist, at fortran/resolve.c:5837)

2017-11-11  Janus Weil  <janus@gcc.gnu.org>

PR fortran/82932
* resolve.c (update_compcall_arglist): Improve error recovery,
remove a gcc_assert.

2017-11-11  Janus Weil  <janus@gcc.gnu.org>

PR fortran/82932
* gfortran.dg/typebound_call_29.f90: New test.

From-SVN: r254660

6 years agore PR c/81117 (Improve buffer overflow checking in strncpy)
Martin Sebor [Sat, 11 Nov 2017 18:04:21 +0000 (18:04 +0000)]
re PR c/81117 (Improve buffer overflow checking in strncpy)

gcc/ChangeLog:

PR c/81117
* doc/extend.texi (attribute nonstring): Remove spurious argument.

From-SVN: r254659

6 years agoPR bootstrap/82948 - prefix.c:202:15: error: 'char* strncpy(char*, const char*,
Martin Sebor [Sat, 11 Nov 2017 17:43:48 +0000 (17:43 +0000)]
PR bootstrap/82948 - prefix.c:202:15: error: 'char* strncpy(char*, const char*,

   size_t)' destination unchanged after copying no bytes

gcc/ChangeLog:

PR bootstrap/82948
* prefic.c (translate_name): Replace strncpy with memcpy to
avoid -Wstringop-truncation.

From-SVN: r254658

6 years agoAdd forgotten tests.
Kirill Yukhin [Sat, 11 Nov 2017 17:09:25 +0000 (17:09 +0000)]
Add forgotten tests.

From-SVN: r254657

6 years ago* tree-ssa-loop-im.c (execute_sm_if_changed): Do not compute freq_sum.
Jan Hubicka [Sat, 11 Nov 2017 13:06:07 +0000 (14:06 +0100)]
* tree-ssa-loop-im.c (execute_sm_if_changed): Do not compute freq_sum.

From-SVN: r254653

6 years ago* predict.c (maybe_hot_frequency_p): Do not use cfun.
Jan Hubicka [Sat, 11 Nov 2017 13:04:25 +0000 (13:04 +0000)]
* predict.c (maybe_hot_frequency_p): Do not use cfun.

From-SVN: r254652

6 years ago* predict.c (maybe_hot_frequency_p): Do not use cfun.
Jan Hubicka [Sat, 11 Nov 2017 12:59:33 +0000 (12:59 +0000)]
* predict.c (maybe_hot_frequency_p): Do not use cfun.

From-SVN: r254651

6 years agotree-ssa-tail-merge.c (replace_block_by): Fix and re-enable profile merging.
Jan Hubicka [Sat, 11 Nov 2017 12:58:13 +0000 (13:58 +0100)]
tree-ssa-tail-merge.c (replace_block_by): Fix and re-enable profile merging.

* tree-ssa-tail-merge.c (replace_block_by): Fix and re-enable profile
merging.

From-SVN: r254650

6 years agoRemove ada/ prefix
Eric Botcazou [Sat, 11 Nov 2017 11:24:36 +0000 (11:24 +0000)]
Remove ada/ prefix

From-SVN: r254649

6 years agore PR fortran/82886 (ICE with -finit-derived in gfc_conv_expr, at fortran/trans-expr...
Fritz Reese [Sat, 11 Nov 2017 00:47:53 +0000 (00:47 +0000)]
re PR fortran/82886 (ICE with -finit-derived in gfc_conv_expr, at fortran/trans-expr.c:7807)

2017-11-10  Fritz Reese <fritzoreese@gmail.com>

    PR fortran/82886

    gcc/fortran/ChangeLog:

PR fortran/82886
* gfortran.h (gfc_build_init_expr): New prototype.
* invoke.texi (finit-derived): Update documentation.
* expr.c (gfc_build_init_expr): New, from gfc_build_default_init_expr.
(gfc_build_default_init_expr): Redirect to gfc_build_init_expr(,,false)
(component_initializer): Force building initializers using
gfc_build_init_expr(,,true).

    gcc/testsuite/ChangeLog:

PR fortran/82886
* gfortran.dg/init_flag_16.f03: New testcase.

From-SVN: r254648

6 years agoDaily bump.
GCC Administrator [Sat, 11 Nov 2017 00:16:14 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r254647

6 years agoMinor tweak to libstdc++ testsuite helper type
Jonathan Wakely [Sat, 11 Nov 2017 00:10:07 +0000 (00:10 +0000)]
Minor tweak to libstdc++ testsuite helper type

* testsuite/util/testsuite_tr1.h (ThrowMoveConsClass): Use noexcept.

From-SVN: r254644

6 years agors6000.md (bswaphi2_reg): On ISA 3.0 systems, enable generating XXBRH if the value...
Michael Meissner [Fri, 10 Nov 2017 22:59:40 +0000 (22:59 +0000)]
rs6000.md (bswaphi2_reg): On ISA 3.0 systems, enable generating XXBRH if the value is in a vector register.

[gcc]
2017-11-10  Michael Meissner  <meissner@linux.vnet.ibm.com>

* config/rs6000/rs6000.md (bswaphi2_reg): On ISA 3.0 systems,
enable generating XXBRH if the value is in a vector register.
(bswapsi2_reg): On ISA 3.0 systems, enable generating XXBRW if the
value is in a vector register.
(bswapdi2_reg): On ISA 3.0 systems, always use XXBRD to do
register to register bswap64's instead of doing the GPR sequence
used on previous machines.
(bswapdi2_xxbrd): New insn.
(bswapdi2_reg): Disallow on ISA 3.0.
(register to register bswap64 splitter): Do not split the insn on
ISA 3.0 systems that use XXBRD.

[gcc/testsuite]
2017-11-10  Michael Meissner  <meissner@linux.vnet.ibm.com>

* gcc.target/powerpc/p9-xxbr-3.c: New test.

From-SVN: r254643

6 years agoFix my last ChangeLog entry
Jeff Law [Fri, 10 Nov 2017 22:51:42 +0000 (15:51 -0700)]
Fix my last ChangeLog entry

From-SVN: r254642

6 years agore PR c/81117 (Improve buffer overflow checking in strncpy)
Martin Sebor [Fri, 10 Nov 2017 22:48:43 +0000 (22:48 +0000)]
re PR c/81117 (Improve buffer overflow checking in strncpy)

gcc/ChangeLog:

PR c/81117
* config/darwin-c.c (framework_construct_pathname): Replace strncpy
with memcpy.
(find_subframework_file): Same.

From-SVN: r254641

6 years agoAdd plugin API for processing plugin-added input files.
Stephen Crane [Fri, 10 Nov 2017 22:10:05 +0000 (22:10 +0000)]
Add plugin API for processing plugin-added input files.

Gold plugins may wish to further process an input file added by a plugin. For
example, the plugin may need to assign a unique segment for sections in a
plugin-generated input file. This patch adds a plugin callback that the linker
will call when reading symbols from a new input file added after the
all_symbols_read event (i.e. an input file added by a plugin).

2017-11-10  Stephen Crane <sjc@immunant.com>

* plugin-api.h: Add plugin API for processing plugin-added
input files.

From-SVN: r254640

6 years agovr-values.h (VR_INITIALIZER): Move #define here.
Jeff Law [Fri, 10 Nov 2017 22:01:53 +0000 (15:01 -0700)]
vr-values.h (VR_INITIALIZER): Move #define here.

* vr-values.h (VR_INITIALIZER): Move #define here.
* gimple-ssa-evrp.c: New file with contents extracted from tree-vrp.c
* Makefile.in (OBJS): Add tree-evrp.o
* tree-vrp.h (assert_info): Move structure definition here.
(set_value_range_to_varying): Prototype.
(vrp_operand_equal_p, range_includes_zero_p): Likewise.
(infer_value_range, register_edge_assert_for): Likewise.
(stmt_interesting_for_vrp): Likewise.
* tree-vrp.c: Move all methods for evrp class into tree-evrp.c.
(set_value_range_to_varying): No longer static.
(vrp_operand_equal_p, range_includes_zero_p): Likewise.
(infer_value_range, register_edge_assert_for): Likewise.

From-SVN: r254639

6 years agoPR libstdc++/82917 add missing returns in <fstream>
Jonathan Wakely [Fri, 10 Nov 2017 21:43:24 +0000 (21:43 +0000)]
PR libstdc++/82917 add missing returns in <fstream>

PR libstdc++/82917
* include/std/fstream (basic_ifstream::open, basic_ofstream::open)
(basic_fstream::open): Fix missing return.

From-SVN: r254638

6 years agoauto-profile.c (afdo_indirect_call): Drop frequency.
Jan Hubicka [Fri, 10 Nov 2017 20:14:52 +0000 (21:14 +0100)]
auto-profile.c (afdo_indirect_call): Drop frequency.

* auto-profile.c (afdo_indirect_call): Drop frequency.
* cgraph.c (symbol_table::create_edge): Drop frequency argument.
(cgraph_node::create_edge): Drop frequency argument.
(cgraph_node::create_indirect_edge): Drop frequency argument.
(cgraph_edge::make_speculative): Drop frequency arguments.
(cgraph_edge::resolve_speculation): Do not update frequencies
(cgraph_edge::dump_edge_flags): Do not dump frequency.
(cgraph_node::dump): Check consistency in IPA mode.
(cgraph_edge::maybe_hot_p): Use IPA counter.
(cgraph_edge::verify_count_and_frequency): Rename to ...
(cgraph_edge::verify_count): ... this one; drop frequency checking.
(cgraph_node::verify_node): Update.
* cgraph.h (struct cgraph_edge): Drop frequency.
(cgraph_edge::frequency): New function.
* cgraphbuild.c (pass_build_cgraph_edges::execute): Donot pass
frequencies.
(cgraph_edge::rebuild_edges): Likewise.
* cgraphclones.c (cgraph_edge::clone): Scale only counts.
(duplicate_thunk_for_node): Do not pass frequency.
(cgraph_node::create_clone): Scale only counts.
(cgraph_node::create_virtual_clone): Do not pass frequency.
(cgraph_node::create_edge_including_clones): Do not pass frequency.
(cgraph_node::create_version_clone): Do not pass frequency.
* cgraphunit.c (cgraph_node::analyze): Do not pass frequency.
(cgraph_node::expand_thunk): Do not pass frequency.
(cgraph_node::create_wrapper): Do not pass frequency.
* gimple-iterator.c (update_call_edge_frequencies): Do not pass
frequency.
* gimple-streamer-in.c (input_bb): Scale only IPA counts.
* ipa-chkp.c (chkp_produce_thunks): Do not pass frequency.
* ipa-cp.c (ipcp_lattice::print): Use frequency function.
(gather_caller_stats): Use frequency function.
(ipcp_cloning_candidate_p): Use frequency function.
(ipcp_propagate_stage): Use frequency function.
(get_info_about_necessary_edges): Use frequency function.
(update_profiling_info): Update only IPA profile.
(update_specialized_profile): Use frequency functoin.
(perhaps_add_new_callers): Update only IPA profile.
* ipa-devirt.c (ipa_devirt): Use IPA profile.
* ipa-fnsummary.c (redirect_to_unreachable): Do not set frequrency.
(dump_ipa_call_summary): Use frequency function.
(estimate_edge_size_and_time): Use frequency function.
(ipa_merge_fn_summary_after_inlining): Use frequency function.
* ipa-inline-analysis.c (do_estimate_edge_time): Use IPA profile.
* ipa-inline-transform.c (update_noncloned_frequencies): Rename to ..
(update_noncloned_counts): ... ths one; scale counts only.
(clone_inlined_nodes): Do not scale frequency.
(inline_call): Do not pass frequency.
* ipa-inline.c (compute_uninlined_call_time): Use IPA profile.
(compute_inlined_call_time): Use IPA profile.
(want_inline_small_function_p): Use IPA profile.
(want_inline_self_recursive_call_p): Use IPA profile.
(edge_badness): Use IPA profile.
(lookup_recursive_calls): Use IPA profile.
(recursive_inlining): Do not pass frequency.
(resolve_noninline_speculation): Do not update frequency.
(inline_small_functions): Collect max of IPA profile.
(dump_overall_stats): Dump IPA porfile.
(dump_inline_stats): Dump IPA porfile.
(ipa_inline): Collect IPA stats.
* ipa-inline.h (clone_inlined_nodes): Update prototype.
* ipa-profile.c (ipa_propagate_frequency_1): Use frequency function.
(ipa_propagate_frequency): Use frequency function.
(ipa_profile): Cleanup.
* ipa-prop.c (ipa_make_edge_direct_to_target): Do not pass frequency
* ipa-utils.c (ipa_merge_profiles): Merge all profiles.
* lto-cgraph.c (lto_output_edge): Do not stream frequency.
(input_node): Do not stream frequency.
(input_edge): Do not stream frequency.
(merge_profile_summaries): Scale only IPA profiles.
* omp-simd-clone.c (simd_clone_adjust): Do not pass frequency.
* predict.c (drop_profile): Do not recompute frequency.
* trans-mem.c (ipa_tm_insert_irr_call): Do not pass frequency.
(ipa_tm_insert_gettmclone_call): Do not pass frequency.
* tree-cfg.c (execute_fixup_cfg): Drop profile to global0 if needed.
* tree-chkp.c (chkp_copy_bounds_for_assign): Do not pass frequency.
* tree-emutls.c (gen_emutls_addr): Do not pass frequency.
* tree-inline.c (copy_bb): Do not scale frequency.
(expand_call_inline): Do not scale frequency.
(tree_function_versioning): Do not scale frequency.
* ubsan.c (ubsan_create_edge): Do not pass frequency.

lto/ChangeLog:

2017-11-10  Jan Hubicka  <hubicka@ucw.cz>

* lto-partition.c (lto_balanced_map): Use frequency accessor.

From-SVN: r254636

6 years agoforce-indirect-call-1.c: Merge scan strings.
Uros Bizjak [Fri, 10 Nov 2017 19:01:50 +0000 (20:01 +0100)]
force-indirect-call-1.c: Merge scan strings.

* gcc.target/i386/force-indirect-call-1.c: Merge scan strings.
* gcc.target/i386/force-indirect-call-2.c: Ditto.
Require fpic effective target.
* gcc.target/i386/force-indirect-call-3.c: Ditto.
Require lp64 effective target.

From-SVN: r254635

6 years agoGFNI enabling [3/4]
Julia Koval [Fri, 10 Nov 2017 18:47:28 +0000 (19:47 +0100)]
GFNI enabling [3/4]

gcc/
 * config/i386/gfniintrin.h (_mm_gf2p8affine_epi64_epi8,
 _mm256_gf2p8affine_epi64_epi8, _mm_mask_gf2p8affine_epi64_epi8,
 _mm_maskz_gf2p8affine_epi64_epi8, _mm256_mask_gf2p8affine_epi64_epi8,
 _mm256_maskz_gf2p8affine_epi64_epi8,
 _mm512_mask_gf2p8affine_epi64_epi8, _mm512_gf2p8affine_epi64_epi8
 _mm512_maskz_gf2p8affine_epi64_epi8): New intrinsics.
 * config/i386/i386-builtin.def (__builtin_ia32_vgf2p8affineqb_v64qi,
 __builtin_ia32_vgf2p8affineqb_v32qi,
 __builtin_ia32_vgf2p8affineqb_v16qi): New builtins.
 * config/i386/sse.md (vgf2p8affineqb_<mode><mask_name>): New pattern.
gcc/testsuite/
 * gcc.target/i386/avx-1.c: Handle new intrinsics.
 * gcc.target/i386/avx512f-gf2p8affineqb-2.c: New runtime tests.
 * gcc.target/i386/avx512vl-gf2p8affineqb-2.c: Ditto.
 * gcc.target/i386/gfni-1.c: Add tests for GF2P8AFFINE.
 * gcc.target/i386/gfni-2.c: Ditto.
 * gcc.target/i386/gfni-3.c: Ditto.
 * gcc.target/i386/gfni-4.c: Ditto.
 * gcc.target/i386/sse-13.c: Handle new tests.
 * gcc.target/i386/sse-14.c: Handle new tests.
 * gcc.target/i386/sse-23.c: Handle new tests.

From-SVN: r254634

6 years ago[testsuite/ARM] Consolidate sources for cmse tests
Thomas Preud'homme [Fri, 10 Nov 2017 18:20:33 +0000 (18:20 +0000)]
[testsuite/ARM] Consolidate sources for cmse tests

For the most part, testcases under gcc.target/arm/cmse/baseline and
gcc.target/arm/cmse/mainline are duplicate copies with only different
dejagnu directives. Although there is no requirement for them to be
similar, having them both identical allow to compare the code generated
and make it easier in case of change in code generation to both
architecture to update the testcases (if one needs updating so does the
other).

Similarly all the tests in gcc.target/arm/cmse/mainline/<floatabi> have
the same source but are duplicate copies.

This patch moves all the code in the tests to a parent directory:
gcc.target/arm/cmse for tests shared by Armv8-M Baseline and Mainline
and gcc.target/arm/cmse/mainline for tests *only* shared by the various
float ABI of Armv8-M Mainline. C includes are then used where the code
used to sit.

Note that the cmse-13.c test used to differ slightly between
architectures and float ABI tested in the first floating-point constant
passed to bar: sometimes 1.0 and sometimes 3.0. This patch settles on
3.0 to not confuse with the 1.0 constant used to clear VFP registers in
some of the configurations.

2017-11-10  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/testsuite/
    * gcc.target/arm/cmse/bitfield-4.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-4.c: Remove code and include
    above file.
    * gcc.target/arm/cmse/mainline/bitfield-4.c: Likewise.
    * gcc.target/arm/cmse/bitfield-5.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-5.c: Remove code and include
    above file.
    * gcc.target/arm/cmse/mainline/bitfield-5.c: Likewise.
    * gcc.target/arm/cmse/bitfield-6.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-6.c: Remove code and include
    above file.
    * gcc.target/arm/cmse/mainline/bitfield-6.c: Likewise.
    * gcc.target/arm/cmse/bitfield-7.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-7.c: Remove code and include
    above file.
    * gcc.target/arm/cmse/mainline/bitfield-7.c: Likewise.
    * gcc.target/arm/cmse/bitfield-8.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-8.c: Remove code and include
    above file.
    * gcc.target/arm/cmse/mainline/bitfield-8.c: Likewise.
    * gcc.target/arm/cmse/bitfield-9.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-9.c: Remove code and include
    above file.
    * gcc.target/arm/cmse/mainline/bitfield-9.c: Likewise.
    * gcc.target/arm/cmse/bitfield-and-union.x: New file.
    * gcc.target/arm/cmse/baseline/bitfield-and-union-1.c: Rename into ...
    * gcc.target/arm/cmse/baseline/bitfield-and-union.c: This.  Remove code
    and include above bitfield-and-union.x file.
    * gcc.target/arm/cmse/mainline/bitfield-and-union-1.c: Rename into ...
    * gcc.target/arm/cmse/mainline/bitfield-and-union.c: this.  Remove code
    and include above bitfield-and-union.x file.
    * gcc.target/arm/cmse/cmse-13.x: New file.
    * gcc.target/arm/cmse/baseline/cmse-13.c: Remove code and include above
    file.
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-13.c: Likewise.
    * gcc.target/arm/cmse/mainline/hard/cmse-13.c: Likewise.
    * gcc.target/arm/cmse/mainline/soft/cmse-13.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp/cmse-13.c: Likewise.
    * gcc.target/arm/cmse/cmse-5.x: New file.
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-5.c: Remove code and
    include above file.
    * gcc.target/arm/cmse/mainline/hard/cmse-5.c: Likewise.
    * gcc.target/arm/cmse/mainline/soft/cmse-5.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp-sp/cmse-5.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp/cmse-5.c: Likewise.
    * gcc.target/arm/cmse/cmse-7.x: New file.
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-7.c: Remove code and
    include above file.
    * gcc.target/arm/cmse/mainline/hard/cmse-7.c: Likewise.
    * gcc.target/arm/cmse/mainline/soft/cmse-7.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp-sp/cmse-7.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp/cmse-7.c: Likewise.
    * gcc.target/arm/cmse/cmse-8.x: New file.
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-8.c: Remove code and
    include above file.
    * gcc.target/arm/cmse/mainline/hard/cmse-8.c: Likewise.
    * gcc.target/arm/cmse/mainline/soft/cmse-8.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp-sp/cmse-8.c: Likewise.
    * gcc.target/arm/cmse/mainline/softfp/cmse-8.c: Likewise.
    * gcc.target/arm/cmse/union-1.x: New file.
    * gcc.target/arm/cmse/baseline/union-1.c: Remove code and include above
    file.
    * gcc.target/arm/cmse/mainline/union-1.c: Likewise.
    * gcc.target/arm/cmse/union-2.x: New file.
    * gcc.target/arm/cmse/baseline/union-2.c: Remove code and include above
    file.
    * gcc.target/arm/cmse/mainline/union-2.c: Likewise.

From-SVN: r254633

6 years agore PR target/82641 (Unable to enable crc32 for a certain function with target attribu...
Tamar Christina [Fri, 10 Nov 2017 17:14:28 +0000 (17:14 +0000)]
re PR target/82641 (Unable to enable crc32 for a certain function with target attribute on ARM (aarch32))

2017-11-10  Tamar Christina  <tamar.christina@arm.com>

PR target/82641
* config/arm/arm.c
(arm_option_override): Refactor.
(arm_option_reconfigure_globals): New.
(arm_options_perform_arch_sanity_checks): New.
* config/arm/arm-protos.h (arm_option_reconfigure_globals): New prototype.
(arm_options_perform_arch_sanity_checks): Likewise

From-SVN: r254632

6 years agopower9.md (power9-qpdiv): Correct DFU pipe usage.
Pat Haugen [Fri, 10 Nov 2017 16:46:54 +0000 (16:46 +0000)]
power9.md (power9-qpdiv): Correct DFU pipe usage.

* rs6000/power9.md (power9-qpdiv): Correct DFU pipe usage.
(power9-qpmul): New.
* rs6000/rs6000.md ("type" attr): Add qmul.
(mul<mode>3, fma<mode>4_hw, *fms<mode>4_hw, *nfma<mode>4_hw,
*nfms<mode>4_hw, mul<mode>3_odd, fma<mode>4_odd, *fms<mode>4_odd,
*nfma<mode>4_odd, *nfms<mode>4_odd): Change type to qmul.

From-SVN: r254631

6 years agoPR c/81117 - Improve buffer overflow checking in strncpy
Martin Sebor [Fri, 10 Nov 2017 16:35:26 +0000 (16:35 +0000)]
PR c/81117 - Improve buffer overflow checking in strncpy

gcc/ChangeLog:

PR c/81117
* builtins.c (compute_objsize): Handle arrays that
compute_builtin_object_size likes to fail for.  Make extern.
* builtins.h (compute_objsize): Declare.
(check_strncpy_sizes): New function.
(expand_builtin_strncpy): Call check_strncpy_sizes.
* gimple-fold.c (gimple_fold_builtin_strncpy): Implement
-Wstringop-truncation.
(gimple_fold_builtin_strncat): Same.
* gimple.c (gimple_build_call_from_tree): Set call location.
* tree-ssa-strlen.c (strlen_to_stridx): New global variable.
(maybe_diag_bound_equal_length, is_strlen_related_p): New functions.
(handle_builtin_stxncpy, handle_builtin_strncat): Same.
(handle_builtin_strlen): Use strlen_to_stridx.
(strlen_optimize_stmt): Handle flavors of strncat, strncpy, and
stpncpy.
Use strlen_to_stridx.
(pass_strlen::execute): Release strlen_to_stridx.
* doc/invoke.texi (-Wsizeof-pointer-memaccess): Document enhancement.
(-Wstringop-truncation): Document new option.

gcc/ada/ChangeLog:

PR c/81117
* ada/adadecode.c (__gnat_decode): Use memcpy instead of strncpy.
* ada/argv.c (__gnat_fill_arg, __gnat_fill_env): Same.

gcc/c-family/ChangeLog:

PR c/81117
* c-common.c (catenate_strings): Use memcpy instead of strncpy.
* c-warn.c (sizeof_pointer_memaccess_warning): Handle arrays.
* c.opt (-Wstringop-truncation): New option.

gcc/fortran/ChangeLog:

PR c/81117
* gcc/fortran/decl.c (build_sym): Use strcpy instead of strncpy.

gcc/objc/ChangeLog:

PR c/81117
* objc-encoding.c (encode_type): Use memcpy instead of strncpy.

gcc/testsuite/ChangeLog:

PR c/81117
* c-c++-common/Wsizeof-pointer-memaccess3.c: New test.
* c-c++-common/Wstringop-overflow.c: Same.
* c-c++-common/Wstringop-truncation.c: Same.
* c-c++-common/Wsizeof-pointer-memaccess2.c: Adjust.
* c-c++-common/attr-nonstring-2.c: New test.
* g++.dg/torture/Wsizeof-pointer-memaccess1.C: Adjust.
* g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same.
* gcc.dg/torture/pr63554.c: Same.
* gcc.dg/Walloca-1.c: Disable macro tracking.

From-SVN: r254630

6 years agoGCOV: create one intermediate file per a gcno file (PR gcov-profile/82702).
Martin Liska [Fri, 10 Nov 2017 15:23:24 +0000 (16:23 +0100)]
GCOV: create one intermediate file per a gcno file (PR gcov-profile/82702).

2017-11-10  Martin Liska  <mliska@suse.cz>

PR gcov-profile/82702
* gcov.c (main): Handle intermediate files in a different
way.
(get_gcov_intermediate_filename): New function.
(output_gcov_file): Remove support of intermediate files.
(generate_results): Allocate intermediate file.
(release_structures): Clean-up properly fn_end.
(output_intermediate_file): Start iterating with line 1.

From-SVN: r254629

6 years agore PR tree-optimization/82929 (r254579 causes ICE: tree check: expected ssa_name...
Jakub Jelinek [Fri, 10 Nov 2017 14:43:13 +0000 (15:43 +0100)]
re PR tree-optimization/82929 (r254579 causes ICE: tree check: expected ssa_name, have array_ref in has_single_use, at ssa-iterators.h:400)

PR tree-optimization/82929
* gimple-ssa-store-merging.c (struct store_immediate_info): Add
ops_swapped_p non-static data member.
(store_immediate_info::store_immediate_info): Clear it.
(imm_store_chain_info::coalesce_immediate_stores): If swapping
ops set ops_swapped_p.
(count_multiple_uses): Handle ops_swapped_p.

* gcc.dg/pr82929.c: New test.
* g++.dg/opt/pr82929.C: New test.

From-SVN: r254628

6 years agoGCOV: do not support unexecuted blocks in Ada
Martin Liska [Fri, 10 Nov 2017 14:40:17 +0000 (15:40 +0100)]
GCOV: do not support unexecuted blocks in Ada

2017-11-10  Martin Liska  <mliska@suse.cz>

* coverage.c (coverage_init): Stream information about
support of has_unexecuted_blocks.
* doc/gcov.texi: Document that.
* gcov-dump.c (dump_gcov_file): Support it in gcov_dump tool.
* gcov.c (read_graph_file): Likewise.
(output_line_beginning): Fix a small issue with
color output.

From-SVN: r254627

6 years ago[ARM,testsuite] Skip copysign_softfloat_1.c on hard-float targets
Christophe Lyon [Fri, 10 Nov 2017 12:54:59 +0000 (12:54 +0000)]
[ARM,testsuite] Skip copysign_softfloat_1.c on hard-float targets

gcc/testsuite/

2017-11-10  Christophe Lyon  <christophe.lyon@linaro.org>

* lib/target-supports.exp (check_effective_target_arm_soft_ok):
New function.
* gcc.target/arm/copysign_softfloat_1.c: Require arm_soft_ok
effective target.

From-SVN: r254626

6 years agotree-predcom.c (determine_roots_comp): Avoid memory leak by freeing reference of...
Bin Cheng [Fri, 10 Nov 2017 12:46:33 +0000 (12:46 +0000)]
tree-predcom.c (determine_roots_comp): Avoid memory leak by freeing reference of trivial component.

* tree-predcom.c (determine_roots_comp): Avoid memory leak by freeing
reference of trivial component.

From-SVN: r254625

6 years agore PR fortran/82934 (Segfault on assumed character length in allocate)
Paul Thomas [Fri, 10 Nov 2017 12:24:24 +0000 (12:24 +0000)]
re PR fortran/82934 (Segfault on assumed character length in allocate)

2017-11-10  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82934
* trans-stmt.c (gfc_trans_allocate): Remove the gcc_assert on
null string length for assumed length typespec and set
expr3_esize to NULL_TREE;

2017-11-10  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82934
* gfortran.dg/allocate_assumed_charlen_1.f90: New test.

From-SVN: r254624

6 years agore PR bootstrap/82916 (gcc miscompiled during stagefeedback (PGO bootstrap))
Jakub Jelinek [Fri, 10 Nov 2017 10:31:34 +0000 (11:31 +0100)]
re PR bootstrap/82916 (gcc miscompiled during stagefeedback (PGO bootstrap))

PR bootstrap/82916
* gimple-ssa-store-merging.c
(pass_store_merging::terminate_all_aliasing_chains): For
gimple_store_p stmts also call refs_output_dependent_p.

* gcc.dg/store_merging_2.c: Only expect 2 successful mergings instead
of 3.
* gcc.dg/pr82916.c: New test.

From-SVN: r254623

6 years ago[testsuite] Fix retrieval of testname
Thomas Preud'homme [Fri, 10 Nov 2017 09:42:45 +0000 (09:42 +0000)]
[testsuite] Fix retrieval of testname

When gcc-dg-runtest is used to run a test the test is run several times
with different options. For clarity of the log, the test infrastructure
then append the options to the testname. This means that all the code
that must deal with the testcase itself (eg. removing the output files
after the test has run) needs to remove the option name.

There is already a pattern (see below) for this in several place of the
testsuite framework but it is also missing in many places. This patch
fixes all of these places. The pattern is as follows:

set testcase [testname-for-summary]
; The name might include a list of options; extract the file name.
set testcase [lindex $testcase 0]

2017-11-10  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/testsuite/
    * lib/scanasm.exp (scan-assembler): Extract filename from testname used
    in summary.
    (scan-assembler-not): Likewise.
    (scan-hidden): Likewise.
    (scan-not-hidden): Likewise.
    (scan-stack-usage): Likewise.
    (scan-stack-usage-not): Likewise.
    (scan-assembler-times): Likewise.
    (scan-assembler-dem): Likewise.
    (scan-assembler-dem-not): Likewise.
    (object-size): Likewise.
    (scan-lto-assembler): Likewise.
    * lib/scandump.exp (scan-dump): Likewise.
    (scan-dump-times): Likewise.
    (scan-dump-not): Likewise.
    (scan-dump-dem): Likewise.
    (scan-dump-dem-not): Likewise

From-SVN: r254622

6 years agoUpdate copyright years
Eric Botcazou [Fri, 10 Nov 2017 08:36:30 +0000 (08:36 +0000)]
Update copyright years

From-SVN: r254621

6 years agoutils.c (convert): Add comment and do not fall through to the next case.
Eric Botcazou [Fri, 10 Nov 2017 08:21:05 +0000 (08:21 +0000)]
utils.c (convert): Add comment and do not fall through to the next case.

* gcc-interface/utils.c (convert) <RECORD_TYPE>: Add comment and do
not fall through to the next case.
<ARRAY_TYPE>: Deal specially with a dereference from another array
type with the same element type.

From-SVN: r254618

6 years agoDaily bump.
GCC Administrator [Fri, 10 Nov 2017 00:16:15 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r254617

6 years agore PR rtl-optimization/82913 (ICE: Segmentation fault in try_merge_compare)
Jakub Jelinek [Thu, 9 Nov 2017 23:58:51 +0000 (00:58 +0100)]
re PR rtl-optimization/82913 (ICE: Segmentation fault in try_merge_compare)

PR rtl-optimization/82913
* compare-elim.c (try_merge_compare): Punt if def_insn is not
single set.

* gcc.c-torture/compile/pr82913.c: New test.

From-SVN: r254614

6 years agovr-values.h: New file with vr_values class.
Jeff Law [Thu, 9 Nov 2017 23:26:08 +0000 (16:26 -0700)]
vr-values.h: New file with vr_values class.

* vr-values.h: New file with vr_values class.
* tree-vrp.c: Include vr-values.h
(vrp_value_range_pool, vrp_equiv_obstack, num_vr_values): Move static
data objects into the vr_values class.
(vr_value, values_propagated, vr_phi_edge_counts): Likewise.
(get_value_range): Make it a member function within vr_values class.
(set_defs_to_varying, update_value_range, add_equivalence): Likewise.
(vrp_stmt_computes_nonzero_p, op_with_boolean_value_range_p): Likewise.
(op_with_constant_singleton_value_range): Likewise.
(extract_range_for_var_from_comparison_expr): Likewise.
(extract_range_from_assert, extract_range_from_ssa_name): Likewise.
(extract_range_from_binary_expr): Likewise.
(extract_range_from_unary_expr): Likewise.
(extract_range_from_cond_expr, extrat_range_from_comparison): Likewise.
(check_for_binary_op_overflow, extract_range_basic): Likewise.
(extract_range_from_assignment, adjust_range_with_scev): Likewise.
(dump_all_value_ranges, get_vr_for_comparison): Likewise.
(compare_name_with_value, compare_names): Likewise.
(vrp_evaluate_conditional_warnv_with_ops_using_ranges): Likewise.
(vrp_evaluate_conditional_warnv_with_ops): Likewise.  Remove prototype.
(vrp_evaluate_conditional, vrp_visit_cond_stmt): Likewise.
(vrp_visit_switch_stmt, extract_range_from_stmt): Likewise.
(extract_range_from_phi_node): Likewise.
(simplify_truth_ops_using_ranges): Likewise.
(simplify_div_or_mod_using_ranges): Likewise.
(simplify_min_or_max_using_ranges, simplify_abs_using_ranges): Likewise.
(simplify_bit_ops_using_ranges, simplify_cond_using_ranges_1): Likewise.
(simplify_cond_using_ranges_2, simplify_switch_using_ranges): Likewise.
(simplify_float_conversion_using_ranges): Likewise.
(simplify_internal_call_using_ranges): Likewise.
(two_valued_val_range_p, simplify_stmt_using_ranges): Likewise.
(vrp_visit_assignment_or_call): Likewise.  Smuggle class instance
poitner via x_vr_values for calls into gimple folder.
(vrp_initialize_lattice): Make this the vr_values ctor.
(vrp_free_lattice): Make this the vr_values dtor.
(set_vr_value): New function.
(class vrp_prop): Add vr_values data member.  Add various member
functions as well as member functions that delegate to vr_values.
(check_array_ref): Make a member function within vrp_prop class.
(search_for_addr_array, vrp_initialize): Likewise.
(vrp_finalize): Likewise.  Revamp to avoid direct access to
vr_value, values_propagated, etc.
(check_array_bounds): Extract vrp_prop class instance pointer from
walk info structure.  Use it to call member functions.
(check_all_array_refs): Make a member function within vrp_prop class.
Smuggle class instance pointer via walk info structure.
(x_vr_values): New local static.
(vrp_valueize): Use x_vr_values to get class instance.
(vr_valueize_1): Likewise.
(class vrp_folder): Add vr_values data member.  Add various member
functions as well as member functions that delegate to vr_values.
(fold_predicate_in): Make a mber fucntion within vrp_folder class.
(simplify_stmt_for_jump_threading): Extract smuggled vr_values
class instance from vr_values.  Use it to call member functions.
(vrp_dom_walker): Add vr_values data member.
(vrp_dom_walker::after_dom_children): Smuggle vr_values class
instance via x_vr_values.
(identify_jump_threads): Accept vr_values as argument.  Store
it into the walker structure.
(evrp_dom_walker): Add vr_values class data member.  Add various
delegators.
(evrp_dom_walker::try_find_new_range): Use vr_values data
member to access the memory allocator.
(evrp_dom_walker::before_dom_children): Store vr_values class
instance into the vrp_folder class.
(evrp_dom_walker::push_value_range): Rework to avoid direct
access to num_vr_values and vr_value.
(evrp_dom_walker::pop_value_range): Likewise.
(execute_early_vrp): Remove call to vrp_initialize_lattice.
Use vr_values to get to dump_all_value_ranges member function.
Remove call to vrp_free_lattice.  Call vrp_initialize, vrp_finalize,
and simplify_cond_using_ranges_2 via vrp_prop class instance.
Pass vr_values class instance down to identify_jump_threads.
Remove call to vrp_free_lattice.
(debug_all_value_ranges): Remove.

From-SVN: r254613

6 years agotree-vrp.c (vrp_prop): Move class to earlier point in the file.
Jeff Law [Thu, 9 Nov 2017 23:04:20 +0000 (16:04 -0700)]
tree-vrp.c (vrp_prop): Move class to earlier point in the file.

* tree-vrp.c (vrp_prop): Move class to earlier point in the file.
(vrp_folder): Likewise.

From-SVN: r254612

6 years agotree-vrp.c (set_value_range): Do not reference vrp_equiv_obstack.
Jeff Law [Thu, 9 Nov 2017 22:57:18 +0000 (15:57 -0700)]
tree-vrp.c (set_value_range): Do not reference vrp_equiv_obstack.

* tree-vrp.c (set_value_range): Do not reference vrp_equiv_obstack.
Get it from the existing bitmap instead.
(vrp_intersect_ranges_1): Likewise.

From-SVN: r254611

6 years agosync/atomic, runtime/internal/atomic: don't assume reads from 0 fail
Ian Lance Taylor [Thu, 9 Nov 2017 21:56:59 +0000 (21:56 +0000)]
sync/atomic, runtime/internal/atomic: don't assume reads from 0 fail

    For a misaligned address force a panic rather than assuming that reading
    from the address 0 will cause one.

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

From-SVN: r254610

6 years agogimple-ssa-store-merging.c (struct store_immediate_info): Add bit_not_p field.
Jakub Jelinek [Thu, 9 Nov 2017 19:24:59 +0000 (20:24 +0100)]
gimple-ssa-store-merging.c (struct store_immediate_info): Add bit_not_p field.

* gimple-ssa-store-merging.c (struct store_immediate_info): Add
bit_not_p field.
(store_immediate_info::store_immediate_info): Add bitnotp argument,
set bit_not_p to it.
(imm_store_chain_info::coalesce_immediate_stores): Break group
if bit_not_p is different.
(count_multiple_uses, split_group,
imm_store_chain_info::output_merged_store): Handle info->bit_not_p.
(handled_load): Avoid multiple chained BIT_NOT_EXPRs.
(pass_store_merging::process_store): Handle BIT_{AND,IOR,XOR}_EXPR
result inverted using BIT_NOT_EXPR, compute bit_not_p, pass it
to store_immediate_info ctor.

From-SVN: r254606

6 years agore PR fortran/78619 (ICE in copy_reference_ops_from_ref, at tree-ssa-sccvn.c:889)
Paul Thomas [Thu, 9 Nov 2017 19:12:41 +0000 (19:12 +0000)]
re PR fortran/78619 (ICE in copy_reference_ops_from_ref, at tree-ssa-sccvn.c:889)

2017-11-09  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/78619
* check.c (same_type_check): Introduce a new argument 'assoc'
with default value false. If this is true, use the symbol type
spec of BT_PROCEDURE expressions.
(gfc_check_associated): Set 'assoc' true in the call to
'same_type_check'.

2017-11-09  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/78619
* gfortran.dg/pr78619.f90: New test.

From-SVN: r254605

6 years agore PR fortran/78814 (ICE in symbol_rank, at fortran/interface.c:1265)
Steven G. Kargl [Thu, 9 Nov 2017 18:45:29 +0000 (18:45 +0000)]
re PR fortran/78814 (ICE in symbol_rank, at fortran/interface.c:1265)

2017-11-09  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/78814
* interface.c (symbol_rank): Check for NULL pointer.

2017-11-09  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/78814
* gfortran.dg/interface_40.f90: New testcase.

From-SVN: r254604

6 years agoRemove obsolete ECOFF support.
Jim Wilson [Thu, 9 Nov 2017 18:03:52 +0000 (18:03 +0000)]
Remove obsolete ECOFF support.

* collect2.c (OBJECT_FORMAT_COFF): Remove EXTENDED_COFF support.
(scan_prog_file): Likewise.

From-SVN: r254603

6 years agobb-reorder.c (max_entry_frequency): Remove.
Jan Hubicka [Thu, 9 Nov 2017 16:36:07 +0000 (17:36 +0100)]
bb-reorder.c (max_entry_frequency): Remove.

* bb-reorder.c (max_entry_frequency): Remove.
(find_traces, rotate_loop, mark_bb_visited, connect_better_edge_p,
connect_traces, push_to_next_round_p): Remove prototypes.
(find_traces_1_round): Use counts only.
(push_to_next_round_p): Likewise.
(find_traces): Likewise.
(rotate_loop): Likewise.
(find_traces_1_round): Likewise.
(connect_traces): Likewise.
(edge_order): Likewise.

From-SVN: r254602

6 years ago[ARM] Fix cmse_nonsecure_entry return insn size
Thomas Preud'homme [Thu, 9 Nov 2017 16:34:43 +0000 (16:34 +0000)]
[ARM] Fix cmse_nonsecure_entry return insn size

A number of instructions are output in assembler form by
output_return_instruction () when compiling a function with the
cmse_nonsecure_entry attribute for Armv8-M Mainline with hardfloat float
ABI. However, the corresponding thumb2_cmse_entry_return insn pattern
does not account for all these instructions in its computing of the
length of the instruction.

This may lead GCC to use the wrong branching instruction due to
incorrect computation of the offset between the branch instruction's
address and the target address.

This commit fixes the mismatch between what output_return_instruction ()
does and what the pattern think it does and adds a note warning about
mismatch in the affected functions' heading comments to ensure code does
not get out of sync again.

Note: no test is provided because the C testcase is fragile (only works
on GCC 6) and the extracted RTL test fails to compile due to bugs in the
RTL frontend (PR82815 and PR82817)

2017-11-09  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/arm.c (output_return_instruction): Add comments to
    indicate requirement for cmse_nonsecure_entry return to account
    for the size of clearing instruction output here.
    (thumb_exit): Likewise.
    * config/arm/thumb2.md (thumb2_cmse_entry_return): Fix length for
    return in hardfloat mode.

From-SVN: r254601

6 years agocontrolled2.adb, [...]: Disable all warnings.
Eric Botcazou [Thu, 9 Nov 2017 16:34:02 +0000 (16:34 +0000)]
controlled2.adb, [...]: Disable all warnings.

* gnat.dg/controlled2.adb, gnat.dg/controlled4.adb,
gnat.dg/finalized.adb: Disable all warnings.

From-SVN: r254600

6 years agors6000: Separate shrink-wrapping for the TOC register
Segher Boessenkool [Thu, 9 Nov 2017 15:53:41 +0000 (16:53 +0100)]
rs6000: Separate shrink-wrapping for the TOC register

This makes the TOC register save a component.  If -msave-toc-indirect
is not explicitly disabled, it enables it, and then moves the prologue
code generated for that to a better place.  So far this only matters
for indirect calls (for direct calls the save is done in the PLT stub).
The restore is always done directly after the bl insn (the compiler
generates a nop there, the linker replaces it with a load).

* config/rs6000/rs6000.c (machine_function): Add a bool,
"toc_is_wrapped_separately".
(rs6000_option_override_internal): Enable OPTION_MASK_SAVE_TOC_INDIRECT
if it wasn't explicitly set or unset, we are optimizing for speed, and
doing separate shrink-wrapping.
(rs6000_get_separate_components): Enable the TOC component if
saving the TOC register in the prologue.
(rs6000_components_for_bb): Handle the TOC component.
(rs6000_emit_prologue_components): Store the TOC register where needed.
(rs6000_set_handled_components): Mark TOC as handled, if handled.
(rs6000_emit_prologue): Don't save the TOC if that is already done.

From-SVN: r254599

6 years agoMoving parameter manipulation into its own file
Martin Jambor [Thu, 9 Nov 2017 15:31:06 +0000 (16:31 +0100)]
Moving parameter manipulation into its own file

2017-11-09  Martin Jambor  <mjambor@suse.cz>

* ipa-param-manipulation.c: New file.
* ipa-param-manipulation.h: Likewise.
* Makefile.in (OBJS): Add ipa-param-manipulation.o.
(PLUGIN_HEADERS): Addded ipa-param-manipulation.h
* ipa-param.h (ipa_parm_op): Moved to ipa-param-manipulation.h.
(ipa_parm_adjustment): Likewise.
(ipa_parm_adjustment_vec): Likewise.
(ipa_get_vector_of_formal_parms): Moved declaration to
ipa-param-manipulation.h.
(ipa_get_vector_of_formal_parm_types): Likewise.
(ipa_modify_formal_parameters): Likewise.
(ipa_modify_call_arguments): Likewise.
(ipa_combine_adjustments): Likewise.
(ipa_dump_param_adjustments): Likewise.
(ipa_modify_expr): Likewise.
(ipa_get_adjustment_candidate): Likewise.
* ipa-prop.c (ipa_get_vector_of_formal_parms): Moved to
ipa-param-manipulation.c.
(ipa_get_vector_of_formal_parm_types): Likewise.
(ipa_modify_formal_parameters): Likewise.
(ipa_modify_call_arguments): Likewise.
(ipa_modify_expr): Likewise.
(get_ssa_base_param): Likewise.
(ipa_get_adjustment_candidate): Likewise.
(index_in_adjustments_multiple_times_p): Likewise.
(ipa_combine_adjustments): Likewise.
(ipa_dump_param_adjustments): Likewise.
* tree-sra.c: Also include ipa-param-manipulation.h
* omp-simd-clone.c: Include ipa-param-manipulation.h instead of
ipa-param.h.

From-SVN: r254598

6 years agoAdd a vect_masked_store target selector
Richard Sandiford [Thu, 9 Nov 2017 15:19:15 +0000 (15:19 +0000)]
Add a vect_masked_store target selector

This patch adds a target selector that says whether the target
supports IFN_MASK_STORE.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_masked_store): Document.

gcc/testsuite/
* lib/target-supports.exp (check_effective_target_vect_masked_store):
New proc.
* gcc.dg/vect/vect-cselim-1.c (foo): Mention that the second loop
is vectorizable with masked stores.  Update scan-tree-dump-times
accordingly.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254597

6 years agoAdd a vect_align_stack_vars target selector
Richard Sandiford [Thu, 9 Nov 2017 15:18:59 +0000 (15:18 +0000)]
Add a vect_align_stack_vars target selector

This patch adds a target selector to say whether it's possible to
align a local variable to the target's preferred vector alignment.
This can be false for large vectors if the alignment is only
a preference and not a hard requirement (and thus if there is no
need to support a stack realignment mechanism).

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_align_stack_vars): Document.

gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_align_stack_vars): New proc.
* gcc.dg/vect/vect-23.c: Only expect the array to be aligned if
vect_align_stack_vars.
* gcc.dg/vect/vect-24.c: Likewise.
* gcc.dg/vect/vect-25.c: Likewise.
* gcc.dg/vect/vect-26.c: Likewise.
* gcc.dg/vect/vect-32-big-array.c: Likewise.
* gcc.dg/vect/vect-32.c: Likewise.
* gcc.dg/vect/vect-40.c: Likewise.
* gcc.dg/vect/vect-42.c: Likewise.
* gcc.dg/vect/vect-46.c: Likewise.
* gcc.dg/vect/vect-48.c: Likewise.
* gcc.dg/vect/vect-52.c: Likewise.
* gcc.dg/vect/vect-54.c: Likewise.
* gcc.dg/vect/vect-62.c: Likewise.
* gcc.dg/vect/vect-67.c: Likewise.
* gcc.dg/vect/vect-75-big-array.c: Likewise.
* gcc.dg/vect/vect-75.c: Likewise.
* gcc.dg/vect/vect-77-alignchecks.c: Likewise.
* gcc.dg/vect/vect-78-alignchecks.c: Likewise.
* gcc.dg/vect/vect-89-big-array.c: Likewise.
* gcc.dg/vect/vect-89.c: Likewise.
* gcc.dg/vect/vect-96.c: Likewise.
* gcc.dg/vect/vect-multitypes-3.c: Likewise.
* gcc.dg/vect/vect-multitypes-6.c: Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254596

6 years agoAdd a vect_variable_length target selector
Richard Sandiford [Thu, 9 Nov 2017 15:18:32 +0000 (15:18 +0000)]
Add a vect_variable_length target selector

This patch adds a target selector for variable-length vectors.
Initially it's always false, but the SVE patch provides a case
in which it's true.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_variable_length): Document.

gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_variable_length): New proc.
* gcc.dg/vect/pr60482.c: XFAIL test for no epilog loop if
vect_variable_length.
* gcc.dg/vect/slp-reduc-6.c: XFAIL two-operation SLP if
vect_variable_length.
* gcc.dg/vect/vect-alias-check-5.c: XFAIL alias optimization if
vect_variable_length.
* gfortran.dg/vect/fast-math-mgrid-resid.f: XFAIL predictive
commoning optimization if vect_variable_length.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254595

6 years agoAdd a vect_unaligned_possible target selector
Richard Sandiford [Thu, 9 Nov 2017 15:17:29 +0000 (15:17 +0000)]
Add a vect_unaligned_possible target selector

This patch adds a target selector that says whether we can ever
generate an "unaligned" accesses, where "unaligned" is relative
to the target's preferred vector alignment.  This is already true if:

   vect_no_align && { ! vect_hw_misalign }

i.e. if the target doesn't have any alignment mechanism and also
doesn't allow unaligned accesses.  It is also true (for the things
tested by gcc.dg/vect) if the target only wants things to be aligned
to an element; in that case every normal scalar access is "vector aligned".

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_unaligned_possible): Document.

gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_unaligned_possible): New proc.
* gcc.dg/vect/slp-25.c: Extend XFAIL of peeling for alignment from
vect_no_align && { ! vect_hw_misalign } to ! vect_unaligned_possible.
* gcc.dg/vect/vect-multitypes-1.c: Likewise.
* gcc.dg/vect/vect-109.c: XFAIL vectorisation of an unaligned
access to ! vect_unaligned_possible.
* gcc.dg/vect/vect-33.c: Likewise.
* gcc.dg/vect/vect-42.c: Likewise.
* gcc.dg/vect/vect-56.c: Likewise.
* gcc.dg/vect/vect-60.c: Likewise.
* gcc.dg/vect/vect-96.c: Likewise.
* gcc.dg/vect/vect-peel-1.c: Likewise.
* gcc.dg/vect/vect-27.c: Extend XFAIL of unaligned vectorization from
vect_no_align && { ! vect_hw_misalign } to ! vect_unaligned_possible.
* gcc.dg/vect/vect-29.c: Likewise.
* gcc.dg/vect/vect-44.c: Likewise.
* gcc.dg/vect/vect-48.c: Likewise.
* gcc.dg/vect/vect-50.c: Likewise.
* gcc.dg/vect/vect-52.c: Likewise.
* gcc.dg/vect/vect-72.c: Likewise.
* gcc.dg/vect/vect-75-big-array.c: Likewise.
* gcc.dg/vect/vect-75.c: Likewise.
* gcc.dg/vect/vect-77-alignchecks.c: Likewise.
* gcc.dg/vect/vect-77-global.c: Likewise.
* gcc.dg/vect/vect-78-alignchecks.c: Likewise.
* gcc.dg/vect/vect-78-global.c: Likewise.
* gcc.dg/vect/vect-multitypes-3.c: Likewise.
* gcc.dg/vect/vect-multitypes-4.c: Likewise.
* gcc.dg/vect/vect-multitypes-6.c: Likewise.
* gcc.dg/vect/vect-peel-4.c: Likewise.
* gcc.dg/vect/vect-peel-3.c: Likewise, and also for peeling
for alignment.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254594

6 years agoAdd a vect_element_align_preferred target selector
Richard Sandiford [Thu, 9 Nov 2017 15:16:55 +0000 (15:16 +0000)]
Add a vect_element_align_preferred target selector

This patch adds a target selector for targets whose
preferred_vector_alignment is the alignment of one element.  We'll never
peel in that case, and the step of a loop that operates on normal (as
opposed to packed) elements will always divide the preferred alignment.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_element_align_preferred): Document.

gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_element_align_preferred): New proc.
(check_effective_target_vect_peeling_profitable): Test it.
* gcc.dg/vect/no-section-anchors-vect-31.c: Don't expect peeling
if vect_element_align_preferred.
* gcc.dg/vect/no-section-anchors-vect-64.c: Likewise.
* gcc.dg/vect/pr65310.c: Likewise.
* gcc.dg/vect/vect-26.c: Likewise.
* gcc.dg/vect/vect-54.c: Likewise.
* gcc.dg/vect/vect-56.c: Likewise.
* gcc.dg/vect/vect-58.c: Likewise.
* gcc.dg/vect/vect-60.c: Likewise.
* gcc.dg/vect/vect-89-big-array.c: Likewise.
* gcc.dg/vect/vect-89.c: Likewise.
* gcc.dg/vect/vect-92.c: Likewise.
* gcc.dg/vect/vect-peel-1.c: Likewise.
* gcc.dg/vect/vect-outer-3a-big-array.c: Expect the step to
divide the alignment if vect_element_align_preferred.
* gcc.dg/vect/vect-outer-3a.c: Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254593

6 years agoAdd vect_perm3_* target selectors
Richard Sandiford [Thu, 9 Nov 2017 15:16:42 +0000 (15:16 +0000)]
Add vect_perm3_* target selectors

SLP load permutation fails if any individual permutation requires more
than two vector inputs.  For 128-bit vectors, it's possible to permute
3 contiguous loads of 32-bit and 8-bit elements, but not 16-bit elements
or 64-bit elements.  The results are reversed for 256-bit vectors,
and so on for wider vectors.

This patch adds a routine that tests whether a permute will require
three vectors for a given vector count and element size, then adds
vect_perm3_* target selectors for the cases that we currently use.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/sourcebuild.texi (vect_perm_short, vect_perm_byte): Document
previously undocumented selectors.
(vect_perm3_byte, vect_perm3_short, vect_perm3_int): Document.

gcc/testsuite/
* lib/target-supports.exp (vect_perm_supported): New proc.
(check_effective_target_vect_perm3_int): Likewise.
(check_effective_target_vect_perm3_short): Likewise.
(check_effective_target_vect_perm3_byte): Likewise.
* gcc.dg/vect/slp-perm-1.c: Expect SLP load permutation to
succeed if vect_perm3_int.
* gcc.dg/vect/slp-perm-5.c: Likewise.
* gcc.dg/vect/slp-perm-6.c: Likewise.
* gcc.dg/vect/slp-perm-7.c: Likewise.
* gcc.dg/vect/slp-perm-8.c: Likewise vect_perm3_byte.
* gcc.dg/vect/slp-perm-9.c: Likewise vect_perm3_short.
Use vect_perm_short instead of vect_perm.  Add a scan-tree-dump-not
test for vect_perm3_short targets.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254592

6 years agoDon't assume vect_multiple_sizes means 2 sizes
Richard Sandiford [Thu, 9 Nov 2017 15:16:06 +0000 (15:16 +0000)]
Don't assume vect_multiple_sizes means 2 sizes

Some tests assumed that there would only be 2 vector sizes if
vect_multiple_sizes, whereas for SVE there are three (SVE, 128-bit
and 64-bit).  This patch replaces scan-tree-dump-times with
scan-tree-dump for vect_multiple_sizes but keeps it for
!vect_multiple_sizes.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/testsuite/
* gcc.dg/vect/no-vfa-vect-101.c: Use scan-tree-dump rather than
scan-tree-dump-times for vect_multiple_sizes.
* gcc.dg/vect/no-vfa-vect-102.c: Likewise.
* gcc.dg/vect/no-vfa-vect-102a.c: Likewise.
* gcc.dg/vect/no-vfa-vect-37.c: Likewise.
* gcc.dg/vect/no-vfa-vect-79.c: Likewise.
* gcc.dg/vect/vect-104.c: Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254591

6 years agoAdd available_vector_sizes to target-supports.exp
Richard Sandiford [Thu, 9 Nov 2017 15:15:47 +0000 (15:15 +0000)]
Add available_vector_sizes to target-supports.exp

This patch adds a routine that lists the available vector sizes
for a target and uses it for some existing target conditions.
Later patches add more uses.

The cases are taken from multiple_sizes.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/testsuite/
* lib/target-supports.exp (available_vector_sizes): New proc.
(check_effective_target_vect_multiple_sizes): Use it.
(check_effective_target_vect64): Likewise.
(check_effective_target_vect_sizes_32B_16B): Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254590

6 years agoAdd VECTOR_BITS to tree-vect.h
Richard Sandiford [Thu, 9 Nov 2017 15:15:36 +0000 (15:15 +0000)]
Add VECTOR_BITS to tree-vect.h

Several vector tests are sensitive to the vector size.  This patch adds
a VECTOR_BITS macro to tree-vect.h to select the expected vector size
and uses it to influence iteration counts and array sizes.  The tests
keep the original values if the vector size is small enough.

For now VECTOR_BITS is always 128, but the SVE patches add other values.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/testsuite/
* gcc.dg/vect/tree-vect.h (VECTOR_BITS): Define.
* gcc.dg/vect/bb-slp-pr69907.c: Include tree-vect.h.
(N): New macro.
(foo): Use it instead of hard-coded 320.
* gcc.dg/vect/no-scevccp-outer-7.c (N): Redefine if the default
value is too small for VECTOR_BITS.
* gcc.dg/vect/no-scevccp-vect-iv-3.c (N): Likewise.
* gcc.dg/vect/no-section-anchors-vect-31.c (N): Likewise.
* gcc.dg/vect/no-section-anchors-vect-36.c (N): Likewise.
* gcc.dg/vect/slp-perm-9.c (N): Likewise.
* gcc.dg/vect/vect-32.c (N): Likewise.
* gcc.dg/vect/vect-75.c (N, OFF): Likewise.
* gcc.dg/vect/vect-77-alignchecks.c (N, OFF): Likewise.
* gcc.dg/vect/vect-78-alignchecks.c (N, OFF): Likewise.
* gcc.dg/vect/vect-89.c (N): Likewise.
* gcc.dg/vect/vect-96.c (N): Likewise.
* gcc.dg/vect/vect-multitypes-3.c (N): Likewise.
* gcc.dg/vect/vect-multitypes-6.c (N): Likewise.
* gcc.dg/vect/vect-over-widen-1.c (N): Likewise.
* gcc.dg/vect/vect-over-widen-4.c (N): Likewise.
* gcc.dg/vect/vect-reduc-pattern-1a.c (N): Likewise.
* gcc.dg/vect/vect-reduc-pattern-1b.c (N): Likewise.
* gcc.dg/vect/vect-reduc-pattern-2a.c (N): Likewise.
* gcc.dg/vect/no-section-anchors-vect-64.c (NINTS): New macro.
(N): Redefine in terms of NINTS.
(ia, ib, ic): Use NINTS instead of hard-coded constants in the
array bounds.
* gcc.dg/vect/no-section-anchors-vect-69.c (NINTS): New macro.
(N): Redefine in terms of NINTS.
(test1): Replace a and b fields with NINTS - 2 ints of padding.
(main1): Use NINTS instead of hard-coded constants.
* gcc.dg/vect/section-anchors-vect-69.c (NINTS): New macro.
(N): Redefine in terms of NINTS.
(test1): Replace a and b fields with NINTS - 2 ints of padding.
(test2): Remove incorrect comments about alignment.
(main1): Use NINTS instead of hard-coded constants.
* gcc.dg/vect/pr45752.c (N): Redefine if the default value is
too small for VECTOR_BITS.
(main): Continue to use canned results for the default value of N,
but compute the expected results from scratch for other values.
* gcc.dg/vect/slp-perm-1.c (N, main): As for pr45752.c.
* gcc.dg/vect/slp-perm-4.c (N, main): Likewise.
* gcc.dg/vect/slp-perm-5.c (N, main): Likewise.
* gcc.dg/vect/slp-perm-6.c (N, main): Likewise.
* gcc.dg/vect/slp-perm-7.c (N, main): Likewise.
* gcc.dg/vect/pr65518.c (NINTS, N, RESULT): New macros.
(giga): Use NINTS as the array bound.
(main): Use NINTS, N and RESULT.
* gcc.dg/vect/pr65947-5.c (N): Redefine if the default value is
too small for VECTOR_BITS.
(main): Fill in any remaining elements of A programmatically.
* gcc.dg/vect/pr81136.c: Include tree-vect.h.
(a): Use VECTOR_BITS to set the alignment of the target structure.
* gcc.dg/vect/slp-19c.c (N): Redefine if the default value is
too small for VECTOR_BITS.
(main1): Continue to use the canned input for the default value of N,
but compute the input from scratch for other values.
* gcc.dg/vect/slp-28.c (N): Redefine if the default value is
too small for VECTOR_BITS.
(in1, in2, in3): Remove initialization.
(check1, check2): Delete.
(main1): Initialize in1, in2 and in3 here.  Check every element
of the vectors and compute the expected values directly instead
of using an array.
* gcc.dg/vect/slp-perm-8.c (N): Redefine if the default value is
too small for VECTOR_BITS.
(foo, main): Change type of "i" to int.
* gcc.dg/vect/vect-103.c (NINTS): New macro.
(N): Redefine in terms of N.
(c): Delete.
(main1): Use NINTS.  Check the result from a and b directly.
* gcc.dg/vect/vect-67.c (NINTS): New macro.
(N): Redefine in terms of N.
(main1): Use NINTS for the inner array bounds.
* gcc.dg/vect/vect-70.c (NINTS, OUTERN): New macros.
(N): Redefine in terms of NINTS.
(s): Keep the outer dimensions as 4 even if N is larger than 24.
(tmp1): New variable.
(main1): Only define a local tmp1 if NINTS is relatively small.
Use OUTERN for the outer loops and NINTS for the inner loops.
* gcc.dg/vect/vect-91.c (OFF): New macro.
(a, main3): Use it.
* gcc.dg/vect/vect-92.c (NITER): New macro.
(main1, main2): Use it.
* gcc.dg/vect/vect-93.c (N): Rename to...
(N1): ...this.
(main): Update accordingly.
(N2): New macro.
(main1): Use N1 instead of 3001 and N2 insteaed of 10.
* gcc.dg/vect/vect-multitypes-1.c (NSHORTS, NINTS): New macros.
(N): Redefine in terms of NSHORTS.
(main1): Use NINTS - 1 instead of 3 and NSHORTS - 1 instead of 7.
(main): Likewise.
* gcc.dg/vect/vect-over-widen-3-big-array.c (N): Define to VECTOR_BITS.
(foo): Truncate the expected value to the type of *d.
* gcc.dg/vect/vect-peel-3.c (NINTS, EXTRA): New macros.
(ia, ib, ic, main): Use EXTRA.
(main): Use NINTS.
(RES_A, RES_B, REC_C): New macros.
(RES): Redefine as their sum.
* gcc.dg/vect/vect-reduc-or_1.c (N): New macro.
(in): Change number of elements to N.
(main): Update accordingly.  Calculate the expected result.
* gcc.dg/vect/vect-reduc-or_2.c (N, in, main): As for
vect-reduc-or-1.c.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254589

6 years agoConsistently use asm volatile ("" ::: "memory") in vect tests
Richard Sandiford [Thu, 9 Nov 2017 15:15:25 +0000 (15:15 +0000)]
Consistently use asm volatile ("" ::: "memory") in vect tests

The vectoriser tests used a combination of:

1) if (impossible condition) abort ();
2) volatile int x; ... *x = ...;
3) asm volatile ("" ::: "memory");

to prevent vectorisation of a set-up loop.  The problem with 1) is that
the compiler can often tell that the condition is false and optimise
it away before vectorisation.

This was already happening in slp-perm-9.c, which is why the test was
expecting one loop to be vectorised even when the required permutes
weren't supported.  It becomes a bigger problem with SVE, which is
able to vectorise more set-up loops.

The point of this patch is therefore to replace 1) with something else.
2) should work most of the time, but we don't usually treat non-volatile
accesses as aliasing unrelated volatile accesses, so I think in principle
we could split the loop into one that does the set-up and one that does
the volatile accesses.  3) seems more robust because it's also a wild
read and write.

The patch therefore tries to replace all instances of 1) and 2) with 3).

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/testsuite/
* gcc.dg/vect/bb-slp-cond-1.c (main): Add an asm volatile
to the set-up loop.
* gcc.dg/vect/slp-perm-7.c (main): Prevent vectorisation with
asm volatile ("" ::: "memory") instead of a conditional abort.
Update the expected vector loop count accordingly.
* gcc.dg/vect/slp-perm-9.c (main): Likewise.
* gcc.dg/vect/bb-slp-1.c (main1): Prevent vectorisation with
asm volatile ("" ::: "memory") instead of a conditional abort.
* gcc.dg/vect/slp-23.c (main): Likewise,
* gcc.dg/vect/slp-35.c (main): Likewise,
* gcc.dg/vect/slp-37.c (main): Likewise,
* gcc.dg/vect/slp-perm-4.c (main): Likewise.
* gcc.dg/vect/bb-slp-24.c (foo): Likewise.  Remove dummy argument.
(main): Update call accordingly.
* gcc.dg/vect/bb-slp-25.c (foo, main): As for bb-slp-24.c.
* gcc.dg/vect/bb-slp-26.c (foo, main): Likewise.
* gcc.dg/vect/bb-slp-29.c (foo, main): Likewise.
* gcc.dg/vect/no-vfa-vect-102.c (foo): Delete.
(main): Don't initialize it.
(main1): Prevent vectorisation with asm volatile ("" ::: "memory")
instead of a conditional abort.
* gcc.dg/vect/no-vfa-vect-102a.c (foo, main1, main): As for
no-vfa-vect-102.c
* gcc.dg/vect/vect-103.c (foo, main1, main): Likewise.
* gcc.dg/vect/vect-104.c (foo, main1, main): Likewise.
* gcc.dg/vect/pr42709.c (main1): Remove dummy argument.
Prevent vectorisation with asm volatile ("" ::: "memory")
instead of a conditional abort.
* gcc.dg/vect/slp-13-big-array.c (y): Delete.
(main1): Prevent vectorisation with asm volatile ("" ::: "memory")
instead of a conditional abort.
* gcc.dg/vect/slp-3-big-array.c (y, main1): As for slp-13-big-array.c.
* gcc.dg/vect/slp-34-big-array.c (y, main1): Likewise.
* gcc.dg/vect/slp-4-big-array.c (y, main1): Likewise.
* gcc.dg/vect/slp-multitypes-11-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-105.c (y, main1): Likewise.
* gcc.dg/vect/vect-105-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-112-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-15-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-2-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-34-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-6-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-73-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-74-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-75-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-76-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-80-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-97-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-all-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-reduc-1char-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-reduc-2char-big-array.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-mult.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-u16-i2.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-u16-i4.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-u16-mult.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-u8-i2-gap.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-u8-i8-gap2-big-array.c (y, main1):
Likewise.
* gcc.dg/vect/vect-strided-a-u8-i8-gap2.c (y, main1): Likewise.
* gcc.dg/vect/vect-strided-a-u8-i8-gap7-big-array.c (y, main1):
Likewise.
* gcc.dg/vect/vect-strided-a-u8-i8-gap7.c (y, main1): Likewise.
* gcc.dg/vect/slp-24.c (y): Delete.
(main): Prevent vectorisation with asm volatile ("" ::: "memory")
instead of a conditional abort.
* gcc.dg/vect/slp-24-big-array.c (y, main): As for slp-24.c.
* gcc.dg/vect/vect-98-big-array.c (y, main): Likewise.
* gcc.dg/vect/vect-bswap16.c (y, main): Likewise.
* gcc.dg/vect/vect-bswap32.c (y, main): Likewise.
* gcc.dg/vect/vect-bswap64.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-mult-char-ls.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-mult.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-same-dr.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u16-i2.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u16-i4.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u32-i4.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u32-i8.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i2-gap.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i2.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap2-big-array.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap2.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap4-big-array.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap4-unknown.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap4.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap7-big-array.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8-gap7.c (y, main): Likewise.
* gcc.dg/vect/vect-strided-u8-i8.c (y, main): Likewise.
* gcc.dg/vect/vect-10-big-array.c (y): Delete.
(foo): Prevent vectorisation with asm volatile ("" ::: "memory")
instead of a conditional abort.
* gcc.dg/vect/vect-double-reduc-6-big-array.c (y, foo): As for
vect-10-big-array.c.
* gcc.dg/vect/vect-reduc-pattern-1b-big-array.c (y, foo): Likewise.
* gcc.dg/vect/vect-reduc-pattern-1c-big-array.c (y, foo): Likewise.
* gcc.dg/vect/vect-reduc-pattern-2b-big-array.c (y, foo): Likewise.
* gcc.dg/vect/vect-117.c (foo): Delete.
(main): Don't initalize it.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254588

6 years agoexp_util.adb, freeze.adb: Minor reformatting.
Gary Dismukes [Thu, 9 Nov 2017 15:08:55 +0000 (15:08 +0000)]
exp_util.adb, freeze.adb: Minor reformatting.

2017-11-09  Gary Dismukes  <dismukes@adacore.com>

* exp_util.adb, freeze.adb: Minor reformatting.

From-SVN: r254587

6 years agoBe stricter about CONST_VECTOR operands
Richard Sandiford [Thu, 9 Nov 2017 15:03:01 +0000 (15:03 +0000)]
Be stricter about CONST_VECTOR operands

The recent gen_vec_duplicate patches used CONST_VECTOR for all
constants, but the documentation says:

  @findex const_vector
  @item (const_vector:@var{m} [@var{x0} @var{x1} @dots{}])
  Represents a vector constant.  The square brackets stand for the vector
  containing the constant elements.  @var{x0}, @var{x1} and so on are
  the @code{const_int}, @code{const_double} or @code{const_fixed} elements.

Both the AArch32 and AArch64 ports relied on the elements having
this form and would ICE if the element was something like a CONST
instead.  This showed up as a failure in vect-126.c for both arm-eabi
and aarch64-elf (but not aarch64-linux-gnu, which is what the series
was tested on).

The two obvious options were to redefine CONST_VECTOR to accept all
constants or make gen_vec_duplicate honour the existing documentation.
It looks like other code also assumes that integer CONST_VECTORs contain
CONST_INTs, so the patch does the latter.

I deliberately didn't add an assert to gen_const_vec_duplicate
because it looks like the SPU port *does* expect to be able to create
CONST_VECTORs of symbolic constants.

Also, I think the list above should include const_wide_int for vectors
of TImode and wider.

The new routine takes a mode for consistency with the generators,
and because I think it does make sense to accept all constants for
variable-length:

    (const (vec_duplicate ...))

rather than have some rtxes for which we instead use:

    (vec_duplicate (const ...))

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* doc/rtl.texi (const_vector): Say that elements can be
const_wide_ints too.
* emit-rtl.h (valid_for_const_vec_duplicate_p): Declare.
* emit-rtl.c (valid_for_const_vec_duplicate_p): New function.
(gen_vec_duplicate): Use it instead of CONSTANT_P.
* optabs.c (expand_vector_broadcast): Likewise.

From-SVN: r254586

6 years agoImprove ivopts handling of forced scales
Richard Sandiford [Thu, 9 Nov 2017 14:51:57 +0000 (14:51 +0000)]
Improve ivopts handling of forced scales

This patch improves the ivopts address cost calculation for modes
in which an index must be scaled rather than unscaled.  Previously
we would only try the scaled form if the unscaled form was valid.

Many of the SVE tests rely on this when matching scaled indices.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* tree-ssa-loop-ivopts.c (get_address_cost): Try using a
scaled index even if the unscaled address was invalid.
Don't increase the complexity of using a scale in that case.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254585

6 years agoBase subreg rules on REGMODE_NATURAL_SIZE rather than UNITS_PER_WORD
Richard Sandiford [Thu, 9 Nov 2017 14:22:39 +0000 (14:22 +0000)]
Base subreg rules on REGMODE_NATURAL_SIZE rather than UNITS_PER_WORD

Originally subregs operated at the word level and subreg offsets
were measured in words.  The offset units were later changed from
words to bytes (SUBREG_WORD became SUBREG_BYTE), but the fundamental
assumption that subregs should operate at the word level remained.
Whether (subreg:M1 (reg:M2 R2) N) is well-formed depended on the
way that M1 and M2 partitioned into words and whether the subword
part of N represented a lowpart.  However, some questions depended
instead on the macro REGMODE_NATURAL_SIZE, which was introduced
as part of the patch that moved from SUBREG_WORD to SUBREG_BYTE.
It is used to decide whether setting (subreg:M1 (reg:M2 R2) N)
clobbers all of R2 or just part of it (df_read_modify_subreg).

Using words doesn't really make sense for modern vector
architectures.  Vector registers are usually bigger than
a word and:

(a) setting the scalar lowpart of them usually clobbers the
    rest of the register (contrary to the subreg rules,
    where only the containing words should be clobbered).

(b) high words of vector registers are often not independently
    addressable, even though that's what the subreg rules expect.

This patch therefore uses REGMODE_NATURAL_SIZE instead of
UNITS_PER_WORD to determine the size of the independently
addressable blocks in an inner register.

This is needed for SVE because the number of words in a vector
mode isn't known at compile time, so isn't a sensible basis
for calculating the number of registers.

The only existing port to define REGMODE_NATURAL_SIZE is
64-bit SPARC, where FP registers are 32 bits.  (This is the
opposite of the use case for SVE, since the natural division
is smaller than a word.)  I compiled the testsuite before and
after the patch for sparc64-linux-gnu and the only test whose
assembly changed was g++.dg/debug/pr65678.C, where the order
of two independent stores was reversed and where a different
register was picked for one pseudo.  The new code was
otherwise equivalent to the old code.

2017-11-09  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* doc/rtl.texi: Rewrite the subreg rules so that they partition
the inner register into REGMODE_NATURAL_SIZE bytes rather than
UNITS_PER_WORD bytes.
* emit-rtl.c (validate_subreg): Divide subregs into blocks
based on REGMODE_NATURAL_SIZE of the inner mode.
(gen_lowpart_common): Split the SCALAR_FLOAT_MODE_P and
!SCALAR_FLOAT_MODE_P cases.  Use REGMODE_NATURAL_SIZE for the latter.
* expmed.c (lowpart_bit_field_p): Divide the value up into
chunks of REGMODE_NATURAL_SIZE rather than UNITS_PER_WORD.
* expr.c (store_constructor): Use REGMODE_NATURAL_SIZE to test
whether something is likely to occupy more than one register.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r254583

6 years agore PR ipa/82879 (ICE in max, at profile-count.h:889)
Jan Hubicka [Thu, 9 Nov 2017 14:05:14 +0000 (15:05 +0100)]
re PR ipa/82879 (ICE in max, at profile-count.h:889)

PR ipa/82879
* ipa-inline-transform.c (update_noncloned_frequencies): Use
profile_count::adjust_for_ipa_scaling.
* tree-inline.c (copy_bb, copy_cfg_body): Likewise.
* profile-count.c (profile_count::adjust_for_ipa_scaling): New member
function.
* profile-count.h (profile_count::adjust_for_ipa_scaling): Declare.

From-SVN: r254582

6 years ago[multiple changes]
Pierre-Marie de Rodat [Thu, 9 Nov 2017 13:59:10 +0000 (13:59 +0000)]
[multiple changes]

2017-11-09  Jerome Lambourg  <lambourg@adacore.com>

* gcc-interface/Makefile.in: Add rules to build aarch64-qnx runtimes.

2017-11-09  Hristian Kirtchev  <kirtchev@adacore.com>

* gcc-interface/trans.c (gnat_to_gnu): Add processing for
N_Variable_Reference_Marker nodes.

From-SVN: r254581

6 years ago[multiple changes]
Pierre-Marie de Rodat [Thu, 9 Nov 2017 13:09:17 +0000 (13:09 +0000)]
[multiple changes]

2017-11-09  Ed Schonberg  <schonberg@adacore.com>

* sem_ch12.adb (Analyze_Generic_Package_Declaration): Handle properly
the pragma Compile_Time_Error when it appears in a generic package
declaration and uses an expanded name to denote the current unit.

2017-11-09  Jerome Lambourg  <lambourg@adacore.com>

* libgnarl/s-taprop__qnx.adb: Fix incorrect casing for pthread_self.
* tracebak.c: Add support for tracebacks in QNX.

2017-11-09  Eric Botcazou  <ebotcazou@adacore.com>

* exp_aggr.adb (Aggr_Size_OK): Bump base limit from 50000 to 500000.

2017-11-09  Yannick Moy  <moy@adacore.com>

* erroutc.adb, set_targ.adb: Remove pragma Annotate for CodePeer
justification.

2017-11-09  Joel Brobecker  <brobecker@adacore.com>

* doc/gnat_ugn/platform_specific_information.rst: Document packages
needed on GNU/Linux by GNAT.
* gnat_ugn.texi: Regenerate.

2017-11-09  Hristian Kirtchev  <kirtchev@adacore.com>

* contracts.adb (Analyze_Contracts): Remove the three parameter
version. This routine now only analyzes contracts and does not perform
any freezing actions.
(Analyze_Previous_Contracts): Removed.
(Freeze_Previous_Contracts): New routine.
* contracts.ads (Analyze_Previous_Contracts): Removed.
(Freeze_Previous_Contracts): New routine.
* sem_ch3.adb (Analyze_Declarations): Analyze the contract of an
enclosing package spec regardless of whether the list denotes the
visible or private declarations.  Fix the removal of partial state
refinements when the context is a package spec.
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Freeze previous
contracts.
* sem_ch7.adb (Analyze_Package_Body_Helper): Freeze previous contracts.
* sem_ch9.adb (Analyze_Entry_Body): Freeze previous contracts.
(Analyze_Protected_Body): Freeze previous contracts.
(Analyze_Task_Body): Freeze previous contracts.
* sem_prag.adb: Comment reformatting.

2017-11-09  Bob Duff  <duff@adacore.com>

* libgnarl/g-thread.ads, libgnarl/g-thread.adb: (Make_Independent):
Export this so users can use it without importing
System.Tasking.Utilities.
* libgnarl/s-tassta.adb (Vulnerable_Complete_Task): Relax assertion
that fails when Make_Independent is called on a user task.
* libgnarl/s-taskin.ads (Master_Of_Task): Avoid unusual
capitalization style ((style) bad casing of "Master_of_Task").

From-SVN: r254580

6 years agogimple-ssa-store-merging.c (count_multiple_uses): New function.
Jakub Jelinek [Thu, 9 Nov 2017 13:08:41 +0000 (14:08 +0100)]
gimple-ssa-store-merging.c (count_multiple_uses): New function.

* gimple-ssa-store-merging.c (count_multiple_uses): New function.
(split_group): Add total_orig and total_new arguments, estimate the
number of statements related to the store group without store merging
and with store merging.
(imm_store_chain_info::output_merged_store): Adjust split_group
callers, punt if estimated number of statements with store merging
is not smaller than estimated number of statements without it.
Formatting fix.
(handled_load): Remove has_single_use checks.
(pass_store_merging::process_store): Likewise.

From-SVN: r254579

6 years ago[multiple changes]
Pierre-Marie de Rodat [Thu, 9 Nov 2017 12:52:41 +0000 (12:52 +0000)]
[multiple changes]

2017-11-09  Ed Schonberg  <schonberg@adacore.com>

* sem_ch12.adb (Analyze_Subprogram_Instantiation): Correct use of
uninitialized variable uncovered by Codepeer.

2017-11-09  Arnaud Charlet  <charlet@adacore.com>

* namet.adb: Replace pragma Assume by pragma Assert to fix bootstrap.

2017-11-09  Javier Miranda  <miranda@adacore.com>

* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
(Static_Dispatch_Tables): Minor rewording.
* gnat_rm.texi: Regenerate.

2017-11-09  Justin Squirek  <squirek@adacore.com>

* sem_ch8.adb (Analyze_Use_Package): Remove forced installation of
use_clauses within instances.
(Use_One_Package): Add condition to check for "hidden" open scopes to
avoid skipping over packages that have not been properly installed even
though they are visible.

2017-11-09  Ed Schonberg  <schonberg@adacore.com>

* sem_ch4.adb (Analyze_Selected_Component): Reject properly a call to a
private operation of a protected type, when the type has no visible
operations.

From-SVN: r254578

6 years ago[multiple changes]
Pierre-Marie de Rodat [Thu, 9 Nov 2017 12:46:58 +0000 (12:46 +0000)]
[multiple changes]

2017-11-09  Javier Miranda  <miranda@adacore.com>

* rtsfind.ads (RE_Id, RE_Unit_Table): Add RE_HT_Link.
* exp_disp.adb (Make_DT): Initialize the HT_Link field of the TSD only
if available.

2017-11-09  Bob Duff  <duff@adacore.com>

* exp_ch4.adb, exp_ch9.adb, exp_prag.adb, par-ch3.adb, sem_aggr.adb,
sem_ch12.adb, sem_ch13.adb, sem_ch4.adb, sem_disp.adb, sem_prag.adb,
sem_res.adb, sem_util.adb: Get rid of warnings about uninitialized
variables.

From-SVN: r254577

6 years agoexp_disp.adb (Make_DT): Default initialize Ifaces_List and Ifaces_Comp_List.
Yannick Moy [Thu, 9 Nov 2017 12:41:10 +0000 (12:41 +0000)]
exp_disp.adb (Make_DT): Default initialize Ifaces_List and Ifaces_Comp_List.

2017-11-09  Yannick Moy  <moy@adacore.com>

* exp_disp.adb (Make_DT): Default initialize Ifaces_List and
Ifaces_Comp_List.

From-SVN: r254576

6 years agore PR tree-optimization/82902 (ICE verify_ssa failed during GIMPLE pass: phiprop)
Richard Biener [Thu, 9 Nov 2017 12:22:32 +0000 (12:22 +0000)]
re PR tree-optimization/82902 (ICE verify_ssa failed during GIMPLE pass: phiprop)

2017-11-09  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82902
* tree-ssa-phiprop.c (propagate_with_phi): Test proper type.

* g++.dg/torture/pr82902.C: New testcase.

From-SVN: r254575

6 years agoInitialize split_branch_probability (PR target/82863).
Martin Liska [Thu, 9 Nov 2017 12:19:02 +0000 (13:19 +0100)]
Initialize split_branch_probability (PR target/82863).

2017-11-09  Martin Liska  <mliska@suse.cz>

PR target/82863
* emit-rtl.c (init_emit_regs): Initialize split_branch_probability to
uninitialized.
2017-11-09  Martin Liska  <mliska@suse.cz>

PR target/82863
* gcc.dg/pr82863.c: New test.

From-SVN: r254574