This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
This patch makes the compiler generate faster code to reset a large array of integers to 0 by means of an aggregate with a single Others choice and, more generally, to set a large array of storage units to a single value by the same means, for example: type Arr is array (1 .. 10000) of Integer; A : Arr := (others => 0); Tested on x86_64-pc-linux-gnu, committed on trunk 2014-07-30 Eric Botcazou <ebotcazou@adacore.com> * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): New predicate. (Expand_Array_Aggregate): Also enable in-place expansion for code generated by the compiler. For an object declaration, set the kind of the object in addition to its type. If an in-place assignment is to be generated and it can be directly done by the back-end, do not expand the aggregate. * fe.h (Is_Others_Aggregate): Declare. * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Add support for an aggregate with a single Others choice on the RHS by means of __builtin_memset. Tidy up.
Attachment:
difs
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |