gcc.git
6 years ago[Patch combine] Don't create vector mode ZERO_EXTEND from subregs
James Greenhalgh [Tue, 12 Dec 2017 11:27:54 +0000 (11:27 +0000)]
[Patch combine] Don't create vector mode ZERO_EXTEND from subregs

The code in simplify set to handle transforming the paradoxical subreg
expression:

  (set FOO (subreg:M (mem:N BAR) 0))

in to:

  (set FOO (zero_extend:M (mem:N BAR)))

Does not consider the case where M is a vector mode, allowing it to
construct (for example):

  (zero_extend:V4SI (mem:SI))

For one, this has the wrong semantics - but fortunately we fail long
before then in expand_compound_operation.

We need to explicitly reject vector modes from this transformation.

gcc/

* combine.c (simplify_set): Do not transform subregs to zero_extends
if the destination mode is a vector mode.

From-SVN: r255578

6 years agore PR c/82679 (Uses of typedefs of arrays of _Atomic-qualified types are rejected)
Marek Polacek [Tue, 12 Dec 2017 10:38:09 +0000 (10:38 +0000)]
re PR c/82679 (Uses of typedefs of arrays of _Atomic-qualified types are rejected)

PR c/82679
* c-decl.c (grokdeclarator): Check declspecs insted of atomicp.

* gcc.dg/c11-atomic-5.c: New test.

From-SVN: r255577

6 years agore PR rtl-optimization/83363 (wrong code at -O2 -fno-forward-propagate)
Jakub Jelinek [Tue, 12 Dec 2017 09:51:05 +0000 (10:51 +0100)]
re PR rtl-optimization/83363 (wrong code at -O2 -fno-forward-propagate)

PR rtl-optimization/83363
PR rtl-optimization/83364
* gcc.dg/pr83363.c: New test.
* gcc.dg/pr83364.c: New test.

From-SVN: r255576

6 years agore PR tree-optimization/83359 (ICE in expand_LOOP_DIST_ALIAS, at internal-fn.c:2362)
Jakub Jelinek [Tue, 12 Dec 2017 09:21:35 +0000 (10:21 +0100)]
re PR tree-optimization/83359 (ICE in expand_LOOP_DIST_ALIAS, at internal-fn.c:2362)

PR tree-optimization/83359
* tree-cfg.h (fold_loop_internal_call): Declare.
* tree-vectorizer.c (fold_loop_internal_call): Moved to ...
* tree-cfg.c (fold_loop_internal_call): ... here.  No longer static.
(find_loop_dist_alias): New function.
(move_sese_region_to_fn): If any dloop->orig_loop_num value is
updated, also adjust any corresponding LOOP_DIST_ALIAS internal
calls.

* gcc.dg/graphite/pr83359.c: New test.

From-SVN: r255575

6 years agore PR tree-optimization/80631 (Compiling with -O3 -mavx2 gives wrong code)
Jakub Jelinek [Tue, 12 Dec 2017 08:55:02 +0000 (09:55 +0100)]
re PR tree-optimization/80631 (Compiling with -O3 -mavx2 gives wrong code)

PR tree-optimization/80631
* tree-vect-loop.c (get_initial_def_for_reduction): Fix comment typo.
(vect_create_epilog_for_reduction): Add INDUC_VAL and INDUC_CODE
arguments, for INTEGER_INDUC_COND_REDUCTION use INDUC_VAL instead of
hardcoding zero as the value if COND_EXPR is never true.  For
INTEGER_INDUC_COND_REDUCTION don't emit the final COND_EXPR if
INDUC_VAL is equal to INITIAL_DEF, and use INDUC_CODE instead of
hardcoding MAX_EXPR as the reduction operation.
(is_nonwrapping_integer_induction): Allow negative step.
(vectorizable_reduction): Compute INDUC_VAL and INDUC_CODE for
vect_create_epilog_for_reduction, if no value is suitable, don't
use INTEGER_INDUC_COND_REDUCTION for now.  Formatting fixes.

* gcc.dg/vect/pr80631-1.c: New test.
* gcc.dg/vect/pr80631-2.c: New test.
* gcc.dg/vect/pr65947-13.c: Expect integer induc cond reduction
vectorization.

From-SVN: r255574

6 years agore PR middle-end/81889 (bogus warnings with -Wmaybe-uninitialized -O3)
Richard Biener [Tue, 12 Dec 2017 08:50:31 +0000 (08:50 +0000)]
re PR middle-end/81889 (bogus warnings with -Wmaybe-uninitialized -O3)

2017-12-12  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81889
* tree-ssa-loop-niter.c (infer_loop_bounds_from_signedness): Use
range info from the non-wrapping IV instead of just the range
of the type.

* gfortran.dg/pr81889.f90: New testcase.
* gcc.dg/tree-ssa/pr64183.c: Adjust.

From-SVN: r255573

6 years agoEnable VAES support [2/5]
Julia Koval [Tue, 12 Dec 2017 05:55:23 +0000 (06:55 +0100)]
Enable VAES support [2/5]

gcc/
* config.gcc: Add vaesintrin.h.
* config/i386/i386-builtin-types.def (V64QI_FTYPE_V64QI_V64QI): New type.
* config/i386/i386-builtin.def (__builtin_ia32_vaesdec_v16qi,
__builtin_ia32_vaesdec_v32qi, __builtin_ia32_vaesdec_v64qi): New builtins.
* config/i386/i386.c (ix86_expand_args_builtin): Handle new type.
* config/i386/immintrin.h: Include vaesintrin.h.
* config/i386/sse.md (vaesdec_<mode>): New pattern.
* config/i386/vaesintrin.h (_mm256_aesdec_epi128, _mm512_aesdec_epi128,
_mm_aesdec_epi128): New intrinsics.

gcc/testsuite/
* gcc.target/i386/avx512-check.h: Handle bit_VAES.
* gcc.target/i386/avx512f-aesdec-2.c: New test.
* gcc.target/i386/avx512fvl-vaes-1.c: Ditto.
* gcc.target/i386/avx512vl-aesdec-2.c: Ditto.
* gcc.target/i386/i386.exp (check_effective_target_avx512vaes): New.

From-SVN: r255572

6 years agoEnable VAES support [1/5]
Julia Koval [Tue, 12 Dec 2017 05:17:03 +0000 (06:17 +0100)]
Enable VAES support [1/5]

gcc/
* common/config/i386/i386-common.c (OPTION_MASK_ISA_VAES_SET,
OPTION_MASK_ISA_VAES_UNSET): New.
(ix86_handle_option): Handle -mvaes.
* config/i386/cpuid.h: Define bit_VAES.
* config/i386/driver-i386.c (host_detect_local_cpu): Detect -mvaes.
* config/i386/i386-c.c (__VAES__): New.
* config/i386/i386.c (ix86_target_string): Add -mvaes.
(ix86_valid_target_attribute_inner_p): Ditto.
* config/i386/i386.h (TARGET_VAES, TARGET_VAES_P): New.
* config/i386/i386.opt: Add -mvaes.
* doc/invoke.texi: Ditto.

From-SVN: r255571

6 years ago[IEPM] Introduce debug hook for inline entry point markers
Alexandre Oliva [Tue, 12 Dec 2017 02:16:47 +0000 (02:16 +0000)]
[IEPM] Introduce debug hook for inline entry point markers

The inline_entry hook will be given a definition in a later patch.

for  gcc/ChangeLog

* debug.h (gcc_debug_hooks): Add inline_entry.
* dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Likewise.
* debug.c (do_nothing_debug_hooks): Likewise.
* vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
* dwarf2out.c (dwarf2_debug_hooks): Likewise.
(dwarf2_lineno_debug_hooks): Likewise.

From-SVN: r255570

6 years ago[SFN] Introduce -gstatement-frontiers option, enable debug markers
Alexandre Oliva [Tue, 12 Dec 2017 02:16:31 +0000 (02:16 +0000)]
[SFN] Introduce -gstatement-frontiers option, enable debug markers

Introduce a command line option to enable statement frontiers, enabled
by default in optimized builds with DWARF2+ debug information.

This patch depends on an earlier patch that completed the
infrastructure for debug markers, and on another patch that turns -g
into a negatable option prefix.

for  gcc/ChangeLog

* common.opt (gstatement-frontiers): New, setting
debug_nonbind_markers_p.
* rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): Activate.
* toplev.c (process_options): Autodetect value for debug statement
frontiers option.
* tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Activate.
* doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): New.

From-SVN: r255569

6 years ago[SFN] introduce statement frontier notes, still disabled
Alexandre Oliva [Tue, 12 Dec 2017 02:16:07 +0000 (02:16 +0000)]
[SFN] introduce statement frontier notes, still disabled

This patch completes the infrastructure for the introduction of
statement frontiers in C-family languages.

It brings in all the code remaining code needed to introduce and
transform begin stmt trees, gimple stmts, insns and notes, and
ultimately use them to generate the is_stmt column in DWARF2+ line
number tables/programs, however none of it is activated: the option
that would do so will be introduced in a subsequent patch.

This patch depends on an earlier patch with not-quite-boilerplate
changes towards SFN.

for  gcc/c-family/ChangeLog

* c-semantics.c (pop_stmt_list): Move begin stmt marker into
subsequent statement list.

for  gcc/c/ChangeLog

* c-objc-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true.
* c-parser.c (add_debug_begin_stmt): New.
(c_parser_declaration_or_fndef): Call it.
(c_parser_compound_statement_nostart): Likewise.
(c_parser_statement_after_labels): Likewise.
* c-typeck (c_finish_stmt_expr): Skip begin stmts markers.

for  gcc/cp/ChangeLog

* constexpr.c (check_constexpr_ctor_body_1): Skip begin stmt
markers.
(constexpr_fn_retval): Likewise.
(potential_constant_expression_1): Likewise.
(cxx_eval_statement_list): Check that a begin stmt marker is
not used as the value of a statement list.
(cxx_eval_constant_expression): Return begin stmt markers
unchanged.
* cp-array-notation.c (stmt_location): New.
(cp_expand_cond_array_notations): Use it.
* cp-objcp-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true.
* parser.c (add_debug_begin_stmt): New.
(cp_parser_statement): Call it.
* pt.c (tsubst_copy): Handle begin stmt markers.

for  gcc/ChangeLog

* cfgexpand.c (expand_gimple_basic_block): Handle begin stmt
markers.  Integrate source bind into debug stmt expand loop.
(pass_expand::execute): Check debug marker limit.  Avoid deep
TER and expand debug locations for debug bind insns only.
* cse.c (insn_live_p): Keep nonbind markers and debug bindings
followed by them.
* df-scan.c (df_insn_delete): Accept out-of-block debug insn.
* final.c (reemit_insn_block_notes): Take current block from
nonbind markers.  Declare note where it's first set.
(final_scan_insn): Handle begin stmt notes.  Emit is_stmt according to
begin stmt markers if enabled.
(notice_source_line): Handle nonbind markers.  Fail if their
location is unknown or that of builtins.
(rest_of_handle_final): Convert begin stmt markers to notes if
var-tracking didn't run.
(rest_of_clean_state): Skip begin stmt markers.
* gimple-pretty-print.c (dump_gimple_debug): Handle begin stmt
markers.
* function.c (allocate_struct_function): Set begin_stmt_markers.
* function.h (struct function): Add debug_marker_count counter
and debug_nonbind_markers flag.
* gimple-iterator.c (gsi_remove): Adjust debug_marker_count.
* gimple-low.c (lower_function_body): Adjust
debug_nonbind_markers.
(lower_stmt): Drop or skip gimple debug stmts.
(lower_try_catch): Skip debug stmts.
* gimple.c (gimple_build_debug_begin_stmt): New.
(gimple_copy): Increment debug_marker_count if copying one.
* gimple.h (gimple_build_debug_begin_stmt): Declare.
* gimplify.c (rexpr_location): New.
(rexpr_has_location): New.
(warn_switch_unreachable_r): Handle gimple debug stmts.
(shortcut_cond_r): Call expr_location.
(find_goto): New.
(find_goto_label): New.
(shortcut_cond_expr): Call expr_has_location, expr_location, and
find_goto_label.
(gimplify_cond_expr): Call find_goto_label, expr_has_location, and
expr_location.
(gimplify_expr): Handle begin stmt markers.  Reject debug expr decls.
* langhooks-def.h (LANG_HOOKS_EMITS_BEGIN_STMT): New.  Add to...
(LANG_HOOKS_INITIALIZER): ... this.
* langhooks.h (struct lang_hooks): Add emits_begin_stmt.
* lra-contraints.c (inherit_reload_reg): Tolerate between-blocks
debug insns.
(update_ebb_live_info): Skip debug insn markers.
* lra.c (debug_insn_static_data): Rename to...
(debug_bind_static_data): ... this.
(debug_marker_static_data): New.
(lra_set_insn_recog_data): Select one of the above depending
on debug insn kind.
(lra_update_isn_regno_info): Don't assume debug insns have
freqs.
(push_insns): Skip debug insns.
* lto-streamer-in.c (input_function): Drop debug stmts
depending on active options.  Adjust debug_nonbind_markers.
* params.def (PARAM_MAX_DEBUG_MARKER_COUNT): New.
* print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle
begin stmt marker notes.
(print_insn): Likewise.
* recog.c (extract_insn): Recognize rtl for debug markers.
* rtl.def (DEBUG_MARKER): New.
* tree-inline.c: Include params.h.
(remap_gimple_stmt): Handle nonbind markers.
(maybe_move_debug_stmts_to_successors): Likewise.
(copy_debug_stmt): Likewise.
* tree-iterator.c (append_to_statement_list_1): Append begin stmt
markers regardless of no side effects.
(tsi_link_before): Don't update container's side effects when adding
a begin stmt marker.
(tsi_link_after): Likewise.
(expr_first): Skip begin stmt markers.
(expr_last): Likewise.
* tree-pretty-print (dump_generic_node): Handle begin stmt markers.
* tree-ssa-threadedge.c (propagate_threaded_block_debug_info):
Disregard nonbind markers.
* tree.c (make_node_stat): Don't set side effects for begin stmt
markers.
(build1_stat): Likewise.
* tree.def (DEBUG_BEGIN_STMT): New.
* tree.h (GOTO_DESTINATION): Require a GOTO_EXPR.
* var-tracking.c (delete_debug_insns): Renamed to...
(delete_vta_debug_insns): ... this.
(reemit_marker_as_note): New.
(vt_initialize): Reemit markers.
(delete_vta_debug_insns): Likewise.
(vt_debug_insns_local): Reemit or delete markers.
(variable_tracking_main_1): Likewise.
* doc/generic.texi (DEBUG_BEGIN_STMT): Document.
* doc/gimple.texi (gimple_debug_begin_stmt_p): New.
(gimple_debug_nonbind_marker_p): New.
(gimple_build_debug_bind): Adjust.
(gimple_build_debug_begin_stmt): New.
* doc/invoke.texi (max-debug-marker-count): New param.
* doc/rtl.texi (debug_implicit_ptr, entry_value): New.
(debug_parameter_ref, debug_marker): New.
(NOTE_INSN_BEGIN_STMT): New.
(DEBUG_INSN): Describe begin stmt markers.

From-SVN: r255568

6 years ago[SFN] stabilize find_bb_boundaries
Alexandre Oliva [Tue, 12 Dec 2017 02:15:44 +0000 (02:15 +0000)]
[SFN] stabilize find_bb_boundaries

If find_bb_boundaries is given a block with zero or one nondebug insn
beside debug insns, it shouldn't purge dead edges, because without
debug insns we wouldn't purge them at that point.  Doing so may change
the order in which edges are processed, and ultimately lead to
different transformations to the CFG and then to different
optimizations.

We shouldn't, however, retain debug insns after control flow insns, so
if we find debug insns after a single insn that happens to be a
control flow insn, do the debug insn cleanups, but still refrain from
purging dead edges at that point.

for  gcc/ChangeLog

* cfgbuild.c (find_bb_boundaries): Don't purge dead edges if,
without debug insns, we wouldn't, but clean up debug insns
after a control flow insn nevertheless.

From-SVN: r255567

6 years ago[SFN] not-quite-boilerplate changes in preparation to introduce nonbind markers
Alexandre Oliva [Tue, 12 Dec 2017 02:15:30 +0000 (02:15 +0000)]
[SFN] not-quite-boilerplate changes in preparation to introduce nonbind markers

This patch adjusts numerous parts of the compiler that would
malfunction should they find debug markers at points where they may be
introduced.  The changes purport to allow the compiler to pass
bootstrap-debug-lean (-fcompare-debug in stage3) at various
optimization levels, as well as bootstrap-debug-lib (-fcompare-debug
for target libraries), even after the compiler is changed so that
debug markers are introduced in code streams at spots where earlier
debug stmts, insns and notes wouldn't normally appear.

This patch depends on an earlier SFN boilerplate patch, and on another
SFN patch that introduces new RTL insn-walking functions.

for  gcc/ChangeLog

* cfgcleanup.c (delete_unreachable_blocks): Use alternate
block removal order if MAY_HAVE_DEBUG_BIND_INSNS.
* cfgexpand.c (label_rtx_for_bb): Skip debug insns.
* cfgrtl.c (try_redirect_by_replacing_jump): Skip debug insns.
(rtl_tidy_fallthru_edge): Likewise.
(rtl_verify_fallthru): Likewise.
(rtl_verify_bb_layout): Likewise.
(skip_insns_after_block): Likewise.
(duplicate_insn_chain): Use DEBUG_BIND_INSN_P.
* dwarf2out.c: Include print-rtl.h.
(dwarf2out_next_real_insn): New.
(dwarf2out_var_location): Call it.  Disregard begin stmt markers.
Dump debug binds in asm comments.
* gimple-iterator.c (gimple_find_edge_insert_loc): Skip debug stmts.
* gimple-iterator.h (gsi_start_bb_nondebug): Remove; adjust
callers to use gsi_start_nondebug_bb instead.
(gsi_after_labels): Skip gimple debug stmts.
(gsi_start_nondebug): New.
* gimple-loop-interchange.c (find_deps_in_bb_for_stmt): Adjust.
(proper_loop_form_for_interchange): Adjust.
* gimple-low.c (gimple_seq_may_fallthru): Take last nondebug stmt.
* gimple.h (gimple_seq_last_nondebug_stmt): New.
* gimplify.c (last_stmt_in_scope): Skip debug stmts.
(collect_fallthrough_labels): Likewise.
(should_warn_for_implicit_fallthrough): Likewise.
(warn_implicit_fallthrough_r): Likewise.
(expand_FALLTHROUGH_r): Likewise.
* graphite-isl-ast-to-gimple.c (gsi_insert_earliest): Adjust.
(graphite_copy_stmts_from_block): Skip nonbind markers.
* haifa-sched.c (sched_extend_bb): Skip debug insns.
* ipa-icf-gimple.c (func_checker::compare_bb): Adjust.
* jump.c (clean_barriers): Skip debug insns.
* omp-expand.c (expand_parallel_call): Skip debug insns.
(expand_task_call): Likewise.
(remove_exit_barrier): Likewise.
(expand_omp_taskreg): Likewise.
(expand_omp_for_init_counts): Likewise.
(expand_omp_for_generic): Likewise.
(expand_omp_for_static_nochunk): Likewise.
(expand_omp_for_static_chunk): Likewise.
(expand_omp_simd): Likewise.
(expand_omp_taskloop_for_outer): Likewise.
(expand_omp_taskloop_for_inner): Likewise.
(expand_oacc_for): Likewise.
(expand_omp_sections): Likewise.
(expand_omp_single): Likewise.
(expand_omp_synch): Likewise.
(expand_omp_atomic_load): Likewise.
(expand_omp_atomic_store): Likewise.
(expand_omp_atomic_fetch_op): Likewise.
(expand_omp_atomic_pipeline): Likewise.
(expand_omp_atomic_mutex): Likewise.
(expand_omp_target): Likewise.
(grid_expand_omp_for_loop): Likewise.
(grid_expand_target_grid_body): Likewise.
(build_omp_regions_1): Likewise.
* omp-low.c (check_combined_parallel): Skip debug stmts.
* postreload.c (fixup_debug_insns): Skip nonbind debug insns.
* regcprop.c (find_oldest_value_reg): Ensure REGNO is not a pseudo.
* sese.c (sese_trivially_empty_bb_p): Call is_gimple_debug in
test.
* tree-cfg.c (make_blobs_1): Skip debug stmts.
(make_edges): Likewise.
(cleanup_dead_labels): Likewise.
(gimple_can_merge_blocks_p): Likewise.
(stmt_starts_bb_p): Likewise.
(gimple_block_label): Likewise.
(gimple_redirect_edge_and_branch): Likewise.
* tree-cfgcleanup.c (remove_forwarder_block): Rearrange skipping
of debug stmts.
(execute_cleanup_cfg_post_optimizing): Dump enumerated decls with
TDF_SLIM.
* tree-pretty-print (print_declaration): Omit initializer in slim
dumps.
* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Mark begin stmt
markers.
(eliminate_unnecessary_stmts): Stabilize block removal order.
* tree-ssa-tail-merge.c (find_duplicate): Skip debug stmts.
* var-tracking.c (get_first_insn): New.
(vt_emit_notes): Call it.
(vt_initialize): Walk any insns before the first BB.
(delete_debug_insns): Likewise.

From-SVN: r255566

6 years ago[SFN] boilerplate changes in preparation to introduce nonbind markers
Alexandre Oliva [Tue, 12 Dec 2017 02:15:00 +0000 (02:15 +0000)]
[SFN] boilerplate changes in preparation to introduce nonbind markers

This patch introduces a number of new macros and functions that will
be used to distinguish between different kinds of debug stmts, insns
and notes, namely, preexisting debug bind ones and to-be-introduced
nonbind markers.

In a seemingly mechanical way, it adjusts several uses of the macros
and functions, so that they refer to narrower categories when
appropriate.

These changes, by themselves, should not have any visible effect in
the compiler behavior, since the upcoming debug markers are never
created with this patch alone.

for  gcc/ChangeLog

* gimple.h (enum gimple_debug_subcode): Add
GIMPLE_DEBUG_BEGIN_STMT.
(gimple_debug_begin_stmt_p): New.
(gimple_debug_nonbind_marker_p): New.
* tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): New.
(MAY_HAVE_DEBUG_BIND_STMTS): Renamed from....
(MAY_HAVE_DEBUG_STMTS): ... this.  Check both.
* insn-notes.def (BEGIN_STMT): New.
* rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): New.
(MAY_HAVE_DEBUG_BIND_INSNS): Renamed from....
(MAY_HAVE_DEBUG_INSNS): ... this.  Check both.
(NOTE_MARKER_LOCATION, NOTE_MARKER_P): New.
(DEBUG_BIND_INSN_P, DEBUG_MARKER_INSN_P): New.
(INSN_DEBUG_MARKER_KIND): New.
(GEN_RTX_DEBUG_MARKER_BEGIN_STMT_PAT): New.
(INSN_VAR_LOCATION): Check for VAR_LOCATION.
(INSN_VAR_LOCATION_PTR): New.
* cfgexpand.c (expand_debug_locations): Handle debug bind insns
only.
(expand_gimple_basic_block): Likewise.  Emit debug temps for TER
deps only if debug bind insns are enabled.
(pass_expand::execute): Avoid deep TER and expand
debug locations for debug bind insns only.
* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Narrow
debug stmts special handling down to debug bind stmts.
* combine.c (try_combine): Narrow debug insns special handling
down to debug bind insns.
* cse.c (delete_trivially_dead_insns): Handle debug bindings.
Narrow debug insns preexisting special handling down to debug
bind insns.
* dce.c (rest_of_handle_ud_dce): Narrow debug insns special
handling down to debug bind insns.
* function.c (instantiate_virtual_regs): Skip debug markers,
adjust handling of debug binds.
* gimple-ssa-backprop.c (backprop::prepare_change): Try debug
temp insertion iff MAY_HAVE_DEBUG_BIND_STMTS.
* haifa-sched.c (schedule_insn): Narrow special handling of debug
insns to debug bind insns.
* ipa-param-manipulation.c (ipa_modify_call_arguments): Narrow
special handling of debug stmts to debug bind stmts.
* ipa-split.c (split_function): Likewise.
* ira.c (combine_and_move_insns): Adjust debug bind insns only.
* loop-unroll.c (apply_opt_in_copies): Adjust tests on bind
debug insns.
* reg-stack.c (convert_regs_1): Use DEBUG_BIND_INSN_P.
* regrename.c (build_def_use): Likewise.
* regcprop.c (copyprop_hardreg_forward_1): Likewise.
(pass_cprop_hardreg): Narrow special casing of debug insns to
debug bind insns.
* regstat.c (regstat_init_n_sets_and_refs): Likewise.
* reload1.c (reload): Likewise.
* sese.c (sese_insert_phis_for_liveouts): Narrow special
casing of debug stmts to debug bind stmts.
* shrink-wrap.c (move_insn_for_shrink_wrap): Likewise.
* ssa-iterators.h (num_imm_uses): Likewise.
* tree-cfg.c (gimple_merge_blocks): Narrow special casing of
debug stmts to debug bind stmts.
* tree-inline.c (tree_function_versioning): Narrow special casing
of debug stmts to debug bind stmts.
* tree-loop-distribution.c (generate_loops_for_partition):
Narrow special casing of debug stmts to debug bind stmts.
* tree-sra.c (analyze_access_subtree): Narrow special casing
of debug stmts to debug bind stmts.
* tree-ssa-dce.c (remove_dead_stmt): Narrow special casing of debug
stmts to debug bind stmts.
* tree-ssa-loop-ivopt.c (remove_unused_ivs): Narrow special
casing of debug stmts to debug bind stmts.
* tree-ssa-reassoc.c (reassoc_remove_stmt): Likewise.
* tree-ssa-tail-merge.c (tail_merge_optimize): Narrow special
casing of debug stmts to debug bind stmts.
* tree-ssa-threadedge.c (propagate_threaded_block_debug_info):
Likewise.
* tree-ssa.c (flush_pending_stmts): Narrow special casing of
debug stmts to debug bind stmts.
(gimple_replace_ssa_lhs): Likewise.
(insert_debug_temp_for_var_def): Likewise.
(insert_debug_temps_for_defs): Likewise.
(reset_debug_uses): Likewise.
* tree-ssanames.c (release_ssa_name_fn): Likewise.
* tree-vect-loop-manip.c (adjust_debug_stmts_now): Likewise.
(adjust_debug_stmts): Likewise.
(adjust_phi_and_debug_stmts): Likewise.
(vect_do_peeling): Likewise.
* tree-vect-loop.c (vect_transform_loop): Likewise.
* valtrack.c (propagate_for_debug): Use BIND_DEBUG_INSN_P.
* var-tracking.c (adjust_mems): Narrow special casing of debug
insns to debug bind insns.
(dv_onepart_p, dataflow_set_clar_at_call, use_type): Likewise.
(compute_bb_dataflow, vt_find_locations): Likewise.
(vt_expand_loc, emit_notes_for_changes): Likewise.
(vt_init_cfa_base): Likewise.
(vt_emit_notes): Likewise.
(vt_initialize): Likewise.
(vt_finalize): Likewise.

From-SVN: r255565

6 years ago[SFN] adjust RTL insn-walking API
Alexandre Oliva [Tue, 12 Dec 2017 02:14:39 +0000 (02:14 +0000)]
[SFN] adjust RTL insn-walking API

This patch removes unused RTL functions, introduces alternate ones for
use in a later SFN patch, and regroups other related functions so that
they appear in a more consistent order.

for  gcc/ChangeLog

* emit-rtl.c (next_nondebug_insn, prev_nondebug_insn): Reorder.
(next_nonnote_nondebug_insn, prev_nonnote_nondebug_insn): Reorder.
(next_nonnote_nondebug_insn_bb): New.
(prev_nonnote_nondebug_insn_bb): New.
(prev_nonnote_insn_bb, next_nonnote_insn_bb): Remove.
* rtl.h (prev_nonnote_insn_bb, next_nonnote_insn_bb): Remove decls.
(prev_nonnote_nondebug_insn_bb): Declare.
(next_nonnote_nondebug_insn_bb): Declare.
* cfgbuild.c (find_bb_boundaries): Adjust to skip debug insns.
* cfgrtl.c (get_last_bb_insn): Likewise.
* lra.c (push_insns): Likewise.

From-SVN: r255564

6 years agoExpensive selftests: torture testing for fix-it boundary conditions (PR c/82050)
David Malcolm [Tue, 12 Dec 2017 01:31:30 +0000 (01:31 +0000)]
Expensive selftests: torture testing for fix-it boundary conditions (PR c/82050)

This patch adds selftest coverage for the fix for PR c/82050.

The selftest iterates over various "interesting" column and line-width
values to try to shake out bugs in the fix-it printing routines, a kind
of "torture" selftest.

Unfortunately this selftest is noticably slower than the other selftests;
adding it to diagnostic-show-locus.c led to:
  -fself-test: 40218 pass(es) in 0.172000 seconds
slowing down to:
  -fself-test: 97315 pass(es) in 6.109000 seconds
for an unoptimized build (e.g. when hacking with --disable-bootstrap).

Given that this affects the compile-edit-test cycle of the "gcc"
subdirectory, this felt like an unacceptable amount of overhead to add.

I attempted to optimize the test by reducing the amount of coverage, but
the test seems useful, and there seems to be a valid role for "torture"
selftests.

Hence this patch adds a:
  gcc.dg/plugin/expensive_selftests_plugin.c
with the responsibility for running "expensive" selftests, and adds the
expensive test there.  The patch moves a small amount of code from
selftest::run_tests into a helper class so that the plugin can print
a useful summary line (to reassure us that the tests are actually being
run).

With that, the compile-edit-test cycle of the "gcc" subdir is unaffected;
the plugin takes:
  expensive_selftests_plugin: 26641 pass(es) in 3.127000 seconds
which seems reasonable within the much longer time taken by "make check"
(I optimized some of the overhead away, hence the reduction from 6 seconds
above down to 3 seconds).

gcc/ChangeLog:
PR c/82050
* selftest-run-tests.c (selftest::run_tests): Move start/finish code
to...
* selftest.c (selftest::test_runner::test_runner): New ctor.
(selftest::test_runner::~test_runner): New dtor.
* selftest.h (class selftest::test_runner): New class.

gcc/testsuite/ChangeLog:
PR c/82050
* gcc.dg/plugin/expensive-selftests-1.c: New file.
* gcc.dg/plugin/expensive_selftests_plugin.c: New file.
* gcc.dg/plugin/plugin.exp (plugin_test_list): Add the above.

From-SVN: r255563

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

From-SVN: r255562

6 years agoFix the new pr83361.c testcase
Segher Boessenkool [Mon, 11 Dec 2017 23:35:39 +0000 (00:35 +0100)]
Fix the new pr83361.c testcase

gcc/testsuite/
* gcc.dg/pr83361.c: Add -Wno-div-by-zero to dg-options.

From-SVN: r255559

6 years agoRemove a stray line.
Martin Sebor [Mon, 11 Dec 2017 23:22:39 +0000 (16:22 -0700)]
Remove a stray line.

From-SVN: r255558

6 years agoPR c/81544 - attribute noreturn and warn_unused_result on the same function
Martin Sebor [Mon, 11 Dec 2017 23:21:55 +0000 (23:21 +0000)]
PR c/81544 - attribute noreturn and warn_unused_result on the same function

PR c/81544 - attribute noreturn and warn_unused_result on the same function
accepted

Add tests missed in r255469.

From-SVN: r255557

6 years agoaltivec-12.c (main): Add tests for vec_avg.
Carl Love [Mon, 11 Dec 2017 22:57:08 +0000 (22:57 +0000)]
altivec-12.c (main): Add tests for vec_avg.

gcc/testsuite/ChangeLog:

2017-12-07  Carl Love  <cel@us.ibm.com>

* gcc.target/powerpc/altivec-12.c (main):  Add tests for vec_avg.
* gcc.target/powerpc/builtins-1.c: Renamed builtins-1.h.
* gcc.target/powerpc/builtins-1.h: Add tests for vec_and,
vec_andc, vec_cpsgn, vec_mergeh,vec_mergel, vec_nor, vec_or,
vec_sel, vec_xor, vec_all_eq, vec_all_ge, vec_all_gt, vec_all_le,
vec_all_lt, vec_all_ne, vec_any_eq,vec_any_ge, vec_any_gt,vec_any_le,
vec_any_lt, vec_any_ne, vec_cntlz, vec_round, vec_rsqrt, vec_rsqrte,
vec_splat, vec_div, vec_mul,vec_ctf, vec_cts, vec_ctu.
* gcc.target/powerpc/builtins-1-be.c: New file, big endian
test file for tests in builtins-1.h.
* gcc.target/powerpc/builtins-1-le.c: New file, little endian
test file for tests in builtins-1.h.
* gcc.target/powerpc/builtins-2.c (main): Add tests for vec_ctf,
vec_cts, vec_ctu.
* gcc.target/powerpc/builtins-3-runnable.c (test_result_sp): Fix printf
conversion character.
  * gcc.target/powerpc/fold-vec-minmax-char.c (test1_min, test2_min,
test4_min, test1_max, test2_max): Add tests for vec_max and vec_min.
  * gcc.target/powerpc/fold-vec-minmax-int.c (test4_min, test5_min,
test7_min, test8_min): Add tests for vec_min.
  * gcc.target/powerpc/fold-vec-minmax-longlong.c (test7_max, test8_max,
test9_max, test10_max): Add tests for and vec_max.
  * gcc.target/powerpc/fold-vec-minmax-short.c (test4_min, test5_min,
tes7_min, test8_min): Add tests for and vec_min.
  * gcc.target/powerpc/p8vector-builtin-8.c (foo): Add test for vec_adds,
vec_subs, vec_sum2s, vec_sum4s.
  * gcc.target/powerpc/vsx-splats-p8.c: New file to test vec_splats.
* gcc.target/vsx-vector-5.c (arg1_tests_d, arg1_tests_d): Add
tests for vec_ceil, vec_floor, vec_nearbyint, vec_sqrt.
* gcc.target/vsx-vector-7.c (foo): Add tests for vec_sel.
* gcc.target/vsx-vector-abss.c: New file to test vec_abss.

From-SVN: r255556

6 years agoaltivec.h (vec_extract_fp32_from_shorth, [...]): Add #defines.
Carl Love [Mon, 11 Dec 2017 22:47:34 +0000 (22:47 +0000)]
altivec.h (vec_extract_fp32_from_shorth, [...]): Add #defines.

gcc/ChangeLog:

2017-12-11  Carl Love  <cel@us.ibm.com>

* config/rs6000/altivec.h (vec_extract_fp32_from_shorth,
vec_extract_fp32_from_shortl]): Add #defines.
* config/rs6000/rs6000-builtin.def (VSLDOI_2DI): Add macro expansion.
* config/rs6000/rs6000-c.c (ALTIVEC_BUILTIN_VEC_UNPACKH,
ALTIVEC_BUILTIN_VEC_UNPACKL, ALTIVEC_BUILTIN_VEC_AND,
ALTIVEC_BUILTIN_VEC_SLD, ALTIVEC_BUILTIN_VEC_SRL,
ALTIVEC_BUILTIN_VEC_SRO, ALTIVEC_BUILTIN_VEC_SLD,
ALTIVEC_BUILTIN_VEC_SLL): Add expansions.
* doc/extend.texi: Add documentation for the added builtins.

gcc/testsuite/ChangeLog:

2017-12-11  Carl Love  <cel@us.ibm.com>
* gcc.target/powerpc/altivec-7.c: Renamed altivec-7.h.
* gcc.target/powerpc/altivec-7.h (main): Add testcases for vec_unpackl.
Add dg-final tests for the instructions generated.
* gcc.target/powerpc/altivec-7-be.c: New file to test on big endian.
* gcc.target/powerpc/altivec-7-le.c: New file to test on little endian.
* gcc.target/powerpc/altivec-13.c (foo): Add vec_sld, vec_srl,
 vec_sro testcases. Add dg-final tests for the instructions generated.
* gcc.target/powerpc/builtins-3-p8.c (test_vsi_packs_vui,
test_vsi_packs_vsi, test_vsi_packs_vssi, test_vsi_packs_vusi,
test_vsi_packsu-vssi, test_vsi_packsu-vusi, test_vsi_packsu-vsll,
test_vsi_packsu-vull, test_vsi_packsu-vsi, test_vsi_packsu-vui): Add
testcases. Add dg-final tests for new instructions.
* gcc.target/powerpc/p8vector-builtin-2.c (vbschar_eq, vbchar_eq,
vuchar_eq, vbint_eq, vsint_eq, viint_eq, vuint_eq, vbool_eq, vbint_ne,
vsint_ne, vuint_ne, vbool_ne, vsign_ne, vuns_ne, vbshort_ne): Add
tests.
Add dg-final instruction tests.
* gcc.target/powerpc/vsx-vector-6.c: Renamed vsx-vector-6.h.
* gcc.target/powerpc/vsx-vector-6.h (vec_andc,vec_nmsub, vec_nmadd,
vec_or, vec_nor, vec_andc, vec_or, vec_andc, vec_msums): Add tests.
Add dg-final tests for the generated instructions.
* gcc.target/powerpc/builtins-3.c (test_sll_vsc_vsc_vsuc,
test_sll_vuc_vuc, test_sll_vsi_vsi_vuc, test_sll_vui_vui_vuc,
test_sll_vbll_vull, test_sll_vbll_vbll_vus, test_sll_vp_vp_vuc,
test_sll_vssi_vssi_vuc, test_sll_vusi_vusi_vuc, test_slo_vsc_vsc_vsc,
test_slo_vuc_vuc_vsc, test_slo_vsi_vsi_vsc, test_slo_vsi_vsi_vuc,
test_slo_vui_vui_vsc, test_slo_vui_vui_vuc, test_slo_vsll_slo_vsll_vsc,
test_slo_vsll_slo_vsll_vuc, test_slo_vull_slo_vull_vsc,
test_slo_vull_slo_vull_vuc, test_slo_vp_vp_vsc, test_slo_vp_vp_vuc,
test_slo_vssi_vssi_vsc, test_slo_vssi_vssi_vuc, test_slo_vusi_vusi_vsc,
test_slo_vusi_vusi_vuc, test_slo_vusi_vusi_vuc, test_slo_vf_vf_vsc,
test_slo_vf_vf_vuc, test_cmpb_float): Add tests.

From-SVN: r255555

6 years ago[PR80693] drop value of parallel SETs dropped by combine
Alexandre Oliva [Mon, 11 Dec 2017 22:36:07 +0000 (22:36 +0000)]
[PR80693] drop value of parallel SETs dropped by combine

When combine drops a REG_UNUSED SET in a parallel, we have to clear
cached values, so that, even if the REGs remain used (e.g. because
they were referenced in the used SET_SRC), we will not use properties
of the dropped modified value as if they applied to the preserved
original one.

We fail to adjust REG_N_SETS.

for  gcc/ChangeLog

PR rtl-optimization/80693
PR rtl-optimization/81019
PR rtl-optimization/81020
* combine.c (distribute_notes): Reset any REG_UNUSED REGs that
are not mentioned in i3.  Place the REG_UNUSED note on i2,
possibly modified to REG_DEAD, if it did not originate in i3.

for  gcc/testsuite/ChangeLog

PR rtl-optimization/80693
PR rtl-optimization/81019
PR rtl-optimization/81020
* gcc.dg/pr80693.c: New.
* gcc.dg/pr81019.c: New.

From-SVN: r255554

6 years agorecog.c (store_data_bypass_p_1): New function.
Jakub Jelinek [Mon, 11 Dec 2017 22:20:27 +0000 (23:20 +0100)]
recog.c (store_data_bypass_p_1): New function.

* recog.c (store_data_bypass_p_1): New function.
(store_data_bypass_p): Handle USE in a PARALLEL like CLOBBER.  Use
store_data_bypass_p_1 to avoid code duplication.  Formatting fixes.

From-SVN: r255553

6 years agoifcvt: Call fixup_partitions (PR83361)
Segher Boessenkool [Mon, 11 Dec 2017 21:23:08 +0000 (22:23 +0100)]
ifcvt: Call fixup_partitions (PR83361)

After converting a conditional branch to an unconditional trap to a
conditional trap, if the original trap is still reachable from another
path, it may be that it is in a hot basic block  and only reachable from
cold blocks.  Fix that up.

PR rtl-optimization/83361
* ifcvt.c (if_convert): Call fixup_partitions.

gcc/testsuite/
PR rtl-optimization/83361
* gcc.dg/pr83361.c: New testcase.

From-SVN: r255550

6 years agors6000.c (rs6000_gimple_fold_builtin): Add support for early folding of splat_u{8...
Will Schmidt [Mon, 11 Dec 2017 21:15:48 +0000 (21:15 +0000)]
rs6000.c (rs6000_gimple_fold_builtin): Add support for early folding of splat_u{8,16,32}.

[gcc]

2017-12-11  Will Schmidt  <will_schmidt@vnet.ibm.com>

* config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Add support for
early folding of splat_u{8,16,32}.

[testsuite]

2017-12-11  Will Schmidt  <will_schmidt@vnet.ibm.com>

* gcc.target/powerpc/fold-vec-splat-misc-invalid.c: New.

From-SVN: r255549

6 years agointrinsic.texi (MAXLOC): Update documentation for character arrays and KIND argument.
Thomas Koenig [Mon, 11 Dec 2017 20:24:27 +0000 (20:24 +0000)]
intrinsic.texi (MAXLOC): Update documentation for character arrays and KIND argument.

2017-12-11  Thomas Koenig  <tkoenig@gcc.gnu.org>

* intrinsic.texi (MAXLOC): Update documentation for
character arrays and KIND argument.
(MINLOC): Likewise.

From-SVN: r255546

6 years agoaarch64.c (aarch64_print_operand): Don't start output_operand_lossage first argument...
Jakub Jelinek [Mon, 11 Dec 2017 17:59:01 +0000 (18:59 +0100)]
aarch64.c (aarch64_print_operand): Don't start output_operand_lossage first argument with capital letter.

* config/aarch64/aarch64.c (aarch64_print_operand): Don't start
output_operand_lossage first argument with capital letter.
(aarch64_override_options): Don't start error and sorry first argument
with capital letter.

From-SVN: r255544

6 years agore PR fortran/83379 (Intermittent failure of min/maxval_char*.f90 test cases)
Thomas Koenig [Mon, 11 Dec 2017 17:57:38 +0000 (17:57 +0000)]
re PR fortran/83379 (Intermittent failure of min/maxval_char*.f90 test cases)

2017-12-11  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/83379
* gfortran.dg/minval_char_1.f90: Correct logic for mask
calculation.
* gfortran.dg/minval_char_2.f90: Likewise.
* gfortran.dg/maxval_char_1.f90: Likewise.
* gfortran.dg/maxval_char_2.f90: Likewise.

From-SVN: r255543

6 years agore PR fortran/45689 ([F03] Missing transformational intrinsic in the trans_func_f2003...
Thomas Koenig [Mon, 11 Dec 2017 17:39:07 +0000 (17:39 +0000)]
re PR fortran/45689 ([F03] Missing transformational intrinsic in the trans_func_f2003 list)

2017-12-11  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/45689
* simplify.c (min_max_choose): Add prototype.
(gfc_count): Format correctly.
(simplify_transformation): Pass array argument to init_result_expr.
(gfc_simplify_minval_maxval): Remove.
(gfc_min): New function.
(gfc_simplify_minval): Call simplify_transformation.
(gfc_max): New function.
(gfc_simplify_maxval): Call simplify_transformation.

2017-12-11  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/45689
* gfortran.dg/minval_parameter_1.f90: New test.
* gfortran.dg/maxval_parameter_1.f90: New test.

From-SVN: r255542

6 years agoFix stack overflow with autofdo (PR83355)
Andi Kleen [Mon, 11 Dec 2017 16:13:53 +0000 (16:13 +0000)]
Fix stack overflow with autofdo (PR83355)

g++.dg/bprob* is failing currently with autofdo.

Running in gdb shows that there is a very deep recursion in get_index_by_decl until it
overflows the stack.

gcc/:
2017-12-11  Andi Kleen  <ak@linux.intel.com>

PR gcov-profile/83355
* auto-profile.c (string_table::get_index_by_decl): Don't
recurse when abstract origin points to itself.

From-SVN: r255540

6 years agore PR tree-optimization/83320 (Mismatched free() / delete / delete [] in gimple...
Bin Cheng [Mon, 11 Dec 2017 10:47:53 +0000 (10:47 +0000)]
re PR tree-optimization/83320 (Mismatched free() / delete / delete []  in gimple-loop-interchange.cc:948)

PR tree-optimization/83320
* gimple-loop-interchange.cc (free_data_refs_with_aux): Use delete.
(prune_datarefs_not_in_loop): Ditto.

From-SVN: r255539

6 years agoDaily bump.
GCC Administrator [Mon, 11 Dec 2017 00:16:17 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r255537

6 years ago* ChangeLog: Fix whitespace some more.
Uros Bizjak [Sun, 10 Dec 2017 21:55:19 +0000 (22:55 +0100)]
* ChangeLog: Fix whitespace some more.

From-SVN: r255534

6 years agoChangeLog: Fix whitespace.
Uros Bizjak [Sun, 10 Dec 2017 21:54:38 +0000 (22:54 +0100)]
ChangeLog: Fix whitespace.

* ChangeLog: Fix whitespace.
* testsuite/ChangeLog: Ditto.

From-SVN: r255533

6 years agore PR fortran/53478 (gfortran segfaults when module name clashes with C binding name...
Dominique d'Humieres [Sun, 10 Dec 2017 19:11:18 +0000 (20:11 +0100)]
re PR fortran/53478 (gfortran segfaults when module name clashes with C binding name of procedure)

2017-12-10  Dominique d'Humieres  <dominiq@lps.ens.fr>

PR fortran/53478
* gfortran.h (gfc_find_case_gsymbol): New prototype.
* symbol.c (gfc_find_case_gsymbol): New procedure, case
insensistive version of gfc_find_gsymbol.
* resolve.c (resolve_common_blocks): Use it.
Replace %s with %qs where needed.

* gfortran.dg/binding_label_tests_4.f03: Update dg-error.
* gfortran.dg/binding_label_tests_6.f03: Likewise.
* gfortran.dg/binding_label_tests_7.f03: Likewise.
* gfortran.dg/binding_label_tests_8.f03: Likewise.
* gfortran.dg/binding_label_tests_10_main.f03: Likewise.
* gfortran.dg/binding_label_tests_11_main.f03: Likewise.
* gfortran.dg/binding_label_tests_13_main.f03: Likewise.
* gfortran.dg/test_common_binding_labels_3_main.f03: Likewise.
* gfortran.dg/binding_label_tests_29.f90: New test.

From-SVN: r255530

6 years ago* doc/install.texi (Specific): Tweak link to mkssoftware.com.
Gerald Pfeifer [Sun, 10 Dec 2017 11:03:55 +0000 (11:03 +0000)]
* doc/install.texi (Specific): Tweak link to mkssoftware.com.

From-SVN: r255529

6 years agore PR tree-optimization/83337 (ICE at -O3 x86_64-linux-gnu: in interpret_rhs_expr...
Jakub Jelinek [Sun, 10 Dec 2017 10:39:56 +0000 (11:39 +0100)]
re PR tree-optimization/83337 (ICE at -O3 x86_64-linux-gnu: in interpret_rhs_expr, at tree-scalar-evolution.c:1775)

PR tree-optimization/83337
* gimple-loop-interchange.cc (compute_access_stride): Handle bitfield DRs
properly.

* gcc.dg/tree-ssa/loop-interchange-14.c: New test.
* gcc.dg/tree-ssa/loop-interchange-15.c: New test.

From-SVN: r255528

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

From-SVN: r255527

6 years agore PR fortran/82934 (Segfault on assumed character length in allocate)
Steven G. Kargl [Sat, 9 Dec 2017 19:53:55 +0000 (19:53 +0000)]
re PR fortran/82934 (Segfault on assumed character length in allocate)

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

PR fortran/82934
PR fortran/83318
* match.c (gfc_match_allocate): Enforce F2008:C631.

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

PR fortran/82934
PR fortran/83318
* gfortran.dg/allocate_assumed_charlen_2.f90: new test.

From-SVN: r255524

6 years agore PR lto/83338 (SPEC CPU2017 510.parest_r ICE)
Jakub Jelinek [Sat, 9 Dec 2017 11:43:31 +0000 (12:43 +0100)]
re PR lto/83338 (SPEC CPU2017 510.parest_r ICE)

PR tree-optimization/83338
* tree-vect-stmts.c (vectorizable_operation): Handle POINTER_DIFF_EXPR
vectorization as MINUS_EXPR with a subsequent VIEW_CONVERT_EXPR from
vector of unsigned integers to vector of signed integers.

* gcc.dg/vect/pr83338.c: New test.

From-SVN: r255523

6 years agore PR fortran/83316 (ICE: minval/maxval and characters)
Thomas Koenig [Sat, 9 Dec 2017 08:37:17 +0000 (08:37 +0000)]
re PR fortran/83316 (ICE: minval/maxval and characters)

2017-12-09  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/83316
* arith.c (gfc_character2character): New function.
* arith.h: Add prototype.
* simplify.c (gfc_convert_constant): Handle character type.

2017-12-09  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/83316
* gfortran.dg/minval_char_5.f90: New test.

From-SVN: r255522

6 years agoAdd .type and .size directives to riscv libgcc functions.
Jim Wilson [Sat, 9 Dec 2017 03:00:57 +0000 (03:00 +0000)]
Add .type and .size directives to riscv libgcc functions.

libgcc/
* config/riscv/div.S: Use FUNC_* macros.
* config/riscv/muldi3.S, config/riscv/multi3.S: Likewise
* config/riscv/save-restore.S: Likewise.
* config/riscv/riscv-asm.h: New.

From-SVN: r255521

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

From-SVN: r255520

6 years ago[multiple changes]
Vladimir Makarov [Fri, 8 Dec 2017 23:47:44 +0000 (23:47 +0000)]
[multiple changes]

2017-12-08  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/83317
* lra-constraints.c (process_address_1): Add insn code check.

2017-12-08  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/83317
* gcc.target/i386/pr83317.c: New test.

From-SVN: r255517

6 years agore PR rtl-optimization/81595 (ICE: verify_flow_info failed (error: multiple hot/cold...
Jakub Jelinek [Fri, 8 Dec 2017 19:05:56 +0000 (20:05 +0100)]
re PR rtl-optimization/81595 (ICE: verify_flow_info failed (error: multiple hot/cold transitions found))

PR rtl-optimization/81595
* gcc.c-torture/compile/pr81595.c: New test.

From-SVN: r255516

6 years agore PR tree-optimization/83323 (186.crafty miscompares)
Michael Matz [Fri, 8 Dec 2017 17:41:58 +0000 (17:41 +0000)]
re PR tree-optimization/83323 (186.crafty miscompares)

Fix PR83323

* gimple-loop-jam (unroll_jam_possible_p): Correct test for
head-controlled loops and loop BBs.
* common.opt (funroll-and-jam): Remove, instead ...
(floop-unroll-and-jam): ... reuse this option.
* opts.c (default_options_table): Use OPT_floop_unroll_and_jam.
* doc/invoke.texi (-funroll-and-jam): Move docu to ...
(-floop-unroll-and-jam): ... this option.

testsuite/
* gcc.dg/pr83323.c: New test.
* gcc.dg/unroll-and-jam.c: Use -floop-unroll-and-jam.

From-SVN: r255514

6 years agoipa-polymorphic-call.c (noncall_stmt_may_be_vtbl_ptr_store): Fix a comment typo,...
Jakub Jelinek [Fri, 8 Dec 2017 16:47:06 +0000 (17:47 +0100)]
ipa-polymorphic-call.c (noncall_stmt_may_be_vtbl_ptr_store): Fix a comment typo, get_base_ref_and_offset -> get_ref_base_and_extent.

* ipa-polymorphic-call.c (noncall_stmt_may_be_vtbl_ptr_store): Fix
a comment typo, get_base_ref_and_offset -> get_ref_base_and_extent.
* ipa-prop.c (stmt_may_be_vtbl_ptr_store): Likewise.

From-SVN: r255513

6 years agore PR middle-end/81782 (Yet another -Wmaybe-uninitialized false positive with empty...
Richard Biener [Fri, 8 Dec 2017 14:45:30 +0000 (14:45 +0000)]
re PR middle-end/81782 (Yet another -Wmaybe-uninitialized false positive with empty array)

2017-12-08  Richard Biener  <rguenther@suse.de>

PR middle-end/81782
* tree-ssa-uninit.c (warn_uninitialized_vars): Properly
handle accesses outside of zero-sized vars.

* gcc.dg/uninit-pr81782.c: New testcase.

From-SVN: r255512

6 years agoDisable hwcap on Solaris in g++.dg/opt/pr83252.C
Rainer Orth [Fri, 8 Dec 2017 13:03:54 +0000 (13:03 +0000)]
Disable hwcap on Solaris in g++.dg/opt/pr83252.C

* g++.dg/opt/pr83252.C: Add -mclear-hwcap on *-*-solaris*.

From-SVN: r255511

6 years agoPrevent SRA from removing type changing assignment
Martin Jambor [Fri, 8 Dec 2017 12:11:02 +0000 (13:11 +0100)]
Prevent SRA from removing type changing assignment

2017-12-08  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/83141
* tree-sra.c (contains_vce_or_bfcref_p): Move up in the file, also
test for MEM_REFs implicitely changing types with padding.  Remove
inline keyword.
(build_accesses_from_assign): Added contains_vce_or_bfcref_p checks.

testsuite/
* gcc.dg/tree-ssa/pr83141.c: New test.
* gcc.dg/guality/pr54970.c: XFAIL tests querying a[0].

From-SVN: r255510

6 years agoarc.c (arc_attribute_table): Add exclusions to the comment.
Jakub Jelinek [Fri, 8 Dec 2017 11:55:23 +0000 (12:55 +0100)]
arc.c (arc_attribute_table): Add exclusions to the comment.

* config/arc/arc.c (arc_attribute_table): Add exclusions to
the comment.
* config/avr/avr.c (avr_attribute_table): Likewise.
* config/msp430/msp430.c (msp430_attribute_table): Likewise.
* config/rl78/rl78.c (rl78_attribute_table): Likewise.
* config/nds32/nds32.c (nds32_attribute_table): Likewise.
* config/darwin.h (SUBTARGET_ATTRIBUTE_TABLE): Initialize new member
of struct attribute_spec.
* config/i386/cygming.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise.
ada/
* gcc-interface/utils.c (gnat_internal_attribute_table): Add
exclusions to the comment.
brig/
* brig-lang.c (brig_attribute_table): Fix up comment.

From-SVN: r255509

6 years agore PR target/82960 (spu_machine_dependent_reorg does not handle jump_table_data insn)
Ulrich Weigand [Fri, 8 Dec 2017 11:33:09 +0000 (11:33 +0000)]
re PR target/82960 (spu_machine_dependent_reorg does not handle jump_table_data insn)

gcc/
PR target/82960
* config/spu/spu.c (pad_bb): Only check INSN_CODE when INSN_P is true.

From-SVN: r255508

6 years agore PR tree-optimization/83609 (ICE in read_complex_part at gcc/expr.c:3202)
Jan Hubicka [Fri, 8 Dec 2017 11:27:28 +0000 (12:27 +0100)]
re PR tree-optimization/83609 (ICE in read_complex_part at gcc/expr.c:3202)

* profile-count.c (profile_count::from_gcov_type): Move from
profile-count.h; handle overflow.
* profile-count. (profile_count::from_gcov_type): Move offline.

PR middle-end/83609
* gcc.c-torture/compile/pr83069.c: New testcase.

From-SVN: r255507

6 years agocombine: Fix PR83304
Segher Boessenkool [Fri, 8 Dec 2017 11:26:35 +0000 (12:26 +0100)]
combine: Fix PR83304

In PR83304 two insns are combined, where the I2 uses a register that
has a REG_DEAD note on an insn after I2 but before I3.  In such a case
move_deaths should move that death note.  But move_deaths only looks
at the reg_stat[regno].last_death insn, and that field can be zeroed
out (previously, use_crosses_set_p would prevent the combination in
this case).

If the last_death field is zero it means "unknown", not "no death", so
we have to find if there is a REG_DEAD note.

PR rtl-optimization/83304
* combine.c (move_deaths): If we do not know where a register died,
search for it.

From-SVN: r255506

6 years agogimple-loop-interchange.cc (tree_loop_interchange::interchange): Provide -fopt-info...
Richard Biener [Fri, 8 Dec 2017 11:24:36 +0000 (11:24 +0000)]
gimple-loop-interchange.cc (tree_loop_interchange::interchange): Provide -fopt-info-loop feedback when we interchange in a nest.

2017-12-08  Richard Biener  <rguenther@suse.de>

* gimple-loop-interchange.cc (tree_loop_interchange::interchange):
Provide -fopt-info-loop feedback when we interchange in a nest.

From-SVN: r255505

6 years ago[arm] PR target/83206: Make native driver select fp-capable armv6 cores
Richard Earnshaw [Fri, 8 Dec 2017 11:19:20 +0000 (11:19 +0000)]
[arm] PR target/83206: Make native driver select fp-capable armv6 cores

A quirk in the historical naming of some ARMv6 products means that the
main CPU name implies the presence or otherwise of the floating point unit.
This causes problems when using -mfpu=auto with -mcpu=native: the driver is
picking a CPU that does not support a floating-point unit, even though
one may well exist.

This patch addresses this by selecting the FP-capable names so that FP
instructions will be generated if the other options suggest this is
permitted.

Note that a more complete fix is really needed here to look up the
FP/simd capabilities and append the appropriate capability extensions.
This will be the subject of some follow-up patches.

* config/arm/driver-arm.c (arm_cpu_table): Use fp-capable product names
for armv6 ARM CPU IDs.

From-SVN: r255504

6 years ago[arm] Don't strip off all architecture features from -march passed to assembler
Richard Earnshaw [Fri, 8 Dec 2017 11:14:09 +0000 (11:14 +0000)]
[arm] Don't strip off all architecture features from -march passed to assembler

When GCC invokes the assembler it generates a sanitized version of the
user-specified -march option to pass through, since the assembler does
not understand all the new FPU-related architectural options.
Unfortunately it goes too far and strips off all the architectural
extensions, including some that are unrelated to the -mfpu variant
selected.

Again, this doesn't really matter when compiling C code because the
compiler will override the command-line specified architecture with
directives in the assembly file itself, but when using the compiler
driver to invoke the assembler the only indiciation of the desired
architecture might come from the command line.

We fix this by adjusting the canonicalization pass to remove any
option that only specifies features that can be expressed by -mfpu
(any that go beyond that are already supported by the assembler).  We
do have to take care to re-order the options, though as the assembler
expects feature options to be in a canonical order (unlike the
compiler, where ordering is handled left-to-right: there's only a
difference if there are negation options, but a canonicalized
architecture string shouldn't have any of those).  We do this by
recording which options we need and then sorting the final list
alphabetically.

* common/config/arm/arm-common.c: Include <algorithm>.
(INCLUDE_VECTOR): Define.
(compare_opt_names): New function.
(arm_rewrite_selected_arch): Only strip out extensions that can be
expressed through -mfpu.  Sort the remaining extensions
alphabetically.

From-SVN: r255503

6 years ago[arm] Generate a -mfpu= option for passing to the assembler
Richard Earnshaw [Fri, 8 Dec 2017 10:55:01 +0000 (10:55 +0000)]
[arm] Generate a -mfpu= option for passing to the assembler

When gcc runs with the new -mfpu=auto option (either explicitly or
when that's the default behaviour) then this option is not passed
through to the assembler as we cannot rely on the assembler
understanding it (currently it doesn't understand it at all, but in
future that might change).  That means that the assembler falls back
to its builtin default, which may not correspond to what the user
expected based on the command-line options they passed.

Normally that wouldn't matter because assembler files generated by the
compiler will contain explicit directives that set the FPU type
directly and override any internal defaults; but when the compiler
driver is used to invoke the assembler directly (because the source
file ends in .s or .S) then this might cause a problem if that assumes
the FPU matches the compiler.

To address this, this patch makes the driver construct a -mfpu= option
for the assembler in the same way as the compiler generates an
internal .fpu directive.  As mentioned, this makes no difference if
the assembler file explicitly overrides the command line options, but
helps in the case where this is implicit.

* config/arm/arm.h (arm_asm_auto_mfpu): Declare.
(ASM_CPU_SPEC_FUNCTIONS): Add new rule asm_auto_mfpu.
(ASM_CPU_SPEC): Use it if -mfpu is set to auto.
* common/config/arm/arm-common.c (arm_asm_auto_mfpu): New function.
-- This line, and those below, will be ignored--

M    gcc/ChangeLog
M    gcc/common/config/arm/arm-common.c
M    gcc/config/arm/arm.h

From-SVN: r255502

6 years agore PR bootstrap/81470 (Bootstrap comparison failures in gcc/ada)
Tristan Gingold [Fri, 8 Dec 2017 09:33:08 +0000 (09:33 +0000)]
re PR bootstrap/81470 (Bootstrap comparison failures in gcc/ada)

2017-06-08  Tristan Gingold  <gindold@adacore.com>

PR ada/81470
* dwarf2out.c (dwarf2out_do_cfi_startproc): Only emit
.cfi_personality or .cfi_lsda if the eh data format is dwarf2.

From-SVN: r255501

6 years agoInitialize new member of SOLARIS_ATTRIBUTE_TABLE
Rainer Orth [Fri, 8 Dec 2017 09:27:40 +0000 (09:27 +0000)]
Initialize new member of SOLARIS_ATTRIBUTE_TABLE

* config/sol2.h (SOLARIS_ATTRIBUTE_TABLE): Initialize new member
of struct attribute_spec.

From-SVN: r255500

6 years agore PR tree-optimization/81303 (410.bwaves regression caused by r249919)
Richard Biener [Fri, 8 Dec 2017 08:22:08 +0000 (08:22 +0000)]
re PR tree-optimization/81303 (410.bwaves regression caused by r249919)

2017-12-08  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81303
* gfortran.dg/pr81303.f: New testcase.
* gfortran.dg/vect/pr81303.f: Likewise.

From-SVN: r255499

6 years agoEnable VNNI support [5/5]
Julia Koval [Fri, 8 Dec 2017 08:12:49 +0000 (09:12 +0100)]
Enable VNNI support [5/5]

gcc/
* config/i386/avx512vnniintrin.h (_mm512_dpwssds_epi32,
_mm512_mask_dpwssds_epi32, _mm512_maskz_dpwssds_epi32): New intrinsics.
* config/i386/avx512vnnivlintrin.h (_mm256_dpwssds_epi32,
_mm256_mask_dpwssds_epi32, _mm256_maskz_dpwssds_epi32,
_mm_dpwssds_epi32, _mm_mask_dpwssds_epi32,
_mm_maskz_dpwssds_epi32): Ditto.

gcc/testsuite/
* gcc.target/i386/avx512f-vnni-1.c: Add checks for vdpdwssds.
* gcc.target/i386/avx512vl-vnni-1.c: Ditto.
* gcc.target/i386/avx512f-vpdpwssds-2.c: New test.
* gcc.target/i386/avx512vl-vpdpwssds-2.c: Ditto.

From-SVN: r255498

6 years agore PR tree-optimization/81303 (410.bwaves regression caused by r249919)
Richard Biener [Fri, 8 Dec 2017 08:06:31 +0000 (08:06 +0000)]
re PR tree-optimization/81303 (410.bwaves regression caused by r249919)

2017-12-08  Richard Biener  <rguenther@suse.de>

PR tree-optimization/81303
* tree-vect-stmts.c (vect_is_simple_cond): For invariant
conditions try to create a comparison vector type matching
the data vector type.
(vectorizable_condition): Adjust.
* tree-vect-patterns.c (vect_recog_mask_conversion_pattern):
Leave invariant conditions alone in case we can vectorize those.

* gcc.target/i386/vectorize9.c: New testcase.
* gcc.target/i386/vectorize10.c: New testcase.

From-SVN: r255497

6 years agoEnable VNNI support [4/5]
Julia Koval [Fri, 8 Dec 2017 08:05:33 +0000 (09:05 +0100)]
Enable VNNI support [4/5]

gcc/
* config/i386/avx512vnniintrin.h (_mm512_dpwssd_epi32,
_mm512_mask_dpwssd_epi32, _mm512_maskz_dpwssd_epi32): New intrinsics.
* config/i386/avx512vnnivlintrin.h (_mm256_dpwssd_epi32,
_mm256_mask_dpwssd_epi32, _mm256_maskz_dpwssd_epi32, _mm_dpwssd_epi32,
_mm_mask_dpwssd_epi32, _mm_maskz_dpwssd_epi32): Ditto.

gcc/testsuite/
* gcc.target/i386/avx512f-vnni-1.c: Add vdpwssd checks.
* gcc.target/i386/avx512vl-vnni-1.c: Ditto.
* gcc.target/i386/avx512f-vpdpwssd-2.c: New.
* gcc.target/i386/avx512vl-vpdpwssd-2.c: Ditto.

From-SVN: r255496

6 years agoEnable VAES support [2/5]
Julia Koval [Fri, 8 Dec 2017 05:04:26 +0000 (06:04 +0100)]
Enable VAES support [2/5]

gcc/
* config.gcc: Add vaesintrin.h.
* config/i386/i386-builtin-types.def (V64QI_FTYPE_V64QI_V64QI): New type.
* config/i386/i386-builtin.def (__builtin_ia32_vaesdec_v16qi,
__builtin_ia32_vaesdec_v32qi, __builtin_ia32_vaesdec_v64qi): New builtins.
* config/i386/i386.c (ix86_expand_args_builtin): Handle new type.
* config/i386/immintrin.h: Include vaesintrin.h.
* config/i386/sse.md (vaesdec_<mode>): New pattern.
* config/i386/vaesintrin.h (_mm256_aesdec_epi128, _mm512_aesdec_epi128,
_mm_aesdec_epi128): New intrinsics.

gcc/testsuite/
* gcc.target/i386/avx512-check.h: Handle bit_VAES.
* gcc.target/i386/avx512f-aesdec-2.c: New test.
* gcc.target/i386/avx512fvl-vaes-1.c: Ditto.
* gcc.target/i386/avx512vl-aesdec-2.c: Ditto.
* gcc.target/i386/i386.exp (check_effective_target_avx512vaes): New.

From-SVN: r255495

6 years agoconst-addr-1.c: New.
Sandra Loosemore [Fri, 8 Dec 2017 04:26:12 +0000 (23:26 -0500)]
const-addr-1.c: New.

2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

gcc/testsuite/
* gcc.target/nios2/const-addr-1.c: New.
* gcc.target/nios2/const-addr-2.c: New.
* gcc.target/nios2/const-addr-3.c: New.

From-SVN: r255494

6 years agonios2.md (ld<bhw_uns>io): Add splitter for memory operand.
Sandra Loosemore [Fri, 8 Dec 2017 04:24:21 +0000 (23:24 -0500)]
nios2.md (ld<bhw_uns>io): Add splitter for memory operand.

2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

gcc/
* config/nios2/nios2.md (ld<bhw_uns>io): Add splitter for memory
operand.
(ld<bh>io_signed): Likewise.
(st<bhw>io): Likewise.
* config/nios2/predicates.md (ldstio_memory_operand): Allow
SMALL_INT12 constant integer operand.

From-SVN: r255493

6 years agonios2.c (nios2_symbolic_constant_allowed): Rename to...
Sandra Loosemore [Fri, 8 Dec 2017 04:23:00 +0000 (23:23 -0500)]
nios2.c (nios2_symbolic_constant_allowed): Rename to...

2017-12-07  Sandra Loosemore  <sandra@codesourcery.com>

gcc/
* config/nios2/nios2.c (nios2_symbolic_constant_allowed):
Rename to...
(nios2_large_constant_allowed): ...this.  Adjust uses.
(nios2_plus_symbolic_constant_p): Rename to...
(nios2_plus_large_constant_p): ...this.  Adjust uses.
(nios2_legitimate_address_p): Correct CONST_INT handling.
(nios2_symbolic_memory_operand_p): Rename to...
(nios2_large_constant_memory_operand_p): ...this.  Adjust uses.
(nios2_large_constant_p): Check for large constant integers too.
(nios2_split_large_constant): Handle constant integers.
(nios2_split_symbolic_memory_operand): Rename to...
(nios2_split_large_constant_memory_operand): ...this.  Adjust uses.
(nios2_legitimize_constant_address): Handle constant integers.
(r0rel_constant_p): Handle small constant integers.
(nios2_print_operand_address): Handle r0-relative integer addresses.
* config/nios2/nios2-protos.h: Adjust for renamed functions.
* config/nios2/nios2.md: Adjust for renamed functions.

From-SVN: r255492

6 years agoAdd srodata section support to riscv port.
Andrew Waterman [Fri, 8 Dec 2017 00:44:13 +0000 (00:44 +0000)]
Add srodata section support to riscv port.

2017-12-07  Andrew Waterman  <andrew@sifive.com>
gcc/
* config/riscv/riscv.c (TARGET_ASM_SELECT_SECTION): New define.
(TARGET_HAVE_SRODATA_SECTION): New define.
(riscv_select_section): New function.

From-SVN: r255491

6 years agoDaily bump.
GCC Administrator [Fri, 8 Dec 2017 00:16:13 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r255490

6 years agore PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")
Jakub Jelinek [Fri, 8 Dec 2017 00:03:28 +0000 (01:03 +0100)]
re PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")

PR target/83252
* gcc.target/i386/i386.exp (check_effective_target_bmi2): Moved to ...
* lib/target-supports.exp (check_effective_target_bmi2): ... here.  Guard with
i?86-*-* x86_64-*-*.
* g++.dg/opt/pr83252.C: New test.

From-SVN: r255487

6 years agore PR target/81906 (Calls to rint() wrongly optimized away starting in g++ 6)
Jakub Jelinek [Thu, 7 Dec 2017 23:56:34 +0000 (00:56 +0100)]
re PR target/81906 (Calls to rint() wrongly optimized away starting in g++ 6)

PR target/81906
* config/i386/i386.c (ix86_expand_rint): Handle flag_rounding_math.

* gcc.target/i386/pr81906.c: New test.

From-SVN: r255486

6 years agore PR tree-optimization/83075 (Invalid strncpy optimization)
Jakub Jelinek [Thu, 7 Dec 2017 23:55:18 +0000 (00:55 +0100)]
re PR tree-optimization/83075 (Invalid strncpy optimization)

PR tree-optimization/83075
* gcc.dg/tree-ssa/strncpy-2.c: Use size_t instead of unsigned, add
separate function with noipa attribute to also verify behavior when
optimizers don't know the sizes and aliasing, verify resulting sizes
and array content.  Add -Wstringop-overflow to dg-options.
* gcc.dg/tree-ssa/strncat.c: Likewise.

From-SVN: r255485

6 years agoImprove fstack_protector effective target
Thomas Preud'homme [Thu, 7 Dec 2017 21:48:35 +0000 (21:48 +0000)]
Improve fstack_protector effective target

Effective target fstack_protector fails to return an error for
newlib-based target (such as arm-none-eabi targets) which does not
support stack protector. This is due to the test being too simplist for
stack protection code to be generated by GCC: it does not contain a
local buffer and does not read unknown input.

This commit adds a small local buffer with a copy of the filename to
trigger stack protector code to be generated. The filename is used
instead of the full path so as to ensure the size will fit in the local
buffer.

2017-12-07  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/testsuite/
    * lib/target-supports.exp (check_effective_target_fstack_protector):
    Copy filename in local buffer to trigger stack protection.

From-SVN: r255484

6 years agore PR libstdc++/83120 (ext/special_functions/hyperg failure on AIX)
David Edelsohn [Thu, 7 Dec 2017 20:05:59 +0000 (20:05 +0000)]
re PR libstdc++/83120 (ext/special_functions/hyperg failure on AIX)

        PR libstdc++/83120
        * testsuite/ext/special_functions/hyperg/check_value.cc: Add
        -ffp-contract=off. Add -ffloat-store for m68* and ia32.
        * testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc: Same.

From-SVN: r255483

6 years agoAllow _Alignas in compound literals (C11 DR#444).
Joseph Myers [Thu, 7 Dec 2017 18:47:20 +0000 (18:47 +0000)]
Allow _Alignas in compound literals (C11 DR#444).

C11 DR#444 dealt with how C11 intended to allow alignment specifiers
on struct and union members, but failed to include that in the syntax.
The final resolution of that DR also allows alignment specifiers in
type names in compound literals (in order to apply an increased
alignment to the unnamed object created by the compound literal), but
not other cases of type names.

This patch implements allowing alignment specifiers in compound
literals and adds tests for the resolution of the DR (including that
they are allowed on struct and union members, which GCC already
implemented).  Because the parser has to parse the parenthesized type
name of a compound literal before it can tell that it's a compound
literal (rather than, depending on the context, a cast expression or
sizeof (type-name) or _Alignof (type-name)), this means _Alignas
specifiers are allowed syntactically in those contexts and then an
error is given once it's known to be an invalid use (whereas _Alignas
specifiers are disallowed syntactically in other contexts where type
names can occur and a compound literal is not possible).

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/c:
* c-decl.c (build_compound_literal): Add parameter alignas_align
and set alignment of decl if nonzero.
* c-parser.c (c_keyword_starts_typename): Allow RID_ALIGNAS.
(c_parser_declspecs): Allow RID_ALIGNAS to follow a type, like a
qualifier.
(c_parser_struct_declaration): Update syntax comment.
(c_parser_type_name): Add alignas_ok argument and pass it to
c_parser_declspecs.
(c_parser_cast_expression): Pass true to c_parser_type_name and
give error if a cast used an _Alignas specifier.
(c_parser_sizeof_expression): Pass true to c_parser_type_name and
give error if sizeof (type-name) used an _Alignas specifier.
(c_parser_alignof_expression): Pass true to c_parser_type_name and
give error if _Alignof (type-name) used an _Alignas specifier.
(c_parser_postfix_expression_after_paren_type): Check specified
alignment for a compound literal and pass it to
build_compound_literal.
* c-parser.h (c_parser_type_name): Update prototype.
* c-tree.h (build_compound_literal): Update prototype.

gcc/testsuite:
* gcc.dg/c11-align-7.c, gcc.dg/c11-align-8.c,
gcc.dg/c11-align-9.c, gcc.dg/gnu11-align-1.c: New tests.
* gcc.dg/c11-align-5.c (test): Update expected error for sizeof
case.

From-SVN: r255482

6 years ago[AArch64] Fix ICEs in aarch64_print_operand
Richard Sandiford [Thu, 7 Dec 2017 18:43:40 +0000 (18:43 +0000)]
[AArch64] Fix ICEs in aarch64_print_operand

Three related regression fixes:

- We can't use asserts like:

    gcc_assert (GET_MODE_SIZE (mode) == 16);

  in aarch64_print_operand because it could trigger for invalid user input.

- The output_operand_lossage in aarch64_print_address_internal:

    output_operand_lossage ("invalid operand for '%%%c'", op);

  wasn't right because "op" is an rtx_code enum rather than the
  prefix character.

- aarch64_print_operand_address shouldn't call output_operand_lossage
  (because it doesn't have a prefix code) but instead fall back to
  output_addr_const.

2017-12-05  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/aarch64/aarch64.c (aarch64_print_address_internal): Return
a bool success value.  Don't call output_operand_lossage here.
(aarch64_print_ldpstp_address): Return a bool success value.
(aarch64_print_operand_address): Call output_addr_const if
aarch64_print_address_internal fails.
(aarch64_print_operand): Don't assert that the mode is 16 bytes for
'y'; call output_operand_lossage instead.  Call output_operand_lossage
if aarch64_print_ldpstp_address fails.

gcc/testsuite/
* gcc.target/aarch64/asm-2.c: New test.
* gcc.target/aarch64/asm-3.c: Likewise.

From-SVN: r255481

6 years agoMake more use of VECTOR_CST_ENCODED_ELT
Richard Sandiford [Thu, 7 Dec 2017 18:42:41 +0000 (18:42 +0000)]
Make more use of VECTOR_CST_ENCODED_ELT

This patch makes various bits of code operate directly on the new
VECTOR_CST encoding, instead of using VECTOR_CST_ELT on all elements
of the vector.

Previous patches handled operations that produce a new VECTOR_CST,
while this patch handles things like predicates.  It also makes
print_node dump the encoding instead of the full vector that
the encoding represents.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* tree-vector-builder.h
(tree_vector_builder::binary_encoded_nelts): Declare.
* tree-vector-builder.c
(tree_vector_builder::binary_encoded_nelts): New function.
* fold-const.c (negate_expr_p): Likewise.
(operand_equal_p, fold_checksum_tree): Likewise.
* tree-loop-distribution.c (const_with_all_bytes_same): Likewise.
* tree.c (integer_zerop, integer_onep, integer_all_onesp, real_zerop)
(real_onep, real_minus_onep, add_expr, initializer_zerop): Likewise.
(uniform_vector_p): Likewise.
* varasm.c (const_hash_1, compare_constant): Likewise.
* tree-ssa-ccp.c: Include tree-vector-builder.h.
(valid_lattice_transition): Operate directly on the VECTOR_CST
encoding.
* ipa-icf.c: Include tree-vector-builder.h.
(sem_variable::equals): Operate directly on the VECTOR_CST encoding.
* print-tree.c (print_node): Print encoding of VECTOR_CSTs.

From-SVN: r255480

6 years agoMake build_vector static
Richard Sandiford [Thu, 7 Dec 2017 18:42:14 +0000 (18:42 +0000)]
Make build_vector static

The only remaining uses of build_vector are in the selftests in tree.c.
This patch makes it static and moves it to the selftest part of the file.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* tree.c (build_vector): Delete.
* tree.h (build_vector): Make static and move into the self-testing
block.

From-SVN: r255479

6 years agoMake gimple_build_vector take a tree_vector_builder
Richard Sandiford [Thu, 7 Dec 2017 18:41:59 +0000 (18:41 +0000)]
Make gimple_build_vector take a tree_vector_builder

This patch changes gimple_build_vector so that it takes a
tree_vector_builder instead of a size and a vector of trees.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* vector-builder.h (vector_builder::derived): New const overload.
(vector_builder::elt): New function.
* tree-vector-builder.h (tree_vector_builder::type): New function.
(tree_vector_builder::apply_step): Declare.
* tree-vector-builder.c (tree_vector_builder::apply_step): New
function.
* gimple-fold.h (tree_vector_builder): Declare.
(gimple_build_vector): Take a tree_vector_builder instead of a
type and vector of elements.
* gimple-fold.c (gimple_build_vector): Likewise.
* tree-vect-loop.c (get_initial_def_for_reduction): Update call
accordingly.
(get_initial_defs_for_reduction): Likewise.
(vectorizable_induction): Likewise.

From-SVN: r255478

6 years agoUse tree_vector_builder::new_binary_operation for folding
Richard Sandiford [Thu, 7 Dec 2017 18:41:35 +0000 (18:41 +0000)]
Use tree_vector_builder::new_binary_operation for folding

This patch makes fold-const.c operate directly on the VECTOR_CST
encoding when folding an operation that has two VECTOR_CST inputs.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* tree-vector-builder.h
(tree_vector_builder::new_binary_operation): Declare.
* tree-vector-builder.c
(tree_vector_builder::new_binary_operation): New function.
* fold-const.c (fold_relational_const): Use it.
(const_binop): Likewise.  Check that both input vectors have
the same number of elements, thus excluding things like WIDEN_SUM.
Check whether it is possible to operate directly on the encodings
of stepped inputs.

From-SVN: r255477

6 years agoUse tree_vector_builder::new_unary_operation for folding
Richard Sandiford [Thu, 7 Dec 2017 18:41:13 +0000 (18:41 +0000)]
Use tree_vector_builder::new_unary_operation for folding

This patch makes fold-const.c operate directly on the VECTOR_CST
encoding when folding an operation that has a single VECTOR_CST input.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* fold-const.c (fold_negate_expr_1): Use tree_vector_builder and
new_unary_operation, operating only on the encoded elements.
(const_unop): Likewise.
(exact_inverse): Likewise.
(distributes_over_addition_p): New function.
(const_binop): Use tree_vector_builder and new_unary_operation
for combinations of VECTOR_CST and INTEGER_CST.  Operate only
on the encoded elements unless the encoding is strided and the
operation does not distribute over addition.
(fold_convert_const):  Use tree_vector_builder and
new_unary_operation.  Operate only on the encoded elements
for truncating integer conversions, or for non-stepped encodings.

From-SVN: r255476

6 years agoUse tree_vector_builder instead of build_vector
Richard Sandiford [Thu, 7 Dec 2017 18:40:50 +0000 (18:40 +0000)]
Use tree_vector_builder instead of build_vector

This patch switches most build_vector calls over to tree_vector_builder,
using explicit encodings where appropriate.  Later patches handle
the remaining uses of build_vector.

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/sparc/sparc.c: Include tree-vector-builder.h.
(sparc_fold_builtin): Use tree_vector_builder instead of build_vector.
* expmed.c: Include tree-vector-builder.h.
(make_tree): Use tree_vector_builder instead of build_vector.
* fold-const.c: Include tree-vector-builder.h.
(const_binop): Use tree_vector_builder instead of build_vector.
(const_unop): Likewise.
(native_interpret_vector): Likewise.
(fold_vec_perm): Likewise.
(fold_ternary_loc): Likewise.
* gimple-fold.c: Include tree-vector-builder.h.
(gimple_fold_stmt_to_constant_1): Use tree_vector_builder instead
of build_vector.
* tree-ssa-forwprop.c: Include tree-vector-builder.h.
(simplify_vector_constructor): Use tree_vector_builder instead
of build_vector.
* tree-vect-generic.c: Include tree-vector-builder.h.
(add_rshift): Use tree_vector_builder instead of build_vector.
(expand_vector_divmod): Likewise.
(optimize_vector_constructor): Likewise.
* tree-vect-loop.c: Include tree-vector-builder.h.
(vect_create_epilog_for_reduction): Use tree_vector_builder instead
of build_vector.  Explicitly use a stepped encoding for
{ 1, 2, 3, ... }.
* tree-vect-slp.c: Include tree-vector-builder.h.
(vect_get_constant_vectors): Use tree_vector_builder instead
of build_vector.
(vect_transform_slp_perm_load): Likewise.
(vect_schedule_slp_instance): Likewise.
* tree-vect-stmts.c: Include tree-vector-builder.h.
(vectorizable_bswap): Use tree_vector_builder instead of build_vector.
(vect_gen_perm_mask_any): Likewise.
(vectorizable_call): Likewise.  Explicitly use a stepped encoding.
* tree.c: (build_vector_from_ctor): Use tree_vector_builder instead
of build_vector.
(build_vector_from_val): Likewise.  Explicitly use a duplicate
encoding.

From-SVN: r255475

6 years agoNew VECTOR_CST layout
Richard Sandiford [Thu, 7 Dec 2017 18:40:28 +0000 (18:40 +0000)]
New VECTOR_CST layout

This patch uses a simple compression scheme to represent the contents
of a VECTOR_CST using its leading elements.  There are three formats:

1) a repeating sequence of N values.  This is encoded using the first
   N elements.

2) a "foreground" sequence of N values inserted at the beginning of
   a "background" repeating sequence of N values, such as:
   { 1, 2, 0, 0, 0, 0, ... }.  This is encoded using the first 2*N
   elements.

2) a "foreground" sequence of N values inserted at the beginning of
   a "background" repeating sequence of N interleaved linear series,
   such as: { 0, 0, 8, 10, 9, 11, 10, 12, ... }.  This is encoded
   using the first 3*N elements.  In practice the foreground values
   are often part of the same series as the background values,
   such as: { 1, 11, 2, 12, 3, 13, ... }.

This reduces the amount of work involved in processing simple
vector constants and means that the encoding extends naturally
to variable-length vectors.

2017-12-07  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* doc/generic.texi (VECTOR_CST): Describe new representation of
vector constants.
* vector-builder.h: New file.
* tree-vector-builder.h: Likewise.
* tree-vector-builder.c: Likewise.
* Makefile.in (OBJS): Add tree-vector-builder.o.
* tree.def (VECTOR_CST): Update comment to refer to generic.texi.
* tree-core.h (tree_base): Add a vector_cst field to the u union.
(tree_vector): Change the number of elements to
vector_cst_encoded_nelts.
* tree.h (VECTOR_CST_NELTS): Redefine using TYPE_VECTOR_SUBPARTS.
(VECTOR_CST_ELTS): Delete.
(VECTOR_CST_ELT): Redefine using vector_cst_elt.
(VECTOR_CST_LOG2_NPATTERNS, VECTOR_CST_NPATTERNS): New macros.
(VECTOR_CST_NELTS_PER_PATTERN, VECTOR_CST_DUPLICATE_P): Likewise.
(VECTOR_CST_STEPPED_P, VECTOR_CST_ENCODED_ELTS): Likewise.
(VECTOR_CST_ENCODED_ELT): Likewise.
(vector_cst_encoded_nelts): New function.
(make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and
VECTOR_CST_NELTS_PER_PATTERN as arguments.
(vector_cst_int_elt, vector_cst_elt): Declare.
* tree.c: Include tree-vector-builder.h.
(tree_code_size): Abort if passed VECTOR_CST.
(tree_size): Update for new VECTOR_CST layout.
(make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and
VECTOR_CST_NELTS_PER_PATTERN as arguments.
(build_vector): Use tree_vector_builder.
(vector_cst_int_elt, vector_cst_elt): New functions.
(drop_tree_overflow): For VECTOR_CST, drop the TREE_OVERFLOW from the
encoded elements and then create the vector in the canonical form.
(check_vector_cst, check_vector_cst_duplicate, check_vector_cst_fill)
(check_vector_cst_stepped, test_vector_cst_patterns): New functions.
(tree_c_tests): Call test_vector_cst_patterns.
* lto-streamer-out.c (DFS::DFS_write_tree_body): Handle the new
VECTOR_CST fields.
(hash_tree): Likewise.
* tree-streamer-out.c (write_ts_vector_tree_pointers): Likewise.
(streamer_write_tree_header): Likewise.
* tree-streamer-in.c (lto_input_ts_vector_tree_pointers): Likewise.
(streamer_alloc_tree): Likewise.  Update call to make_vector.
* fold-const.c (fold_ternary_loc): Avoid using VECTOR_CST_ELTS.

gcc/lto/
* lto.c (compare_tree_sccs_1): Compare the new VECTOR_CST flags.

From-SVN: r255474

6 years agoAdd underscores to local vars in selftest macros
Richard Sandiford [Thu, 7 Dec 2017 18:40:06 +0000 (18:40 +0000)]
Add underscores to local vars in selftest macros

Allows functions doing selftests to take parameters with names like
"actual".

2017-12-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* selftest.h (ASSERT_TRUE_AT, ASSERT_FALSE_AT, ASSERT_EQ_AT)
(ASSERT_NE, ASSERT_PRED1): Add underscores to local variable names
* selftest-rtl.h (ASSERT_RTX_EQ, ASSERT_RTX_PTR_EQ): Likewise.

From-SVN: r255473

6 years agore PR tree-optimization/81303 (410.bwaves regression caused by r249919)
Bin Cheng [Thu, 7 Dec 2017 18:03:53 +0000 (18:03 +0000)]
re PR tree-optimization/81303 (410.bwaves regression caused by r249919)

PR tree-optimization/81303
* Makefile.in (gimple-loop-interchange.o): New object file.
* common.opt (floop-interchange): Reuse the option from graphite.
* doc/invoke.texi (-floop-interchange): Ditto.  New document for
-floop-interchange and mention it for -O3.
* opts.c (default_options_table): Enable -floop-interchange at -O3.
* gimple-loop-interchange.cc: New file.
* params.def (PARAM_LOOP_INTERCHANGE_MAX_NUM_STMTS): New parameter.
(PARAM_LOOP_INTERCHANGE_STRIDE_RATIO): New parameter.
* passes.def (pass_linterchange): New pass.
* timevar.def (TV_LINTERCHANGE): New time var.
* tree-pass.h (make_pass_linterchange): New declaration.
* tree-ssa-loop-ivcanon.c (create_canonical_iv): Change to external
interchange.  Record IV before/after increment in new parameters.
* tree-ssa-loop-ivopts.h (create_canonical_iv): New declaration.
* tree-vect-loop.c (vect_is_simple_reduction): Factor out reduction
path check into...
(check_reduction_path): ...New function here.
* tree-vectorizer.h (check_reduction_path): New declaration.

gcc/testsuite
* gcc.dg/tree-ssa/loop-interchange-1.c: New test.
* gcc.dg/tree-ssa/loop-interchange-1b.c: New test.
* gcc.dg/tree-ssa/loop-interchange-2.c: New test.
* gcc.dg/tree-ssa/loop-interchange-3.c: New test.
* gcc.dg/tree-ssa/loop-interchange-4.c: New test.
* gcc.dg/tree-ssa/loop-interchange-5.c: New test.
* gcc.dg/tree-ssa/loop-interchange-6.c: New test.
* gcc.dg/tree-ssa/loop-interchange-7.c: New test.
* gcc.dg/tree-ssa/loop-interchange-8.c: New test.
* gcc.dg/tree-ssa/loop-interchange-9.c: New test.
* gcc.dg/tree-ssa/loop-interchange-10.c: New test.
* gcc.dg/tree-ssa/loop-interchange-11.c: New test.
* gcc.dg/tree-ssa/loop-interchange-12.c: New test.
* gcc.dg/tree-ssa/loop-interchange-13.c: New test.

Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r255472

6 years agore PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")
Vladimir Makarov [Thu, 7 Dec 2017 17:50:54 +0000 (17:50 +0000)]
re PR target/83252 (Wrong code with "-march=skylake-avx512 -O3")

2017-12-07  Vladimir Makarov  <vmakarov@redhat.com>

PR target/83252
PR rtl-optimization/80818
* lra.c (add_regs_to_insn_regno_info): Make a hard reg in CLOBBER
always early clobbered.
* lra-lives.c (process_bb_lives): Check input hard regs for early
clobbered non-operand hard reg.

From-SVN: r255471

6 years agore PR middle-end/83164 (internal compiler error: verify_gimple failed)
Jakub Jelinek [Thu, 7 Dec 2017 17:06:08 +0000 (18:06 +0100)]
re PR middle-end/83164 (internal compiler error: verify_gimple failed)

PR middle-end/83164
* tree-cfg.c (verify_gimple_assign_binary): Don't require
types_compatible_p, just that TYPE_MODE is the same.

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

From-SVN: r255470

6 years agoPR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
Martin Sebor [Thu, 7 Dec 2017 16:32:03 +0000 (16:32 +0000)]
PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted

PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
PR c/81566 - invalid attribute aligned accepted on functions

gcc/ada/ChangeLog:

PR c/81544
* gcc-interface/utils.c (gnat_internal_attribute_table): Initialize
new member of struct attribute_spec.

gcc/c/ChangeLog:

PR c/81544
* c-decl.c (c_decl_attributes): Look up existing declaration and
pass it to decl_attributes.

gcc/c-family/ChangeLog:

PR c/81544
PR c/81566
* c-attribs.c (attr_aligned_exclusions): New array.
(attr_alloc_exclusions, attr_cold_hot_exclusions): Same.
(attr_common_exclusions, attr_const_pure_exclusions): Same.
(attr_gnu_inline_exclusions, attr_inline_exclusions): Same.
(attr_noreturn_exclusions, attr_returns_twice_exclusions): Same.
(attr_warn_unused_result_exclusions): Same.
(handle_hot_attribute, handle_cold_attribute): Simplify.
(handle_const_attribute): Warn on function returning void.
(handle_pure_attribute): Same.
(handle_aligned_attribute): Diagnose conflicting attribute
specifications.
* c-warn.c (diagnose_mismatched_attributes): Simplify.

gcc/cp/ChangeLog:

PR c/81544
* cp-tree.h (decls_match): Add default argument.
* decl.c (decls_match): Avoid calling into the target back end
and triggering an error.
* decl2.c (cplus_decl_attributes): Look up existing declaration and
pass it to decl_attributes.
* tree.c (cxx_attribute_table): Initialize new member of struct
attribute_spec.

gcc/fortran/ChangeLog:

PR c/81544
* f95-lang.c (gfc_attribute_table): Initialize new member of struct
attribute_spec.

gcc/lto/ChangeLog:

PR c/81544
* lto-lang.c (lto_attribute_table): Initialize new member of struct
attribute_spec.

gcc/ChangeLog:

PR c/81544
* attribs.c (empty_attribute_table): Initialize new member of
struct attribute_spec.
(decl_attributes): Add argument.  Handle mutually exclusive
combinations of attributes.
(selftests::test_attribute_exclusions): New function.
(selftests::attribute_c_tests): Ditto.
* attribs.h (decl_attributes): Add default argument.
* selftest.h (attribute_c_tests): Declare.
* selftest-run-tests.c (selftest::run_tests): Call attribute_c_tests.
* tree-core.h (attribute_spec::exclusions, exclude): New type and
member.
* doc/extend.texi (Common Function Attributes): Update const and pure.

gcc/testsuite/ChangeLog:

PR c/81544
* c-c++-common/Wattributes-2.c: New test.
* c-c++-common/Wattributes.c: New test.
* c-c++-common/attributes-3.c: Adjust.
* gcc.dg/Wattributes-6.c: New test.
* gcc.dg/Wattributes-7.c: New test.
* gcc.dg/attr-noinline.c
* gcc.dg/pr44964.c: Same.
* gcc.dg/torture/pr42363.c: Same.
* gcc.dg/tree-ssa/ssa-ccp-2.c: Same.

From-SVN: r255469

6 years agore PR target/82641 (Unable to enable crc32 for a certain function with target attribu...
Tamar Christina [Thu, 7 Dec 2017 14:54:22 +0000 (14:54 +0000)]
re PR target/82641 (Unable to enable crc32 for a certain function with target attribute on ARM (aarch32))

2017-12-07  Tamar Christina  <tamar.christina@arm.com>

PR target/82641
* config/arm/arm.c (INCLUDE_STRING): Define.
(arm_last_printed_arch_string, arm_last_printed_fpu_string): New.
(arm_declare_function_name): Conservatively emit .arch, .arch_extensions
and .fpu.

gcc/testsuite/
2017-12-07  Tamar Christina  <tamar.christina@arm.com>

PR target/82641
* gcc.target/arm/pragma_arch_attribute_2.c: New.
* gcc.target/arm/pragma_arch_attribute_2.c: New.
* gcc.target/arm/pragma_arch_attribute_3.c: New.
* gcc.target/arm/pragma_fpu_attribute.c: New.
* gcc.target/arm/pragma_fpu_attribute_2.c: New.

From-SVN: r255468

6 years agoAdd unroll and jam pass
Michael Matz [Thu, 7 Dec 2017 14:49:54 +0000 (14:49 +0000)]
Add unroll and jam pass

* gimple-loop-jam.c: New file.
* Makefile.in (OBJS): Add gimple-loop-jam.o.
* common.opt (funroll-and-jam): New option.
* opts.c (default_options_table): Add unroll-and-jam at -O3.
* params.def (PARAM_UNROLL_JAM_MIN_PERCENT): New param.
(PARAM_UNROLL_JAM_MAX_UNROLL): Ditto.
* passes.def: Add pass_loop_jam.
* timevar.def (TV_LOOP_JAM): Add.
* tree-pass.h (make_pass_loop_jam): Declare.
* cfgloop.c (flow_loop_tree_node_add): Add AFTER argument.
* cfgloop.h (flow_loop_tree_node_add): Adjust declaration.
* cfgloopmanip.c (duplicate_loop): Add AFTER argument, adjust call
to flow_loop_tree_node_add.
(duplicate_subloops, copy_loops_to): Append to sibling list.
* cfgloopmanip.h: (duplicate_loop): Adjust declaration.
* doc/invoke.texi (-funroll-and-jam): Document new option.
(unroll-jam-min-percent, unroll-jam-max-unroll): Document new params.

testsuite/
* gcc.dg/unroll-and-jam.c: New test.

From-SVN: r255467

6 years agore PR tree-optimization/83296 (missing -Wstringop-overflow due to missing range info...
Richard Biener [Thu, 7 Dec 2017 13:21:51 +0000 (13:21 +0000)]
re PR tree-optimization/83296 (missing -Wstringop-overflow due to missing range info for MAX_EXPR)

2017-12-07  Richard Biener  <rguenther@suse.de>

PR tree-optimization/83296
PR tree-optimization/67769
* tree-ssa-phiopt.c (conditional_replacement): Do not reset
flow sensitive info in an unrelated BB.
(value_replacement): Use reset_flow_sensitive_info.
(minmax_replacement): Reset flow sensitive info on the def
we move.  Do not reset flow sensitive info in the whole BB
we move the stmt to.
(abs_replacement): Likewise.

* g++.dg/warn/Wstringop-overflow-1.C: New testcase.

From-SVN: r255466

6 years agors6000: Initialise rs6000_cpu correctly (PR43871)
Segher Boessenkool [Thu, 7 Dec 2017 09:36:28 +0000 (10:36 +0100)]
rs6000: Initialise rs6000_cpu correctly (PR43871)

Finally, set rs6000_cpu based not on -mtune=, but only -mcpu= and the
defaults.

PR target/43871
* config/rs6000/rs6000.c (rs6000_option_override_internal): Set
rs6000_cpu to the given -mcpu=, or to the default processor.

From-SVN: r255464

6 years agors6000: Don't use rs6000_cpu_attr directly
Segher Boessenkool [Thu, 7 Dec 2017 09:35:10 +0000 (10:35 +0100)]
rs6000: Don't use rs6000_cpu_attr directly

In some places in the code we currently use rs6000_cpu_attr, although
that is a cast from rs6000_tune.  This patch changes things to be more
regular and clearer.  Now rs6000_cpu_attr is not used any more, and
it is deleted.

* config/rs6000/rs6000.h (rs6000_cpu_attr): Delete.
* config/rs6000/rs6000.c (rs6000_variable_issue_1): Use rs6000_tune
instead of rs6000_cpu_attr.
(rs6000_adjust_cost): Ditto.
(is_microcoded_insn): Ditto.
(rs6000_adjust_priority): Ditto.
(rs6000_issue_rate): Ditto.
(rs6000_use_sched_lookahead): Ditto.
(rs6000_use_sched_lookahead_guard): Ditto.
(rs6000_sched_reorder): Ditto.
(force_new_group): Ditto.
* config/rs6000/rs6000.md (cpu attribute): Ditto.
(group_ending_nop): Ditto.

From-SVN: r255463

6 years agors6000: Split rs6000_cpu
Segher Boessenkool [Thu, 7 Dec 2017 09:32:46 +0000 (10:32 +0100)]
rs6000: Split rs6000_cpu

This splits rs6000_cpu into rs6000_cpu and rs6000_tune.  Both are still
initialised identically, so there is no behaviour change.

Now rs6000_cpu should be set by -mcpu=, and rs6000_tune by -mtune= (but
both still are set by -mtune=, fixed in a later patch in the series).

Also change rs6000_cpu to rs6000_tune in the appropriate cases (i.e.
most, but not those that enable using new insns).

* config/rs6000/rs6000.opt (rs6000_tune): New variable.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Also set
rs6000_tune.  Use rs6000_tune instead of rs6000_cpu where appropriate.
(rs6000_loop_align): Use rs6000_tune instead of rs6000_cpu where
appropriate.
(rs6000_reassociation_width): Ditto.
(rs6000_emit_epilogue): Ditto.
(rs6000_adjust_cost): Ditto.
(is_microcoded_insn): Ditto.
(is_cracked_insn): Ditto.
(rs6000_adjust_priority): Ditto.
(rs6000_sched_reorder): Ditto.
(rs6000_sched_reorder2): Ditto.
(insn_must_be_first_in_group): Ditto.
(insn_must_be_last_in_group): Ditto.
(rs6000_register_move_cost): Ditto.
* config/rs6000/rs6000.h (rs6000_cpu_attr): Use rs6000_tune instead of
rs6000_cpu.

From-SVN: r255462

6 years agoEnable VAES support [2/5]
Julia Koval [Thu, 7 Dec 2017 06:28:55 +0000 (07:28 +0100)]
Enable VAES support [2/5]

gcc/
* config.gcc: Add vaesintrin.h.
* config/i386/i386-builtin-types.def (V64QI_FTYPE_V64QI_V64QI): New type.
* config/i386/i386-builtin.def (__builtin_ia32_vaesdec_v16qi,
__builtin_ia32_vaesdec_v32qi, __builtin_ia32_vaesdec_v64qi): New builtins.
* config/i386/i386.c (ix86_expand_args_builtin): Handle new type.
* config/i386/immintrin.h: Include vaesintrin.h.
* config/i386/sse.md (vaesdec_<mode>): New pattern.
* config/i386/vaesintrin.h (_mm256_aesdec_epi128, _mm512_aesdec_epi128,
_mm_aesdec_epi128): New intrinsics.

gcc/testsuite/
* gcc.target/i386/avx512-check.h: Handle bit_VAES.
* gcc.target/i386/avx512f-aesdec-2.c: New test.
* gcc.target/i386/avx512fvl-vaes-1.c: Ditto.
* gcc.target/i386/avx512vl-aesdec-2.c: Ditto.
* gcc.target/i386/i386.exp (check_effective_target_avx512vaes): New.

From-SVN: r255461

6 years agoDaily bump.
GCC Administrator [Thu, 7 Dec 2017 00:16:13 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r255460

6 years agore PR tree-optimization/69224 (-Warray-bounds false positive with -O3 and struct...
Jeff Law [Wed, 6 Dec 2017 23:50:58 +0000 (16:50 -0700)]
re PR tree-optimization/69224 (-Warray-bounds false positive with -O3 and struct pointer parameter)

PR tree-optimization/69224
PR tree-optimization/80907
PR tree-optimization/82286
* gcc.dg/pr69224.c: New test.
* gcc.dg/pr80907.c: New test.
* gcc.dg/pr82286.c: New test.

From-SVN: r255457

6 years agore PR c++/80259 (ICE deleting friend function)
Jakub Jelinek [Wed, 6 Dec 2017 22:48:39 +0000 (23:48 +0100)]
re PR c++/80259 (ICE deleting friend function)

PR c++/80259
* decl2.c (grokfield): Diagnose = delete redefinition of a friend.

* g++.dg/cpp0x/pr80259.C: New test.

From-SVN: r255456