Commit Graph

147197 Commits

Author SHA1 Message Date
Trevor Saunders e97f62233f make side_effects a vec<rtx>
gcc/ChangeLog:

2016-07-06  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* var-tracking.c (struct adjust_mem_data): Make side_effects a vector.
	(adjust_mems): Adjust.
	(adjust_insn): Likewise.
	(prepare_call_arguments): Likewise.

From-SVN: r238066
2016-07-06 23:53:20 +00:00
Trevor Saunders 0777c850bf make stores rtx_insn_list a vec
gcc/ChangeLog:

2016-07-06  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* gcse.c (struct ls_expr): Make stores field a vector.
	(ldst_entry): Adjust.
	(free_ldst_entry): Likewise.
	(print_ldst_list): Likewise.
	(compute_ld_motion_mems): Likewise.
	(update_ld_motion_stores): Likewise.

From-SVN: r238065
2016-07-06 23:53:15 +00:00
Trevor Saunders 5c57642971 remove unused loads rtx_insn_list
gcc/ChangeLog:

2016-07-06  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* gcse.c (struct ls_expr): Remove loads field.
	(ldst_entry): Adjust.
	(free_ldst_entry): Likewise.
	(print_ldst_list): Likewise.
	(compute_ld_motion_mems): Likewise.

From-SVN: r238064
2016-07-06 23:53:10 +00:00
Trevor Saunders 6dbe4c9e24 make antic_stores a vec<rtx_insn *>
gcc/ChangeLog:

2016-07-06  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* store-motion.c (struct st_expr): Make antic_stores a vector.
	(st_expr_entry): Adjust.
	(free_st_expr_entry): Likewise.
	(print_store_motion_mems): Likewise.
	(find_moveable_store): Likewise.
	(compute_store_table): Likewise.
	(remove_reachable_equiv_notes): Likewise.
	(replace_store_insn): Likewise.
	(build_store_vectors): Likewise.

From-SVN: r238063
2016-07-06 23:53:04 +00:00
Ville Voutilainen 52e8622199 Implement std::any.
* include/Makefile.am: Add any and c++17_warning.h to exported headers.
	* include/Makefile.in: Likewise.
	* include/std/any: New.
	* testsuite/20_util/any/assign/1.cc: Likewise.
	* testsuite/20_util/any/assign/2.cc: Likewise.
	* testsuite/20_util/any/assign/self.cc: Likewise.
	* testsuite/20_util/any/cons/1.cc: Likewise.
	* testsuite/20_util/any/cons/2.cc: Likewise.
	* testsuite/20_util/any/cons/aligned.cc: Likewise.
	* testsuite/20_util/any/cons/nontrivial.cc: Likewise.
	* testsuite/20_util/any/misc/any_cast.cc: Likewise.
	* testsuite/20_util/any/misc/any_cast_neg.cc: Likewise.
	* testsuite/20_util/any/misc/any_cast_no_rtti.cc: Likewise.
	* testsuite/20_util/any/misc/swap.cc: Likewise.
	* testsuite/20_util/any/modifiers/1.cc: Likewise.
	* testsuite/20_util/any/observers/type.cc: Likewise.
	* testsuite/20_util/any/typedefs.cc: Likewise.

From-SVN: r238061
2016-07-07 01:33:20 +03:00
Ville Voutilainen 3042e70851 Add a new header for diagnosing the use of C++17 facilities in pre-C++17 modes.
From-SVN: r238058
2016-07-06 21:07:57 +03:00
Ian Lance Taylor f91f0e2173 escape: Implement tag phase.
Adds notes to function parameters which summarize the escape of that
    parameter with respect to the function's scope.
    
    Reviewed-on: https://go-review.googlesource.com/18443

From-SVN: r238057
2016-07-06 17:34:03 +00:00
Kyrylo Tkachov 5e03051768 [ARM] Add support for some ARMv8-A cores to driver-arm.c
* config/arm/driver-arm.c (arm_cpu_table): Add entries for cortex-a32,
	cortex-a35, cortex-a53, cortex-a57, cortex-a72, cortex-a73.

From-SVN: r238056
2016-07-06 16:22:47 +00:00
Yuri Rumyantsev 651afdb2d2 re PR tree-optimization/71518 (wrong code at -O3 on x86_64-linux-gnu in 64-bit mode (not in 32-bit mode))
gcc/

2016-07-06  Yuri Rumyantsev  <ysrumyan@gmail.com>

	PR tree-optimization/71518
	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Adjust
	misalign also for outer loops with negative step.

gcc/testsuite/

2016-07-06  Yuri Rumyantsev  <ysrumyan@gmail.com>

	PR tree-optimization/71518
        * gcc.dg/pr71518.c: New test.

From-SVN: r238055
2016-07-06 14:37:26 +00:00
Javier Miranda a5fa15228d sem_ch6.adb (Check_Inline_Pragma): if the subprogram has no spec then move its aspects to the internally built...
2016-07-06  Javier Miranda  <miranda@adacore.com>

	* sem_ch6.adb (Check_Inline_Pragma): if the subprogram has no spec
	then move its aspects to the internally built subprogram spec.

From-SVN: r238052
2016-07-06 15:45:55 +02:00
Yannick Moy 6dfc5e671f sem_ch6.adb (Analyze_Expression_Function): Mark body of expression function as ghost if needed when created.
2016-07-06  Yannick Moy  <moy@adacore.com>

	* sem_ch6.adb (Analyze_Expression_Function): Mark body of
	expression function as ghost if needed when created.
	* sem_prag.adb (Analyze_Pragma.Process_Inline.Set_Inline_Flags):
	Remove special case.

From-SVN: r238051
2016-07-06 15:41:20 +02:00
Arnaud Charlet d030f3a451 [multiple changes]
2016-07-06  Arnaud Charlet  <charlet@adacore.com>

	* lib.adb (Check_Same_Extended_Unit): Complete previous change.
	* sem_intr.adb (Errint): New parameter Relaxed. Refine previous
	change to only disable errors selectively.
	* sem_util.adb: minor style fix in object declaration

2016-07-06  Yannick Moy  <moy@adacore.com>

	* sem_warn.adb (Check_Infinite_Loop_Warning.Find_Var): Special case a
	call to a volatile function, so that it does not lead to a warning in
	that case.

2016-07-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_ch12.adb, sem_ch4.adb, sem_ch6.adb: Minor reformatting.

2016-07-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* gnat1drv.adb: Code clean up. Do not emit any
	code generation errors when the unit is ignored Ghost.

2016-07-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_eval.adb (Check_Non_Static_Context): If the expression
	is a real literal of a floating point type that is part of a
	larger expression and is not a static expression, transform it
	into a machine number now so that the rest of the computation,
	even if other components are static, is not evaluated with
	extra precision.

2016-07-06  Javier Miranda  <miranda@adacore.com>

	* sem_ch13.adb (Freeze_Entity_Checks): Undo previous patch and move the
	needed functionality to Analyze_Freeze_Generic_Entity.
	(Analyze_Freeze_Generic_Entity): If the entity is not already frozen
	and has delayed aspects then analyze them.

2016-07-06  Yannick Moy  <moy@adacore.com>

	* sem_prag.adb (Analyze_Pragma.Process_Inline.Set_Inline_Flags):
	Special case for unanalyzed body entity of ghost expression function.

From-SVN: r238050
2016-07-06 15:38:37 +02:00
Ville Voutilainen 6ffe854859 Implement LWG 2451, optional<T> should 'forward' T's implicit conversions.
Implement LWG 2451, optional<T> should 'forward' T's
	implicit conversions.
	* include/experimental/optional (__is_optional_impl, __is_optional):
	New.
	(optional()): Make constexpr and default.
	(optional(_Up&&), optional(const optional<_Up>&),
	optional(optional<_Up>&& __t): New.
	(operator=(_Up&&)): Constrain.
	(operator=(const optional<_Up>&), operator=(optional<_Up>&&)): New.
	* testsuite/experimental/optional/cons/value.cc:
	Add tests for the functionality added by LWG 2451.
	* testsuite/experimental/optional/cons/value_neg.cc: New.

From-SVN: r238049
2016-07-06 16:26:10 +03:00
Wilco Dijkstra e4bbb03767 This patch improves the accuracy of the Cortex-A53 integer scheduler...
This patch improves the accuracy of the Cortex-A53 integer scheduler, 
resulting in performance gains across a wide range of benchmarks.

    gcc/
	* config/arm/cortex-a53.md: Use final_presence_set for in-order.
	(cortex_a53_shift): Add mov_shift.
	(cortex_a53_shift_reg): Add new reservation for register shifts.
	(cortex_a53_alu): Remove bfm.
	(cortex_a53_alu_shift): Add bfm, remove mov_shift.
	(cortex_a53_alu_extr): Add new reservation for EXTR.
	(bypasses): Improve bypass modelling.

From-SVN: r238048
2016-07-06 13:17:23 +00:00
Javier Miranda 136236bd31 sem_ch7.adb (Analyze_Package_Specification): Insert its freezing nodes after the last declaration.
2016-07-06  Javier Miranda  <miranda@adacore.com>

	* sem_ch7.adb (Analyze_Package_Specification): Insert its
	freezing nodes after the last declaration. Needed to ensure
	that global entities referenced in aspects of frozen types are
	properly handled.
	* freeze.adb (Freeze_Entity): Minor code reorganization to ensure
	that freezing nodes of generic packages are handled.
	* sem_ch13.adb (Freeze_Entity_Checks): Handle N_Freeze_Generic nodes.
	* sem_ch12.adb (Save_References_In_Identifier): Handle selected
	components which denote a named number that is constant folded
	in the analyzed copy of the tree.

From-SVN: r238047
2016-07-06 15:14:25 +02:00
Wilco Dijkstra 9df9988191 Fix prototype in vst1Q_laneu64-1.c to unsigned char*.
gcc/testsuite/
	* gcc.target/arm/vst1Q_laneu64-1.c (foo): Use unsigned char*.

From-SVN: r238046
2016-07-06 13:02:53 +00:00
Arnaud Charlet bb072d1c17 [multiple changes]
2016-07-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_aggr.adb Remove with and use clauses for Exp_Ch11 and Inline.
	(Initialize_Array_Component): Protect the initialization
	statements in an abort defer / undefer block when the associated
	component is controlled.
	(Initialize_Record_Component): Protect the initialization statements
	in an abort defer / undefer block when the associated component is
	controlled.
	(Process_Transient_Component_Completion): Use Build_Abort_Undefer_Block
	to create an abort defer / undefer block.
	* exp_ch3.adb Remove with and use clauses for Exp_ch11 and Inline.
	(Default_Initialize_Object): Use Build_Abort_Undefer_Block to
	create an abort defer / undefer block.
	* exp_ch5.adb (Expand_N_Assignment_Statement): Mark an abort
	defer / undefer block as such.
	* exp_ch9.adb (Find_Enclosing_Context): Do not consider an abort
	defer / undefer block as a suitable context for an activation
	chain or a master.
	* exp_util.adb Add with and use clauses for Exp_Ch11.
	(Build_Abort_Undefer_Block): New routine.
	* exp_util.ads (Build_Abort_Undefer_Block): New routine.
	* sinfo.adb (Is_Abort_Block): New routine.
	(Set_Is_Abort_Block): New routine.
	* sinfo.ads New attribute Is_Abort_Block along with occurrences
	in nodes.
	(Is_Abort_Block): New routine along with pragma Inline.
	(Set_Is_Abort_Block): New routine along with pragma Inline.

2016-07-06  Justin Squirek  <squirek@adacore.com>

	* sem_ch4.adb (Analyze_One_Call): Add a conditional to handle
	disambiguation.

From-SVN: r238045
2016-07-06 14:40:07 +02:00
Arnaud Charlet 937e96763e [multiple changes]
2016-07-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* einfo.adb Flag252 is now used as Is_Finalized_Transient. Flag295
	is now used as Is_Ignored_Transient.
	(Is_Finalized_Transient): New routine.
	(Is_Ignored_Transient): New routine.
	(Is_Processed_Transient): Removed.
	(Set_Is_Finalized_Transient): New routine.
	(Set_Is_Ignored_Transient): New routine.
	(Set_Is_Processed_Transient): Removed.
	(Write_Entity_Flags): Output Flag252 and Flag295.
	* einfo.ads: New attributes Is_Finalized_Transient
	and Is_Ignored_Transient along with occurrences in
	entities. Remove attribute Is_Processed_Transient.
	(Is_Finalized_Transient): New routine along with pragma Inline.
	(Is_Ignored_Transient): New routine along with pragma Inline.
	(Is_Processed_Transient): Removed along with pragma Inline.
	(Set_Is_Finalized_Transient): New routine along with pragma Inline.
	(Set_Is_Ignored_Transient): New routine along with pragma Inline.
	(Set_Is_Processed_Transient): Removed along with pragma Inline.
	* exp_aggr.adb Add with and use clauses for Exp_Ch11 and Inline.
	(Build_Record_Aggr_Code): Change the handling
	of controlled record components.
	(Ctrl_Init_Expression): Removed.
	(Gen_Assign): Add new formal parameter In_Loop
	along with comment on usage.  Remove local variables Stmt and
	Stmt_Expr. Change the handling of controlled array components.
	(Gen_Loop): Update the call to Gen_Assign.
	(Gen_While): Update the call to Gen_Assign.
	(Initialize_Array_Component): New routine.
	(Initialize_Ctrl_Array_Component): New routine.
	(Initialize_Ctrl_Record_Component): New routine.
	(Initialize_Record_Component): New routine.
	(Process_Transient_Component): New routine.
	(Process_Transient_Component_Completion): New routine.
	* exp_ch4.adb (Process_Transient_In_Expression): New routine.
	(Process_Transient_Object): Removed. Replace all existing calls
	to this routine with calls to Process_Transient_In_Expression.
	* exp_ch6.adb (Expand_Ctrl_Function_Call): Remove local constant
	Is_Elem_Ref. Update the comment on ignoring transients.
	* exp_ch7.adb (Process_Declarations): Do not process ignored
	or finalized transient objects.
	(Process_Transient_In_Scope): New routine.
	(Process_Transients_In_Scope): New routine.
	(Process_Transient_Objects): Removed. Replace all existing calls
	to this routine with calls to Process_Transients_In_Scope.
	* exp_util.adb (Build_Transient_Object_Statements): New routine.
	(Is_Finalizable_Transient): Do not consider a transient object
	which has been finalized.
	(Requires_Cleanup_Actions): Do not consider ignored or finalized
	transient objects.
	* exp_util.ads (Build_Transient_Object_Statements): New routine.
	* sem_aggr.adb: Major code clean up.
	* sem_res.adb: Update documentation.

2016-07-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch3.adb (Analyze_Subtype_Declaration): For generated
	subtypes, such as actual subtypes of unconstrained formals,
	inherit predicate functions, if any, from the parent type rather
	than creating redundant new ones.

From-SVN: r238044
2016-07-06 14:37:54 +02:00
Arnaud Charlet 75e4e36dfe [multiple changes]
2016-07-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_attr.adb, sem_attr.adb, sem_ch13.adb: Minor reformatting.

2016-07-06  Arnaud Charlet  <charlet@adacore.com>

	* lib.adb (Check_Same_Extended_Unit): Prevent looping forever.
	* gnatbind.adb: Disable some consistency checks in codepeer mode,
	which are not needed.

2016-07-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch12.adb (Check_Fixed_Point_Actual): Add a warning when
	a formal fixed point type is instantiated with a type that has
	a user-defined arithmetic operations, but the generic has no
	corresponding formal functions. This is worth a warning because
	of the special semantics of fixed-point operators.

From-SVN: r238043
2016-07-06 14:34:52 +02:00
Bob Duff 1956beb8aa sem_attr.adb (Analyze_Attribute): Allow any expression of discrete type.
2016-07-06  Bob Duff  <duff@adacore.com>

	* sem_attr.adb (Analyze_Attribute): Allow any expression of
	discrete type.
	* exp_attr.adb (Expand_N_Attribute_Reference): Change the
	constant-folding code to correctly handle cases newly allowed
	by Analyze_Attribute.

From-SVN: r238042
2016-07-06 14:32:35 +02:00
Senthil Kumar Selvaraj 7b4e076985 re PR target/50739 ([avr] nameless error with -fmerge-all-constants)
Fix PR target/50739

This patch fixes a problem with fmerge-all-constants and the progmem
attribute.

gcc/

	PR target/50739	
	* config/avr/avr.c (avr_asm_select_section): Strip off
	SECTION_DECLARED from flags when calling get_section.

testsuite/

	PR target/50739	
	* gcc.target/avr/pr50739.c: New test

From-SVN: r238041
2016-07-06 11:40:17 +00:00
Jan Hubicka eb4432f704 * gcc.dg/tree-ssa/scev-14.c: update template.
From-SVN: r238040
2016-07-06 10:03:08 +00:00
Richard Sandiford 62da9e14ce [7/7] Add negative and zero strides to vect_memory_access_type
This patch uses the vect_memory_access_type from patch 6 to represent
the effect of a negative contiguous stride or a zero stride.  The latter
is valid only for loads.

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

gcc/
	* tree-vectorizer.h (vect_memory_access_type): Add
	VMAT_INVARIANT, VMAT_CONTIGUOUS_DOWN and VMAT_CONTIGUOUS_REVERSED.
	* tree-vect-stmts.c (compare_step_with_zero): New function.
	(perm_mask_for_reverse): Move further up file.
	(get_group_load_store_type): Stick to VMAT_ELEMENTWISE if the
	step is negative.
	(get_negative_load_store_type): New function.
	(get_load_store_type): Call it.  Add an ncopies argument.
	(vectorizable_mask_load_store): Update call accordingly and
	remove tests for negative steps.
	(vectorizable_store, vectorizable_load): Likewise.  Handle new
	memory_access_types.

From-SVN: r238039
2016-07-06 08:16:53 +00:00
Richard Sandiford 2de001eed0 [6/7] Explicitly classify vector loads and stores
This is the main patch in the series.  It adds a new enum and routines
for classifying a vector load or store implementation.

Originally there were three motivations:

      (1) Reduce cut-&-paste

      (2) Make the chosen vectorisation strategy more obvious.  At the
          moment this is derived implicitly from various other bits of
          state (GROUPED, STRIDED, SLP, etc.)

      (3) Decouple the vectorisation strategy from those other bits of state,
          so that there can be a choice of implementation for a given scalar
          statement.  The specific problem here is that we class:

              for (...)
                {
                  ... = a[i * x];
                  ... = a[i * x + 1];
                }

          as "strided and grouped" but:

              for (...)
                {
                  ... = a[i * 7];
                  ... = a[i * 7 + 1];
                }

          as "non-strided and grouped".  Before the patch, "strided and
          grouped" loads would always try to use separate scalar loads
          while "non-strided and grouped" loads would always try to use
          load-and-permute.  But load-and-permute is never supported for
          a group size of 7, so the effect was that the first loop was
          vectorisable and the second wasn't.  It seemed odd that not
          knowing x (but accepting it could be 7) would allow more
          optimisation opportunities than knowing x is 7.

Unfortunately, it looks like we underestimate the cost of separate
scalar accesses on at least aarch64, so I've disabled (3) for now;
see the "if" statement at the end of get_load_store_type.  I think
the patch still does (1) and (2), so that's the justification for
it in its current form.  It also means that (3) is now simply a
case of removing the FIXME code, once the cost model problems have
been sorted out.  (I did wonder about adding a --param, but that
seems overkill.  I hope to get back to this during GCC 7 stage 1.)

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

gcc/
	* tree-vectorizer.h (vect_memory_access_type): New enum.
	(_stmt_vec_info): Add a memory_access_type field.
	(STMT_VINFO_MEMORY_ACCESS_TYPE): New macro.
	(vect_model_store_cost): Take an access type instead of a boolean.
	(vect_model_load_cost): Likewise.
	* tree-vect-slp.c (vect_analyze_slp_cost_1): Update calls to
	vect_model_store_cost and vect_model_load_cost.
	* tree-vect-stmts.c (vec_load_store_type): New enum.
	(vect_model_store_cost): Take an access type instead of a
	store_lanes_p boolean.  Simplify tests.
	(vect_model_load_cost): Likewise, but for load_lanes_p.
	(get_group_load_store_type, get_load_store_type): New functions.
	(vectorizable_store): Use get_load_store_type.  Record the access
	type in STMT_VINFO_MEMORY_ACCESS_TYPE.
	(vectorizable_load): Likewise.
	(vectorizable_mask_load_store): Likewise.  Replace is_store
	variable with vls_type.

From-SVN: r238038
2016-07-06 08:15:28 +00:00
Richard Sandiford 4fb8ba9d35 [5/7] Move the fix for PR65518
This patch moves the fix for PR65518 to the code that checks whether
load-and-permute operations are supported.   If the group size is
greater than the vectorisation factor, it would still be possible
to fall back to elementwise loads (as for strided groups) rather
than fail vectorisation entirely.

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

gcc/
	* tree-vectorizer.h (vect_grouped_load_supported): Add a
	single_element_p parameter.
	* tree-vect-data-refs.c (vect_grouped_load_supported): Likewise.
	Check the PR65518 case here rather than in vectorizable_load.
	* tree-vect-loop.c (vect_analyze_loop_2): Update call accordignly.
	* tree-vect-stmts.c (vectorizable_load): Likewise.

From-SVN: r238037
2016-07-06 08:14:41 +00:00
Richard Sandiford 134c85caeb [4/7] Add a gather_scatter_info structure
This patch just refactors the gather/scatter support so that all
information is in a single structure, rather than separate variables.
This reduces the number of arguments to a function added in patch 6.

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

gcc/
	* tree-vectorizer.h (gather_scatter_info): New structure.
	(vect_check_gather_scatter): Return a bool rather than a decl.
	Replace return-by-pointer arguments with a single
	gather_scatter_info *.
	* tree-vect-data-refs.c (vect_check_gather_scatter): Likewise.
	(vect_analyze_data_refs): Update call accordingly.
	* tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise.
	(vectorizable_mask_load_store): Likewise.  Also record the
	offset dt and vectype in the gather_scatter_info.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.

From-SVN: r238036
2016-07-06 08:13:49 +00:00
Richard Sandiford 071e8018fe [3/7] Fix load/store costs for strided groups
vect_model_store_cost had:

      /* Costs of the stores.  */
      if (STMT_VINFO_STRIDED_P (stmt_info)
          && !STMT_VINFO_GROUPED_ACCESS (stmt_info))
        {
          /* N scalar stores plus extracting the elements.  */
          inside_cost += record_stmt_cost (body_cost_vec,
				       ncopies * TYPE_VECTOR_SUBPARTS (vectype),
				       scalar_store, stmt_info, 0, vect_body);

But non-SLP strided groups also use individual scalar stores rather than
vector stores, so I think we should skip this only for SLP groups.

The same applies to vect_model_load_cost.

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

gcc/
	* tree-vect-stmts.c (vect_model_store_cost): For non-SLP
	strided groups, use the cost of N scalar accesses instead
	of ncopies vector accesses.
	(vect_model_load_cost): Likewise.

From-SVN: r238035
2016-07-06 08:12:36 +00:00
Richard Sandiford 892a981f1e [2/7] Clean up vectorizer load/store costs
Add a bit more commentary and try to make the structure more obvious.
The horrendous:

      if (grouped_access_p
          && represents_group_p
          && !store_lanes_p
          && !STMT_VINFO_STRIDED_P (stmt_info)
          && !slp_node)

checks go away in patch 6.

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

gcc/
	* tree-vect-stmts.c (vect_cost_group_size): Delete.
	(vect_model_store_cost): Avoid calling it.  Use first_stmt_p
	variable to indicate when once-per-group costs are being used.
	(vect_model_load_cost): Likewise.  Fix comment and misindented code.

From-SVN: r238034
2016-07-06 08:11:31 +00:00
Richard Sandiford c01e092fb3 [1/7] Remove unnecessary peeling for gaps check
I recently relaxed the peeling-for-gaps conditions for LD3 but
kept them as-is for load-and-permute.  I don't think the conditions
are needed for load-and-permute either though.  No current load-and-
permute should load outside the group, so if there is no gap at the end,
the final vector element loaded will correspond to an element loaded
by the original scalar loop.

The patch for PR68559 (a missed optimisation PR) increased the peeled
cases from "exact_log2 (groupsize) == -1" to "vf % group_size == 0", so
before that fix, we didn't peel for gaps if there was no gap at the end
of the group and if the group size was a power of 2.

The only current non-power-of-2 load-and-permute size is 3, which
doesn't require loading more than 3 vectors.

The testcase is based on gcc.dg/vect/pr49038.c.

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

gcc/
	* tree-vect-stmts.c (vectorizable_load): Remove unnecessary
	peeling-for-gaps condition.

gcc/testsuite/
	* gcc.dg/vect/group-no-gaps-1.c: New test.

From-SVN: r238033
2016-07-06 08:10:29 +00:00
Andreas Krebbel a07189f455 S/390: Fix vecinit expansion.
The fallback routine in the S/390 vecinit expander did not check
whether each of the initializer elements is a proper general_operand.
Since revision r236582 the expander is invoked also with e.g. symbol
refs with an odd addend resulting in invalid insns.

Fixed by forcing the element into a register in such cases.

gcc/ChangeLog:

2016-07-06  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* config/s390/s390.c (s390_expand_vec_init): Force initializer
	element to register if it doesn't match general_operand.

From-SVN: r238032
2016-07-06 07:05:11 +00:00
Andi Kleen 8070763a2c Fix MPX tests on systems with MPX disabled
I have a Skylake system with MPX in the CPU, but MPX is disabled
in the kernel configuration.

This makes all the MPX tests fail because they assume if MPX
is in CPUID it works

Check the output of XGETBV too to detect non MPX kernels.

gcc/testsuite/:

2016-07-05  Andi Kleen  <ak@linux.intel.com>

	* gcc.target/i386/mpx/mpx-check.h: Check XGETBV output
	if kernel supports MPX.

From-SVN: r238031
2016-07-06 02:38:49 +00:00
GCC Administrator 8217ad204f Daily bump.
From-SVN: r238029
2016-07-06 00:16:22 +00:00
Kito Cheng 7f6e88a899 pr69102.c: Require fpic support.
2016-07-05  Kito Cheng <kito.cheng@gmail.com>

	* gcc.c-torture/compile/pr69102.c: Require fpic support.

From-SVN: r238023
2016-07-05 18:51:38 +00:00
Ville Voutilainen 7d4f48b5b8 Implement LWG 2509,
any_cast doesn't work with rvalue reference targets and cannot
	move with a value target.
	* include/experimental/any (any(_ValueType&&)): Constrain and
	add an overload that doesn't forward.
	(any_cast(any&&)): Constrain and add an overload that moves.
	* testsuite/experimental/any/misc/any_cast.cc: Add tests for
	the functionality added by LWG 2509.

From-SVN: r238022
2016-07-05 21:33:18 +03:00
Markus Trippelsdorf 98d44e93bf re PR c++/71214 (Typo in feature test macro for rvalue references)
Fix PR c++/71214

       PR c++/71214
       * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_rvalue_references.

From-SVN: r238017
2016-07-05 17:50:41 +00:00
Michael Meissner 36a265b1da rs6000-protos.h (rs6000_split_signbit): New prototype.
[gcc]

2016-07-05  Michael Meissner  <meissner@linux.vnet.ibm.com>
	    Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* config/rs6000/rs6000-protos.h (rs6000_split_signbit): New
	prototype.
	* config/rs6000/rs6000.c (rs6000_split_signbit): New function.
	* config/rs6000/rs6000.md (UNSPEC_SIGNBIT): New constant.
	(SIGNBIT): New mode iterator.
	(Fsignbit): New mode attribute.
	(signbit<mode>2): Change operand1 to match FLOAT128 instead of
	IBM128; dispatch to gen_signbit{kf,tf}2_dm for __float128
	when direct moves are available.
	(signbit<mode>2_dm): New define_insn_and_split).
	(signbit<mode>2_dm2): New define_insn.

[gcc/testsuite]

2016-07-05  Michael Meissner  <meissner@linux.vnet.ibm.com>
	    Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* gcc.target/powerpc/signbit-1.c: New test.
	* gcc.target/powerpc/signbit-2.c: New test.
	* gcc.target/powerpc/signbit-3.c: New test.


Co-Authored-By: Bill Schmidt <wschmidt@linux.vnet.ibm.com>

From-SVN: r238016
2016-07-05 17:50:22 +00:00
Kyrylo Tkachov 7a98fb6ed6 [RTL ifcvt] PR rtl-optimization/71594: ICE in noce_emit_cmove due to mismatched source modes
PR rtl-optimization/71594
	* ifcvt.c (noce_convert_multiple_sets): Wrap new_val or old_val
	into subregs of appropriate mode before trying to emit a conditional
	move.

	* gcc.dg/torture/pr71594.c: New test.

From-SVN: r238013
2016-07-05 16:37:40 +00:00
Jan Hubicka 1e3d54b429 tree-scalar-evolution.c (iv_can_overflow_p): New function.
* tree-scalar-evolution.c (iv_can_overflow_p): New function.
	(simple_iv): Use it.

	* gcc.dg/tree-ssa/scev-14.c: new testcase.

From-SVN: r238012
2016-07-05 16:17:12 +00:00
Jan Hubicka 341c5337bf * tree-ssa-loop-niter.c (nowrap_type_p): Use ANY_INTEGRAL_TYPE_P.
From-SVN: r238011
2016-07-05 16:13:46 +00:00
Jiong Wang 10406801f4 [LRA] Don't count spilling cost for it offmemok
* lra-constraints.c (process_alt_operands): Don't add spilling cost for
	"offmemok".

From-SVN: r238010
2016-07-05 16:05:27 +00:00
Jan Hubicka 1210573b1d tree-scalar-evoluiton.c (simple_iv): Use nowrap_type to check if IV can overflow.
* tree-scalar-evoluiton.c (simple_iv): Use nowrap_type to check if
	IV can overflow.

From-SVN: r238009
2016-07-05 16:02:52 +00:00
David Malcolm 84ca38932b PR c++/62314: add fixit hint for "expected ';' after class definition"
gcc/cp/ChangeLog:
	PR c++/62314
	* parser.c (cp_parser_class_specifier_1): When reporting
	missing semicolons, use a fixit-hint to suggest insertion
	of a semicolon immediately after the closing brace,
	offsetting the reported column accordingly.

gcc/testsuite/ChangeLog:
	PR c++/62314
	* gcc/testsuite/g++.dg/parse/error5.C: Update column
	number of missing semicolon error.
	* g++.dg/pr62314-2.C: New test case.

From-SVN: r238008
2016-07-05 15:50:54 +00:00
Alessandro Fanfarillo 20d0bfcefd Second review of STAT= patch + tests
From-SVN: r238007
2016-07-05 09:33:06 -06:00
Richard Biener 1174b21b38 gimple-ssa-split-paths.c (find_block_to_duplicate_for_splitting_pa): Handle empty else block.
2016-07-05  Richard Biener  <rguenther@suse.de>

	* gimple-ssa-split-paths.c (find_block_to_duplicate_for_splitting_pa):
	Handle empty else block.
	(is_feasible_trace): Likewise.
	(split_paths): Likewise.

From-SVN: r238005
2016-07-05 13:25:47 +00:00
Richard Biener 16eba42015 tree-loop-distribution.c (distribute_loop): Fix issue with the cost model loop.
2016-07-05  Richard Biener  <rguenther@suse.de>

	* tree-loop-distribution.c (distribute_loop): Fix issue with
	the cost model loop.

From-SVN: r238004
2016-07-05 13:25:19 +00:00
Arnaud Charlet b758f6e25b Update documentation.
From-SVN: r238003
2016-07-05 14:18:48 +02:00
Andre Vehreschild 69aaea0663 re PR fortran/71623 (Segfault when allocating deferred-length characters to size of a pointer)
gcc/fortran/ChangeLog:

2016-07-05  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/71623
	* trans-stmt.c (gfc_trans_allocate): Add code of pre block of typespec
	in allocate to parent block.

gcc/testsuite/ChangeLog:

2016-07-05  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/71623
	* gfortran.dg/deferred_character_17.f90: New test.

From-SVN: r238002
2016-07-05 14:06:22 +02:00
Eric Botcazou b0ad2d78b2 decl.c (gnat_to_gnu_entity): Invoke global_bindings_p last when possible.
* gcc-interface/decl.c (gnat_to_gnu_entity): Invoke global_bindings_p
	last when possible.  Do not call elaborate_expression_2 on offsets in
	local record types and avoid useless processing for constant offsets.

From-SVN: r238001
2016-07-05 10:32:43 +00:00
Christophe Lyon f723a43cbc [ARM][testsuite] neon-testgen.ml removal
2016-07-05  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* config/arm/neon-testgen.ml: Delete.
	* config/arm/neon.ml: Delete.

	gcc/testsuite/
	* gcc.target/arm/neon/polytypes.c: Move to ...
	* gcc.target/arm/polytypes.c: ... here.
	* gcc.target/arm/neon/pr51534.c: Move to ...
	* gcc.target/arm/pr51534.c: ... here.
	* gcc.target/arm/neon/vect-vcvt.c: Move to ...
	* gcc.target/arm/vect-vcvt.c: ... here.
	* gcc.target/arm/neon/vect-vcvtq.c: Move to ...
	* gcc.target/arm/vect-vcvtq.c: ... here.
	* gcc.target/arm/neon/vfp-shift-a2t2.c: Move to ...
	* gcc.target/arm/vfp-shift-a2t2.c: ... here.
	* gcc.target/arm/neon/vst1Q_laneu64-1.c: Move to ...
	* gcc.target/arm/vst1Q_laneu64-1.c: ... here. Fix foo() prototype.
	* gcc.target/arm/neon/neon.exp: Delete.
	* gcc.target/arm/neon/*.c: Delete.

From-SVN: r238000
2016-07-05 11:24:38 +02:00
GCC Administrator 7915f06abf Daily bump.
From-SVN: r237998
2016-07-05 00:16:18 +00:00