Commit Graph

120079 Commits

Author SHA1 Message Date
Paolo Carlini c4ae987730 atomic_base.h: Don't include <cstddef>, use nullptr.
2012-11-06  Paolo Carlini  <paolo.carlini@oracle.com>
  
	* include/bits/atomic_base.h: Don't include <cstddef>, use nullptr.
	* include/std/atomic: Likewise.
	* include/tr2/dynamic_bitset: Likewise.

	* libsupc++/vec.cc (compute_size(std::size_t, std::size_t,
	std::size_t)): Fix for -fno-exceptions.

From-SVN: r193232
2012-11-06 11:03:45 +00:00
Ed Schonberg 1115dd7ed7 sem_res.adb (Preanalyze_And_Resolve): In Alfa mode do not disable checks...
2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_res.adb (Preanalyze_And_Resolve): In Alfa mode do not
	disable checks, so that flags can be properly set on expressions
	that are not further expanded.

From-SVN: r193231
2012-11-06 11:47:21 +01:00
Robert Dewar 97ce3a148a exp_attr.adb, [...]: Minor reformatting.
2012-11-06  Robert Dewar  <dewar@adacore.com>

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

From-SVN: r193230
2012-11-06 11:45:56 +01:00
Vladimir Yakovlev ff97910daf i386-protos.h (emit_i387_cw_initialization): Deleted.
* config/i386/i386-protos.h (emit_i387_cw_initialization): Deleted.
        (emit_vzero): Added prototype.
        (ix86_mode_entry): Likewise.
        (ix86_mode_exit): Likewise.
        (ix86_emit_mode_set): Likewise.

        * config/i386/i386.c (typedef struct block_info_def): Deleted.
        (define BLOCK_INFO): Deleted.
        (check_avx256_stores): Added checking for MEM_P.
        (move_or_delete_vzeroupper_2): Deleted.
        (move_or_delete_vzeroupper_1): Deleted.
        (move_or_delete_vzeroupper): Deleted.
        (ix86_maybe_emit_epilogue_vzeroupper): Deleted.
        (function_pass_avx256_p): Deleted.
        (ix86_function_ok_for_sibcall): Deleted disabling sibcall.
        (nit_cumulative_args): Deleted initialization of of avx256 fields of
        cfun->machine.
        (ix86_emit_restore_sse_regs_using_mov): Deleted vzeroupper generation.
        (ix86_expand_epilogue): Likewise.
        (ix86_avx_u128_mode_needed): New.
        (ix86_i387_mode_needed): Renamed ix86_mode_needed.
        (ix86_mode_needed): New.
        (ix86_avx_u128_mode_after): New.
        (ix86_mode_after): New.
        (ix86_avx_u128_mode_entry): New.
        (ix86_mode_entry): New.
        (ix86_avx_u128_mode_exit): New.
        (ix86_mode_exit): New.
        (ix86_emit_mode_set): New.
        (ix86_expand_call): Deleted vzeroupper generation.
        (ix86_split_call_vzeroupper): Deleted.
        (ix86_init_machine_status): Initialzed optimize_mode_switching.
        (ix86_expand_special_args_builtin): Changed.
        (ix86_reorg): Deleted a call of move_or_delete_vzeroupper.

        * config/i386/i386.h  (VALID_AVX256_REG_OR_OI_MODE): New.
        (AVX_U128): New.
        (avx_u128_state): New.
        (NUM_MODES_FOR_MODE_SWITCHING): Added AVX_U128_ANY.
        (MODE_AFTER): New.
        (MODE_ENTRY): New.
        (MODE_EXIT): New.
        (EMIT_MODE_SET): Changed.
        (machine_function): Deleted avx256 fields.

        * config/i386/i386.md (UNSPEC_CALL_NEEDS_VZEROUPPER): Deleted.
        (define_insn_and_split "*call_vzeroupper"): Deleted.
        (define_insn_and_split "*call_rex64_ms_sysv_vzeroupper"): Deleted.
        (define_insn_and_split "*sibcall_vzeroupper"): Deleted.
        (define_insn_and_split "*call_pop_vzeroupper"): Deleted.
        (define_insn_and_split "*sibcall_pop_vzeroupper"): Deleted.
        (define_insn_and_split "*call_value_vzeroupper"): Deleted.
        (define_insn_and_split "*sibcall_value_vzeroupper"): Deleted.
        (define_insn_and_split "*call_value_rex64_ms_sysv_vzeroupper"): Deleted.
        (define_insn_and_split "*call_value_pop_vzeroupper"): Deleted.
        (define_insn_and_split "*sibcall_value_pop_vzeroupper"): Deleted.
        (define_expand "return"): Deleted vzeroupper emitting.
        (define_expand "simple_return"): Deleted.

        * config/i386/predicates.md (vzeroupper_operation): New.

        * config/i386/sse.md (avx_vzeroupper): Changed.

testsuite/ChangeLog:
        * gcc.target/i386/avx-vzeroupper-5.c: Changed scan-assembler-times.
        * gcc.target/i386/avx-vzeroupper-8.c: Likewise.
        * gcc.target/i386/avx-vzeroupper-9.c: Likewise.
        * gcc.target/i386/avx-vzeroupper-10.c: Likewise.
        * gcc.target/i386/avx-vzeroupper-11.c: Likewise.
        * gcc.target/i386/avx-vzeroupper-12.c: Likewise.
        * gcc.target/i386/avx-vzeroupper-19.c: Likewis.
        * gcc.target/i386/avx-vzeroupper-27.c: New.

From-SVN: r193229
2012-11-06 10:29:23 +00:00
Gary Dismukes 3d6db7f84d exp_attr.adb (Expand_N_Attribute_Reference): Apply a predicate check when evaluating the attribute Valid...
2012-11-06  Gary Dismukes  <dismukes@adacore.com>

	* exp_attr.adb (Expand_N_Attribute_Reference): Apply a predicate
	check when evaluating the attribute Valid, and issue a warning
	about infinite recursion when the check occurs within the
	predicate function of the prefix's subtype.
	* exp_ch4.adb (Expand_N_In): Remove test for Is_Discrete_Type
	when we're checking that there's no predicate check function as a
	condition for substituting a Valid check for a scalar membership
	test (substitution should be suppressed for any kind of scalar
	subtype with a predicate check). Also, don't emit a predicate
	check when the right operand is a range.

From-SVN: r193228
2012-11-06 11:22:42 +01:00
Arnaud Charlet 150ac76e0e [multiple changes]
2012-11-06  Robert Dewar  <dewar@adacore.com>

	* par_sco.adb, bindgen.adb, exp_vfpt.adb, exp_vfpt.ads, exp_ch2.adb,
	errout.adb, sem_ch8.adb: Minor reformatting.

2012-11-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* einfo.adb: Include Loop_Entry_Attributes to the list of
	Node/List/Elist10 usage.
	(Loop_Entry_Attributes): New routine.
	(Set_Loop_Entry_Attributes): New routine.
	(Write_Field10_Name): Add an output string for Loop_Entry_Attributes.
	* einfo.ads: Define new attribute Loop_Entry_Attributes along
	with its usage in nodes.
	(Loop_Entry_Attributes): New routine and dedicated pragma Inline.
	(Set_Loop_Entry_Attributes): New routine and dedicated pragma Inline.
	* exp_attr.adb (Expand_N_Attribute_Reference): Do not expand
	Attribute_Loop_Entry here.
	* exp_ch5.adb: Add with and use clause for Elists;
	(Expand_Loop_Entry_Attributes): New routine.
	(Expand_N_Loop_Statement): Add a call to Expand_Loop_Entry_Attributes.
	* exp_prag.adb (Expand_Pragma_Loop_Assertion): Specialize the
	search to include multiple nested loops produced by the expansion
	of Ada 2012 array iterator.
	* sem_attr.adb: Add with and use clause for Elists.
	(Analyze_Attribute): Check the legality of attribute Loop_Entry.
	(Resolve_Attribute): Nothing to do for Loop_Entry.
	(S14_Attribute): New routine.
	* snames.ads-tmpl: Add a comment on entries marked with
	HiLite. Add new name Name_Loop_Entry. Add new attribute
	Attribute_Loop_Entry.

From-SVN: r193227
2012-11-06 11:20:41 +01:00
Janus Weil fa1ed65806 re PR fortran/54917 ([OOP] TRANSFER on polymorphic variable causes ICE)
2012-11-06  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/54917
	* target-memory.c (gfc_target_expr_size,gfc_target_interpret_expr):
	Handle BT_CLASS.
	* trans-intrinsic.c (gfc_conv_intrinsic_transfer): Add support for
	polymorphic arguments.

2012-11-06  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/54917
	* gfortran.dg/transfer_class_1.f90: New.
	* gfortran.dg/transfer_class_2.f90: New.

From-SVN: r193226
2012-11-06 11:15:42 +01:00
Arnaud Charlet b887f1a033 [multiple changes]
2012-11-06  Geert Bosch  <bosch@adacore.com>

	* eval_fat.adb (Machine, Succ): Fix front end to support static
	evaluation of attributes on targets with both VAX and IEEE float.
	* sem_util.ads, sem_util.adb (Has_Denormals, Has_Signed_Zeros):
	New type-specific functions. Previously we used Denorm_On_Target
	and Signed_Zeros_On_Target directly, but that doesn't work well
	for OpenVMS where a single target supports both floating point
	with and without signed zeros.
	* sem_attr.adb (Attribute_Denorm, Attribute_Signed_Zeros): Use
	new Has_Denormals and Has_Signed_Zeros functions to support both
	IEEE and VAX floating point on a single target.

2012-11-06  Tristan Gingold  <gingold@adacore.com>

	* bindgen.adb (System_Interrupts_Used): New variable.
	(Gen_Adainit): Declare and call
	Install_Restricted_Handlers_Sequential if System.Interrupts is
	used when elaboration policy is sequential.

2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch8.adb: Complete previous change.

From-SVN: r193225
2012-11-06 11:14:13 +01:00
Arnaud Charlet 436d9f924c [multiple changes]
2012-11-06  Tristan Gingold  <gingold@adacore.com>

	* fe.h (Get_Vax_Real_Literal_As_Signed): Declare.
	* eval_fat.adb, eval_fat.ads (Decompose_Int): Move spec in package spec.
	* exp_vfpt.adb, exp_vfpt.ads (Vax_Real_Literal_As_Signed): New function.
	(Expand_Vax_Real_Literal): Remove.
	* exp_ch2.adb (Expand_N_Real_Literal): Do nothing.
	* sem_eval.adb (Expr_Value_R): Remove special Vax float case,
	as this is not anymore a special case.

2012-11-06  Yannick Moy  <moy@adacore.com>

	* uintp.ads: Minor correction of typo in comment.

2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_prag.adb (Analyze_Pragnma, case Unchecked_Union): remove
	requirement that discriminants of an unchecked_union must have
	defaults.

2012-11-06  Vasiliy Fofanov  <fofanov@adacore.com>

	* projects.texi: Minor wordsmithing.

From-SVN: r193224
2012-11-06 11:11:20 +01:00
Robert Dewar a9b9fbf664 sem_ch9.adb, [...]: Minor reformatting.
2012-11-06  Robert Dewar  <dewar@adacore.com>

	* sem_ch9.adb, exp_vfpt.adb, xoscons.adb: Minor reformatting.

From-SVN: r193223
2012-11-06 11:09:01 +01:00
Arnaud Charlet 7028ce0d39 [multiple changes]
2012-11-06  Tristan Gingold  <gingold@adacore.com>

	* exp_vfpt.adb: Document VAX float point layout.

2012-11-06  Geert Bosch  <bosch@adacore.com>

	* eval_fat.adb (Machine): Don't return -0.0 on targets without
	signed zeros.

2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch9.adb (Analyze_Entry_Call_Alternative,
	Check_Triggering_Statement): Reject properly an indirect call.

From-SVN: r193222
2012-11-06 11:05:10 +01:00
Pascal Obry 9276875d7b xoscons.adb, [...]: Add support for post-processing.
2012-11-06  Pascal Obry  <obry@adacore.com>

	* xoscons.adb, xutil.adb, xutil.ads: Add support for post-processing.

From-SVN: r193221
2012-11-06 11:03:08 +01:00
Arnaud Charlet fb174746b2 [multiple changes]
2012-11-06  Yannick Moy  <moy@adacore.com>

	* s-bignum.adb (Div_Rem): Fix another bug in step D3.

2012-11-06  Tristan Gingold  <gingold@adacore.com>

	* s-tarest.adb (Create_Restricted_Task): Call
	Create_Restricted_Task_Sequential in sequential case.

2012-11-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_prag.adb (Expand_Pragma_Loop_Assertion): Do not rewrite the
	pragma into a null statement as its presence is desirable in -gnatG
	output.

From-SVN: r193219
2012-11-06 11:01:03 +01:00
Arnaud Charlet 2780d17486 [multiple changes]
2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch8.adb (Check_Constrained_Object): Do nothing if the
	renamed object is a limited record.

2012-11-06  Bernard Banner  <banner@adacore.com>

	* sysdep.c (_getpagesize): New. Minor reformatting.

From-SVN: r193218
2012-11-06 10:59:02 +01:00
Robert Dewar 0ce1ec6465 sem_prag.adb: Minor reformatting.
2012-11-06  Robert Dewar  <dewar@adacore.com>

	* sem_prag.adb: Minor reformatting.

2012-11-06  Robert Dewar  <dewar@adacore.com>

	* s-bignum.adb (Div_Rem): Fix bug in step D3.
	* uintp.adb (UI_Div_Rem): Add comment on bug in step D3.

From-SVN: r193217
2012-11-06 10:55:50 +01:00
Arnaud Charlet ed7b9d6ecf [multiple changes]
2012-11-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_prag.adb (Expand_Pragma_Loop_Assertion): Update the comment
	on intended expansion.	Reimplement the logic which expands the
	termination variants.
	(Process_Increase_Decrease): Update the parameter profile and the
	comment related to it. Accommodate the new aggregate-like appearance of
	the termination variants.
	* sem_prag.adb (Analyze_Pragma): Update the syntax of pragma
	Loop_Assertion. Reimplement the semantic analysis of the pragma
	to accommodate the new aggregate-like variant.
	(Check_Variant): New routine.
	* snames.ads-tmpl: Change names Name_Decreases and Name_Increases
	to Name_Decreasing and Name_Increasing respectively. Add name
	Variant.

2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_eval.adb: Static evaluation of case expressions.

From-SVN: r193216
2012-11-06 10:53:42 +01:00
Arnaud Charlet 2fe2920e2d [multiple changes]
2012-11-06  Robert Dewar  <dewar@adacore.com>

	* exp_prag.adb, impunit.adb, exp_ch9.adb, par-ch4.adb,
	s-tarest.adb: Minor reformatting.

2012-11-06  Tristan Gingold  <gingold@adacore.com>

	* s-tposen.ads: Minor comment update.

2012-11-06  Arnaud Charlet  <charlet@adacore.com>

	* sysdep.c: Rename sig* wrappers to use unique names.

2012-11-06  Yannick Moy  <moy@adacore.com>

	* exp_dbug.adb (Qualify_Entity_Name): Mark entity as having a qualified
	name after being treated, in formal verification mode.

2012-11-06  Fedor Rybin  <frybin@adacore.com>

	* gnat_ugn.texi: Updating gnattest section to reflect changes
	in default behaviour of the tool.

From-SVN: r193215
2012-11-06 10:49:23 +01:00
Arnaud Charlet 6bc057a79e [multiple changes]
2012-11-06  Thomas Quinot  <quinot@adacore.com>

	* s-oscons-tmplt.c: Interfaces.C now needs to be WITH'd even
	on platforms that do not support sockets (for the benefit of
	subtype IOCTL_Req_T).

2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* par-ch4.adb (P_Primary): if-expressions, case-expressions,
	and quantified expressions are legal if surrounded by parentheses
	from an enclosing context, such as a call or an instantiation.

2012-11-06  Yannick Moy  <moy@adacore.com>

	* impunit.adb (Get_Kind_Of_Unit): Return appropriate kind for
	predefined implementation files, instead of returning
	Not_Predefined_Unit on all .adb files.

2012-11-06  Tristan Gingold  <gingold@adacore.com>

	* exp_ch9.adb (Build_Activation_Chain_Entity): Return immediately if
	partition elaboration policy is sequential.
	(Build_Task_Activation_Call): Likewise. Use
	Activate_Restricted_Tasks on restricted profile.
	(Make_Task_Create_Call): Do not use the _Chain
	parameter if elaboration policy is sequential. Call
	Create_Restricted_Task_Sequential in that case.
	* exp_ch3.adb (Build_Initialization_Call): Change condition to
	support concurrent elaboration policy.
	(Build_Record_Init_Proc): Likewise.
	(Init_Formals): Likewise.
	* bindgen.adb (Gen_Adainit): Declare Partition_Elaboration_Policy
	and set it in generated code if the elaboration policy is
	sequential. The procedure called to activate all tasks is now
	named __gnat_activate_all_tasks.
	* rtsfind.adb (RE_Activate_Restricted_Task,
	RE_Create_Restricted_Task_Sequential): New RE_Id literals.
	* s-tarest.adb (Create_Restricted_Task): Added to create a task without
	adding it on an activation chain.
	(Activate_Tasks): Has now a Chain parameter.
	(Activate_All_Tasks_Sequential): Added. Called by the binder to
	activate all tasks.
	(Activate_Restricted_Tasks): Added. Called during elaboration to
	activate tasks of the units.
	* s-tarest.ads: Remove pragma Partition_Elaboration_Policy.
	(Partition_Elaboration_Policy): New variable (set by the binder).
	(Create_Restricted_Task): Revert removal of the chain parameter.
	(Create_Restricted_Task_Sequential): New procedure.
	(Activate_Restricted_Tasks): Revert removal.
	(Activate_All_Tasks_Sequential): New procedure.

From-SVN: r193214
2012-11-06 10:44:51 +01:00
Bernard Banner 3c55062f30 2012-11-06 Bernard Banner <banner@adacore.com>
* adaint.c Add file macro definitions missing on Android.
	* adaint.h Avoid definitions related to task affinity and CPU
	sets since this functionality is missing on the Android
	* errno.c (__set_errno): Android already contains such a named
	procedure so do include again.
	* gsocket.h: Sockets not supported on Android.
	* init.c: Avoid linux related code not supported on Android.
	* sysdep.c (sigismember, sigaddset, sigdelset, sigemptyset,
	sigfillset): wrapper functions since sig routines are defined
	as inline macros on Android.
	* terminals.c: Add stubs for terminal related functions not
	supported on Android.

From-SVN: r193213
2012-11-06 10:41:56 +01:00
Hristian Kirtchev 055311ddef sem_prag.adb (Analyze_Pragma): Do not output the characters of an illegal argument as it may not have...
2012-11-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_prag.adb (Analyze_Pragma): Do not
	output the characters of an illegal argument as it may not have
	characters to begin with.

2012-11-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_prag.adb (Expand_Pragma_Loop_Assertion):
	Change the order of argument processing to avoid disappearing
	increase / decrease expressions.

From-SVN: r193212
2012-11-06 10:38:48 +01:00
Arnaud Charlet 41c15e3eaa [multiple changes]
2012-11-06  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_prag.adb: Add with and use clause for Sem_Ch8.
	(Expand_N_Pragma): Add a new variant to expand pragma Loop_Assertion.
	(Expand_Pragma_Loop_Assertion): New routine.
	* par-prag.adb (Prag): The semantic analysis of pragma
	Loop_Assertion is carried out by Analyze_Pragma. No need for
	checks in the parser.
	* sem_prag.adb: Add a reference position value for pragma
	Loop_Assertion in Sig_Flags.
	(Analyze_Pragma): Add semantic analysis for pragma Loop_Assertion.
	* snames.ads-tmpl: Add the following new names:
	Name_Decreases Name_Increases Name_Loop_Assertion.
	Add new pragma id Pragma_Loop_Assertion.

2012-11-06  Ed Schonberg  <schonberg@adacore.com>

	* exp_ch5.adb: Identifier in iterator must have debug
	information.

From-SVN: r193211
2012-11-06 10:37:34 +01:00
Uros Bizjak 11e185566b re PR target/41993 ([sh] ICE in create_pre_exit, at mode-switching.c:399)
PR target/41993
	* mode-switching.c (create_pre_exit): Set return_copy to
	last_insn when copy_start is a pseudo reg.


Co-Authored-By: Kaz Kojima <kkojima@gcc.gnu.org>

From-SVN: r193210
2012-11-06 09:16:34 +00:00
Arnaud Charlet 3020bfd1c2 Makefile.in (osconstool): Fix target.
libada/
	* Makefile.in (osconstool): Fix target.
ada/
	* gcc-interface/Makefile.in, gcc-interface/Make-lang.in: Remove
	duplicate rules handled by Make-generated.in.

From-SVN: r193209
2012-11-06 10:03:55 +01:00
Andrey Turetskiy 880ab4be19 i386.c (bdesc_args): Rename CODE_FOR_avx2_umulhrswv16hi3 to CODE_FOR_avx2_pmulhrswv16hi3.
* config/i386/i386.c (bdesc_args): Rename CODE_FOR_avx2_umulhrswv16hi3 to
	CODE_FOR_avx2_pmulhrswv16hi3.
	* config/i386/predicates.md (const1_operand): Extend for vectors.
	* config/i386/sse.md (ssse3_avx2): Extend.
	(ssedoublemode): Ditto.
	(<sse2_avx2>_uavg<mode>3): Merge avx2_uavgv32qi3, sse2_uavgv16qi3,
	avx2_uavgv16hi3 and sse2_uavgv8hi3 into one.
	(*<sse2_avx2>_uavg<mode>3): Merge *avx2_uavgv32qi3, *sse2_uavgv16qi3,
	*avx2_uavgv16hi3 and *sse2_uavgv8hi3 into one.
	(PMULHRSW): New.
	(<ssse3_avx2>_pmulhrsw<mode>3): Merge avx2_umulhrswv16hi3,
	ssse3_pmulhrswv8hi3 and ssse3_pmulhrswv4hi3 into one.
	(*avx2_pmulhrswv16hi3): Replace const_vector with const1_operand
	predicate.
	(*ssse3_pmulhrswv8hi3): Ditto.
	(*ssse3_pmulhrswv4hi3): Ditto.

From-SVN: r193208
2012-11-06 07:43:37 +00:00
Joern Rennecke 36947bd6e4 Update Copyright years.
From-SVN: r193207
2012-11-06 05:16:42 +00:00
Joern Rennecke af1143bf9a Fix ChangeLog typo.
From-SVN: r193206
2012-11-06 05:15:56 +00:00
Joern Rennecke 2266617f0e epiphany.c (epiphany_address_cost): Use MODE parameter.
* config/epiphany/epiphany.c (epiphany_address_cost):
        Use MODE parameter.

From-SVN: r193205
2012-11-06 05:01:47 +00:00
Sriraman Tallam 3649b9b791 Function Multiversioning
========================

Sriraman Tallam, tmsriram@google.com

Overview of the patch which adds support to specify function versions.  This is
only enabled for target i386.

Example:

int foo ();  /* Default version */
int foo () __attribute__ ((target("avx,popcnt")));/*Specialized for avx and popcnt */
int foo () __attribute__ ((target("arch=core2,ssse3")));/*Specialized for core2 and ssse3*/

int main ()
{
 int (*p)() = &foo;
 return foo () + (*p)();
}

int foo ()
{
 return 0;
}

int __attribute__ ((target("avx,popcnt")))
foo ()
{
 return 0;
}

int __attribute__ ((target("arch=core2,ssse3")))
foo ()
{
 return 0;
}

The above example has foo defined 3 times, but all 3 definitions of foo are
different versions of the same function. The call to foo in main, directly and
via a pointer, are calls to the multi-versioned function foo which is dispatched
to the right foo at run-time.

Front-end changes:

The front-end changes are calls at appropriate places to target hooks that
determine the following:

* Determine if two function decls with the same signature are versions.
* Determine the assembler name of a function version.
* Generate the dispatcher function for a set of function versions.
* Compare versions to see if one has a higher priority over the other.

All the implementation happens in the target-specific config/i386/i386.c.

What does the patch do?

* Tracking decls that correspond to function versions of function
name, say "foo":

When the front-end sees more than one decl for "foo", it calls a target hook to
determine if they are versions. To prevent duplicate definition errors with
other versions of "foo", "decls_match" function in cp/decl.c is made to return
false when 2 decls have are deemed versions by the target. This will make all
function versions of "foo" to be added to the overload list of "foo".

* Change the assembler names of the function versions.

For i386, the target changes the assembler names of the function versions by
 suffixing the sorted list of args to "target" to the function name of "foo".
For example, the assembler name of
 "void foo () __attribute__ ((target ("sse4")))" will
become _Z3foov.sse4.  The target hook mangle_decl_assembler_name is used
for this.

* Overload resolution:

 Function "build_over_call" in cp/call.c sees a call to function
"foo", which is multi-versioned. The overload resolution happens in
function "joust" in "cp/call.c". Here, the call to "foo" has all
possible versions of "foo" as candidates. All the candidates of "foo" are
stored in the cgraph side data structure. Each version of foo is chained in a 
doubly-linked list with the default function as the first element.  This allows
any pass to access all the semantically identical versions. A call to a
multi-versioned function will be replaced by a call to a dispatcher function,
determined by a target hook, to execute the right function version at run-time.

Optimization to directly call a version when possible:
Also, in joust, where overload resolution happens, a multiversioned function
resolution is made to return the most specialized version.  This is the version
that will be checked for dispatching first and is determined by the target.
Now, if the caller can inline this function version then a direct call is made
to this function version rather than go through the dispatcher. When a direct
call cannot be made, a call to the dispatcher function is created.

* Creating the dispatcher body.

The dispatcher body, called the resolver is made only when there is a call to a
multiversioned function dispatcher or the address of a function is taken. This
is generated during cgraph_analyze_function. This is done by another target hook.

* Dispatch ordering.

The order in which the function versions are checked during dispatch is based
on a priority value assigned for the ISA that is catered. More specialized 
versions are checked for dispatching first.  This is to mitigate the ambiguity
that can arise when more than one function version is valid for execution on
a particular platform.  This is not a perfect solution, and in future the user
should be allowed to assign a dispatching priority value to each version.

Function MV in the Intel compiler:

The intel compiler supports function multiversioning and the syntax is
similar to the patch proposed here.  Here is an example of how to
generate multiple function versions with the intel compiler.

/* Create a stub function to specify the various versions of function that
   will be created, using declspec attribute cpu_dispatch.  */
__declspec (cpu_dispatch (core_i7_sse4_2, atom, generic))
void foo () {};

/* Bodies of each function version.  */

/* Intel Corei7 processor + SSE4.2 version.  */
__declspec (cpu_specific(core_i7_sse4_2))
void foo ()
{
  printf ("corei7 + sse4.2");
}

/* Atom processor.  */
__declspec (cpu_specific(atom))
void foo ()
{
  printf ("atom");
}

/* The generic or the default version.  */
__declspec (cpu_specific(generic))
void foo ()
{
  printf ("This is generic");
}

A new function version is generated by defining a new function with the same
signature but with a different cpu_specific declspec attribute string.  The
set of cpu_specific strings that are allowed is the following:

"core_2nd_gen_avx"
"core_aes_pclmulqdq"
"core_i7_sse4_2"
"core_2_duo_sse4_1"
"core_2_duo_ssse3"
"atom"
"pentium_4_sse3"
"pentium_4"
"pentium_m"
"pentium_iii"
"generic"

Comparison with the GCC MV implementation in this patch:

* Version creation syntax:

The implementation in this patch also has a similar syntax to specify function
versions. The first stub function is not needed.  Here is the code to generate
the function versions with this patch:

/* Intel Corei7 processor + SSE4.2 version.  */
__attribute__ ((target ("arch=corei7, sse4.2")))
void foo ()
{
  printf ("corei7 + sse4.2");
}

/* Atom processor.  */
__attribute__ ((target ("arch=atom")))
void foo ()
{
  printf ("atom");
}

void foo ()
{
}

The target attribute can have one of the following arch names:

"amd"
"intel"
"atom"
"core2"
"corei7"
"nehalem"
"westmere"
"sandybridge"
"amdfam10h"
"barcelona"
"shanghai"
"istanbul"
"amdfam15h"
"bdver1"
"bdver2"

and any number of the following ISA names:

"cmov"
"mmx"
"popcnt"
"sse"
"sse2"
"sse3"
"ssse3"
"sse4.1"
"sse4.2"
"avx"
"avx2"



	* doc/tm.texi.in (TARGET_OPTION_FUNCTION_VERSIONS): New hook
	description.
	* (TARGET_COMPARE_VERSION_PRIORITY): New hook description.
	* (TARGET_GET_FUNCTION_VERSIONS_DISPATCHER): New hook description.
	* (TARGET_GENERATE_VERSION_DISPATCHER_BODY): New hook description.
	* doc/tm.texi: Regenerate.
	* target.def (compare_version_priority): New target hook.
	* (generate_version_dispatcher_body): New target hook.
	* (get_function_versions_dispatcher): New target hook.
	* (function_versions): New target hook.
	* cgraph.c (cgraph_fnver_htab): New htab.
	(cgraph_fn_ver_htab_hash): New function.
	(cgraph_fn_ver_htab_eq): New function.
	(version_info_node): New pointer.
	(insert_new_cgraph_node_version): New function.
	(get_cgraph_node_version): New function.
	(delete_function_version): New function.
	(record_function_versions): New function.
	* cgraph.h (cgraph_node): New bitfield dispatcher_function.
	(cgraph_function_version_info): New struct.
	(get_cgraph_node_version): New function.
	(insert_new_cgraph_node_version): New function.
	(record_function_versions): New function.
	(delete_function_version): New function.
	(init_lowered_empty_function): Expose function.
	* tree.h (DECL_FUNCTION_VERSIONED): New macro.
	(tree_function_decl): New bit-field versioned_function.
	* cgraphunit.c (cgraph_analyze_function): Generate body of multiversion
	function dispatcher.
	(cgraph_analyze_functions): Analyze dispatcher function.
	(init_lowered_empty_function): Make non-static. New parameter in_ssa.
	(assemble_thunk): Add parameter to call to init_lowered_empty_function.
	* config/i386/i386.c (add_condition_to_bb): New function.
	(get_builtin_code_for_version): New function.
	(ix86_compare_version_priority): New function.
	(feature_compare): New function.
	(dispatch_function_versions): New function.
	(ix86_function_versions): New function.
	(attr_strcmp): New function.
	(ix86_mangle_function_version_assembler_name): New function.
	(ix86_mangle_decl_assembler_name): New function.
	(make_name): New function.
	(make_dispatcher_decl): New function.
	(is_function_default_version): New function.
	(ix86_get_function_versions_dispatcher): New function.
	(make_attribute): New function.
	(make_resolver_func): New function.
	(ix86_generate_version_dispatcher_body): New function.
	(fold_builtin_cpu): Return integer for cpu builtins.
	(TARGET_MANGLE_DECL_ASSEMBLER_NAME): New macro.
	(TARGET_COMPARE_VERSION_PRIORITY): New macro.
	(TARGET_GENERATE_VERSION_DISPATCHER_BODY): New macro.
	(TARGET_GET_FUNCTION_VERSIONS_DISPATCHER): New macro.
	(TARGET_OPTION_FUNCTION_VERSIONS): New macro.

	* class.c (add_method): Change assembler names of function versions.
	(mark_versions_used): New static function.
	(resolve_address_of_overloaded_function): Create dispatcher decl and
	return address of dispatcher instead.
	* decl.c (decls_match): Make decls unmatched for versioned
	functions.
	(duplicate_decls): Remove ambiguity for versioned functions.
	Delete versioned function data for merged decls. 
	* decl2.c (check_classfn): Check attributes of versioned functions
	for match.
	* call.c (get_function_version_dispatcher): New function.
	(mark_versions_used): New static function.
	(build_over_call): Make calls to multiversioned functions
	to call the dispatcher.
	(joust): For calls to multi-versioned functions, make the most
	specialized function version win.

	* testsuite/g++.dg/mv1.C: New test.
	* testsuite/g++.dg/mv2.C: New test.
	* testsuite/g++.dg/mv3.C: New test.
	* testsuite/g++.dg/mv4.C: New test.
	* testsuite/g++.dg/mv5.C: New test.
	* testsuite/g++.dg/mv6.C: New test.

From-SVN: r193204
2012-11-06 02:35:17 +00:00
Joern Rennecke 9dddaecf2f * recog.c (extract_insn): Enabled alternative defaults to 1.
From-SVN: r193203
2012-11-06 00:30:54 +00:00
Jonathan Wakely 31828bd36a * include/profile/map.h (map::emplace_hint): Add missing return.
From-SVN: r193202
2012-11-06 00:19:57 +00:00
GCC Administrator 8787e27c9f Daily bump.
From-SVN: r193201
2012-11-06 00:18:31 +00:00
H.J. Lu 39b98eb169 Replace REX_INT_REG_P with REX_INT_REGNO_P
* config/i386/i386.c (print_reg): Replace REX_INT_REG_P with
	REX_INT_REGNO_P.

From-SVN: r193197
2012-11-05 16:07:47 -08:00
Jonathan Wakely 3c7d8b035a deque: Constrain InputIterator parameters.
* include/profile/deque: Constrain InputIterator parameters.
	* include/profile/forward_list: Likewise.
	* include/profile/list: Likewise.
	* include/profile/map.h: Likewise.
	* include/profile/multimap.h: Likewise.
	* include/profile/set.h: Likewise.
	* include/profile/multiset.h: Likewise.
	* include/profile/vector: Likewise.

From-SVN: r193196
2012-11-06 00:06:42 +00:00
Hans-Peter Nilsson 9052f54ccb re PR testsuite/55186 (gcc.dg/const-uniq-1.c fails due to vector expected but not being in the constant pool)
PR testsuite/55186
	* gcc.dg/const-uniq-1.c (a): Increase length four times.

From-SVN: r193194
2012-11-05 22:17:14 +00:00
Jack Howarth a7c552588a Use -Wl,-undefined,dynamic_lookup on darwin
* gcc.dg/torture/pr53922.c: Use -Wl,-undefined,dynamic_lookup on
	darwin.

From-SVN: r193193
2012-11-05 13:59:49 -08:00
Eric Botcazou 506190022d re PR tree-optimization/54986 (segfault on constant initialized to object address at -O)
PR tree-optimization/54986
	* gimple-fold.c (canonicalize_constructor_val): Strip again all no-op
	conversions on entry but add them back on exit if needed.

From-SVN: r193188
2012-11-05 21:39:02 +00:00
Andreas Schwab 511d31d856 final.c (final_scan_insn): Handle all comparison codes in non-jump and cmove insn.
* gcc/final.c (final_scan_insn) [HAVE_cc0]: Handle all comparison
codes in non-jump and cmove insn.

* gcc/testsuite/gcc.dg/torture/fp-compare.c: New testcase.

From-SVN: r193187
2012-11-05 21:11:04 +00:00
Jonathan Wakely e77c9aedcd forward_list: Update to meet allocator-aware requirements.
* include/profile/forward_list: Update to meet allocator-aware
	requirements.
	* include/debug/forward_list: Likewise.
	* include/debug/vector: Verify allocators are swapped or equal.
	* include/debug/macros.h (__glibcxx_check_equal_allocs): Define.
	* include/debug/formatter.h: Add new debug message.
	* src/c++11/debug.cc: Likewise.
	* testsuite/23_containers/forward_list/allocator/swap.cc: Do not
	swap containers with non-propagating, non-equal allocators.
	* testsuite/23_containers/vector/allocator/swap.cc: Likewise.

From-SVN: r193186
2012-11-05 21:10:27 +00:00
Benjamin Kosnik 684592672f re PR libstdc++/55028 (_GLIBCXX_DEBUG is broken when using v7 namespace)
2012-11-05  Benjamin Kosnik  <bkoz@redhat.com>
            Oleg Smolsky  <oleg@smolsky.net>

	PR libstdc++/55028
	*  config/abi/pre/gnu-versioned-namespace.ver: Add symbols.
	* testsuite/23_containers/unordered_multimap/insert/55028-debug.cc: New.

Co-Authored-By: Oleg Smolsky <oleg@smolsky.net>

From-SVN: r193185
2012-11-05 21:01:08 +00:00
François Dumont 51bf1e805e throw_allocator.h (__throw_value_base): Add move semantic, not throwing.
2012-10-05  François Dumont  <fdumont@gcc.gnu.org>

	* include/ext/throw_allocator.h (__throw_value_base): Add move
	semantic, not throwing.
	(__throw_value_limit): Likewise.
	(__throw_value_random): Likewise.
	* testsuite/util/exception/safety.h: Add validation of C++11
	methods emplace/emplace_front/emplace_back/emplace_hint.
	* testsuite/util/testsuite_container_traits.h: Signal emplace
	support on deque, forward_list, list and vector.
	* testsuite/23_containers/deque/requirements/exception/
	propagation_consistent.cc: Remove dg-do run fail.

From-SVN: r193184
2012-11-05 20:58:35 +00:00
Uros Bizjak b8435aa945 mode-switching.c (create_pre_exit): Force late switching if __builtin_{apply,return} emitted a load that require...
* mode-switching.c (create_pre_exit): Force late switching if
	__builtin_{apply,return} emitted a load that require mode,
	other than MODE_EXIT.


Co-Authored-By: Vladimir Yakovlev <vladimir.b.yakovlev@intel.com>

From-SVN: r193182
2012-11-05 20:46:31 +01:00
Paolo Carlini 935ec36fdd re PR libstdc++/55215 (Constructor seeding is broken for Mersenne twister)
2012-11-05  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/55215
	* include/bits/random.tcc (mersenne_twister_engine<>::seed(_Sseq&)):
	Assign state_size to _M_p.
	* testsuite/26_numerics/random/mersenne_twister_engine/cons/55215.cc:
	New.
	* testsuite/26_numerics/random/independent_bits_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/shuffle_order_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/subtract_with_carry_engine/cons/
	55215.cc: Likewise.
	* testsuite/26_numerics/random/discard_block_engine/cons/55215.cc:
	Likewise.
	* testsuite/26_numerics/random/linear_congruential_engine/cons/
	55215.cc: Likewise.

From-SVN: r193181
2012-11-05 19:25:20 +00:00
Richard Sandiford d18090b591 re PR target/55204 (ICE: in extract_insn, at recog.c:2140 (unrecognizable insn) with -O --param loop-invariant-max-bbs-in-loop=0)
gcc/
	PR target/55204
	* config/i386/i386.c (ix86_address_subreg_operand): Remove stack
	pointer check.
	(print_reg): Use true_regnum rather than REGNO.
	(ix86_print_operand_address): Remove SUBREG handling.

From-SVN: r193178
2012-11-05 18:51:33 +00:00
Jan Hubicka 1bc60b1814 const-1.c: Update.
* gcc.dg/const-1.c: Update.
	* gcc.dg/pure-1.c: Update.
	* tree-ssa-loop-niter.c (finite_loop_p): Revamp to be just wrapper of
	max_loop_iterations.

From-SVN: r193175
2012-11-05 18:12:37 +00:00
Florian Weimer 6d0ae0359c Detect overflow in size calculations in __cxa_vec_new{2,3}
2012-11-03  Florian Weimer  <fweimer@redhat.com>

	* libsupc++/vec.cc (compute_size): New.
	(__cxa_vec_new2, __cxa_vec_new3): Use it.
	* testsuite/18_support/cxa_vec.cc: New.

From-SVN: r193174
2012-11-05 18:48:46 +01:00
Ian Lance Taylor 0be1a5898f runtime: provide initcontext and fixcontext for NetBSD
From-SVN: r193173
2012-11-05 17:41:07 +00:00
Ian Lance Taylor ae0b23e2ff os: support more OSes
From-SVN: r193172
2012-11-05 17:36:40 +00:00
Joern Rennecke 8db13a7fd8 reorg.c (fill_simple_delay_slots): Avoid calling optimize_skip with a return instruction.
* reorg.c (fill_simple_delay_slots): Avoid calling optimize_skip
	with a return instruction.

From-SVN: r193171
2012-11-05 17:16:33 +00:00
Vladimir Makarov 1bdc4b116e re PR rtl-optimization/55151 (ICE: in assign_by_spills, at lra-assigns.c:1217 with -fPIC)
2012-11-05  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/55151
	* lra-constraints.c (process_alt_operands): Permit putting reg
	value into memory.  Increase reject for this case.

2012-11-05  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/55151
	* gcc.dg/pr55151.c: New test.

From-SVN: r193170
2012-11-05 16:38:27 +00:00
Dehao Chen 48866799f1 final.c (reemit_insn_block_notes): Do not change scope if insn location is UNKNOWN_LOCATION.
2012-11-05  Dehao Chen  <dehao@google.com>

	* final.c (reemit_insn_block_notes): Do not change scope if insn
	location is UNKNOWN_LOCATION.

From-SVN: r193169
2012-11-05 15:47:18 +00:00