Commit Graph

63282 Commits

Author SHA1 Message Date
Alan Modra bcfbf25770 Fix segfault on verify_dominators error path
* dominance.c (verify_dominators): Don't segfault on NULL imm_bb.

From-SVN: r236845
2016-05-28 18:46:00 +09:30
Alan Modra f3c82ff9a9 ira.c bb_loop_depth again
Follow the same practice as other places in ira.c, where
free_dominance_info is called along with loop_optimizer_finalize.  Not
doing so causes an ICE on gcc-5-branch, so avoid that possibility on
trunk.

	PR rtl-optimization/71275
	* ira.c (ira): Free dominance info.

From-SVN: r236843
2016-05-28 09:52:56 +09:30
Gerald Pfeifer a1ece5c000 * doc/sourcebuild.texi: New address for upstream Go repository.
From-SVN: r236836
2016-05-27 20:25:05 +00:00
Thomas Preud'homme 9a01befbca arm.h (TARGET_ARM_V6M): Remove.
2016-05-27  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/arm.h (TARGET_ARM_V6M): Remove.
    (TARGET_ARM_V7M): Likewise.

From-SVN: r236832
2016-05-27 16:36:42 +00:00
Jeff Law 8b2ef235c0 tree-ssa-threadedge.c: Remove include of tree-ssa-threadbackward.h.
* tree-ssa-threadedge.c: Remove include of tree-ssa-threadbackward.h.
	(thread_across_edge): Remove calls to find_jump_threads_backwards.
	* passes.def: Add jump threading passes before DOM/VRP.
	* tree-ssa-threadbackward.c (find_jump_threads_backwards): Change
	argument to a basic block from an edge.  Remove tests which are
	handled elsewhere.
	(pass_data_thread_jumps, class pass_thread_jumps): New.
	(pass_thread_jumps::gate, pass_thread_jumps::execute): New.
	(make_pass_thread_jumps): Likewise.
	* tree-pass.h (make_pass_thread_jumps): Declare.

	* gcc.dg/tree-ssa/pr21417.c: Update expected output.
	* gcc.dg/tree-ssa/pr66752-3.c: Likewise.
	* gcc.dg/tree-ssa/pr68198.c: Likewise.
	* gcc.dg/tree-ssa/pr69196-1.c: Likewise.
	* gcc.dg/tree-ssa/pr69270-3.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-2b.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-2g.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-2h.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-6.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-7.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-12.c: Likewise.
	* gcc.dg/tree-ssa/ssa-dom-thread-13.c: Likewise.
	* gcc.dg/tree-ssa/vrp56.c: Likewise.

From-SVN: r236831
2016-05-27 10:32:38 -06:00
Eric Botcazou a8345bfd64 visium-protos.h (split_double_move): Rename into...
* config/visium/visium-protos.h (split_double_move): Rename into...
	(visium_split_double_move): ...this.
	(visium_split_double_add): Declare.
	* config/visium/visium.c (split_double_move): Rename into...
	(visium_split_double_move): ...this.
	(visium_split_double_add): New function.
	(visium_expand_copysign): Renumber operands for consistency.
	* config/visium/visium.md (DImode move splitter): Adjust to renaming.
	(DFmode move splitter): Likewise.
	(*addi3_insn): Split by means of visium_split_double_add.
	(*adddi3_insn_flags): Delete.
	(*plus_plus_sltu<subst_arith>): New insn.
	(*subdi3_insn): Split by means of visium_split_double_add.
	(subdi3_insn_flags): Delete.
	(*minus_minus_sltu<subst_arith>): New insn.
	(*negdi2_insn): Split by means of visium_split_double_add.
	(*negdi2_insn_flags): Delete.

From-SVN: r236827
2016-05-27 15:08:50 +00:00
Ulrich Weigand 9b2bf368d7 configure.ac: Treat a --with-headers option without argument the same as the default (i.e.
* configure.ac: Treat a --with-headers option without argument
	the same as the default (i.e. consult sys-include directory).
	* configure: Regenerate.

From-SVN: r236825
2016-05-27 14:50:06 +00:00
Kyrylo Tkachov f2879a90ec [AArch64] Tie operand 1 to operand 0 in AESMC pattern when AES/AESMC fusion is enabled
* config/aarch64/aarch64.c (aarch64_fusion_enabled_p): New function.
	* config/aarch64/aarch64-protos.h (aarch64_fusion_enabled_p): Declare
	prototype.
	* config/aarch64/aarch64-simd.md (aarch64_crypto_aes<aesmc_op>v16qi):
	Add "=w,0" alternative.  Enable it when AES/AESMC fusion is enabled.

From-SVN: r236820
2016-05-27 13:44:57 +00:00
Jiong Wang 88e3bdd195 [AArch64] PR target/63596, honor tree-stdarg analysis result to improve VAARG codegen
gcc/
	PR target/63596
	* config/aarch64/aarch64.c (aarch64_expand_builtin_va_start): Honor
	tree-stdarg analysis results.
	(aarch64_setup_incoming_varargs): Likewise.

gcc/testsuite/
	* gcc.target/aarch64/va_arg_1.c: New testcase.
	* gcc.target/aarch64/va_arg_2.c: Likewise.
	* gcc.target/aarch64/va_arg_3.c: Likewise.

From-SVN: r236819
2016-05-27 13:05:34 +00:00
Jiong Wang 3fd6b9cc8b [AArch64] Enable tree-stdarg pass for AArch64 by defining counter fields
gcc/
	* config/aarch64/aarch64.c (aarch64_build_builtin_va_list): Initialize
	va_list_gpr_counter_field and va_list_fpr_counter_field.

gcc/testsuite/
	* gcc.dg/tree-ssa/stdarg-2.c: Enable all testcases for AArch64.
	* gcc.dg/tree-ssa/stdarg-3.c: Likewise.
	* gcc.dg/tree-ssa/stdarg-4.c: Likewise.
	* gcc.dg/tree-ssa/stdarg-5.c: Likewise.
	* gcc.dg/tree-ssa/stdarg-6.c: Likewise.

From-SVN: r236818
2016-05-27 12:57:06 +00:00
Wilco Dijkstra f6e0013a3c Remove aarch64_cannot_change_mode_class as the underlying issue (PR67609) has been resolved.
Remove aarch64_cannot_change_mode_class as the underlying issue
(PR67609) has been resolved.  This avoids a few unnecessary lane
widening operations like:

faddp   d18, v18.2d
mov     d18, v18.d[0]

    gcc/
	PR67609
	* config/aarch64/aarch64.h (CANNOT_CHANGE_MODE_CLASS): Remove.
	* config/aarch64/aarch64.c
	(aarch64_cannot_change_mode_class): Remove function.
	* config/aarch64/aarch64-protos.h
	(aarch64_cannot_change_mode_class): Remove.

From-SVN: r236817
2016-05-27 12:15:47 +00:00
Jan Hubicka 105e29c5cf cfgloop.c (record_niter_bound): Record likely upper bounds.
* cfgloop.c (record_niter_bound): Record likely upper bounds.
	(likely_max_stmt_executions_int, get_likely_max_loop_iterations,
	get_likely_max_loop_iterations_int): New.
	* cfgloop.h (struct loop): Add nb_iterations_likely_upper_bound,
	any_likely_upper_bound.
	(get_likely_max_loop_iterations_int, get_likely_max_loop_iterations):
	Declare.
	* cfgloopmanip.c (copy_loop_info): Copy likely upper bounds.
	* loop-unroll.c (unroll_loop_constant_iterations): Update likely
	upper bound.
	(unroll_loop_constant_iterations): Likewise.
	(unroll_loop_runtime_iterations): Likewise.
	* lto-streamer-in.c (input_cfg): Stream likely upper bounds.
	* lto-streamer-out.c (output_cfg): Likewise.
	* tree-ssa-loop-ivcanon.c (try_peel_loop): Update likely upper
	bounds.
	(canonicalize_loop_induction_variables): Dump likely upper bounds.
	* tree-ssa-loop-niter.c (record_estimate): Record likely upper bounds.
	(likely_max_loop_iterations): New.
	(likely_max_loop_iterations_int): New.
	(likely_max_stmt_executions): New.
	* tree-ssa-loop-niter.h (likely_max_loop_iterations,
	likely_max_loop_iterations_int, likely_max_stmt_executions_int,
	likely_max_stmt_executions): Declare.

From-SVN: r236816
2016-05-27 12:10:34 +00:00
Marek Polacek 3cee7e4e2b re PR middle-end/71308 (ICE (segfault) in in gimple_fold_call gimple-fold.c:3060)
PR middle-end/71308
	* gimple-fold.c (gimple_fold_call): Check that LHS is not null.

	* g++.dg/torture/pr71308.C: New test.

From-SVN: r236815
2016-05-27 12:08:03 +00:00
Andreas Krebbel 3168e073cb S/390: Replace rtx_equal_p with reg_overlap_mentioned_p in splitter check.
gcc/ChangeLog:

2016-05-27  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390.md (2x risbg splitters): Use
	reg_overlap_mentioned_p instead of rtx_equal_p.

From-SVN: r236814
2016-05-27 12:05:59 +00:00
Dominik Vogt 6a813c9659 combine: Take known zero bits into account when checking extraction.
gcc/ChangeLog:

	* combine.c (make_compound_operation): Take known zero bits into
	account when checking for possible zero_extend.

gcc/testsuite/ChangeLog:

	* gcc.dg/zero_bits_compound-1.c: New test.
	* gcc.dg/zero_bits_compound-2.c: New test.

From-SVN: r236813
2016-05-27 11:38:59 +00:00
Kyrylo Tkachov 4bc72f35f3 [AArch64] Simplify ashl<mode>3 expander for SHORT modes
* config/aarch64/aarch64.md (ashl<mode>3, SHORT modes):
	Use const_int_operand for operand 2 predicate.  Simplify expand code
	as a result.

From-SVN: r236812
2016-05-27 11:21:46 +00:00
Ilya Enkovich 0561bcfb82 re PR middle-end/71279 (ICE on trunk gcc with knl target)
gcc/

	PR middle-end/71279
	* fold-const.c (fold_ternary_loc): Don't fold VEC_COND_EXPR
	into comparison.

gcc/testsuite/

	PR middle-end/71279
	* gcc.dg/pr71279.c: New test.

From-SVN: r236810
2016-05-27 10:39:40 +00:00
Kyrylo Tkachov 2aca250481 [AArch64] Delete obsolete CC_ZESWP and CC_SESWP CC modes
* config/aarch64/aarch64-modes.def (CC_ZESWP, CC_SESWP): Delete.
	* config/aarch64/aarch64.c (aarch64_select_cc_mode): Remove condition
	that returns CC_SESWPmode and CC_ZESWPmode.
	(aarch64_get_condition_code_1): Remove handling of CC_SESWPmode
	and CC_SESWPmode.
	(aarch64_rtx_costs): Likewise.

From-SVN: r236809
2016-05-27 08:42:01 +00:00
Michael Meissner 2131632019 rs6000.c (rs6000_emit_p9_fp_minmax): New function for ISA 3.0 min/max support.
[gcc]
2016-05-26  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/rs6000.c (rs6000_emit_p9_fp_minmax): New function
	for ISA 3.0 min/max support.
	(rs6000_emit_p9_fp_cmove): New function for ISA 3.0 floating point
	conditional move support.
	(rs6000_emit_cmove): Call rs6000_emit_p9_fp_minmax and
	rs6000_emit_p9_fp_cmove if the ISA 3.0 instructions are
	available.
	* config/rs6000/rs6000.md (SFDF2): New iterator to allow doing
	conditional moves where the comparison type is different from move
	type.
	(fp_minmax): New code iterator for smin/smax.
	(minmax): New code attributes for min/max.
	(SMINMAX): Likewise.
	(smax<mode>3): Combine min, max insns into one insn using the
	fp_minmax code iterator.  Add support for ISA 3.0 min/max
	instructions that don't need -ffast-math.
	(s<minmax><mode>3): Likewise.
	(smax<mode>3_vsx): Likewise.
	(smin<mode>3): Likewise.
	(s<minmax><mode>3_vsx): Likewise.
	(smin<mode>3_vsx): Likewise.
	(pre-VSX min/max splitters): Likewise.
	(s<minmax><mode>3_fpr): Likewise.
	(movsfcc): Rewrite floating point conditional moves to combine
	SFmode/DFmode into a single insn.
	(mov<mode>cc): Likewise.
	(movdfcc): Likewise.
	(fselsfsf4): Combine FSEL cases into a single insn, using SFDF and
	SFDF2 iterators to handle all combinations.
	(fseldfsf4): Likewise.
	(fsel<SFDF:mode><SFDF2:mode>4): Likewise.
	(fseldfdf4): Likewise.
	(fselsfdf4): Likewise.
	(mov<SFDF:mode><SFDF2:mode>cc_p9): Add support for the ISA 3.0
	comparison instructions that set a 0/-1 mask, and use it for
	floating point conditional move via XXSEL.
	(fpmask<mode>): Likewise.
	(xxsel<mode>): Likewise.
	* config/rs6000/predicates.md (min_max_operator): Delete, no
	longer used.
	(fpmask_comparison_operaton): New insn for ISA 3.0 comparison
	instructions that generate a 0/-1 mask for use with XXSEL.
	* config/rs6000/rs6000.h (TARGET_MINMAX_SF): New helper macros to
	say whether floating point min/max is available, either through
	FSEL, ISA 2.06 min/max, and ISA 3.0 min/max instrucitons.
	(TARGET_MINMAX_DF): Likewise.

[gcc/testsuite]
2016-05-26  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/p9-minmax-1.c: New tests for ISA 3.0
	floating point min/max/comparison instructions.
	* gcc.target/powerpc/p9-minmax-2.c: Likewise.

From-SVN: r236795
2016-05-26 21:38:19 +00:00
Alan Modra c38c11a10a ira.c bb_loop_depth
PR rtl-optimization/71275
	* ira.c (ira): Call loop_optimizer_init to set up bb_loop_depth
	for update_equiv_regs and combine_and_move_insns.

From-SVN: r236789
2016-05-27 03:08:36 +09:30
Uros Bizjak e070095c0c i386.md (*movqi_internal): Use if_then_else or cond RTXes to calculate attribute value.
* config/i386/i386.md (*movqi_internal) <attr "isa">: Use
	if_then_else or cond RTXes to calculate attribute value.
	* config/i386/mmx.md (*vec_extractv2sf_1) <attr "prefix_rep">: Ditto.
	<attr "length_immediate>: Ditto.
	(*vec_extractv2sf_1) <attr "length_immediate">: Ditto.
	* config/i386/sse.md (sse_loadlps) <attr "length_immediate">: Ditto.
	(*vec_concatv2sf_sse4_1) <attr "isa">: Ditto.
	<attr "type">: Ditto.
	<attr "prefix_data16">: Ditto.
	<attr "prefix_extra">: Ditto.
	<attr "length_immediate">: Ditto.
	<attr "prefix">: Ditto.
	(vec_set<mode>_0) <attr "isa">: Ditto.
	<attr "prefix_extra">: Ditto.
	<attr "length_immediate">: Ditto.
	<attr "prefix">: Ditto.
	(*vec_interleave_highv2df) <attr "prefix_data16">: Ditto.
	(*vec_interleave_lowv2df) <attr "prefix_data16">: Ditto.
	(sse2_storelpd) <attr "prefix_data16">: Ditto.
	(sse2_loadhpd) <attr "prefix_data16">: Ditto.
	(sse2_loadlpd) <attr "prefix_data16">: Ditto.
	<attr "length_immediate">: Ditto.
	<attr "prefix">: Ditto.
	(sse2_movsd) <attr "length_immediate">: Ditto.
	<attr "prefix">: Ditto.
	(vec_concatv2df)  <attr "isa">: Ditto.
	<attr "prefix">: Ditto.
	(*vec_extractv4si) <attr "prefix_extra">: Ditto.
	(*vec_extractv2di_1) <attr "isa">: Ditto.
	<attr "type">: Ditto.
	<attr "length_immediate">: Ditto.
	<attr "prefix_rex">: Ditto.
	<attr "prefix_extra">: Ditto.
	(*vec_concatv2si_sse4_1) <attr "type">: Ditto.
	<attr "prefix_extra">: Ditto.
	<attr "length_immediate">: Ditto.
	(vec_concatv2di) <attr "isa">: Ditto.
	<attr "prefix_extra">: Ditto.
	<attr "length_immediate">: Ditto.
	<attr "prefix">: Ditto.

From-SVN: r236787
2016-05-26 19:32:55 +02:00
Martin Liska 8d18b6df04 IVOPTS: make comp_cost in a more c++ fashion.
* tree-ssa-loop-ivopts.c (comp_cost::infinite_cost_p): New
	function.
	(operator+): Likewise.
	(operator-): Likewise.
	(comp_cost::operator+=): Likewise.
	(comp_cost::operator-=): Likewise.
	(comp_cost::operator/=): Likewise.
	(comp_cost::operator*=): Likewise.
	(operator<): Likewise.
	(operator==): Likewise.
	(operator<=): Likewise.
	(new_cost): Remove.
	(infinite_cost_p): Likewise.
	(add_costs): Likewise.
	(sub_costs): Likewise.
	(compare_costs): Likewise.
	(set_group_iv_cost): Use the newly introduced functions.
	(get_address_cost): Likewise.
	(get_shiftadd_cost): Likewise.
	(force_expr_to_var_cost): Likewise.
	(split_address_cost): Likewise.
	(ptr_difference_cost): Likewise.
	(difference_cost): Likewise.
	(get_computation_cost_at): Likewise.
	(determine_group_iv_cost_generic): Likewise.
	(determine_group_iv_cost_address): Likewise.
	(determine_group_iv_cost_cond): Likewise.
	(autoinc_possible_for_pair): Likewise.
	(determine_group_iv_costs): Likewise.
	(cheaper_cost_pair): Likewise.
	(iv_ca_recount_cost): Likewise.
	(iv_ca_set_no_cp): Likewise.
	(iv_ca_set_cp): Likewise.
	(iv_ca_cost): Likewise.
	(iv_ca_new): Likewise.
	(iv_ca_dump): Likewise.
	(iv_ca_narrow): Likewise.
	(iv_ca_prune): Likewise.
	(iv_ca_replace): Likewise.
	(try_add_cand_for): Likewise.
	(try_improve_iv_set): Likewise.
	(find_optimal_iv_set): Likewise.

From-SVN: r236785
2016-05-26 17:12:32 +00:00
Richard Sandiford b3d2acb6dc Fix ivopts estimates for internal functions
tree-ssa-loop-ivopts.c:loop_body_includes_call was treating internal
calls such as IFN_SQRT as clobbering all caller-saved registers, which
I don't think is appropriate for any current internal function.

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

gcc/
	* tree-ssa-loop-ivopts.c (loop_body_includes_call): Don't assume
	that internal functions will clobber all caller-saved registers.

From-SVN: r236780
2016-05-26 15:49:22 +00:00
Wilco Dijkstra e79136e41a GCC expands switch statements in a very simplistic way and tries to use a table...
GCC expands switch statements in a very simplistic way and tries to use a table
expansion even when it is a bad idea for performance or codesize.
GCC typically emits extremely sparse tables that contain mostly default entries
(something which currently cannot be tuned by backends).  Additionally the
computation of the minimum/maximum label offsets is too simplistic so the
tables are often twice as large as necessary.

The cost of a table switch is significant due to the setup overhead, the table
lookup (which due to being sparse and large adds unnecessary cachemisses)
and hard to predict indirect jump.  Therefore it is best to avoid using a table
unless there are many real case labels.

This patch fixes that by setting the default aarch64_case_values_threshold to
16 when the per-CPU tuning is not set.  On SPEC2006 this improves the switch
heavy benchmarks GCC and perlbench both in performance (1-2%) as well as size
(0.5-1% smaller).

    gcc/
	* config/aarch64/aarch64.c (aarch64_case_values_threshold):
	Return a better case_values_threshold when optimizing.

From-SVN: r236771
2016-05-26 12:25:51 +00:00
Wilco Dijkstra 5e4d7abeee SIMD operations like combine prefer to have their operands in FP registers,
so increase the cost of integer registers slightly to avoid unnecessary int<->FP
moves. This improves register allocation of scalar SIMD operations.

        * config/aarch64/aarch64-simd.md (aarch64_combinez):
        Add ? to integer variant.
        (aarch64_combinez_be): Likewise.

From-SVN: r236770
2016-05-26 12:12:20 +00:00
Jakub Jelinek 2116e19f83 sse.md (*vcvtps2ph_store<mask_name>): Use v constraint instead of x constraint.
* config/i386/sse.md (*vcvtps2ph_store<mask_name>): Use v constraint
	instead of x constraint.
	(vcvtps2ph256<mask_name>): Likewise.

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

From-SVN: r236765
2016-05-26 10:45:49 +02:00
Jakub Jelinek 305aef090c sse.md (*ssse3_palignr<mode>_perm): Add avx512bw alternative.
* config/i386/sse.md (*ssse3_palignr<mode>_perm): Add avx512bw
	alternative.  Formatting fix.

	* gcc.target/i386/avx512bw-vpalignr-4.c: New test.
	* gcc.target/i386/avx512vl-vpalignr-4.c: New test.

From-SVN: r236764
2016-05-26 10:44:16 +02:00
Jakub Jelinek c7501e00ef * config/i386/sse.md
(<mask_codefor>avx512vl_shuf_<shuffletype>32x4_1<mask_name>): Rename
	to ...
	(avx512vl_shuf_<shuffletype>32x4_1<mask_name>): ... this.
	(*avx_vperm_broadcast_v4sf): Use v constraint instead of x.  Use
	maybe_evex prefix instead of vex.
	(*avx_vperm_broadcast_<mode>): Use v constraint instead of x.  Handle
	EXT_REX_SSE_REG_P (op0) case in the splitter.

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

From-SVN: r236763
2016-05-26 10:43:17 +02:00
Jeff Law 8af01c66fb re PR tree-optimization/71272 (internal compiler error: in operator[], through tree-ssa-threadupdate.c:1981)
PR tree-optimization/71272
	* tree-ssa-threadbackward.c (convert_and_register_jump_thread_path):
	Update comments.  Add test for empty path.

	PR tree-optimization/71272
	* gcc.c-torture/compile/pr71272.c: new test.

From-SVN: r236755
2016-05-25 16:25:35 -06:00
Bill Seurer f9d6ce734d This patch adds support for the vec_cmpne altivec builtins from the Power...
This patch adds support for the vec_cmpne altivec builtins from the Power
Architecture 64-Bit ELF V2 ABI OpenPOWER ABI for Linux Supplement (16 July
2015 Version 1.1). There are many of the builtins that are missing and this
is part of a series of patches to add them.

There aren't instructions for vec_cmpne so the output code is built from other
built-ins that do have instructions which in this case is the following.

vec_cmpneq (va, vb) == vec_nor (vec_cmpeq (va, vb), vec_cmpeq (va, vb))

The new test cases are executable tests which verify that the generated
code produces expected values. C macros were used so that the same
test case could be used for both the signed and unsigned versions of various
basic types. A separate executable test case is used for the long long versions
of vec_cmpne because of some differences in loading and storing the vectors.

[gcc]

2016-05-25  Bill Seurer  <seurer@linux.vnet.ibm.com>

	* config/rs6000/altivec.h (vec_cmpne): Add #define for vec_cmpne.
	* config/rs6000/rs6000-builtin.def (vec_cmpne): Add vec_cmpne as a
	special case builtin.
	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Add
	code for ALTIVEC_BUILTIN_VEC_CMPNE.
	* config/rs6000/rs6000.c (altivec_init_builtins): Add definition
	for __builtin_vec_cmpne.

[gcc/testsuite]

2016-05-25  Bill Seurer  <seurer@linux.vnet.ibm.com>

	* gcc.target/powerpc/vec-cmpne.c: New test.
	* gcc.target/powerpc/vec-cmpne-long.c: New test.

From-SVN: r236753
2016-05-25 21:55:22 +00:00
Eric Botcazou a88a7b22c9 tree-ssa-phiopt.c (factor_out_conditional_conversion): Remove redundant test and bail out if the type of the new operand is not a...
* tree-ssa-phiopt.c (factor_out_conditional_conversion): Remove
	redundant test and bail out if the type of the new operand is not
	a GIMPLE register type after stripping a VIEW_CONVERT_EXPR.

From-SVN: r236748
2016-05-25 20:41:01 +00:00
Uros Bizjak c6e434f5b7 re PR target/70738 (Add -mgeneral-regs-only option)
PR target/70738
	* common/config/i386/i386-common.c
	(OPTION_MASK_ISA_GENERAL_REGS_ONLY_UNSET): New.
	(ix86_handle_option) <case OPT_mgeneral_regs_only>: Disable
	MPX, MMX, SSE and x87 instructions for -mgeneral-regs-only.
	* config/i386/i386.opt (ix86_target_flags): Add new Variable.
	(-mgeneral-regs-only): Add new option.
	* config/i386/i386.c (ix86_option_override_internal): Don't enable
	x87 instructions if only general registers are allowed.
	(ix86_target_string): Add ix86_flags argument. Handle additional
	flags options through ix86_flags argument.  Update all callers.
	* doc/invoke.texi: Document -mgeneral-regs-only.

testsuite/ChangeLog:

	PR target/70738
	* gcc.target/i386/pr70738-1.c: New test.
	* 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: r236738
2016-05-25 20:58:49 +02:00
Kyrylo Tkachov 5c42d34143 [RTL ifcvt] PR rtl-optimization/66940: Avoid signed overflow in noce_get_alt_condition
PR rtl-optimization/66940
	* ifcvt.c (noce_get_alt_condition): Check that incrementing or
	decrementing desired_val will not overflow before performing these
	operations.

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

From-SVN: r236728
2016-05-25 15:53:21 +00:00
Ilya Verbin bf9a1a07ad AVX-512F: Add vectorizer support builtins
gcc/
	* config/i386/i386-builtin-types.def: Add V16SI_FTYPE_V16SF,
	V8DF_FTYPE_V8DF_ROUND, V16SF_FTYPE_V16SF_ROUND, V16SI_FTYPE_V16SF_ROUND.
	* config/i386/i386.c (enum ix86_builtins): Add
	IX86_BUILTIN_CVTPS2DQ512_MASK, IX86_BUILTIN_FLOORPS512,
	IX86_BUILTIN_FLOORPD512, IX86_BUILTIN_CEILPS512, IX86_BUILTIN_CEILPD512,
	IX86_BUILTIN_TRUNCPS512, IX86_BUILTIN_TRUNCPD512,
	IX86_BUILTIN_CVTPS2DQ512, IX86_BUILTIN_VEC_PACK_SFIX512,
	IX86_BUILTIN_FLOORPS_SFIX512, IX86_BUILTIN_CEILPS_SFIX512,
	IX86_BUILTIN_ROUNDPS_AZ_SFIX512.
	(builtin_description bdesc_args): Add __builtin_ia32_floorps512,
	__builtin_ia32_ceilps512, __builtin_ia32_truncps512,
	__builtin_ia32_floorpd512, __builtin_ia32_ceilpd512,
	__builtin_ia32_truncpd512, __builtin_ia32_cvtps2dq512,
	__builtin_ia32_vec_pack_sfix512, __builtin_ia32_roundps_az_sfix512,
	__builtin_ia32_floorps_sfix512, __builtin_ia32_ceilps_sfix512.
	Change IX86_BUILTIN_CVTPS2DQ512 to IX86_BUILTIN_CVTPS2DQ512_MASK for
	__builtin_ia32_cvtps2dq512_mask.
	(ix86_expand_args_builtin): Handle V8DF_FTYPE_V8DF_ROUND,
	V16SF_FTYPE_V16SF_ROUND, V16SI_FTYPE_V16SF_ROUND, V16SI_FTYPE_V16SF.
	(ix86_builtin_vectorized_function): Handle builtins mentioned above.
	* config/i386/sse.md
	(<mask_codefor>avx512f_fix_notruncv16sfv16si<mask_name><round_name>):
	Rename to ...
	(avx512f_fix_notruncv16sfv16si<mask_name><round_name>): ... this.
	(<mask_codefor>avx512f_cvtpd2dq512<mask_name><round_name>): Rename
	to ...
	(avx512f_cvtpd2dq512<mask_name><round_name>): ... this.
	(avx512f_vec_pack_sfix_v8df): New define_expand.
	(avx512f_roundpd512): Rename to ...
	(avx512f_round<castmode>512): ... this.  Change iterator.
	(avx512f_roundps512_sfix): New define_expand.
	(round<mode>2_sfix): Change iterator.
gcc/testsuite/
	* gcc.target/i386/avx512f-ceil-vec-1.c: New test.
	* gcc.target/i386/avx512f-ceil-vec-2.c: New test.
	* gcc.target/i386/avx512f-ceilf-sfix-vec-1.c: New test.
	* gcc.target/i386/avx512f-ceilf-sfix-vec-2.c: New test.
	* gcc.target/i386/avx512f-ceilf-vec-1.c: New test.
	* gcc.target/i386/avx512f-ceilf-vec-2.c: New test.
	* gcc.target/i386/avx512f-floor-vec-1.c: New test.
	* gcc.target/i386/avx512f-floor-vec-2.c: New test.
	* gcc.target/i386/avx512f-floorf-sfix-vec-1.c: New test.
	* gcc.target/i386/avx512f-floorf-sfix-vec-2.c: New test.
	* gcc.target/i386/avx512f-floorf-vec-1.c: New test.
	* gcc.target/i386/avx512f-floorf-vec-2.c: New test.
	* gcc.target/i386/avx512f-rint-sfix-vec-1.c: New test.
	* gcc.target/i386/avx512f-rint-sfix-vec-2.c: New test.
	* gcc.target/i386/avx512f-rintf-sfix-vec-1.c: New test.
	* gcc.target/i386/avx512f-rintf-sfix-vec-2.c: New test.
	* gcc.target/i386/avx512f-round-sfix-vec-1.c: New test.
	* gcc.target/i386/avx512f-round-sfix-vec-2.c: New test.
	* gcc.target/i386/avx512f-roundf-sfix-vec-1.c: New test.
	* gcc.target/i386/avx512f-roundf-sfix-vec-2.c: New test.
	* gcc.target/i386/avx512f-trunc-vec-1.c: New test.
	* gcc.target/i386/avx512f-trunc-vec-2.c: New test.
	* gcc.target/i386/avx512f-truncf-vec-1.c: New test.
	* gcc.target/i386/avx512f-truncf-vec-2.c: New test.

From-SVN: r236709
2016-05-25 15:08:14 +00:00
Nick Clifton e56989ffae msp430.c (msp430_attr): Produce an error if a static interrupt handler is detected.
* config/msp430/msp430.c (msp430_attr): Produce an error if a
	static interrupt handler is detected.
	* config/msp430/msp430.h (LIB_SPEC): Do not use msp430.ld as the
	default linker script.
	* config/msp430/msp430.md (movpsihi2_lo): New pattern for loading
	the low part of a symbolic pointer.

From-SVN: r236704
2016-05-25 14:31:46 +00:00
Richard Biener 3072d4ea29 re PR tree-optimization/71261 (Trunk GCC hangs on knl and broadwell targets)
2016-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71261
	* tree-if-conv.c (ifcvt_split_def_stmt): Walk uses on the
	interesting stmt instead of immediate uses when looking
	for the use operand to replace.

	* c-c++-common/torture/pr71261.c: New testcase.

From-SVN: r236701
2016-05-25 11:49:03 +00:00
Martin Liska a86f2f6f94 Fix dump output typo
* ipa-inline.c (edge_badness): Use 'w/' instead of 'w'.

From-SVN: r236700
2016-05-25 11:17:23 +00:00
Richard Biener e412ece4ce re PR tree-optimization/71264 (ICE in convert_move)
2016-05-25  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/71264
	* tree-vect-stmts.c (vect_init_vector): Properly deal with
	vector type val.

	* gcc.dg/vect/pr71264.c: New testcase.

From-SVN: r236699
2016-05-25 10:57:53 +00:00
Martin Liska 6aa1abe5f2 re PR tree-optimization/71239 (ICE in operand_equal_p (fold-const.c:2769))
Fix PR tree-optimization/71239.

	* g++.dg/pr71239.C: New test.
	PR tree-optimization/71239
	* tree.c (array_at_struct_end_p): Do not call operand_equal_p
	if DECL_SIZE is NULL.

From-SVN: r236696
2016-05-25 09:10:16 +00:00
Richard Biener 6ca8e33c66 timevar.def (TV_TREE_LOOP_IFCVT): Add.
2016-05-25  Richard Biener  <rguenther@suse.de>

	* timevar.def (TV_TREE_LOOP_IFCVT): Add.
	* tree-if-conv.c (pass_data_if_conversion): Use it.

From-SVN: r236695
2016-05-25 08:52:22 +00:00
Bernd Edlinger 65c74eb276 cgraph.c (cgraph_node::get_availability): Fix typo in comment.
* cgraph.c (cgraph_node::get_availability): Fix typo in comment.
* symtab.c (symtab_node::binds_to_current_def_p): Likewise.
* varpool.c (varpool_node::get_availability): Likewise.

From-SVN: r236690
2016-05-25 07:38:32 +00:00
Michael Meissner c3eaf15aae altivec.md (VNEG iterator): New iterator for VNEGW/VNEGD instructions.
[gcc]
2016-05-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/altivec.md (VNEG iterator): New iterator for
	VNEGW/VNEGD instructions.
	(p9_neg<mode>2): New insns for ISA 3.0 VNEGW/VNEGD.
	(neg<mode>2): Add expander for V2DImode added in ISA 2.06, and
	support for ISA 3.0 VNEGW/VNEGD instructions.

[gcc/testsuite]
2016-05-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/p9-vneg.c: New test for ISA 3.0 VNEGW/VNEGD
	instructions.

From-SVN: r236679
2016-05-24 23:19:08 +00:00
Cesar Philippidis e46c777050 c-parser.c (c_parser_oacc_declare): Add support for GOMP_MAP_FIRSTPRIVATE_POINTER.
gcc/c/
	* c-parser.c (c_parser_oacc_declare): Add support for
	GOMP_MAP_FIRSTPRIVATE_POINTER.
	* c-typeck.c (handle_omp_array_sections_1): Replace bool is_omp
	argument with enum c_omp_region_type ort.
	(handle_omp_array_sections): Likewise.  Update call to
	handle_omp_array_sections_1.
	(c_finish_omp_clauses): Add specific errors and warning messages for
	OpenACC.  Use firsrtprivate pointers for OpenACC subarrays.  Update
	call to handle_omp_array_sections.

	gcc/cp/
	* parser.c (cp_parser_oacc_declare): Add support for
	GOMP_MAP_FIRSTPRIVATE_POINTER.
	* semantics.c (handle_omp_array_sections_1): Replace bool is_omp
	argument with enum c_omp_region_type ort.  Don't privatize OpenACC
	non-static members.
	(handle_omp_array_sections): Replace bool is_omp argument with enum
	c_omp_region_type ort.  Update call to handle_omp_array_sections_1.
	(finish_omp_clauses): Add specific errors and warning messages for
	OpenACC.  Use firsrtprivate pointers for OpenACC subarrays.  Update
	call to handle_omp_array_sections.

	gcc/
	* gimplify.c (omp_notice_variable): Use zero-length arrays for data
	pointers inside OACC_DATA regions.
	(gimplify_scan_omp_clauses): Prune firstprivate clause associated
	with OACC_DATA, OACC_ENTER_DATA and OACC_EXIT data regions.
	(gimplify_adjust_omp_clauses): Fix typo in comment.

	gcc/testsuite/
	* c-c++-common/goacc/data-clause-duplicate-1.c: Adjust test.
	* c-c++-common/goacc/deviceptr-1.c: Likewise.
	* c-c++-common/goacc/kernels-alias-3.c: Likewise.
	* c-c++-common/goacc/kernels-alias-4.c: Likewise.
	* c-c++-common/goacc/kernels-alias-5.c: Likewise.
	* c-c++-common/goacc/kernels-alias-8.c: Likewise.
	* c-c++-common/goacc/kernels-alias-ipa-pta-3.c: Likewise.
	* c-c++-common/goacc/pcopy.c: Likewise.
	* c-c++-common/goacc/pcopyin.c: Likewise.
	* c-c++-common/goacc/pcopyout.c: Likewise.
	* c-c++-common/goacc/pcreate.c: Likewise.
	* c-c++-common/goacc/pr70688.c: New test.
	* c-c++-common/goacc/present-1.c: Adjust test.
	* c-c++-common/goacc/reduction-5.c: Likewise.
	* g++.dg/goacc/data-1.C: New test.

	libgomp/
	* oacc-mem.c (acc_malloc): Update handling of shared-memory targets.
	(acc_free): Likewise.
	(acc_memcpy_to_device): Likewise.
	(acc_memcpy_from_device): Likewise.
	(acc_deviceptr): Likewise.
	(acc_hostptr): Likewise.
	(acc_is_present): Likewise.
	(acc_map_data): Likewise.
	(acc_unmap_data): Likewise.
	(present_create_copy): Likewise.
	(delete_copyout): Likewise.
	(update_dev_host): Likewise.
	* testsuite/libgomp.oacc-c-c++-common/asyncwait-1.c: Remove xfail.
	* testsuite/libgomp.oacc-c-c++-common/data-2-lib.c: New test.
	* testsuite/libgomp.oacc-c-c++-common/data-2.c: Adjust test.
	* testsuite/libgomp.oacc-c-c++-common/data-3.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/enter_exit-lib.c: New test.
	* testsuite/libgomp.oacc-c-c++-common/lib-13.c: Adjust test so that
	it only runs on nvptx targets.
	* testsuite/libgomp.oacc-c-c++-common/lib-14.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-15.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-16.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-17.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-18.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-20.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-21.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-22.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-23.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-24.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-25.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-28.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-29.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-30.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-34.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-42.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-43.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-44.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-47.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-48.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-52.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-53.c: Likewise.
	* testsuite/libgomp.oacc-c-c++-common/lib-54.c: Likewise.

From-SVN: r236678
2016-05-24 15:54:21 -07:00
Michael Meissner 4bfc9db7e6 altivec.md (VParity): New mode iterator for vector parity built-in functions.
[gcc]
2016-05-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/altivec.md (VParity): New mode iterator for vector
	parity built-in functions.
	(p9v_ctz<mode>2): Add support for ISA 3.0 vector count trailing
	zeros.
	(p9v_parity<mode>2): Likewise.
	* config/rs6000/vector.md (VEC_IP): New mode iterator for vector
	parity.
	(ctz<mode>2): ISA 3.0 expander for vector count trailing zeros.
	(parity<mode>2): ISA 3.0 expander for vector parity.
	* config/rs6000/rs6000-builtin.def (BU_P9_MISC_1): New macros for
	power9 built-ins.
	(BU_P9_64BIT_MISC_0): Likewise.
	(BU_P9_MISC_0): Likewise.
	(BU_P9V_AV_1): Likewise.
	(BU_P9V_AV_2): Likewise.
	(BU_P9V_AV_3): Likewise.
	(BU_P9V_AV_P): Likewise.
	(BU_P9V_VSX_1): Likewise.
	(BU_P9V_OVERLOAD_1): Likewise.
	(BU_P9V_OVERLOAD_2): Likewise.
	(BU_P9V_OVERLOAD_3): Likewise.
	(VCTZB): Add vector count trailing zeros support.
	(VCTZH): Likewise.
	(VCTZW): Likewise.
	(VCTZD): Likewise.
	(VPRTYBD): Add vector parity support.
	(VPRTYBQ): Likewise.
	(VPRTYBW): Likewise.
	(VCTZ): Add overloaded vector count trailing zeros support.
	(VPRTYB): Add overloaded vector parity support.
	* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
	overloaded vector count trailing zeros and parity instructions.
	* config/rs6000/rs6000.md (wd mode attribute): Add V1TI and TI for
	vector parity support.
	* config/rs6000/altivec.h (vec_vctz): Add ISA 3.0 vector count
	trailing zeros support.
	(vec_cntlz): Likewise.
	(vec_vctzb): Likewise.
	(vec_vctzd): Likewise.
	(vec_vctzh): Likewise.
	(vec_vctzw): Likewise.
	(vec_vprtyb): Add ISA 3.0 vector parity support.
	(vec_vprtybd): Likewise.
	(vec_vprtybw): Likewise.
	(vec_vprtybq): Likewise.
	* doc/extend.texi (PowerPC AltiVec Built-in Functions): Document
	the ISA 3.0 vector count trailing zeros and vector parity built-in
	functions.

[gcc/testsuite]
2016-05-24  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/p9-vparity.c: New file to check ISA 3.0
	vector parity built-in functions.
	* gcc.target/powerpc/ctz-3.c: New file to check ISA 3.0 vector
	count trailing zeros automatic vectorization.
	* gcc.target/powerpc/ctz-4.c: New file to check ISA 3.0 vector
	count trailing zeros built-in functions.

From-SVN: r236677
2016-05-24 22:45:45 +00:00
Kugan Vivekanandarajah 2bc145afaa tree-ssa-reassoc.c (sort_by_operand_rank): Skip checking gimple_bb when there is stmt_to_insert.
gcc/ChangeLog:

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

	* tree-ssa-reassoc.c (sort_by_operand_rank): Skip checking gimple_bb
	when there is stmt_to_insert.


gcc/testsuite/ChangeLog:

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

	* gcc.dg/tree-ssa/reassoc-44.c: New test.

From-SVN: r236673
2016-05-24 22:29:27 +00:00
Martin Sebor f65e97fd3d PR c++/71147 - [6 Regression] Flexible array member wrongly rejected in template
gcc/ChangeLog:
2016-05-24  Martin Sebor  <msebor@redhat.com>

	PR c++/71147
	* gcc/tree.h (complete_or_array_type_p): New inline function.

gcc/testsuite/ChangeLog:
2016-05-24  Martin Sebor  <msebor@redhat.com>

	PR c++/71147
	* g++.dg/ext/flexary16.C: New test.

gcc/cp/ChangeLog:
2016-05-24  Martin Sebor  <msebor@redhat.com>

	PR c++/71147
	* decl.c (layout_var_decl, grokdeclarator): Use complete_or_array_type_p.
	* pt.c (instantiate_class_template_1): Try to complete the element
	type of a flexible array member.
	(can_complete_type_without_circularity): Handle arrays of unknown bound.
	* typeck.c (complete_type): Also complete the type of the elements of
	arrays with an unspecified bound.

From-SVN: r236664
2016-05-24 14:29:36 -06:00
Jakub Jelinek 8e0dc0549a i386.h (TARGET_AVOID_4BYTE_PREFIXES): Define.
* config/i386/i386.h (TARGET_AVOID_4BYTE_PREFIXES): Define.
	* config/i386/constraints.md (Yr): Test TARGET_AVOID_4BYTE_PREFIXES
	rather than X86_TUNE_AVOID_4BYTE_PREFIXES.

From-SVN: r236662
2016-05-24 21:12:42 +02:00
Jakub Jelinek a0caac985d sse.md (<sse4_1>_round<ssemodesuffix><avxsizesuffix>): Limit 1st alternative to noavx isa...
* config/i386/sse.md (<sse4_1>_round<ssemodesuffix><avxsizesuffix>):
	Limit 1st alternative to noavx isa, split 2nd alternative into one
	noavx and one avx alternative, use *x and Bm in the former and
	x and m in the latter.

From-SVN: r236661
2016-05-24 21:12:06 +02:00
Jakub Jelinek 7733939d25 sse.md (vec_set<mode>_0): Use sse4_noavx isa instead of sse4 for the first alternative...
* config/i386/sse.md (vec_set<mode>_0): Use sse4_noavx isa instead
	of sse4 for the first alternative, drop %v from the template
	and d operand modifier.  Split second alternative into one sse4_noavx
	and one avx alternative, use *x instead of *v in the former and v
	instead of *v in the latter.
	(*sse4_1_extractps): Use noavx isa instead of * for the first
	alternative, drop %v from the template.  Split second alternative into
	one noavx and one avx alternative, use *x instead of *v in the
	former and v instead of *v in the latter.
	(<vi8_sse4_1_avx2_avx512>_movntdqa): Guard the first 2 alternatives
	with noavx and the last one with avx.
	(sse4_1_phminposuw): Guard first alternative with noavx isa,
	split the second one into one noavx and one avx alternative,
	use *x and Bm in the former and x and m in the latter one.
	(<sse4_1>_ptest<mode>): Use noavx instead of * for the first two
	alternatives.

From-SVN: r236660
2016-05-24 21:11:33 +02:00
Jakub Jelinek 520c86db4c sse.md (sse4_1_<code>v8qiv8hi2<mask_name>): Limit first two alternatives to noavx...
* config/i386/sse.md (sse4_1_<code>v8qiv8hi2<mask_name>): Limit
	first two alternatives to noavx, use *x instead of *v in the second
	one, add avx alternative without *.
	(sse4_1_<code>v4qiv4si2<mask_name>, sse4_1_<code>v4hiv4si2<mask_name>,
	sse4_1_<code>v2qiv2di2<mask_name>, sse4_1_<code>v2hiv2di2<mask_name>,
	sse4_1_<code>v2siv2di2<mask_name>): Likewise.

From-SVN: r236659
2016-05-24 21:10:55 +02:00