Commit Graph

143081 Commits

Author SHA1 Message Date
Tobias Burnus
5df445a2a5 check.c (gfc_check_event_query): New function.
2015-12-02  Tobias Burnus  <burnus@net-b.de>
	    Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>

	* check.c (gfc_check_event_query): New function.
	* dump-parse-tree.c (show_code_node): Handle EXEC_EVENT_POST,
	EXEC_EVENT_WAIT.
	* expr.c (gfc_check_vardef_context): New check for event variables
	definition.
	* gfortran.h (gfc_statement): Add ST_EVENT_POST, ST_EVENT_WAIT.
	(gfc_isym_id): GFC_ISYM_EVENT_QUERY.
	(struct symbol_attribute): New field.
	(gfc_exec_op): Add EXEC_EVENT_POST and EXEC_EVENT_WAIT.
	* gfortran.texi: Document about new events functions and minor
	changes.
	* interface.c (compare_parameter): New check.
	(gfc_procedure_use): New check for explicit procedure interface.
	(add_subroutines): Add event_query.
	* intrinsic.h (gfc_check_event_query,gfc_resolve_event_query):
	New prototypes.
	* iresolve.c (gfc_resolve_event_query): New function.
	* iso-fortran-env.def (event_type): New type.
	* match.c (event_statement,gfc_match_event_post,gfc_match_event_wait):
	New functions.
	(gfc_match_name): New event post and event wait.
	* match.h (gfc_match_event_post,gfc_match_event_wait):
	New prototypes.
	* module.c (ab_attribute): Add AB_EVENT_COMP.
	(attr_bits): Likewise.
	(mio_symbol_attribute): Handle event_comp attribute.
	* parse.c (decode_statement): Add ST_EVENT_POST, ST_EVENT_WAIT.
	(next_statement): Add ST_EVENT_POST, ST_EVENT_WAIT.
	(gfc_ascii_statement): Add ST_EVENT_POST, ST_EVENT_WAIT.
	(parse_derived): Check for event_type components.
	* resolve.c (resolve_allocate_expr): Check for event variable def.
	(resolve_lock_unlock): Renamed to resolve_lock_unlock_event. It
	includes logic for locks and events.
	(gfc_resolve_code): Call it.
	(gfc_resolve_symbol): New check for event variable to be a corray.
	* st.c (gfc_free_statement): Handle new EXEC_EVENT_POST and
	EXEC_EVENT_WAIT.
	* trans-decl.c (gfor_fndecl_caf_event_post,gfor_fndecl_caf_event_wait,
	gfor_fndecl_caf_event_query): New global variables.
	(generate_coarray_sym_init): Checking for event_type.
	(gfc_conv_procedure_call): Check for C bind attribute.
	* trans-intrinsic.c (conv_intrinsic_event_query): New function.
	(conv_intrinsic_move_alloc): Call it.
	* trans-stmt.c (gfc_trans_lock_unlock): Passing address
	of actual argument.
	(gfc_trans_sync): Likewise.
	(gfc_trans_event_post_wait): New function.
	* trans-stmt.h (gfc_trans_event_post_wait): New prototype.
	* trans-types.c (gfc_get_derived_type): Integer_kind as event_type.
	* trans.c (gfc_allocate_using_lib): New argument and logic for events.
	(gfc_allocate_allocatable): Passing new argument.
	(trans_code): Handle EXEC_EVENT_POST, EXEC_EVENT_WAIT.
	* trans.h (gfc_coarray_type): New elements.
	(gfor_fndecl_caf_event_post,gfor_fndecl_caf_event_wait,
	gfor_fndecl_caf_event_query): Declare them.

2015-12-02  Tobias Burnus  <burnus@net-b.de>
	    Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>

	* gfortran.dg/coarray/event_1.f90: New.
	* gfortran.dg/coarray/event_2.f90: New.

Co-Authored-By: Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>

From-SVN: r231208
2015-12-02 21:59:05 +00:00
Aditya Kumar
ca377fc371 fix PR68550: do not handle ISL loop peeled statements
In case ISL did some loop peeling, like this:

  S_8(0);
  for (int c1 = 1; c1 <= 5; c1 += 1) {
    S_8(c1);
  }
  S_8(6);

we should not copy loop-phi nodes in S_8(0) or in S_8(6).

	PR tree-optimization/68550
	* graphite-isl-ast-to-gimple.c (copy_loop_phi_nodes): Add dump.
	(copy_bb_and_scalar_dependences): Do not code generate loop peeled
	statements.

	* gfortran.dg/graphite/pr68550-1.f90: New.
	* gfortran.dg/graphite/pr68550-2.f90: New.

Co-Authored-By: Sebastian Pop <s.pop@samsung.com>

From-SVN: r231206
2015-12-02 20:40:17 +00:00
Marek Polacek
c297b7cd54 re PR c/68513 (ICE in gimplify_expr, at gimplify.c:8832, c_maybe_const_expr in IL)
PR c/68513
	* gcc.dg/pr68513.c: New test.

From-SVN: r231205
2015-12-02 20:01:37 +00:00
Cesar Philippidis
2f9bcf538c re PR fortran/63861 (OpenACC coarray ICE (also with OpenMP?))
gcc/fortran/
	PR fortran/63861
	* openmp.c (gfc_match_omp_clauses): Allow subarrays for acc reductions.
	(resolve_omp_clauses): Error on any acc reductions on arrays.

	gcc/testsuite/
	* gfortran.dg/goacc/array-reduction.f90: New test.
	* gfortran.dg/goacc/assumed.f95: Update expected diagnostics.
	* gfortran.dg/goacc/coarray.f95: Likewise.
	* gfortran.dg/goacc/coarray_2.f90: Likewise.
	* gfortran.dg/goacc/reduction-2.f95: Likewise.
	* gfortran.dg/goacc/reduction.f95: Likewise.

From-SVN: r231204
2015-12-02 11:59:27 -08:00
Markus Trippelsdorf
e7fc41a776 Fix c++/67337 (segfault in mangle.c)
PR c++/67337
	* mangle.c (write_template_prefix): Guard against context==NULL.

From-SVN: r231203
2015-12-02 19:57:55 +00:00
Ulrich Weigand
157bb85d48 configure.ac: Check assembler support for R_PPC64_ENTRY relocation.
* configure.ac: Check assembler support for R_PPC64_ENTRY relocation.
	* configure: Regenerate.
	* config.in: Regenerate.
	* config/rs6000/rs6000.c (rs6000_global_entry_point_needed_p): New
	function.
	(rs6000_output_function_prologue): Use it instead of checking
	cfun->machine->r2_setup_needed.  Use internal labels instead of
	GNU as local label extension.  Handle ELFv2 large code model.
	(rs6000_output_mi_thunk): Do not set cfun->machine->r2_setup_needed.
	(rs6000_elf_declare_function_name): Handle ELFv2 large code model.

From-SVN: r231202
2015-12-02 19:52:53 +00:00
Jakub Jelinek
8923e02ee4 re PR target/68647 (__builtin_popcountll doesn't generate popcnt instructions when targeting -mpopcnt on x86_32)
PR target/68647
	* optabs.c (expand_doubleword_popcount, expand_doubleword_parity):
	New functions.
	(expand_unop): Use them.

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

From-SVN: r231201
2015-12-02 20:39:11 +01:00
Marek Polacek
d6221ad458 re PR c++/68653 (ICE: in nonnull_arg_p, at tree.c:13853)
PR c++/68653
	* tree.c (nonnull_arg_p): Allow OFFSET_TYPE.

	* g++.dg/warn/nonnull3.C: New test.

From-SVN: r231200
2015-12-02 19:29:17 +00:00
Ian Lance Taylor
105b682e13 re PR go/66147 (go fails to cross build)
./:	PR go/66147
	* Makefile.tpl (HOST_EXPORTS): Add XGCC_FLAGS_FOR_TARGET.
	* Makefile.in: Regenerate.
gotools/:
	PR go/66147
	* Makefile.am (GOCOMPILER): In NATIVE case, add
	$(XGCC_FLAGS_FOR_TARGET).

From-SVN: r231199
2015-12-02 19:27:58 +00:00
Jason Merrill
f479b43da0 Do constant folding in warn_* functions.
gcc/c-family/
	* c-common.c (fold_for_warn): New.
	(warn_logical_operator, warn_tautological_cmp)
	(check_function_arguments_recurse, maybe_warn_bool_compare): Use it.
gcc/cp/
	* call.c (build_new_op_1): Don't fold arguments to
	warn_logical_operator or maybe_warn_bool_compare.

From-SVN: r231198
2015-12-02 14:04:48 -05:00
Jason Merrill
7426fcc84f Introduce cp_fold_rvalue.
* cp-gimplify.c (cp_fold_maybe_rvalue, cp_fold_rvalue): New.
	(c_fully_fold): Use cp_fold_rvalue.
	(cp_fold): Use them for rvalue operands.

From-SVN: r231197
2015-12-02 14:04:43 -05:00
Jason Merrill
4250754eea Define c_fully_fold separately for C and C++.
gcc/c-family/
	* c-common.c (c_disable_warnings, c_enable_warnings, c_fully_fold)
	(c_fully_fold_internal, decl_constant_value_for_optimization):
	Move to c/c-fold.c.
	* c-common.h: Don't declare decl_constant_value_for_optimization.
gcc/c/
	* c-fold.c (c_disable_warnings, c_enable_warnings, c_fully_fold)
	(c_fully_fold_internal, decl_constant_value_for_optimization):
	Move from c-common.c.
	* c-tree.h: Declare decl_constant_value_for_optimization.
	* Make-lang.in (C_AND_OBJC_OBJS): Add c-fold.o.
gcc/cp/
	* cp-gimplify.c (c_fully_fold): Define.

From-SVN: r231196
2015-12-02 14:04:38 -05:00
Jason Merrill
e9ea372d08 * cp-gimplify.c (cp_fold): Use fold_build*.
From-SVN: r231195
2015-12-02 14:04:32 -05:00
Joseph Myers
e9e32ee6e8 Fix TYPE_MAIN_VARIANT construction for arrays of qualified typedefs (PR c/68162).
PR c/68162 reports a spurious warning about incompatible types
involving arrays of const double, constructed in one place using a
typedef for const double and in another place literally using const
double.

The problem is that the array of the typedef was incorrectly
constructed without a TYPE_MAIN_VARIANT being an array of unqualified
elements as it should be (though it seems some more recent change
resulted in this producing incorrect diagnostics, likely the support
for C++-style handling of arrays of qualified type).  This patch fixes
the logic in grokdeclarator to determine first_non_attr_kind, which is
used to determine whether it is necessary to use the TYPE_MAIN_VARIANT
of the type in the declaration specifiers.

However, fixing that logic introduces a failure of
gcc.dg/debug/dwarf2/pr47939-4.c, a test introduced along with
first_non_attr_kind.  Thus, it is necessary to track the original
qualified typedef when qualifying an array type, to use it rather than
a newly-constructed type, to avoid regressing regarding typedef names
in debug info.  This is done along lines I suggested in
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47939#c6>: track the
original type and the number of levels of array indirection at which
it appears, and, in possibly affected cases, pass extra arguments to
c_build_qualified_type (with default arguments to avoid needing to
pass those extra arguments explicitly everywhere).  Given Richard's
recent fix to dwarf2out.c, this allows the C bug to be fixed without
causing debug information regressions.

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

gcc/c:
	PR c/68162
	* c-decl.c (grokdeclarator): Set first_non_attr_kind before
	following link from declarator to next declarator.  Track original
	qualified type and pass it to c_build_qualified_type.
	* c-typeck.c (c_build_qualified_type): Add arguments
	orig_qual_type and orig_qual_indirect.

gcc/c-family:
	PR c/68162
	* c-common.h (c_build_qualified_type): Add extra default
	arguments.

gcc/cp:
	PR c/68162
	* tree.c (c_build_qualified_type): Add extra arguments.

gcc/testsuite:
	PR c/68162
	* gcc.dg/pr68162-1.c: New test.

From-SVN: r231194
2015-12-02 18:24:23 +00:00
Matthias Klose
701fa326a1 configure.ac: Move AM_ENABLE_MULTILIB before GCC_LIBSTDCXX_RAW_CXX_FLAGS.
2015-12-02  Matthias Klose  <doko@ubuntu.com>

        * configure.ac: Move AM_ENABLE_MULTILIB before
        GCC_LIBSTDCXX_RAW_CXX_FLAGS.
        * configure: Regenerate.

From-SVN: r231193
2015-12-02 18:18:51 +00:00
Nathan Sidwell
592632598b nvptx.c (enum nvptx_shuffle_kind): New.
* config/nvptx/nvptx.c (enum nvptx_shuffle_kind): New.  Absorb
	SHUFFLE defines.
	(nvptx_gen_shuffle, nvptx_print_operand, nvptx_expand_shuffle): Adjust.

From-SVN: r231192
2015-12-02 17:28:32 +00:00
Aditya Kumar
2e733703c0 fix invalid bounds on array refs
While enabling graphite in -O3 we found a Fortran testcase that fails
because the max of the type domain is -1.  We used to add that as a constraint
to the elements accessed by the array, leading to a unfeasible constraint:
0 <= i <= -1.  Having that constraint, drops the data reference as that says
that there are no elements accessed in the array.

	* graphite-dependences.c (scop_get_reads): Add extra dumps.
	(scop_get_must_writes): Same.
	(scop_get_may_writes): Same.
	(compute_deps): Same.
	* graphite-sese-to-poly.c (bounds_are_valid): New.
	(pdr_add_data_dimensions): Call bounds_are_valid.

	* gfortran.dg/graphite/run-id-3.f90: New.

Co-Authored-By: Sebastian Pop <s.pop@samsung.com>

From-SVN: r231191
2015-12-02 17:11:52 +00:00
Aditya Kumar
84c36240fc rename flag_loop_optimize_isl to flag_loop_nest_optimize
* common.opt (flag_loop_optimize_isl): Renamed flag_loop_nest_optimize.
	* graphite-poly.c (apply_poly_transforms): Same.
	* graphite.c (gate_graphite_transforms): Same.
	* toplev.c (process_options): Same.

Co-Authored-By: Sebastian Pop <s.pop@samsung.com>

From-SVN: r231190
2015-12-02 17:11:41 +00:00
Eric Botcazou
f4886d807d re PR c++/68290 (g++.dg/concepts/auto1.C FAILs)
PR c++/68290
	* constraint.cc (make_constrained_auto): Move to...
	* pt.c (make_auto_1): Add set_canonical parameter and set
	TYPE_CANONICAL on the type only if it is true.
	(make_decltype_auto): Adjust call to make_auto_1.
	(make_auto): Likewise.
	(splice_late_return_type): Likewise.
	(make_constrained_auto): ...here.  Call make_auto_1 instead of
	make_auto and pass false.  Set TYPE_CANONICAL directly.

From-SVN: r231189
2015-12-02 16:41:02 +00:00
Eric Botcazou
f74e65509f mips.c (mips_emit_probe_stack_range): Adjust.
* config/mips/mips.c (mips_emit_probe_stack_range): Adjust.
	(mips_output_probe_stack_range): Rotate the loop and simplify.

From-SVN: r231188
2015-12-02 16:34:58 +00:00
David Sherwood
202d0c11b9 aarch64.md: New pattern.
2015-12-02  David Sherwood  <david.sherwood@arm.com>

    gcc/
	* config/aarch64/aarch64.md: New pattern.
	* config/aarch64/aarch64-simd.md: Likewise.
	* config/aarch64/iterators.md: New unspecs, iterators.
    gcc/testsuite
	* gcc.target/aarch64/fmaxmin.c: New test.

From-SVN: r231187
2015-12-02 16:29:17 +00:00
Pierre-Marie de Rodat
f2834b5d87 Track indirect calls for call site information in debug info
gcc/ChangeLog:

	* dwarf2out.c (dwar2out_var_location): In addition to notes,
	process indirect calls whose target is compile-time known.
	Enhance pattern matching to get the SYMBOL_REF they embed.
	(gen_subprogram_die): Handle such calls.
	* final.c (final_scan_insn): For call instructions, invoke the
	var_location debug hook only after the call has been emitted.

From-SVN: r231185
2015-12-02 15:57:34 +00:00
Thomas Schwinge
ff7a55bf56 Some OpenACC host_data cleanup
gcc/c/
	* c-parser.c (c_parser_omp_clause_name)
	(c_parser_oacc_all_clauses): Alphabetical sorting.
	gcc/cp/
	* parser.c (cp_parser_omp_clause_name)
	(cp_parser_oacc_all_clauses): Alphabetical sorting.
	* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_USE_DEVICE.
	gcc/testsuite/
	* c-c++-common/goacc/host_data-5.c: New file.
	* c-c++-common/goacc/host_data-6.c: Likewise.
	* gfortran.dg/goacc/coarray.f95: XFAIL.
	* gfortran.dg/goacc/coarray_2.f90: Adjust dg-excess-errors
	directive.
	* gfortran.dg/goacc/host_data-tree.f95: Remove dg-prune-output
	directive.
	libgomp/
	* testsuite/libgomp.oacc-c-c++-common/host_data-2.c: Restrict to
	target openacc_nvidia_accel_selected.
	* testsuite/libgomp.oacc-c-c++-common/host_data-4.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/host_data-5.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/host_data-3.c: Remove file.
	* testsuite/libgomp.oacc-c-c++-common/host_data-6.c: Remove file.

Co-Authored-By: James Norris <James_Norris@mentor.com>
Co-Authored-By: Julian Brown <julian@codesourcery.com>

From-SVN: r231184
2015-12-02 16:53:34 +01:00
Tom de Vries
db0f1c7a90 Fix oacc kernels default mapping for scalars
2015-12-02  Tom de Vries  <tom@codesourcery.com>

	* gimplify.c (enum gimplify_omp_var_data): Add enum value
	GOVD_MAP_FORCE.
	(oacc_default_clause): Fix default for scalars in oacc kernels.
	(gimplify_adjust_omp_clauses_1): Handle GOVD_MAP_FORCE.

	* c-c++-common/goacc/kernels-default-2.c: New test.
	* c-c++-common/goacc/kernels-default.c: New test.

From-SVN: r231183
2015-12-02 15:48:45 +00:00
Tom de Vries
86938de6f6 Mark pointers to allocated target vars as restricted, if possible
2015-12-02  Tom de Vries  <tom@codesourcery.com>

	* omp-low.c (install_var_field, scan_sharing_clauses): Add and handle
	parameter base_pointers_restrict.
	(omp_target_base_pointers_restrict_p): New function.
	(scan_omp_target): Call scan_sharing_clauses with base_pointers_restrict
	arg.

	* c-c++-common/goacc/kernels-alias-2.c: New test.
	* c-c++-common/goacc/kernels-alias-3.c: New test.
	* c-c++-common/goacc/kernels-alias-4.c: New test.
	* c-c++-common/goacc/kernels-alias-5.c: New test.
	* c-c++-common/goacc/kernels-alias-6.c: New test.
	* c-c++-common/goacc/kernels-alias-7.c: New test.
	* c-c++-common/goacc/kernels-alias-8.c: New test.
	* c-c++-common/goacc/kernels-alias.c: New test.

From-SVN: r231182
2015-12-02 15:48:35 +00:00
Jonathan Wakely
28eca950b7 Fix ambiguity with multiple enable_shared_from_this bases
PR libstdc++/56383
	* testsuite/20_util/enable_shared_from_this/56383.cc: New.
	* include/bits/shared_ptr_base.h (__enable_shared_from_this): Make
	friend declaration match previous declaration of
	__enable_shared_from_this_helper.
	* include/bits/shared_ptr.h (enable_shared_from_this): Likewise.

From-SVN: r231181
2015-12-02 15:08:18 +00:00
Nathan Sidwell
f313d112b0 nvptx-protos.h (nvptx_output_mov_insn): Declare.
* config/nvptx/nvptx-protos.h (nvptx_output_mov_insn): Declare.
	(nvptx_underlying_object_mode): Delete.
	* config/nvptx/nvptx.c (nvptx_underlying_object_mode): Delete.
	(output_reg): New.
	(nvptx_declare_function_name): Use output_reg.  Remove punning
	buffer.
	(nvptx_output_mov_insn): New.
	(nvptx_print_operand): Separate SUBREG handling, remove 'f' case,
	Use output_reg. Merge 't' and 'u' handling.
	* config/nvptx/nvptx.h (NVPTX_PUNNING_BUFFER_REGNUM): Delete.
	(struct machine_function): Remvoe punning_buffer_size.
	(REGISTER_NAMES): Remove %punbuffer.
	* config/nvptx/nvptx.md (UNSPEC_CPLX_LOWPART,
	UNSPEC_CPLX_HIGHPART): Delete.
	(*mov<mode>_insn [QHSDIM): Remove unnecessary constraints, use
	nvptx_output_mov_insn.
	(*mov<mode>_insn [SDFM): Reorder constraints to match integer
	moc.  Use nvptx_output_mov_insn.
	(highpartscsf2,  set_highpartscsf2, lowpartscsf2,
	set_lowpartscsf2): Delete.
	(mov<mode> [SDCM]): Delete.

From-SVN: r231180
2015-12-02 14:57:54 +00:00
Richard Biener
7b2eca0029 tree.h (tree_invariant_p): Declare.
2015-12-02  Richard Biener  <rguenther@suse.de>

	* tree.h (tree_invariant_p): Declare.
	* tree.c (tree_invariant_p): Export.
	* genmatch.c (dt_simplify::gen_1): For GENERIC code-gen never
	create SAVE_EXPRs but reject patterns if we would need to.

From-SVN: r231178
2015-12-02 14:50:32 +00:00
Tom de Vries
694e5e4bae Handle BUILT_IN_GOACC_PARALLEL in ipa-pta
2015-12-02  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-structalias.c (find_func_aliases_for_builtin_call)
	(find_func_clobbers, ipa_pta_execute): Handle BUILT_IN_GOACC_PARALLEL.

	* c-c++-common/goacc/kernels-alias-ipa-pta-2.c: New test.
	* c-c++-common/goacc/kernels-alias-ipa-pta-3.c: New test.
	* c-c++-common/goacc/kernels-alias-ipa-pta.c: New test.

From-SVN: r231169
2015-12-02 13:32:51 +00:00
Richard Biener
7dbf36f7cb vect-strided-a-u8-i8-gap7-big-array.c: Fix uninitialized y guarding a call to abort ().
2015-12-02  Richard Biener  <rguenther@suse.de>

	* gcc.dg/vect/vect-strided-a-u8-i8-gap7-big-array.c: Fix uninitialized
	y guarding a call to abort ().
	* gcc.dg/vect/vect-strided-a-u8-i8-gap7.c: Likewise.
	* gcc.dg/vect/vect-strided-u8-i8-gap7-big-array.c: Likewise.

From-SVN: r231168
2015-12-02 11:49:48 +00:00
Kirill Yukhin
01e3391a90 AVX-512. Split out mask version for vec_extract_hi_<mode>.
gcc/
	* config/i386/sse.md (define_insn "vec_extract_hi_<mode>_maskm"):
	Remove "prefix_extra".
	(define_insn "vec_extract_hi_<mode>_mask"): New.
	(define_insn "vec_extract_hi_<mode>"): Remove masking.
gcc/testsuite/
	* gcc.target/i386/avx512vl-vextractf32x4-1.c: Fix scan pattern.

From-SVN: r231167
2015-12-02 11:07:42 +00:00
Segher Boessenkool
cbd3a543f6 rs6000: Optimise SImode cstore on 64-bit
On 64-bit we can do comparisons of 32-bit values by extending those
values to 64-bit, subtracting them, and then getting the high bit of
the result.  For registers this is always cheaper than using the carry
bit sequence; and if the comparison involves a constant, this is cheaper
than the sequence we previously generated in half of the cases (and the
same cost in the other cases).

After this, the only sequence left that is using the mfcr insn is the
one doing signed comparison of Pmode registers.

From-SVN: r231165
2015-12-02 11:56:15 +01:00
Marek Polacek
1a99e748a3 re PR middle-end/68570 (ICE on valid code at -O1, -O2 and -O3 on x86_64-linux-gnu)
PR middle-end/68570
	* gcc.dg/torture/pr68570.c: New test.

From-SVN: r231163
2015-12-02 10:22:23 +00:00
Richard Biener
3810ff24db re PR tree-optimization/68625 (Segmentation fault in useless_type_conversion_p)
2015-12-02  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/68625
	* tree-cfgcleanup.c (cleanup_tree_cfg_bb): Do not call
	cleanup_control_flow_bb.
	(cleanup_tree_cfg_1): First perform cleanup_control_flow_bb
	on all BBs, then cleanup_tree_cfg_bb and finally iterate
	over the worklist doing both.

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

From-SVN: r231162
2015-12-02 09:47:43 +00:00
Richard Sandiford
d95ab70a3c PR 68432: Add a target hook to control size/speed optab choices
The problem in the PR is that some i386 optabs FAIL when
optimising for size rather than speed.  The gimple level generally
needs access to this information before calling the generator,
so this patch adds a new hook to say whether an optab should
be used when optimising for size or speed.  It also has a "both"
option for cases where we want code that is optimised for both
size and speed.

I've passed the optab to the target hook because I think in most
cases that's more useful than the instruction code.  We could pass
both if there's a use for it though.

At the moment the match-and-simplify code doesn't have direct access
to the target block, so for now I've used "both" there.

Tested on x86_64-linux-gnu and powerpc64-linux-gnu.

gcc/
	PR tree-optimization/68432
	* coretypes.h (optimization_type): New enum.
	* doc/tm.texi.in (TARGET_OPTAB_SUPPORTED_P): New hook.
	* doc/tm.texi: Regenerate.
	* target.def (optab_supported_p): New hook.
	* targhooks.h (default_optab_supported_p): Declare.
	* targhooks.c (default_optab_supported_p): New function.
	* predict.h (function_optimization_type): Declare.
	(bb_optimization_type): Likewise.
	* predict.c (function_optimization_type): New function.
	(bb_optimization_type): Likewise.
	* optabs-query.h (convert_optab_handler): Define an overload
	that takes an optimization type.
	(direct_optab_handler): Likewise.
	* optabs-query.c (convert_optab_handler): Likewise.
	(direct_optab_handler): Likewise.
	* internal-fn.h (direct_internal_fn_supported_p): Take an
	optimization_type argument.
	* internal-fn.c (direct_optab_supported_p): Likewise.
	(multi_vector_optab_supported_p): Likewise.
	(direct_internal_fn_supported_p): Likewise.
	* builtins.c (replacement_internal_fn): Update call to
	direct_internal_fn_supported_p.
	* gimple-match-head.c (build_call_internal): Likewise.
	* tree-vect-patterns.c (vect_recog_pow_pattern): Likewise.
	* tree-vect-stmts.c (vectorizable_internal_function): Likewise.
	* tree.c (maybe_build_call_expr_loc): Likewise.
	* config/i386/i386.c (ix86_optab_supported_p): New function.
	(TARGET_OPTAB_SUPPORTED_P): Define.
	* config/i386/i386.md (asinxf2): Remove optimize_insn_for_size_p check.
	(asin<mode>2, acosxf2, acos<mode>2, log1pxf2, log1p<mode>2)
	(expNcorexf3, expxf2, exp<mode>2, exp10xf2, exp10<mode>2, exp2xf2)
	(exp2<mode>2, expm1xf2, expm1<mode>2, ldexpxf3, ldexp<mode>3)
	(scalbxf3, scalb<mode>3, rint<mode>2, round<mode>2)
	(<rounding_insn>xf2, <rounding_insn><mode>2): Likewise.

gcc/testsuite/
	* gcc.target/i386/pr68432-1.c: New test.
	* gcc.target/i386/pr68432-2.c: Likewise.
	* gcc.target/i386/pr68432-3.c: Likewise.

From-SVN: r231161
2015-12-02 09:08:49 +00:00
Richard Sandiford
886456e210 Check for invalid FAILs
This patch makes it a compile-time error for an internal-fn optab
to FAIL.  There are certainly other optabs and patterns besides these
that aren't allowed to fail, but this at least deals with the immediate
point of controversy.

Tested normally on x86_64-linux-gnu.  Also tested by building one
configuration per cpu directory.  arc-elf and pdp11 didn't build
for unrelated reasons, but I checked that insn-emit.o built for
both without error.

gcc/
	* Makefile.in (GENSUPPORT_H): New macro.
	(build/gensupport.o, build/read-rtl.o, build/genattr.o)
	(build/genattr-common.o, build/genattrtab.o, build/genautomata.o)
	(build/gencodes.o, build/genconditions.o, build/genconfig.o)
	(build/genconstants.o, build/genextract.o, build/genflags.o)
	(build/gentarget-def.o): Use it.
	(build/genemit.o): Likewise.  Depend on internal-fn.def.
	* genopinit.c: Move block comment to optabs.def.
	(optab_tag, optab_def): Move to gensupport.h
	(pattern): Likewise, renaming to optab_pattern.
	(match_pattern): Move to gensupport.c
	(gen_insn): Use find_optab.
	(patterns, pattern_cmp): Replace pattern with optab_pattern.
	(main): Likewise.  Use num_optabs.
	* optabs.def: Add comment that was previously in genopinit.c.
	* gensupport.h (optab_tag): Moved from genopinit.c
	(optab_def): Likewise, expanding commentary.
	(optab_pattern): Likewise, after renaming from pattern.
	(optabs, num_optabs, find_optab): Declare.
	* gensupport.c (optabs): Moved from genopinit.c.
	(num_optabs): New variable.
	(match_pattern): Moved from genopinit.c.
	(find_optab): New function, extracted from genopinit.c:gen_insn.
	* genemit.c (nofail_optabs): New variable.
	(emit_c_code): New function.
	(gen_expand): Check whether the instruction is an optab that isn't
	allowed to fail.  Call emit_c_code.
	(gen_split): Call emit_c_code here too.
	(main): Initialize nofail_optabs.  Don't emit FAIL and DONE here.

From-SVN: r231160
2015-12-02 09:06:28 +00:00
Andreas Krebbel
e970b4b000 S/390: Make constant checking more strict
gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/predicates.md (const_mask_operand): New predicate.
	* config/s390/s390-builtins.def: Set a smaller bitmask for a few builtins.
	* config/s390/vector.md: Change predicate from immediate_operand
	to either const_int_operand or const_mask_operand.  Add special
	insn conditions on patterns which have to exclude certain values.
	* config/s390/vx-builtins.md: Likewise.

From-SVN: r231159
2015-12-02 08:05:04 +00:00
Andreas Krebbel
8eb1b59beb S/390: vec_set mode DI->SI for shift_count
gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/vector.md ("*vec_set<mode>"): Change shift count
	mode from DI to SI.

From-SVN: r231158
2015-12-02 08:03:35 +00:00
Andreas Krebbel
dfbe4dfd9d S/390: Fix vec_splat_* builtins.
gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.target/s390/zvector/vec-splat-2.c: New test.

gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390-builtin-types.def: New builtin types added.
	* config/s390/s390-builtins.def: Add s390_vec_splat_* definitions.
	* config/s390/s390.c (s390_expand_builtin): Always truncate
	constants to the mode in the pattern.
	* config/s390/vecintrin.h: Let the vec_splat_* macros point to the
	respective builtin __builtin_s390_vec_splat_*.

From-SVN: r231157
2015-12-02 08:02:05 +00:00
Andreas Krebbel
4f3ccd0859 S/390: Sort builtin types - cleanup only.
gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390-builtin-types.def: Sort builtin types.

From-SVN: r231156
2015-12-02 07:59:52 +00:00
Andreas Krebbel
e1fae80e04 S/390: Fix RT flag in vstrc instruction.
gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390-c.c (s390_get_vstring_flags): Invert the
	condition for the RT flag.

From-SVN: r231155
2015-12-02 07:57:24 +00:00
Andreas Krebbel
b0057efd30 S/390: Enable vrepi constants.
gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.target/s390/vector/vec-vrepi-1.c: New test.

gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/constraints.md ("jKK"): New constraint.
	* config/s390/s390.c (tm-constrs.h): Include for
	satisfies_constraint_*.
	(s390_legitimate_constant_p): Allow jKK constants.  Use
	satisfies_constraint_* also for the others.
	(legitimate_reload_vector_constant_p): Likewise.
	(print_operand): Allow h output modifier on vectors.
	* config/s390/vector.md ("mov<mode>"): Add vrepi.

From-SVN: r231154
2015-12-02 07:55:40 +00:00
Andreas Krebbel
a4a443cee2 S/390: Fix vrepi constraint letter.
gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/vector.md ("*vec_splats<mode>"): Fix constraint
	latter I->K.

gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.target/s390/zvector/vec-splat-1.c: New test.

From-SVN: r231153
2015-12-02 07:53:03 +00:00
Andreas Krebbel
6f5a59d1d1 S/390: Further bswap enhancements.
gcc/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390.md ("bswap<mode>2"): Add support for strv and
	strvg.
	("bswaphi2"): New pattern.
	New splitter for HI reg-reg bswap.

gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.target/s390/bswap-1.c (foo64c, foo32a, foo32c): New functions.
	* gcc.target/s390/bswaphi-1.c: New test.

From-SVN: r231152
2015-12-02 07:49:47 +00:00
Andreas Krebbel
a233c89144 S/390: Enable 64 bit atomic tests with -m31 -mzarch.
gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* lib/target-supports.exp: Add s390 and s390x to the list of long
	long atomic targets.

From-SVN: r231151
2015-12-02 07:45:50 +00:00
Jiri Engelthaler
6525fb87c9 [PATCH] Fix PR68029
PR driver/68029
	* opts-common.c (prune_options): Don't ignore -fdiagnostics-color
	if it is the first parameter.

From-SVN: r231150
2015-12-02 00:42:58 -07:00
Andreas Krebbel
16381201d1 S/390: bswap64 testcases require -mzarch.
gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.dg/optimize-bswapdi-1.c: Force using -mzarch on s390 and
	s390x to enable 64 bit bswap patterns.
	* gcc.dg/optimize-bswapdi-2.c: Likewise.
	* gcc.dg/optimize-bswapdi-3.c: Likewise.
	* lib/target-supports.exp: Add a comment for s390.

From-SVN: r231149
2015-12-02 07:41:53 +00:00
Andreas Krebbel
71e513525f S/390: bswap testcases require -march=z900 to work with -m31.
gcc/testsuite/ChangeLog:

2015-12-02  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.dg/builtin-bswap-6a.c: Add -march=z900 for s390 and s390x in
	order to make -m31 work.
	* gcc.dg/optimize-bswapsi-1.c: Likewise.
	* gcc.dg/optimize-bswapsi-2.c: Likewise.

From-SVN: r231148
2015-12-02 07:37:23 +00:00
Jakub Jelinek
657e4e4734 re PR c/68533 (bogus location for "warning: ‘struct s3’ declared inside parameter list will not be visible outside of this definition or declaration")
PR c/68533
	* c-decl.c (get_parm_info): Use b->locus instead of input_location
	for diagnostics.

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

From-SVN: r231147
2015-12-02 08:33:06 +01:00
Andreas Arnez
fe78aa0474 [PR68603] Associate conditional C++ loop's back-jump with start, not body
SVN commit r230979 always associates a loop's back-jump with the start
of the loop body.  This caused a regression for gcov with conditional
loops, because then the loop body appears to be covered twice per
iteration.

2015-12-02  Andreas Arnez  <arnez@linux.vnet.ibm.com>

	PR gcov-profile/68603
	* cp-gimplify.c (genericize_cp_loop): For the back-jump's location
	use the start of the loop body only if the loop is unconditional.

From-SVN: r231146
2015-12-02 07:26:30 +00:00