Commit Graph

146233 Commits

Author SHA1 Message Date
Richard Biener e5328f5dc2 re PR tree-optimization/71230 (ICE : in zero_one_operation, at tree-ssa-reassoc.c:1230)
2016-05-24  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71230
	* tree-ssa-reassoc.c (zero_one_operation): Handle negate special ops.

	* gcc.dg/torture/pr71230.c: New testcase.
	* g++.dg/torture/pr71230.C: Likewise.

From-SVN: r236643
2016-05-24 14:35:36 +00:00
Richard Sandiford fce57248c8 Clean up PURE_SLP_STMT handling
The vectorizable_* routines had many instances of:

        slp_node || PURE_SLP_STMT (stmt_info)

which gives the misleading impression that we can have
!slp_node && PURE_SLP_STMT (stmt_info).  In this context
it's really enough to test slp_node on its own.

There are three cases:

      loop vectorisation only:
        vectorizable_foo called only with !slp_node

      pure SLP:
        vectorizable_foo called only with slp_node

      hybrid SLP:
        (e.g. a vector that's used in SLP statements and also in a reduction)
        - vectorizable_foo called once with slp_node for the SLP uses.
        - vectorizable_foo called once with !slp_node for the non-SLP uses.

Hybrid SLP isn't possible for stores, so I added an explicit assert
for that.

I also made vectorizable_comparison static, to make it obvious that
no other callers outside tree-vect-stmts.c could use it with the
!slp && PURE_SLP_STMT combination.

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

gcc/
	* tree-vectorizer.h (vectorizable_comparison): Delete.
	* tree-vect-loop.c (vectorizable_reduction): Remove redundant
	PURE_SLP_STMT check.
	* tree-vect-stmts.c (vectorizable_call): Likewise.
	(vectorizable_simd_clone_call): Likewise.
	(vectorizable_conversion): Likewise.
	(vectorizable_assignment): Likewise.
	(vectorizable_shift): Likewise.
	(vectorizable_operation): Likewise.
	(vectorizable_load): Likewise.
	(vectorizable_condition): Likewise.
	(vectorizable_store): Likewise.  Assert that we don't have
	hybrid SLP.
	(vectorizable_comparison): Make static.  Remove redundant
	PURE_SLP_STMT check.
	(vect_transform_stmt): Assert that we always have an slp_node
	if PURE_SLP_STMT.

From-SVN: r236642
2016-05-24 14:05:20 +00:00
Kyrylo Tkachov d1fb69400e [ARM][4/4] Simplify checks for CONST_INT_P and comparison against 1/0
* config/arm/neon.md (ashldi3_neon):  Replace comparison of INTVAL of
	operands[2] against 1 with comparison against CONST1_RTX.
	(<shift>di3_neon): Likewise.
	* config/arm/predicates.md (const0_operand): Replace with comparison
	against CONST0_RTX.

From-SVN: r236641
2016-05-24 14:04:03 +00:00
Kyrylo Tkachov dec21bbc97 [ARM][3/4] Cleanup casts from INTVAL to [unsigned] HOST_WIDE_INT
* config/arm/arm.md (ashldi3): Replace comparison of INTVAL of
	operands[2] against 1 with comparison against CONST1_RTX.
	(ashrdi3): Likewise.
	(lshrdi3): Likewise.
	(ashlsi3): Replace cast of INTVAL to unsigned HOST_WIDE_INT with
	UINTVAL.
	(ashrsi3): Likewise.
	(lshrsi3): Likewise.
	(rotrsi3): Likewise.
	(define_split above *compareqi_eq0): Likewise.
	(define_split above "prologue"): Likewise.
	* config/arm/arm.c (thumb1_size_rtx_costs): Likewise.
	* config/arm/predicates.md (shift_operator): Likewise.
	(shift_nomul_operator): Likewise.
	(sat_shift_operator): Likewise.
	(thumb1_cmp_operand): Likewise.
	(const_neon_scalar_shift_amount_operand): Replace manual range
	check with IN_RANGE.
	* config/arm/thumb1.md (define_peephole2 above *thumb_subdi3):
	Replace cast of INTVAL to unsigned HOST_WIDE_INT with UINTVAL.

From-SVN: r236640
2016-05-24 14:00:39 +00:00
Thomas Schwinge a04e69c0b1 Tighten syntax checking for OpenACC routine construct in C
gcc/c/
	* c-parser.c (c_parser_oacc_routine): Tighten syntax checks.
	gcc/testsuite/
	* c-c++-common/goacc/routine-5.c: Add tests.
	* g++.dg/goacc/routine-2.C: Remove duplicate tests.
	* gfortran.dg/goacc/routine-6.f90: Add tests.

From-SVN: r236639
2016-05-24 16:00:39 +02:00
Kyrylo Tkachov d4b5c77d36 [ARM][2/4] Replace casts of 1 to HOST_WIDE_INT by HOST_WIDE_INT_1 and HOST_WIDE_INT_1U
* config/arm/arm.md (andsi3): Replace cast of 1 to HOST_WIDE_INT
	with HOST_WIDE_INT_1.
	(insv): Likewise.
	* config/arm/arm.c (optimal_immediate_sequence): Replace cast of
	1 to unsigned HOST_WIDE_INT with HOST_WIDE_INT_1U.
	(arm_canonicalize_comparison): Likewise.
	(thumb1_rtx_costs): Replace cast of 1 to HOST_WIDE_INT with
	HOST_WIDE_INT_1.
	(thumb1_size_rtx_costs): Likewise.
	(vfp_const_double_index): Replace cast of 1 to unsigned
	HOST_WIDE_INT with HOST_WIDE_INT_1U.
	(get_jump_table_size): Replace cast of 1 to HOST_WIDE_INT with
	HOST_WIDE_INT_1.
	(arm_asan_shadow_offset): Replace cast of 1 to unsigned
	HOST_WIDE_INT with HOST_WIDE_INT_1U.
	* config/arm/neon.md (vec_set<mode>): Replace cast of 1 to
	HOST_WIDE_INT with HOST_WIDE_INT_1.

From-SVN: r236638
2016-05-24 13:55:19 +00:00
Marek Polacek abd3a68c13 tree-cfg.h (should_remove_lhs_p): New predicate.
* tree-cfg.h (should_remove_lhs_p): New predicate.
	* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Use it.
	* gimplify.c (gimplify_modify_expr): Likewise.
	* tree-cfg.c (verify_gimple_call): Likewise.
	* tree-cfgcleanup.c (fixup_noreturn_call): Likewise.
	* gimple-fold.c: Include "tree-cfg.h".
	(gimple_fold_call): Use should_remove_lhs_p.

From-SVN: r236637
2016-05-24 13:34:37 +00:00
Richard Biener 30fd297774 re PR tree-optimization/71253 (ICE during loop distribution w/ -O2 -ftree-loop-distribution)
2016-05-24  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71253
	* cfganal.h (control_dependences): Make robust against edge
	and BB removal.
	(control_dependences::control_dependences): Remove edge_list argument.
	(control_dependences::get_edge): Remove.
	(control_dependences::get_edge_src): Add.
	(control_dependences::get_edge_dest): Likewise.
	(control_dependences::m_el): Make a vector of edge src/dest index.
	* cfganal.c (control_dependences::find_control_dependence): Adjust.
	(control_dependences::control_dependences): Likewise.
	(control_dependences::~control_dependence): Likewise.
	(control_dependences::get_edge): Remove.
	(control_dependences::get_edge_src): Add.
	(control_dependences::get_edge_dest): Likewise.
	* tree-ssa-dce.c (mark_control_dependent_edges_necessary): Use
	get_edge_src.
	(perform_tree_ssa_dce): Adjust.
	* tree-loop-distribution.c (create_edge_for_control_dependence): Use
	get_edge_src.
	(pass_loop_distribution::execute): Adjust.  Do loop destroying
	conditional on changed.

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

From-SVN: r236636
2016-05-24 12:40:01 +00:00
Kyrylo Tkachov 37923729c5 [ARM] PR target/69857 Remove bogus early return false; in gen_operands_ldrd_strd
PR target/69857
	* config/arm/arm.c (gen_operands_ldrd_strd): Remove bogus early
	return.  Reindent transformation comment and mention the ARM state
	behavior.

From-SVN: r236635
2016-05-24 11:32:35 +00:00
Kugan Vivekanandarajah ca6f60bc49 re PR tree-optimization/71252 (ICE: verify_ssa failed : definition in block 7 does not dominate use in block 6)
gcc/testsuite/ChangeLog:

2016-05-24  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/71252
	* gfortran.dg/pr71252.f90: New test.

gcc/ChangeLog:

2016-05-24  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/71252
	* tree-ssa-reassoc.c (rewrite_expr_tree_parallel): Add stmt_to_insert after
	build_and_add_sum creates new use stmt.

From-SVN: r236634
2016-05-24 10:50:01 +00:00
Richard Sandiford d3465d72ba Avoid unnecessary peeling for gaps with LD3
vectorizable_load forces peeling for gaps if the vectorisation factor
is not a multiple of the group size, since in that case we'd normally load
beyond the original scalar accesses but drop the excess elements as part
of a following permute:

          if (loop_vinfo
              && ! STMT_VINFO_STRIDED_P (stmt_info)
              && (GROUP_GAP (vinfo_for_stmt (first_stmt)) != 0
                  || (!slp && vf % GROUP_SIZE (vinfo_for_stmt (first_stmt)) != 0)))

This isn't necessary for LOAD_LANES though, since it loads only the
data needed and does the permute itself.

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

gcc/
	* tree-vect-stmts.c (vectorizable_load): Reorder checks so that
	load_lanes/grouped_load classification comes first.  Don't check
	whether the vectorization factor is a multiple of the group size
	for load_lanes.

gcc/testsuite/
	* gcc.dg/vect/vect-load-lanes-peeling-1.c: New test.

From-SVN: r236632
2016-05-24 10:15:36 +00:00
Richard Sandiford 836dbb1a27 Fix GROUP_GAP for single-element interleaving
vectorizable_load had a curious "force_peeling" variable, with no
comment explaining why we need it for single-element interleaving
but not for other cases.  I think it's simply because we weren't
initialising the GROUP_GAP correctly for single loads.

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

gcc/
	* tree-vect-data-refs.c (vect_analyze_group_access_1): Set
	GROUP_GAP for single-element interleaving.
	* tree-vect-stmts.c (vectorizable_load): Remove force_peeling
	variable.

From-SVN: r236631
2016-05-24 10:13:35 +00:00
Richard Biener f17a223de8 re PR middle-end/70434 (adding an extraneous cast to vector type results in inferior code)
2016-05-24  Richard Biener  <rguenther@suse.de>

	PR middle-end/70434
	PR c/69504
	c-family/
	* c-common.h (convert_vector_to_pointer_for_subscript): Rename to ...
	(convert_vector_to_array_for_subscript): ... this.
	* c-common.c (convert_vector_to_pointer_for_subscript): Use a
	VIEW_CONVERT_EXPR to an array type.  Rename to ...
	(convert_vector_to_array_for_subscript): ... this.

	cp/
	* expr.c (mark_exp_read): Handle VIEW_CONVERT_EXPR.
	* constexpr.c (cxx_eval_array_reference): Handle indexed
	vectors.
	* typeck.c (cp_build_array_ref): Adjust.

	c/
	* c-typeck.c (build_array_ref): Do not complain about indexing
	non-lvalue vectors.  Adjust for function name change.

	* tree-ssa.c (non_rewritable_mem_ref_base): Make sure to mark
	bases which are accessed with non-invariant indices.
	* gimple-fold.c (maybe_canonicalize_mem_ref_addr): Re-write
	constant index ARRAY_REFs of vectors into BIT_FIELD_REFs.

	* c-c++-common/vector-subscript-4.c: New testcase.
	* c-c++-common/vector-subscript-5.c: Likewise.

From-SVN: r236630
2016-05-24 07:55:56 +00:00
Jerry DeLisle 64fc0cd9b2 re PR libfortran/71123 (Namelist read failure on Windows)
2016-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/71123
	* io/list_read (eat_spaces): Eat '\r' as part of spaces.
        fix change log

From-SVN: r236629
2016-05-24 06:16:00 +00:00
Jerry DeLisle e3f365343f re PR libfortran/70684 (incorrect reading of values from file on Windows)
2016-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/70684
	* io/list_read (eat_spaces): Eat '\r' as part of spaces.

	* gfortran.dg/namelist_90.f: New test

From-SVN: r236628
2016-05-24 06:11:21 +00:00
Jerry DeLisle 85d5c27d78 re PR fortran/66461 (ICE on missing end program in fixed source)
2016-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/66461
	* scanner.c (gfc_next_char_literal): Clear end_flag when adjusting
	current locus back to old_locus.

	* gfortran.dg/unexpected_eof.f: New test

From-SVN: r236627
2016-05-24 04:15:39 +00:00
Jason Merrill 4ddcdbf912 PR c++/70344 - ICE with recursive constexpr
* constexpr.c (cxx_eval_call_expression): Check for
	fun == current_function_decl again.

From-SVN: r236625
2016-05-23 23:34:55 -04:00
GCC Administrator 40e61ad87c Daily bump.
From-SVN: r236623
2016-05-24 00:16:17 +00:00
Kugan Vivekanandarajah d2db36ddd2 re PR tree-optimization/71170 (ICE in rewrite_expr_tree, at tree-ssa-reassoc.c:3898)
gcc/ChangeLog:

2016-05-24  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/71170
	* tree-ssa-reassoc.c (struct operand_entry): Add field stmt_to_insert.
	(add_to_ops_vec): Add stmt_to_insert.
	(add_repeat_to_ops_vec): Init stmt_to_insert.
	(insert_stmt_before_use): New.
	(transform_add_to_multiply): Remove mult_stmt insertion and add it to ops vector.
	(get_ops): Init stmt_to_insert.
	(maybe_optimize_range_tests): Likewise.
	(rewrite_expr_tree): Insert stmt_to_insert before use stmt.
	(rewrite_expr_tree_parallel): Likewise.
	(reassociate_bb): Likewise.

From-SVN: r236619
2016-05-24 00:14:13 +00:00
Michael Meissner fe3f334041 re PR target/71201 (PowerPC XXPERM instruction fails on ISA 3.0 system.)
[gcc]
2016-05-23  Michael Meissner  <meissner@linux.vnet.ibm.com>

	PR target/71201
	* config/rs6000/altivec.md (altivec_vperm_<mode>_internal): Drop
	ISA 3.0 xxperm fusion alternative.
	(altivec_vperm_v8hiv16qi): Likewise.
	(altivec_vperm_<mode>_uns_internal): Likewise.
	(vperm_v8hiv4si): Likewise.
	(vperm_v16qiv8hi): Likewise.

[gcc/testsuite]
2016-05-23  Michael Meissner  <meissner@linux.vnet.ibm.com>
	    Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/p9-permute.c: Run test on big endian as well
	as little endian.


[gcc]
2016-05-23  Michael Meissner  <meissner@linux.vnet.ibm.com>
	    Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/rs6000.c (rs6000_expand_vector_set): Generate
	vpermr/xxpermr on ISA 3.0.
	(altivec_expand_vec_perm_le): Likewise.
	* config/rs6000/altivec.md (UNSPEC_VPERMR): New unspec.
	(altivec_vpermr_<mode>_internal): Add VPERMR/XXPERMR support for
	ISA 3.0.


Co-Authored-By: Kelvin Nilsen <kelvin@gcc.gnu.org>

From-SVN: r236617
2016-05-23 23:42:52 +00:00
Jason Merrill 290279c438 PR c++/70584 - error with parenthesized builtin arg
* cp-gimplify.c (cp_fold) [INDIRECT_REF]: Call
	maybe_undo_parenthesized_ref.

From-SVN: r236616
2016-05-23 17:21:24 -04:00
Jason Merrill 9c62c1f364 PR c++/70735 - generic lambda and local static variable
* pt.c (tsubst_copy): Just return a local variable from
	non-template context.  Don't call rest_of_decl_compilation for
	duplicated static locals.
	(tsubst_decl): Set DECL_CONTEXT of local static from another
	function.

From-SVN: r236615
2016-05-23 17:21:18 -04:00
Paolo Carlini 26d6ae55d8 re PR c++/70972 (Inheriting constructors taking parameters by value should move them, not copy)
/cp
2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/70972
	* method.c (forward_parm): Use cp_build_reference_type.

/testsuite
2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/70972
	* g++.dg/cpp0x/inh-ctor20.C: New.
	* g++.dg/cpp0x/inh-ctor21.C: Likewise.

From-SVN: r236614
2016-05-23 20:50:10 +00:00
François Dumont 447caf82a4 2016-05-23 François Dumont <fdumont@gcc.gnu.org>
* include/debug/safe_iterator.h
	(_Safe_iterator<>::operator->()): Implement using underlying iterator
	operator ->.
	* include/debug/safe_local_iterator.h
	(_Safe_local_iterator<>::operator->()): Likewise.

From-SVN: r236611
2016-05-23 20:03:35 +00:00
Paolo Carlini d6c9a06fcf re PR c++/69095 (internal compiler error: in dependent_type_p, at cp/pt.c:19399)
/cp
2016-05-22  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/69095
	* parser.c (cp_parser_default_argument): Call
	check_for_bare_parameter_packs.
	(cp_parser_late_parsing_default_args): Likewise.

/testsuite
2016-05-22  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/69095
	* g++.dg/cpp0x/variadic168.C: New.

From-SVN: r236610
2016-05-23 19:24:22 +00:00
Paolo Carlini 396a1d10b3 pt.c (check_for_bare_parameter_packs): Improve error message location for expressions.
/cp
2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	* pt.c (check_for_bare_parameter_packs): Improve error message
	location for expressions.

/testsuite
2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/cpp0x/pr31445.C: Test column number too.
	* g++.dg/cpp0x/pr32253.C: Likewise.
	* g++.dg/cpp0x/variadic-ex13.C: Likewise.
	* g++.dg/cpp0x/variadic36.C: Likewise.

From-SVN: r236609
2016-05-23 19:20:41 +00:00
Uros Bizjak f48b428431 i386.h (IS_STACK_MODE): Enable for TARGET_MIX_SSE_I387.
* config/i386/i386.h (IS_STACK_MODE): Enable for
	TARGET_MIX_SSE_I387.  Rewrite using X87_FLOAT_MODE_P and
	SSE_FLOAT_MODE_P macros.
	* config/i386/i386.c (ix86_preferred_reload_class): Use
	IS_STACK_MODE, INTEGER_CLASS_P and FLOAT_CLASS_P macros.  Cleanup
	regclass processing for CONST_DOUBLE_P.
	(ix86_preferred_output_reload_class): Use IS_STACK_MODE macro.
	(ix86_rtx_costs): Remove redundant TARGET_80387 check
	with IS_STACK_MODE macro.
	* config/i386/i386.md: Replace SSE_FLOAT_MODE_P (DFmode)
	with TARGET_SSE2.
	(*movdf_internal): Use IS_STACK_MODE macro.
	(*movsf_internal): Ditto.

From-SVN: r236607
2016-05-23 20:59:38 +02:00
Marc Glisse ece46666cd match.pd: Relax some tree_nop_conversion_p
2016-05-23  Marc Glisse  <marc.glisse@inria.fr>

gcc/
	* match.pd (a * (1 << b), ~x & ~y, ~X ^ ~Y, (X ^ Y) ^ Y, ~ (-A),
	~ (A - 1), ~(~X >> Y), ~(~X >>r Y)): Relax constraints.

gcc/testsuite/
	* gcc.dg/fold-notshift-2.c: Adjust.

From-SVN: r236601
2016-05-23 17:49:10 +00:00
Jeff Law bb5e62d648 tree-ssa-threadbackward.c (profitable_jump_thread_path): New function extracted from ...
* tree-ssa-threadbackward.c (profitable_jump_thread_path): New function
	extracted from ...
	(fsm_find_control_statement_thread_paths): Call it.

From-SVN: r236599
2016-05-23 10:59:29 -06:00
Martin Jambor 44a71f3658 [PR 71234] Avoid valgrind warning in ipa-cp
2016-05-23  Martin Jambor  <mjambor@suse.cz>

	PR ipa/71234
	* ipa-cp.c (ipa_get_indirect_edge_target_1): Only check value of
	from_global_constant if t is not NULL.

From-SVN: r236598
2016-05-23 18:31:14 +02:00
Marek Polacek a7dc5980e9 re PR c/49859 (gcc could warn about statements between "switch" and first "case")
PR c/49859
	* common.opt (Wswitch-unreachable): New option.
	* doc/invoke.texi: Document -Wswitch-unreachable.
	* gimplify.c (gimplify_switch_expr): Implement the -Wswitch-unreachable
	warning.

	* c-c++-common/Wswitch-unreachable-1.c: New test.
	* gcc.dg/Wswitch-unreachable-1.c: New test.
	* c-c++-common/goacc/sb-2.c (void foo): Add dg-warning.
	* g++.dg/cpp0x/lambda/lambda-switch.C (main): Likewise.
	* g++.dg/gomp/block-10.C: Likewise.
	* gcc.dg/gomp/block-10.c: Likewise.
	* g++.dg/gomp/block-9.C: Likewise.
	* gcc.dg/gomp/block-9.c: Likewise.
	* g++.dg/gomp/target-1.C: Likewise.
	* g++.dg/gomp/target-2.C: Likewise.
	* gcc.dg/gomp/target-1.c: Likewise.
	* gcc.dg/gomp/target-2.c: Likewise. 
	* g++.dg/gomp/taskgroup-1.C: Likewise.
	* gcc.dg/gomp/taskgroup-1.c: Likewise.
	* gcc.dg/gomp/teams-1.c: Likewise.
	* g++.dg/gomp/teams-1.C: Likewise.
	* g++.dg/overload/error3.C: Likewise.
	* g++.dg/tm/jump1.C: Likewise.
	* g++.dg/torture/pr40335.C: Likewise.
	* gcc.dg/c99-vla-jump-5.c: Likewise.
	* gcc.dg/switch-warn-1.c: Likewise.
	* gcc.dg/Wjump-misses-init-1.c: Use -Wno-switch-unreachable.
	* gcc.dg/nested-func-1.c: Likewise.
	* gcc.dg/pr67784-4.c: Likewise.

From-SVN: r236597
2016-05-23 15:37:09 +00:00
Thomas Schwinge 7e5a3c96db [PR libffi/65567] libffi: Fix, and simply libffi_feature_test
libffi/
	PR libffi/65567
	* testsuite/lib/libffi.exp (libffi_feature_test): Fix, and simply.

From-SVN: r236594
2016-05-23 16:54:04 +02:00
Bin Cheng f397602394 tree-ssa-address.c (copy_ref_info): Check NULL TMR_STEP when TMR_INDEX is non-NULL.
* tree-ssa-address.c (copy_ref_info): Check NULL TMR_STEP when
	TMR_INDEX is non-NULL.

From-SVN: r236593
2016-05-23 14:44:07 +00:00
Richard Biener 18b5400419 re PR tree-optimization/71230 (ICE : in zero_one_operation, at tree-ssa-reassoc.c:1230)
2016-05-23  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71230
	* tree-ssa-reassoc.c (acceptable_pow_call): Move initial condition...
	(try_special_add_to_ops): ... here.  Always test for single-use.

	* gfortran.dg/pr71230-1.f90: New testcase.
	* gfortran.dg/pr71230-2.f90: Likewise.

From-SVN: r236591
2016-05-23 14:09:35 +00:00
Martin Jambor a50575432b [hsa] Avoid segfault in hsa switch expansion
2016-05-23  Martin Jambor  <mjambor@suse.cz>

	* hsa-gen.c (gen_hsa_insns_for_switch_stmt): Create an empty
	default block if a PHI node in the original one would be resized.

libgomp/
	* testsuite/libgomp.hsa.c/switch-sbr-2.c: New test.

From-SVN: r236585
2016-05-23 13:45:13 +02:00
Venkataramanan Kumar e569db5fb5 re PR tree-optimization/58135 ([x86] Missed opportunities for partial SLP)
Fix PR58135.

2016-05-23  Venkataramanan Kumar  <venkataramanan.kumar@amd.com>

	PR tree-optimization/58135
	* tree-vect-slp.c: When group size is not multiple
	of vector size, allow splitting of store group at
	vector boundary.

2016-05-23  Venkataramanan Kumar  <venkataramanan.kumar@amd.com>

	* gcc.dg/vect/bb-slp-19.c:  Remove XFAIL.
	* gcc.dg/vect/pr58135.c:  Add new.
	* gfortran.dg/pr46519-1.f: Adjust test case.

From-SVN: r236582
2016-05-23 09:48:54 +00:00
Paolo Carlini e4b7111409 re PR c++/53401 ([C++11] internal compiler error: Segmentation fault on infinite argument deduction of constexpr templates)
2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/53401
	* g++.dg/cpp0x/decltype64.C: New.

From-SVN: r236581
2016-05-23 09:23:42 +00:00
Christophe Lyon a25a8058d5 [ARM, AArch64] Add missing tests for vreinterpret, operating of fp16 type.
2016-05-23  Christophe Lyon  <christophe.lyon@linaro.org>

	* gcc.target/aarch64/advsimd-intrinsics/vreinterpret.c: Add fp16 tests.
	* gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p128.c: Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p64.c: Likewise.

From-SVN: r236580
2016-05-23 11:16:12 +02:00
Christophe Lyon 0dcfe9ab48 [ARM, AArch64] Add missing tests for intrinsics operating on poly64 and poly128 types.
2016-05-23  Christophe Lyon  <christophe.lyon@linaro.org>

	* gcc.target/aarch64/advsimd-intrinsics/arm-neon-ref.h (result):
	Add poly64x1_t and poly64x2_t cases if supported.
	* gcc.target/aarch64/advsimd-intrinsics/compute-ref-data.h
	(buffer, buffer_pad, buffer_dup, buffer_dup_pad): Likewise.
	* gcc.target/aarch64/advsimd-intrinsics/p64_p128.c: New file.
	* gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p128.c: New file.
	* gcc.target/aarch64/advsimd-intrinsics/vreinterpret_p64.c: New file.

From-SVN: r236579
2016-05-23 11:14:37 +02:00
Christophe Lyon ffd70e4a61 [ARM, AArch64] Add missing vrnd{,a,m,n,p,x} tests.
2016-05-23  Christophe Lyon  <christophe.lyon@linaro.org>

	* gcc.target/aarch64/advsimd-intrinsics/vrnd.c: New.
	* gcc.target/aarch64/advsimd-intrinsics/vrndX.inc: New.
	* gcc.target/aarch64/advsimd-intrinsics/vrnda.c: New.
	* gcc.target/aarch64/advsimd-intrinsics/vrndm.c: New.
	* gcc.target/aarch64/advsimd-intrinsics/vrndn.c: New.
	* gcc.target/aarch64/advsimd-intrinsics/vrndp.c: New.
	* gcc.target/aarch64/advsimd-intrinsics/vrndx.c: New.

From-SVN: r236578
2016-05-23 11:05:34 +02:00
Christophe Lyon 4b1f57feda [ARM, AArch64] Add missing vstX_lane fp16 tests.
2016-05-23  Christophe Lyon  <christophe.lyon@linaro.org>

	* gcc.target/aarch64/advsimd-intrinsics/vstX_lane.c: Add fp16 tests.

From-SVN: r236577
2016-05-23 11:02:51 +02:00
Christophe Lyon 16c5ec7703 [ARM, AArch64] Add missing vtst_p16 and vtstq_p16, and vtst_p{8,16} and vtstq_p{8,16} tests.
2016-05-23  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/arm_neon.h (vtst_p16, vtstq_p16): New.

	gcc/testsuite/
	* gcc.target/aarch64/advsimd-intrinsics/vtst.c: Add tests for
	vtst_p8, vtstq_p8, vtst_p16 and vtstq_p16.

From-SVN: r236576
2016-05-23 10:59:26 +02:00
GCC Administrator b4957a7607 Daily bump.
From-SVN: r236575
2016-05-23 00:16:25 +00:00
Jakub Jelinek 57748705ef avx512bw-kunpckdq-1.c (avx512bw_test): Use "m" constraint instead of "r".
* gcc.target/i386/avx512bw-kunpckdq-1.c (avx512bw_test): Use "m"
	constraint instead of "r".
	* gcc.target/i386/avx512f-additional-reg-names.c (foo): Use vpxord
	insn instead of vxorpd.
	* gcc.target/i386/strinline.c: Add dg-require-effective-target ia32.

From-SVN: r236571
2016-05-22 20:01:43 +02:00
Uros Bizjak 41a6c07141 revert: re PR target/70738 (Add -mgeneral-regs-only option)
Revert:

gcc/

	PR target/70738
	* common/config/i386/i386-common.c
	(OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET): New.
	(ix86_handle_option): Disable MPX, MMX, SSE and x87 instructions
	for -mgeneral-regs-only.
	* config/i386/i386.c (ix86_option_override_internal): Don't
	enable x87 instructions if only the general registers are
	allowed.
	* config/i386/i386.opt: Add -mgeneral-regs-only.
	* doc/invoke.texi: Document -mgeneral-regs-only.

gcc/testsuite/

	PR target/70738
	* gcc.target/i386/pr70738-1.c: Likewise.
	* gcc.target/i386/pr70738-2.c: Likewise.
	* gcc.target/i386/pr70738-3.c: Likewise.
	* gcc.target/i386/pr70738-4.c: Likewise.
	* gcc.target/i386/pr70738-5.c: Likewise.
	* gcc.target/i386/pr70738-6.c: Likewise.
	* gcc.target/i386/pr70738-7.c: Likewise.
	* gcc.target/i386/pr70738-8.c: Likewise.
	* gcc.target/i386/pr70738-9.c: Likewise.

From-SVN: r236570
2016-05-22 19:20:10 +02:00
Jakub Jelinek af12016142 sse.md (vec_set_lo_<mode><mask_name>, [...]): Add && <mask_avx512dq_condition> condition.
* config/i386/sse.md (vec_set_lo_<mode><mask_name>,
	vec_set_hi_<mode><mask_name>): Add && <mask_avx512dq_condition>
	condition.  For !TARGET_AVX512DQ, emit 32x4 instruction instead
	of 64x2.

	* gcc.target/i386/avx512dq-vinsert-1.c: New test.
	* gcc.target/i386/avx512vl-vinsert-1.c: New test.

From-SVN: r236569
2016-05-22 12:28:06 +02:00
Jakub Jelinek 355023cef1 sse.md (vec_set_lo_v16hi, [...]): Add alternative with v constraint instead of x and vinserti32x4 insn.
* config/i386/sse.md (vec_set_lo_v16hi, vec_set_hi_v16hi,
	vec_set_lo_v32qi, vec_set_hi_v32qi): Add alternative with
	v constraint instead of x and vinserti32x4 insn.

	* gcc.target/i386/avx512vl-vinserti32x4-3.c: New test.

From-SVN: r236568
2016-05-22 12:27:27 +02:00
Jakub Jelinek 3b48574c6b sse.md (i128vldq): New mode iterator.
* config/i386/sse.md (i128vldq): New mode iterator.
	(avx2_vbroadcasti128_<mode>, avx_vbroadcastf128_<mode>): Add
	avx512dq and avx512vl alternatives.

	* gcc.target/i386/avx512dq-vbroadcast-2.c: New test.
	* gcc.target/i386/avx512vl-vbroadcast-2.c: New test.

From-SVN: r236567
2016-05-22 12:26:52 +02:00
Jakub Jelinek 94ad56c7c2 sse.md (avx2_vec_dupv4df): Use v instead of x constraint, use maybe_evex prefix instead of vex.
* config/i386/sse.md (avx2_vec_dupv4df): Use v instead of x
	constraint, use maybe_evex prefix instead of vex.
	(vec_dupv4sf): Use v constraint instead of x for output
	operand except for noavx alternative, use Yv constraint
	instead of x for input.  Use maybe_evex prefix instead of vex.
	(*vec_dupv4si): Likewise.
	(*vec_dupv2di): Likewise.

	* gcc.target/i386/avx512vl-vbroadcast-1.c: New test.

From-SVN: r236566
2016-05-22 12:25:55 +02:00
Kugan Vivekanandarajah 8a85cee26e re PR tree-optimization/40921 (missed optimization: x + (-y * z * z) => x - y * z * z)
gcc/testsuite/ChangeLog:

2016-05-22  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/40921
	* gcc.dg/tree-ssa/pr40921.c: New test.

gcc/ChangeLog:

2016-05-22  Kugan Vivekanandarajah  <kuganv@linaro.org>

	PR middle-end/40921
        * tree-ssa-reassoc.c (try_special_add_to_ops): New.
        (linearize_expr_tree): Call try_special_add_to_ops.
        (reassociate_bb): Convert MULT_EXPR by (-1) to NEGATE_EXPR.

From-SVN: r236564
2016-05-22 08:13:13 +00:00