Commit Graph

658 Commits

Author SHA1 Message Date
Richard Biener
d04fe5541c Update ChangeLog and version files for release 2023-07-07 07:08:39 +00:00
Jakub Jelinek
7ff47281ce Update ChangeLog and version files for release 2022-06-28 08:37:18 +00:00
Richard Biener
f00b5710a3 Update ChangeLog and version files for release 2021-04-08 11:56:48 +00:00
GCC Administrator
b09431f4de Daily bump. 2020-08-14 00:16:58 +00:00
Jan Hubicka
c836addc22 Optimize ODR enum streaming
it turns out that half of the global decl stream of cc1 LTO build consits
TREE_LISTS, identifiers and integer cosntats representing TYPE_VALUES of enums.
Those are streamed only to produce ODR warning and used otherwise, so this
patch moves the info to a separate section that is represented and streamed
more effectively.

This also adds place for more info that may be used for ODR diagnostics
(i.e. at the moment we do not warn when the declarations differs i.e. by the
associated member functions and their types) and the type inheritance graph
rather then poluting the global stream.

I was bit unsure what enums we want to store into the section.  All parsed
enums is probably too expensive, only those enums streamed to represent IL is
bit hard to get, so I went for those seen by free lang data.

As a plus we now get bit more precise warning because also the location of
mismatched enum CONST_DECL is streamed.

It changes:
[WPA] read 4608466 unshared trees
[WPA] read 2942094 mergeable SCCs of average size 1.365328
[WPA] 8625389 tree bodies read in total
[WPA] tree SCC table: size 524287, 247652 elements, collision ratio: 0.383702
[WPA] tree SCC max chain length 2 (size 1)
[WPA] Compared 2694442 SCCs, 228 collisions (0.000085)
[WPA] Merged 2694419 SCCs
[WPA] Merged 3731982 tree bodies
[WPA] Merged 633335 types
[WPA] 122077 types prevailed (155548 associated trees)
...
[WPA] Compression: 110593119 input bytes, 287696614 uncompressed bytes (ratio: 2.601397)
[WPA] Size of mmap'd section decls: 85628556 bytes
[WPA] Size of mmap'd section function_body: 13842928 bytes

[WPA] read 1720989 unshared trees
[WPA] read 1252217 mergeable SCCs of average size 1.858507
[WPA] 4048243 tree bodies read in total
[WPA] tree SCC table: size 524287, 226524 elements, collision ratio: 0.491759
[WPA] tree SCC max chain length 2 (size 1)
[WPA] Compared 1025693 SCCs, 196 collisions (0.000191)
[WPA] Merged 1025670 SCCs
[WPA] Merged 2063373 tree bodies
[WPA] Merged 633497 types
[WPA] 122299 types prevailed (155827 associated trees)
...
[WPA] Compression: 103428770 input bytes, 281151423 uncompressed bytes (ratio: 2.718310)
[WPA] Size of mmap'd section decls: 49390917 bytes
[WPA] Size of mmap'd section function_body: 13858258 bytes
...
[WPA] Size of mmap'd section odr_types: 29054816 bytes

So number of SCCs streamed drops to 38% and the number of unshared trees (that
are bit misnamed since it is mostly integer_cst) to 37%.

Things speeds up correspondingly, but I did not save time report from previous
build.

The enum values are still quite surprisingly large.  I may take a look into
ways getting it smaller incrementally, but it streams reasonably fast:

Time variable                                   usr           sys          wall               GGC
 phase opt and generate             :  25.20 ( 68%)  10.88 ( 72%)  36.13 ( 69%)  868060 kB ( 52%)
 phase stream in                    :   4.46 ( 12%)   0.90 (  6%)   5.38 ( 10%)  790724 kB ( 48%)
 phase stream out                   :   6.69 ( 18%)   3.32 ( 22%)  10.03 ( 19%)       8 kB (  0%)
 ipa lto gimple in                  :   0.79 (  2%)   1.86 ( 12%)   2.39 (  5%)  252612 kB ( 15%)
 ipa lto gimple out                 :   2.48 (  7%)   0.78 (  5%)   3.26 (  6%)       0 kB (  0%)
 ipa lto decl in                    :   1.71 (  5%)   0.46 (  3%)   2.34 (  4%)  417883 kB ( 25%)
 ipa lto decl out                   :   3.28 (  9%)   0.07 (  0%)   3.27 (  6%)       0 kB (  0%)
 whopr wpa I/O                      :   0.40 (  1%)   2.24 ( 15%)   2.77 (  5%)       8 kB (  0%)
 lto stream decompression           :   1.38 (  4%)   0.31 (  2%)   1.36 (  3%)       0 kB (  0%)
 ipa ODR types                      :   0.18 (  0%)   0.02 (  0%)   0.25 (  0%)       0 kB (  0%)
 ipa inlining heuristics            :  11.64 ( 31%)   1.45 ( 10%)  13.12 ( 25%)  453160 kB ( 27%)
 ipa pure const                     :   1.74 (  5%)   0.00 (  0%)   1.76 (  3%)       0 kB (  0%)
 ipa icf                            :   1.72 (  5%)   5.33 ( 35%)   7.06 ( 13%)   16593 kB (  1%)
 whopr partitioning                 :   2.22 (  6%)   0.01 (  0%)   2.23 (  4%)    5689 kB (  0%)
 TOTAL                              :  37.17         15.20         52.46        1660886 kB

LTO-bootstrapped/regtested x86_64-linux, will comit it shortly.

gcc/ChangeLog:

2020-06-03  Jan Hubicka  <hubicka@ucw.cz>

	* ipa-devirt.c: Include data-streamer.h, lto-streamer.h and
	streamer-hooks.h.
	(odr_enums): New static var.
	(struct odr_enum_val): New struct.
	(class odr_enum): New struct.
	(odr_enum_map): New hashtable.
	(odr_types_equivalent_p): Drop code testing TYPE_VALUES.
	(add_type_duplicate): Likewise.
	(free_odr_warning_data): Do not free TYPE_VALUES.
	(register_odr_enum): New function.
	(ipa_odr_summary_write): New function.
	(ipa_odr_read_section): New function.
	(ipa_odr_summary_read): New function.
	(class pass_ipa_odr): New pass.
	(make_pass_ipa_odr): New function.
	* ipa-utils.h (register_odr_enum): Declare.
	* lto-section-in.c: (lto_section_name): Add odr_types section.
	* lto-streamer.h (enum lto_section_type): Add odr_types section.
	* passes.def: Add odr_types pass.
	* lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream
	TYPE_VALUES.
	(hash_tree): Likewise.
	* tree-streamer-in.c (lto_input_ts_type_non_common_tree_pointers):
	Likewise.
	* tree-streamer-out.c (write_ts_type_non_common_tree_pointers):
	Likewise.
	* timevar.def (TV_IPA_ODR): New timervar.
	* tree-pass.h (make_pass_ipa_odr): Declare.
	* tree.c (free_lang_data_in_type): Regiser ODR types.

gcc/lto/ChangeLog:

2020-06-03  Jan Hubicka  <hubicka@ucw.cz>

	* lto-common.c (compare_tree_sccs_1): Do not compare TYPE_VALUES.

gcc/testsuite/ChangeLog:

2020-06-03  Jan Hubicka  <hubicka@ucw.cz>

	* g++.dg/lto/pr84805_0.C: Update.

(cherry picked from commit 3fb68f2e66)

	Fix typo.
2020-08-13 17:50:29 +02:00
Jan Hubicka
23b8829c98 Avoid streaming stray references.
this patch avoids stremaing completely useless stray references to gobal decl
stream.  I am re-testing the patch (rebased to current tree) on x86_64-linux
and intend to commit once testing finishes.

gcc/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-out.c (lto_output_tree): Do not stream final ref if
	it is not needed.

gcc/lto/ChangeLog:

2020-05-22  Jan Hubicka  <hubicka@ucw.cz>

	* lto-common.c (lto_read_decls): Do not skip stray refs.

(cherry picked from commit bcb63eb2cb)
(cherry picked from commit 57400cf273f8052c601d90d86a47705faa17aaa9)
2020-08-13 17:49:07 +02:00
Jan Hubicka
1144d3cf1f Avoid SCC hashing on unmergeable trees
This is new incarantion of patch to identify unmergeable tree at streaming out
time rather than streaming in and to avoid pickling them to sccs with with hash
codes.

Building cc1 plus this patch reduces:

[WPA] read 4452927 SCCs of average size 1.986030
[WPA] 8843646 tree bodies read in total
[WPA] tree SCC table: size 524287, 205158 elements, collision ratio: 0.505204
[WPA] tree SCC max chain length 43 (size 1)
[WPA] Compared 947551 SCCs, 780270 collisions (0.823460)
[WPA] Merged 944038 SCCs
[WPA] Merged 5253521 tree bodies
[WPA] Merged 590027 types
...
[WPA] Size of mmap'd section decls: 99229066 bytes
[WPA] Size of mmap'd section function_body: 18398837 bytes
[WPA] Size of mmap'd section refs: 733678 bytes
[WPA] Size of mmap'd section jmpfuncs: 2965981 bytes
[WPA] Size of mmap'd section pureconst: 170248 bytes
[WPA] Size of mmap'd section profile: 17985 bytes
[WPA] Size of mmap'd section symbol_nodes: 3392736 bytes
[WPA] Size of mmap'd section inline: 2693920 bytes
[WPA] Size of mmap'd section icf: 435557 bytes
[WPA] Size of mmap'd section offload_table: 0 bytes
[WPA] Size of mmap'd section lto: 4320 bytes
[WPA] Size of mmap'd section ipa_sra: 651660 bytes

... to ...

[WPA] read 3312246 unshared trees
[WPA] read 1144381 mergeable SCCs of average size 4.833785
[WPA] 8843938 tree bodies read in total
[WPA] tree SCC table: size 524287, 197767 elements, collision ratio: 0.506446
[WPA] tree SCC max chain length 43 (size 1)
[WPA] Compared 946614 SCCs, 775077 collisions (0.818789)
[WPA] Merged 943798 SCCs
[WPA] Merged 5253336 tree bodies
[WPA] Merged 590105 types
....
[WPA] Size of mmap'd section decls: 81262144 bytes
[WPA] Size of mmap'd section function_body: 14702611 bytes
[WPA] Size of mmap'd section ext_symtab: 0 bytes
[WPA] Size of mmap'd section refs: 733695 bytes
[WPA] Size of mmap'd section jmpfuncs: 2332150 bytes
[WPA] Size of mmap'd section pureconst: 170292 bytes
[WPA] Size of mmap'd section profile: 17986 bytes
[WPA] Size of mmap'd section symbol_nodes: 3393358 bytes
[WPA] Size of mmap'd section inline: 2567939 bytes
[WPA] Size of mmap'd section icf: 435633 bytes
[WPA] Size of mmap'd section lto: 4320 bytes
[WPA] Size of mmap'd section ipa_sra: 651824 bytes

so results in about 22% reduction in global decl stream and 24% reduction on
function bodies stream (which is read mostly by ICF)

Martin, the zstd compression breaks the compression statistics (it works when
GCC is configured for zlib)

At first ltrans I get:

[LTRANS] Size of mmap'd section decls: 3734248 bytes
[LTRANS] Size of mmap'd section function_body: 4895962 bytes

... to ...

[LTRANS] Size of mmap'd section decls: 3479850 bytes
[LTRANS] Size of mmap'd section function_body: 3722935 bytes

So 7% reduction of global stream and 31% reduction of function bodies.

Stream in seems to get about 3% faster and stream out about 5% but it is
close to noise factor of my experiment.  I expect bigger speedups on
Firefox but I did not test it today since my Firefox setup broke again.
GCC is not very good example on the problem with anonymous namespace
types since we do not have so many of them.

Sice of object files in gcc directory is reduced by 11% (because hash
numbers do not compress well I guess).

The patch makes DFS walk to recognize trees that are not merged (anonymous
namespace, local function/variable decls, anonymous types etc).  As discussed
on IRC this is now done during the SCC walk rather than during the hash
computation.  When local tree is discovered we know that SCC components of everything that is on
the stack reffers to it and thus is also local. Moreover we mark trees into hash set in output block
so if we get a cross edge referring to local tree it gets marked too.

Patch also takes care of avoiding SCC wrappers around some trees. In particular
 1) singleton unmergeable SCCs are now streamed inline in global decl stream
    This includes INTEGER_CSTs and IDENTIFIER_NODEs that are shared by different
    code than rest of tree merging.
 2) We use LTO_trees instead of LTO_tree_scc to wrap unmergeable SCC components.
    It is still necessary to mark them because of forward references.  LTO_trees
    has simple header with number of trees and then things are streamed same way
    as for LTO_tree_scc. That is tree headers first followed by pickled references
    so things may point to future.

    Of course it is not necessary for LTO_tree_scc to be single component and
    streamer out may group more components together, but I decided to not snowball
    the patch even more
 3) In local streams when lto_output_tree is called and the topmost SCC components
    turns out to be singleton we stream the tree directly
    instead of LTO_tree_scc, hash code, pickled tree, reference to just stremaed tree.

    LTO_trees is used to wrap all trees needed to represent tree being streamed.
    It would make sense again to use only one LTO_trees rather than one per SCC
    but I think this can be done incrementally.

In general local trees are now recognized by new predicate local_tree_p

Bit subtle is handing of TRANLSATION_UNIT_DECL, INTEGER_CST and
IDENTIFIER_NODE.

TRANSLATION_UNIT_DECL a local tree but references to it does not make
other trees local (because we also understand local decls now).
So I check for it later after localness propagation is done.

INTEGER_CST and IDENTIFIER_NODEs are merged but not via the tree merging
machinery. So it makes sense to stream them as unmergeable trees but we
still need to compute their hashes so SCCs referring them do not get too
large collision chains.  For this reason they are checked just prior
stream out.

lto-bootstrapped/regteted x86_64-linux, OK?

gcc/ChangeLog:

2020-05-19  Jan Hubicka  <hubicka@ucw.cz>

	* lto-streamer-in.c (lto_input_scc): Add SHARED_SCC parameter.
	(lto_input_tree_1): Strenghten sanity check.
	(lto_input_tree): Update call of lto_input_scc.
	* lto-streamer-out.c: Include ipa-utils.h
	(create_output_block): Initialize local_trees if merigng is going
	to happen.
	(destroy_output_block): Destroy local_trees.
	(DFS): Add max_local_entry.
	(local_tree_p): New function.
	(DFS::DFS): Initialize and maintain it.
	(DFS::DFS_write_tree): Decide on streaming format.
	(lto_output_tree): Stream inline singleton SCCs
	* lto-streamer.h (enum LTO_tags): Add LTO_trees.
	(struct output_block): Add local_trees.
	(lto_input_scc): Update prototype.

gcc/lto/ChangeLog:

2020-05-19  Jan Hubicka  <hubicka@ucw.cz>

	* lto-common.c (compare_tree_sccs_1): Sanity check that we never
	read TRANSLATION_UNIT_DECL.
	(process_dref): Break out from ...
	(unify_scc): ... here.
	(process_new_tree): Break out from ...
	(lto_read_decls): ... here; handle streaming of singleton trees.
	(print_lto_report_1): Update statistics.

(cherry picked from commit 03d90a20a1)
(cherry picked from commit c6328b32770132efa004a3cad127cf74be84e911)
2020-08-13 17:49:07 +02:00
Richard Biener
ee5c3db6c5 Update ChangeLog and version files for release 2020-07-23 06:35:38 +00:00
Jakub Jelinek
6e6e3f144a Update ChangeLog and version files for release 2020-05-07 10:50:32 +00:00
Jakub Jelinek
575ac27fd5 c++, middle-end, rs6000: Fix C++17 ABI incompatibilities during class layout and [[no_unique_address]] handling [PR94707]
As reported by Iain and David, powerpc-darwin and powerpc-aix* have C++14
vs. C++17 ABI incompatibilities which are not fixed by mere adding of
cxx17_empty_base_field_p calls.  Unlike the issues that were seen on other
targets where the artificial empty base field affected function argument
passing or returning of values, on these two targets the difference is
during class layout, not afterwards (e.g.
struct empty_base {};
struct S : public empty_base { unsigned long long l[2]; };
will have different __alignof__ (S) between C++14 and C++17 (or possibly
with double instead of unsigned long long too)).

I've tried:
struct X { };
struct Y { int : 0; };
struct Z { int : 0; Y y; };
struct U : public X { X q; };
struct A { float a, b, c, d; };
struct B : public X { float a, b, c, d; };
struct C : public Y { float a, b, c, d; };
struct D : public Z { float a, b, c, d; };
struct E : public U { float a, b, c, d; };
struct F { [[no_unique_address]] X x; float a, b, c, d; };
struct G { [[no_unique_address]] Y y; float a, b, c, d; };
struct H { [[no_unique_address]] Z z; float a, b, c, d; };
struct I { [[no_unique_address]] U u; float a, b, c, d; };
struct J { float a, b; [[no_unique_address]] X x; float c, d; };
struct K { float a, b; [[no_unique_address]] Y y; float c, d; };
struct L { float a, b; [[no_unique_address]] Z z; float c, d; };
struct M { float a, b; [[no_unique_address]] U u; float c, d; };
 #define T(S, s) extern S s; extern void foo##s (S); int bar##s () { foo##s (s); return 0; }
T (A, a)
T (B, b)
T (C, c)
T (D, d)
T (E, e)
T (F, f)
T (G, g)
T (H, h)
T (I, i)
T (J, j)
T (K, k)
T (L, l)
T (M, m)
testcase on powerpc64-linux.  Results:
G++ 9 -std=c++14                A, B, C passed in fprs, the rest in gprs
G++ 9 -std=c++17                A passed in fprs, the rest in gprs
current trunk -std=c++14 & 17   A, B, C passed in fprs, the rest in gprs
patched trunk -std=c++14 & 17   A, B, C, F, G, J, K passed in fprs, the rest in gprs
clang++ [*] -std=c++14 & 17     A, B, C, F, G, J, K passed in fprs, the rest in gprs
[*] clang version 11.0.0 (git@github.com:llvm/llvm-project.git 5c352e69e76a26e4eda075e20aa6a9bb7686042c)

Is that what we want?  I think it matches the stated intent of P0840R2 or
what Jason/Jonathan said, and doing something different like e.g. not
treating C, G and K as homogenous because of the int : 0 in empty bases
or in zero sized [[no_unique_address] fields would be quite hard to
implement (because for C++14 the FIELD_DECL just isn't there).

2020-04-29  Jakub Jelinek  <jakub@redhat.com>

	PR target/94707
	* tree-core.h (tree_decl_common): Note decl_flag_0 used for
	DECL_FIELD_ABI_IGNORED.
	* tree.h (DECL_FIELD_ABI_IGNORED): Define.
	* calls.h (cxx17_empty_base_field_p): Change into a temporary
	macro, check DECL_FIELD_ABI_IGNORED flag with no "no_unique_address"
	attribute.
	* calls.c (cxx17_empty_base_field_p): Remove.
	* tree-streamer-out.c (pack_ts_decl_common_value_fields): Handle
	DECL_FIELD_ABI_IGNORED.
	* tree-streamer-in.c (unpack_ts_decl_common_value_fields): Likewise.
	* lto-streamer-out.c (hash_tree): Likewise.
	* config/rs6000/rs6000-call.c (rs6000_aggregate_candidate): Rename
	cxx17_empty_base_seen to empty_base_seen, change type to int *,
	adjust recursive calls, use DECL_FIELD_ABI_IGNORED instead of
	cxx17_empty_base_field_p, if "no_unique_address" attribute is
	present, propagate that to the caller too.
	(rs6000_discover_homogeneous_aggregate): Adjust
	rs6000_aggregate_candidate caller, emit different diagnostics
	when c++17 empty base fields are present and when empty
	[[no_unique_address]] fields are present.
	* config/rs6000/rs6000.c (rs6000_special_round_type_align,
	darwin_rs6000_special_round_type_align): Skip DECL_FIELD_ABI_IGNORED
	fields.

	* class.c (build_base_field): Set DECL_FIELD_ABI_IGNORED on C++17 empty
	base artificial FIELD_DECLs.
	(layout_class_type): Set DECL_FIELD_ABI_IGNORED on empty class
	field_poverlapping_p FIELD_DECLs.

	* lto-common.c (compare_tree_sccs_1): Handle DECL_FIELD_ABI_IGNORED.

	* g++.target/powerpc/pr94707-1.C: New test.
	* g++.target/powerpc/pr94707-2.C: New test.
	* g++.target/powerpc/pr94707-3.C: New test.
	* g++.target/powerpc/pr94707-4.C: New test.
	* g++.target/powerpc/pr94707-5.C: New test.
	* g++.target/powerpc/pr94707-4.C: New test.
2020-04-29 09:01:49 +02:00
Martin Liska
b835645c7a Initialize file_data->lto_section_header before lto_mode_identity_table call.
PR lto/94612
	* lto-common.c: Initialize file_data->lto_section_header
	before lto_mode_identity_table call.  It is needed because
	it decompresses a LTO section.
2020-04-17 10:57:03 +02:00
Martin Liska
70df40cab6 Allow new/delete operator deletion only for replaceable.
PR c++/94314
	* gimple.c (gimple_call_operator_delete_p): Rename to...
	(gimple_call_replaceable_operator_delete_p): ... this.
	Use DECL_IS_REPLACEABLE_OPERATOR_DELETE_P.
	* gimple.h (gimple_call_operator_delete_p): Rename to ...
	(gimple_call_replaceable_operator_delete_p): ... this.
	* tree-core.h (tree_function_decl): Add replaceable_operator
	flag.
	* tree-ssa-dce.c (mark_all_reaching_defs_necessary_1):
	Use DECL_IS_REPLACEABLE_OPERATOR_DELETE_P.
	(propagate_necessity): Use gimple_call_replaceable_operator_delete_p.
	(eliminate_unnecessary_stmts): Likewise.
	* tree-streamer-in.c (unpack_ts_function_decl_value_fields):
	Pack DECL_IS_REPLACEABLE_OPERATOR.
	* tree-streamer-out.c (pack_ts_function_decl_value_fields):
	Unpack the field here.
	* tree.h (DECL_IS_REPLACEABLE_OPERATOR): New.
	(DECL_IS_REPLACEABLE_OPERATOR_NEW_P): New.
	(DECL_IS_REPLACEABLE_OPERATOR_DELETE_P): New.
	* cgraph.c (cgraph_node::dump): Dump if an operator is replaceable.
	* ipa-icf.c (sem_item::compare_referenced_symbol_properties): Compare
	replaceable operator flags.
	PR c++/94314
	* decl.c (duplicate_decls): Duplicate also DECL_IS_REPLACEABLE_OPERATOR.
	(cxx_init_decl_processing): Mark replaceable all implicitly defined
	operators.
	PR c++/94314
	* lto-common.c (compare_tree_sccs_1): Compare also
	DECL_IS_REPLACEABLE_OPERATOR.
	PR c++/94314
	* g++.dg/pr94314-2.C: New test.
	* g++.dg/pr94314-3.C: New test.
	* g++.dg/pr94314.C: New test.
2020-04-08 17:16:55 +02:00
Jakub Jelinek
158cccea0d middle-end: Avoid using DECL_UID in ASM_FORMAT_PRIVATE_NAME [PR94223]
As mentioned in the PR, we don't guarantee DECL_UID to be the same between
corresponding decls in -g and -g0 builds, -g can create more decls and all
that is guaranteed is that the DECL_UIDs of the corresponding decls compare
the same.
The following testcase gets a -fcompare-debug failure because these
functions use DECL_UID as the number in ASM_FORMAT_PRIVATE_NAME.

The patch fixes it by using just a sequential number there instead.
I don't think this can be called during PCH writing, this only happens for
non-public decls and the C/C++ FEs shouldn't mangling those at that point
(furthermore C++ FE uses a different set_decl_assembler_name hook and this
one is something only the gimplifier calls on C.NNNN temporaries.

2020-03-25  Jakub Jelinek  <jakub@redhat.com>

	PR c++/94223
	* langhooks.c (lhd_set_decl_assembler_name): Use a static ulong
	counter instead of DECL_UID.

	* lto-lang.c (lto_set_decl_assembler_name): Use a static ulong
	counter instead of DECL_UID.

	* g++.dg/opt/pr94223.C: New test.
2020-03-25 09:18:33 +01:00
Tobias Burnus
c2211a60ff Fix OpenMP offload handling for target-link variables for nvptx (PR81689)
PR libgomp/81689
	* lto.c (offload_handle_link_vars): Propagate TREE_PUBLIC state.

	PR libgomp/81689
	* omp-offload.c (omp_finish_file): Fix target-link handling if
	targetm_common.have_named_sections is false.

	PR libgomp/81689
	* testsuite/libgomp.c/target-link-1.c: Remove xfail.
2020-03-24 15:13:56 +01:00
Tobias Burnus
ce6413087d lto/lto.c – used $ or . in generated linkptr name
* lto.c (offload_handle_link_vars): Reduce chance of
	naming clashes of generated linkptr variable.
2020-03-23 14:41:58 +01:00
Tobias Burnus
b809f0b658 Set proper DECL_ALIGN in offload_handle_link_vars (PR94233)
gcc/lto/
	PR middle-end/94233
        * lto.c (offload_handle_link_vars): Cleanup; call
	build_decl to ensure alignment is set.
2020-03-23 08:31:23 +01:00
Martin Liska
27736735f6 Do not load body for alias symbols.
PR lto/93489
	* lto-dump.c (dump_list_functions): Do not
	load body for aliases.
	(dump_body): Likewise here.
2020-02-05 09:56:31 +01:00
Martin Liska
f48c601413 Fix noreorder symbol partitioning reversion.
* lto-partition.c (lto_balanced_map): Remember
	best_noreorder_pos and then restore to it
	when we revert.
2020-01-16 20:44:27 +01:00
Martin Liska
3629ff8ad6 Use cgraph_node::dump_{asm_},name where possible.
2020-01-08  Martin Liska  <mliska@suse.cz>

	* cgraph.c (cgraph_node::dump): Use ::dump_name or
	::dump_asm_name instead of (::name or ::asm_name).
	* cgraphclones.c (symbol_table::materialize_all_clones): Likewise.
	* cgraphunit.c (walk_polymorphic_call_targets): Likewise.
	(analyze_functions): Likewise.
	(expand_all_functions): Likewise.
	* ipa-cp.c (ipcp_cloning_candidate_p): Likewise.
	(propagate_bits_across_jump_function): Likewise.
	(dump_profile_updates): Likewise.
	(ipcp_store_bits_results): Likewise.
	(ipcp_store_vr_results): Likewise.
	* ipa-devirt.c (dump_targets): Likewise.
	* ipa-fnsummary.c (analyze_function_body): Likewise.
	* ipa-hsa.c (check_warn_node_versionable): Likewise.
	(process_hsa_functions): Likewise.
	* ipa-icf.c (sem_item_optimizer::merge_classes): Likewise.
	(set_alias_uids): Likewise.
	* ipa-inline-transform.c (save_inline_function_body): Likewise.
	* ipa-inline.c (recursive_inlining): Likewise.
	(inline_to_all_callers_1): Likewise.
	(ipa_inline): Likewise.
	* ipa-profile.c (ipa_propagate_frequency_1): Likewise.
	(ipa_propagate_frequency): Likewise.
	* ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
	(remove_described_reference): Likewise.
	* ipa-pure-const.c (worse_state): Likewise.
	(check_retval_uses): Likewise.
	(analyze_function): Likewise.
	(propagate_pure_const): Likewise.
	(propagate_nothrow): Likewise.
	(dump_malloc_lattice): Likewise.
	(propagate_malloc): Likewise.
	(pass_local_pure_const::execute): Likewise.
	* ipa-visibility.c (optimize_weakref): Likewise.
	(function_and_variable_visibility): Likewise.
	* ipa.c (symbol_table::remove_unreachable_nodes): Likewise.
	(ipa_discover_variable_flags): Likewise.
	* lto-streamer-out.c (output_function): Likewise.
	(output_constructor): Likewise.
	* tree-inline.c (copy_bb): Likewise.
	* tree-ssa-structalias.c (ipa_pta_execute): Likewise.
	* varpool.c (symbol_table::remove_unreferenced_decls): Likewise.
2020-01-08  Martin Liska  <mliska@suse.cz>

	* lto-partition.c (add_symbol_to_partition_1): Use ::dump_name or
	::dump_asm_name instead of (::name or ::asm_name).
	(lto_balanced_map): Likewise.
	(promote_symbol): Likewise.
	(rename_statics): Likewise.
	* lto.c (lto_wpa_write_files): Likewise.
2020-01-08  Martin Liska  <mliska@suse.cz>

	* gcc.dg/ipa/ipa-icf-1.c: Update expected scanned output.
	* gcc.dg/ipa/ipa-icf-10.c: Likewise.
	* gcc.dg/ipa/ipa-icf-11.c: Likewise.
	* gcc.dg/ipa/ipa-icf-12.c: Likewise.
	* gcc.dg/ipa/ipa-icf-13.c: Likewise.
	* gcc.dg/ipa/ipa-icf-16.c: Likewise.
	* gcc.dg/ipa/ipa-icf-18.c: Likewise.
	* gcc.dg/ipa/ipa-icf-2.c: Likewise.
	* gcc.dg/ipa/ipa-icf-20.c: Likewise.
	* gcc.dg/ipa/ipa-icf-21.c: Likewise.
	* gcc.dg/ipa/ipa-icf-23.c: Likewise.
	* gcc.dg/ipa/ipa-icf-25.c: Likewise.
	* gcc.dg/ipa/ipa-icf-26.c: Likewise.
	* gcc.dg/ipa/ipa-icf-27.c: Likewise.
	* gcc.dg/ipa/ipa-icf-3.c: Likewise.
	* gcc.dg/ipa/ipa-icf-35.c: Likewise.
	* gcc.dg/ipa/ipa-icf-36.c: Likewise.
	* gcc.dg/ipa/ipa-icf-37.c: Likewise.
	* gcc.dg/ipa/ipa-icf-38.c: Likewise.
	* gcc.dg/ipa/ipa-icf-5.c: Likewise.
	* gcc.dg/ipa/ipa-icf-7.c: Likewise.
	* gcc.dg/ipa/ipa-icf-8.c: Likewise.
	* gcc.dg/ipa/ipa-icf-merge-1.c: Likewise.
	* gcc.dg/ipa/pr64307.c: Likewise.
	* gcc.dg/ipa/pr90555.c: Likewise.
	* gcc.dg/ipa/propmalloc-1.c: Likewise.
	* gcc.dg/ipa/propmalloc-2.c: Likewise.
	* gcc.dg/ipa/propmalloc-3.c: Likewise.

From-SVN: r280009
2020-01-08 15:30:24 +00:00
Martin Liska
d597b9445f Replace node->name/node->order with node->dump_name.
2020-01-08  Martin Liska  <mliska@suse.cz>

	* ipa-fnsummary.c (dump_ipa_call_summary): Use symtab_node::dump_name.
	(ipa_call_context::estimate_size_and_time): Likewise.
	(inline_analyze_function): Likewise.
2020-01-08  Martin Liska  <mliska@suse.cz>

	* lto-partition.c (lto_balanced_map): Use symtab_node::dump_name.

From-SVN: r279999
2020-01-08 11:58:49 +00:00
Jakub Jelinek
8d9254fc8a Update copyright years.
From-SVN: r279813
2020-01-01 12:51:42 +01:00
Jan Hubicka
40ebe1fc2f Fix symver attribute with LTO
* cgraph.c (cgraph_node_cannot_be_local_p_1): Prevent targets of
	symver attributes to be localized.
	* ipa-visibility.c (cgraph_externally_visible_p,
	varpool_node::externally_visible_p): Likewise.
	* symtab.c (symtab_node::verify_base): Check visibility of symbol
	versions.

	* lto-common.c (read_cgraph_and_symbols): Work around binutils
	PR25424


Co-Authored-By: Xi Ruoyao <xry111@mengyan1223.wang>

From-SVN: r279566
2019-12-19 10:03:48 +00:00
Jan Hubicka
59c7b29e9a Turn tp_first_run counts back to 32bit values.
* cgraph.c (cgraph_node::verify_node): Verify tp_first_run.
	* cgraph.h (cgrpah_node): Turn tp_first_run back to int.
	* cgraphunit.c (tp_first_run_node_cmp): Do not watch for overflows.
	(expand_all_functions): First expand ordered section and then
	unordered.
	* lto-partition.c (lto_balanced_map): Fix printing of tp_first_run.
	* profile.c (compute_value_histograms): Error on out of range
	tp_first_runs.

From-SVN: r279178
2019-12-10 17:54:41 +00:00
Jan Hubicka
6d8fd122c4 Fix overflows in -fprofile-reorder-functions
This patch fixes three sissues with -fprofile-reorder-functions:
1) First is that tp_first_run is stored as 32bit integer while it can easily
   overflow (and does so during Firefox profiling).
2) Second problem is that flag_profile_functions can
   not be tested w/o function context.
   The changes to expand_all_functions makes it to work on mixed units by
   first outputting all functions w/o -fprofile-reorder-function (or with no
   profile info) and then outputting in first_run order
3) LTO partitioner was mixing up order by tp_first_run and by order.
   for no_reorder we definitly want to order via first, while for everything
   else we want to roder by second.

I have also merged duplicated comparators since they are bit fragile into
tp_first_run_node_cmp.

I originaly started to look into this because of undefined symbols with
Firefox PGO builds.  These symbols went away with fixing these bug but I am not
quite sure how. it is possible that there is another problem in lto_blanced_map
but even after reading the noreorder code few times carefuly I did not find it.
Other explanation would be that our new qsort with broken comparator due to
overflow can actualy remove some entries in the array, but that sounds bit
crazy.

Bootstrapped/regested x86_64-linux.

	* cgraph.c (cgraph_node::dump): Make tp_first_run 64bit.
	* cgraph.h (cgrpah_node): Likewise.
	(tp_first_run_node_cmp): Deeclare.
	* cgraphunit.c (node_cmp): Rename to ...
	(tp_first_run_node_cmp): ... this; export; watch for 64bit overflows;
	clear tp_first_run for no_reorder and !flag_profile_reorder_functions.
	(expand_all_functions): Collect tp_first_run and normal functions to
	two vectors so the other functions remain sorted. Do not check for
	flag_profile_reorder_functions it is function local flag.
	* profile.c (compute_value_histograms): Update tp_first_run printing.

	* lto-partition.c (node_cmp): Turn into simple order comparsions.
	(varpool_node_cmp): Remove.
	(add_sorted_nodes): Use node_cmp.
	(lto_balanced_map): Use tp_first_run_node_cmp.

From-SVN: r279093
2019-12-08 17:02:30 +00:00
Jan Hubicka
b74d8dc4cf cgraph.c (cgraph_node::dump): Dump unit_id and merged_extern_inline.
* cgraph.c (cgraph_node::dump): Dump unit_id and merged_extern_inline.
	* cgraph.h (cgraph_node): Add unit_id and
	merged_extern_inline.
	(symbol_table): Add max_unit.
	(symbol_table::symbol_table): Initialize it.
	* cgraphclones.c (duplicate_thunk_for_node): Copy unit_id.
	merged_comdat, merged_extern_inline.
	(cgraph_node::create_clone): Likewise.
	(cgraph_node::create_version_clone): Likewise.
	* ipa-fnsummary.c (dump_ipa_call_summary): Dump info about cross module
	calls.
	* ipa-fnsummary.h (cross_module_call_p): New inline function.
	* ipa-inline-analyssi.c (simple_edge_hints): Use it.
	* ipa-inline.c (inline_small_functions): Likewise.
	* lto-symtab.c (lto_cgraph_replace_node): Record merged_extern_inline;
	copy merged_comdat and merged_extern_inline.
	* lto-cgraph.c (lto_output_node): Stream out merged_comdat,
	merged_extern_inline and unit_id.
	(input_overwrite_node): Stream in these.
	(input_cgraph_1): Set unit_base.
	* lto-streamer.h (lto_file_decl_data): Add unit_base.
	* symtab.c (symtab_node::make_decl_local): Record former_comdat.

	* g++.dg/lto/inline-crossmodule-1.h: New testcase.
	* g++.dg/lto/inline-crossmodule-1_0.C: New testcase.
	* g++.dg/lto/inline-crossmodule-1_1.C: New testcase.

From-SVN: r278876
2019-11-30 16:56:45 +00:00
Joseph Myers
5b8d936768 Prevent all uses of DFP when unsupported (PR c/91985).
Code that directly uses _Decimal* types on architectures not
supporting DFP is properly diagnosed ("error: decimal floating-point
not supported for this target"), via a call to
targetm.decimal_float_supported_p, if the _Decimal32, _Decimal64 or
_Decimal128 keywords are used to access it.  Use via mode attributes
is also diagnosed ("unable to emulate 'SD'"); so is use of the
FLOAT_CONST_DECIMAL64 pragma.  However, it is possible to access those
types via typeof applied to constants or built-in functions without
such an error.  I expect that there are ways to get an ICE from this;
certainly it uses a completely undefined ABI.

This patch arranges for the types not to exist in the compiler at all
when DFP is not supported.  As is done with unsupported _FloatN /
_FloatNx types, the global tree nodes are left as NULL_TREE, and the
built-in function machinery is made to use error_mark_node for them in
that case in builtin-types.def, so that the built-in functions are
unavailable.  Code handling constants is adjusted to give an error,
and other code that might not work with the global tree nodes being
NULL_TREE is also updated.

Bootstrapped with no regressions for x86_64-pc-linux-gnu.  Also tested
with no regressions for cross to aarch64-linux-gnu, as a configuration
without DFP support.

	PR c/91985
gcc:
	* builtin-types.def (BT_DFLOAT32, BT_DFLOAT64, BT_DFLOAT128)
	(BT_DFLOAT32_PTR, BT_DFLOAT64_PTR, BT_DFLOAT128_PTR): Define to
	error_mark_node if corresponding global tree node is NULL.
	* tree.c (build_common_tree_nodes): Do not initialize
	dfloat32_type_node, dfloat64_type_node or dfloat128_type_node if
	decimal floating-point not supported.

gcc/c:
	* c-decl.c (finish_declspecs): Use int instead of decimal
	floating-point types if decimal floating-point not supported.

gcc/c-family:
	* c-common.c (c_common_type_for_mode): Handle decimal
	floating-point types being NULL_TREE.
	* c-format.c (get_format_for_type_1): Handle specified types being
	NULL_TREE.
	* c-lex.c (interpret_float): Give an error for decimal
	floating-point constants when decimal floating-point not
	supported.

gcc/lto:
	* lto-lang.c (lto_type_for_mode): Handle decimal floating-point
	types being NULL_TREE.

gcc/testsuite:
	* gcc.dg/c2x-no-dfp-1.c, gcc.dg/gnu2x-builtins-no-dfp-1.c: New
	tests.
	* gcc.dg/fltconst-pedantic-dfp.c: Expect errors when decimal
	floating-point not supported.

From-SVN: r278684
2019-11-25 13:45:42 +00:00
Jan Hubicka
9fd052e775 Release memory-block-pool memory back to malloc.
* ggc-page.c (ggc_collect): Call memory_block_pool::trim.
	* memory-block.cc (memory_block_pool::clear_free_list): Rename to ...
	(memory_block_pool::reduce_free_list): ... this one.
	(memory_block_pool::trim): New static function.
	* memory-block.h (memory_block_pool::freelist_size): New constant
	(memory_block_pool::clear_free_list): Rename to ...
	(memory_block_pool::reduce_free_list): ... this one.
	(memory_block_pool::trim): Declare.
	
	* lto.c (lto_wpa_write_files): Call memory_block_pool::trim.

From-SVN: r278616
2019-11-22 14:37:37 +00:00
Martin Liska
e61d0e4e2e Remove wrong lto-dump: lto1 makefile dependency.
2019-11-14  Martin Liska  <mliska@suse.cz>

	* Make-lang.in: Remove wrong dependency
	of LTO_DUMP_EXE on LTO_EXE.

From-SVN: r278212
2019-11-14 08:57:57 +00:00
Martin Liska
0c29cac4a8 Remove gcc/params.* files.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* Makefile.in: Remove PARAMS_H and params.list
	and params.options.
	* params-enum.h: Remove.
	* params-list.h: Remove.
	* params-options.h: Remove.
	* params.c: Remove.
	* params.def: Remove.
	* params.h: Remove.
	* asan.c: Do not include params.h.
	* auto-profile.c: Likewise.
	* bb-reorder.c: Likewise.
	* builtins.c: Likewise.
	* cfgcleanup.c: Likewise.
	* cfgexpand.c: Likewise.
	* cfgloopanal.c: Likewise.
	* cgraph.c: Likewise.
	* combine.c: Likewise.
	* common/config/aarch64/aarch64-common.c: Likewise.
	* common/config/gcn/gcn-common.c: Likewise.
	* common/config/ia64/ia64-common.c: Likewise.
	* common/config/powerpcspe/powerpcspe-common.c: Likewise.
	* common/config/rs6000/rs6000-common.c: Likewise.
	* common/config/sh/sh-common.c: Likewise.
	* config/aarch64/aarch64.c: Likewise.
	* config/alpha/alpha.c: Likewise.
	* config/arm/arm.c: Likewise.
	* config/avr/avr.c: Likewise.
	* config/csky/csky.c: Likewise.
	* config/i386/i386-builtins.c: Likewise.
	* config/i386/i386-expand.c: Likewise.
	* config/i386/i386-features.c: Likewise.
	* config/i386/i386-options.c: Likewise.
	* config/i386/i386.c: Likewise.
	* config/ia64/ia64.c: Likewise.
	* config/rs6000/rs6000-logue.c: Likewise.
	* config/rs6000/rs6000.c: Likewise.
	* config/s390/s390.c: Likewise.
	* config/sparc/sparc.c: Likewise.
	* config/visium/visium.c: Likewise.
	* coverage.c: Likewise.
	* cprop.c: Likewise.
	* cse.c: Likewise.
	* cselib.c: Likewise.
	* dse.c: Likewise.
	* emit-rtl.c: Likewise.
	* explow.c: Likewise.
	* final.c: Likewise.
	* fold-const.c: Likewise.
	* gcc.c: Likewise.
	* gcse.c: Likewise.
	* ggc-common.c: Likewise.
	* ggc-page.c: Likewise.
	* gimple-loop-interchange.cc: Likewise.
	* gimple-loop-jam.c: Likewise.
	* gimple-loop-versioning.cc: Likewise.
	* gimple-ssa-split-paths.c: Likewise.
	* gimple-ssa-sprintf.c: Likewise.
	* gimple-ssa-store-merging.c: Likewise.
	* gimple-ssa-strength-reduction.c: Likewise.
	* gimple-ssa-warn-alloca.c: Likewise.
	* gimple-ssa-warn-restrict.c: Likewise.
	* graphite-isl-ast-to-gimple.c: Likewise.
	* graphite-optimize-isl.c: Likewise.
	* graphite-scop-detection.c: Likewise.
	* graphite-sese-to-poly.c: Likewise.
	* graphite.c: Likewise.
	* haifa-sched.c: Likewise.
	* hsa-gen.c: Likewise.
	* ifcvt.c: Likewise.
	* ipa-cp.c: Likewise.
	* ipa-fnsummary.c: Likewise.
	* ipa-inline-analysis.c: Likewise.
	* ipa-inline.c: Likewise.
	* ipa-polymorphic-call.c: Likewise.
	* ipa-profile.c: Likewise.
	* ipa-prop.c: Likewise.
	* ipa-split.c: Likewise.
	* ipa-sra.c: Likewise.
	* ira-build.c: Likewise.
	* ira-conflicts.c: Likewise.
	* loop-doloop.c: Likewise.
	* loop-invariant.c: Likewise.
	* loop-unroll.c: Likewise.
	* lra-assigns.c: Likewise.
	* lra-constraints.c: Likewise.
	* modulo-sched.c: Likewise.
	* opt-suggestions.c: Likewise.
	* opts.c: Likewise.
	* postreload-gcse.c: Likewise.
	* predict.c: Likewise.
	* reload.c: Likewise.
	* reorg.c: Likewise.
	* resource.c: Likewise.
	* sanopt.c: Likewise.
	* sched-deps.c: Likewise.
	* sched-ebb.c: Likewise.
	* sched-rgn.c: Likewise.
	* sel-sched-ir.c: Likewise.
	* sel-sched.c: Likewise.
	* shrink-wrap.c: Likewise.
	* stmt.c: Likewise.
	* targhooks.c: Likewise.
	* toplev.c: Likewise.
	* tracer.c: Likewise.
	* trans-mem.c: Likewise.
	* tree-chrec.c: Likewise.
	* tree-data-ref.c: Likewise.
	* tree-if-conv.c: Likewise.
	* tree-inline.c: Likewise.
	* tree-loop-distribution.c: Likewise.
	* tree-parloops.c: Likewise.
	* tree-predcom.c: Likewise.
	* tree-profile.c: Likewise.
	* tree-scalar-evolution.c: Likewise.
	* tree-sra.c: Likewise.
	* tree-ssa-ccp.c: Likewise.
	* tree-ssa-dom.c: Likewise.
	* tree-ssa-dse.c: Likewise.
	* tree-ssa-ifcombine.c: Likewise.
	* tree-ssa-loop-ch.c: Likewise.
	* tree-ssa-loop-im.c: Likewise.
	* tree-ssa-loop-ivcanon.c: Likewise.
	* tree-ssa-loop-ivopts.c: Likewise.
	* tree-ssa-loop-manip.c: Likewise.
	* tree-ssa-loop-niter.c: Likewise.
	* tree-ssa-loop-prefetch.c: Likewise.
	* tree-ssa-loop-unswitch.c: Likewise.
	* tree-ssa-math-opts.c: Likewise.
	* tree-ssa-phiopt.c: Likewise.
	* tree-ssa-pre.c: Likewise.
	* tree-ssa-reassoc.c: Likewise.
	* tree-ssa-sccvn.c: Likewise.
	* tree-ssa-scopedtables.c: Likewise.
	* tree-ssa-sink.c: Likewise.
	* tree-ssa-strlen.c: Likewise.
	* tree-ssa-structalias.c: Likewise.
	* tree-ssa-tail-merge.c: Likewise.
	* tree-ssa-threadbackward.c: Likewise.
	* tree-ssa-threadedge.c: Likewise.
	* tree-ssa-uninit.c: Likewise.
	* tree-switch-conversion.c: Likewise.
	* tree-vect-data-refs.c: Likewise.
	* tree-vect-loop.c: Likewise.
	* tree-vect-slp.c: Likewise.
	* tree-vrp.c: Likewise.
	* tree.c: Likewise.
	* value-prof.c: Likewise.
	* var-tracking.c: Likewise.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* gimple-parser.c: Do not include params.h.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* name-lookup.c: Do not include params.h.
	* typeck.c: Likewise.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* lto-common.c: Do not include params.h.
	* lto-partition.c: Likewise.
	* lto.c: Likewise.

From-SVN: r278086
2019-11-12 10:09:41 +00:00
Martin Liska
028d409252 Apply mechanical replacement (generated patch).
2019-11-12  Martin Liska  <mliska@suse.cz>

	* asan.c (asan_sanitize_stack_p): Replace old parameter syntax
	with the new one, include opts.h if needed.  Use SET_OPTION_IF_UNSET
	macro.
	(asan_sanitize_allocas_p): Likewise.
	(asan_emit_stack_protection): Likewise.
	(asan_protect_global): Likewise.
	(instrument_derefs): Likewise.
	(instrument_builtin_call): Likewise.
	(asan_expand_mark_ifn): Likewise.
	* auto-profile.c (auto_profile): Likewise.
	* bb-reorder.c (copy_bb_p): Likewise.
	(duplicate_computed_gotos): Likewise.
	* builtins.c (inline_expand_builtin_string_cmp): Likewise.
	* cfgcleanup.c (try_crossjump_to_edge): Likewise.
	(try_crossjump_bb): Likewise.
	* cfgexpand.c (defer_stack_allocation): Likewise.
	(stack_protect_classify_type): Likewise.
	(pass_expand::execute): Likewise.
	* cfgloopanal.c (expected_loop_iterations_unbounded): Likewise.
	(estimate_reg_pressure_cost): Likewise.
	* cgraph.c (cgraph_edge::maybe_hot_p): Likewise.
	* combine.c (combine_instructions): Likewise.
	(record_value_for_reg): Likewise.
	* common/config/aarch64/aarch64-common.c (aarch64_option_validate_param): Likewise.
	(aarch64_option_default_params): Likewise.
	* common/config/ia64/ia64-common.c (ia64_option_default_params): Likewise.
	* common/config/powerpcspe/powerpcspe-common.c (rs6000_option_default_params): Likewise.
	* common/config/rs6000/rs6000-common.c (rs6000_option_default_params): Likewise.
	* common/config/sh/sh-common.c (sh_option_default_params): Likewise.
	* config/aarch64/aarch64.c (aarch64_output_probe_stack_range): Likewise.
	(aarch64_allocate_and_probe_stack_space): Likewise.
	(aarch64_expand_epilogue): Likewise.
	(aarch64_override_options_internal): Likewise.
	* config/alpha/alpha.c (alpha_option_override): Likewise.
	* config/arm/arm.c (arm_option_override): Likewise.
	(arm_valid_target_attribute_p): Likewise.
	* config/i386/i386-options.c (ix86_option_override_internal): Likewise.
	* config/i386/i386.c (get_probe_interval): Likewise.
	(ix86_adjust_stack_and_probe_stack_clash): Likewise.
	(ix86_max_noce_ifcvt_seq_cost): Likewise.
	* config/ia64/ia64.c (ia64_adjust_cost): Likewise.
	* config/rs6000/rs6000-logue.c (get_stack_clash_protection_probe_interval): Likewise.
	(get_stack_clash_protection_guard_size): Likewise.
	* config/rs6000/rs6000.c (rs6000_option_override_internal): Likewise.
	* config/s390/s390.c (allocate_stack_space): Likewise.
	(s390_emit_prologue): Likewise.
	(s390_option_override_internal): Likewise.
	* config/sparc/sparc.c (sparc_option_override): Likewise.
	* config/visium/visium.c (visium_option_override): Likewise.
	* coverage.c (get_coverage_counts): Likewise.
	(coverage_compute_profile_id): Likewise.
	(coverage_begin_function): Likewise.
	(coverage_end_function): Likewise.
	* cse.c (cse_find_path): Likewise.
	(cse_extended_basic_block): Likewise.
	(cse_main): Likewise.
	* cselib.c (cselib_invalidate_mem): Likewise.
	* dse.c (dse_step1): Likewise.
	* emit-rtl.c (set_new_first_and_last_insn): Likewise.
	(get_max_insn_count): Likewise.
	(make_debug_insn_raw): Likewise.
	(init_emit): Likewise.
	* explow.c (compute_stack_clash_protection_loop_data): Likewise.
	* final.c (compute_alignments): Likewise.
	* fold-const.c (fold_range_test): Likewise.
	(fold_truth_andor): Likewise.
	(tree_single_nonnegative_warnv_p): Likewise.
	(integer_valued_real_single_p): Likewise.
	* gcse.c (want_to_gcse_p): Likewise.
	(prune_insertions_deletions): Likewise.
	(hoist_code): Likewise.
	(gcse_or_cprop_is_too_expensive): Likewise.
	* ggc-common.c: Likewise.
	* ggc-page.c (ggc_collect): Likewise.
	* gimple-loop-interchange.cc (MAX_NUM_STMT): Likewise.
	(MAX_DATAREFS): Likewise.
	(OUTER_STRIDE_RATIO): Likewise.
	* gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise.
	* gimple-loop-versioning.cc (loop_versioning::max_insns_for_loop): Likewise.
	* gimple-ssa-split-paths.c (is_feasible_trace): Likewise.
	* gimple-ssa-store-merging.c (imm_store_chain_info::try_coalesce_bswap): Likewise.
	(imm_store_chain_info::coalesce_immediate_stores): Likewise.
	(imm_store_chain_info::output_merged_store): Likewise.
	(pass_store_merging::process_store): Likewise.
	* gimple-ssa-strength-reduction.c (find_basis_for_base_expr): Likewise.
	* graphite-isl-ast-to-gimple.c (class translate_isl_ast_to_gimple): Likewise.
	(scop_to_isl_ast): Likewise.
	* graphite-optimize-isl.c (get_schedule_for_node_st): Likewise.
	(optimize_isl): Likewise.
	* graphite-scop-detection.c (build_scops): Likewise.
	* haifa-sched.c (set_modulo_params): Likewise.
	(rank_for_schedule): Likewise.
	(model_add_to_worklist): Likewise.
	(model_promote_insn): Likewise.
	(model_choose_insn): Likewise.
	(queue_to_ready): Likewise.
	(autopref_multipass_dfa_lookahead_guard): Likewise.
	(schedule_block): Likewise.
	(sched_init): Likewise.
	* hsa-gen.c (init_prologue): Likewise.
	* ifcvt.c (bb_ok_for_noce_convert_multiple_sets): Likewise.
	(cond_move_process_if_block): Likewise.
	* ipa-cp.c (ipcp_lattice::add_value): Likewise.
	(merge_agg_lats_step): Likewise.
	(devirtualization_time_bonus): Likewise.
	(hint_time_bonus): Likewise.
	(incorporate_penalties): Likewise.
	(good_cloning_opportunity_p): Likewise.
	(ipcp_propagate_stage): Likewise.
	* ipa-fnsummary.c (decompose_param_expr): Likewise.
	(set_switch_stmt_execution_predicate): Likewise.
	(analyze_function_body): Likewise.
	(compute_fn_summary): Likewise.
	* ipa-inline-analysis.c (estimate_growth): Likewise.
	* ipa-inline.c (caller_growth_limits): Likewise.
	(inline_insns_single): Likewise.
	(inline_insns_auto): Likewise.
	(can_inline_edge_by_limits_p): Likewise.
	(want_early_inline_function_p): Likewise.
	(big_speedup_p): Likewise.
	(want_inline_small_function_p): Likewise.
	(want_inline_self_recursive_call_p): Likewise.
	(edge_badness): Likewise.
	(recursive_inlining): Likewise.
	(compute_max_insns): Likewise.
	(early_inliner): Likewise.
	* ipa-polymorphic-call.c (csftc_abort_walking_p): Likewise.
	* ipa-profile.c (ipa_profile): Likewise.
	* ipa-prop.c (determine_known_aggregate_parts): Likewise.
	(ipa_analyze_node): Likewise.
	(ipcp_transform_function): Likewise.
	* ipa-split.c (consider_split): Likewise.
	* ipa-sra.c (allocate_access): Likewise.
	(process_scan_results): Likewise.
	(ipa_sra_summarize_function): Likewise.
	(pull_accesses_from_callee): Likewise.
	* ira-build.c (loop_compare_func): Likewise.
	(mark_loops_for_removal): Likewise.
	* ira-conflicts.c (build_conflict_bit_table): Likewise.
	* loop-doloop.c (doloop_optimize): Likewise.
	* loop-invariant.c (gain_for_invariant): Likewise.
	(move_loop_invariants): Likewise.
	* loop-unroll.c (decide_unroll_constant_iterations): Likewise.
	(decide_unroll_runtime_iterations): Likewise.
	(decide_unroll_stupid): Likewise.
	(expand_var_during_unrolling): Likewise.
	* lra-assigns.c (spill_for): Likewise.
	* lra-constraints.c (EBB_PROBABILITY_CUTOFF): Likewise.
	* modulo-sched.c (sms_schedule): Likewise.
	(DFA_HISTORY): Likewise.
	* opts.c (default_options_optimization): Likewise.
	(finish_options): Likewise.
	(common_handle_option): Likewise.
	* postreload-gcse.c (eliminate_partially_redundant_load): Likewise.
	(if): Likewise.
	* predict.c (get_hot_bb_threshold): Likewise.
	(maybe_hot_count_p): Likewise.
	(probably_never_executed): Likewise.
	(predictable_edge_p): Likewise.
	(predict_loops): Likewise.
	(expr_expected_value_1): Likewise.
	(tree_predict_by_opcode): Likewise.
	(handle_missing_profiles): Likewise.
	* reload.c (find_equiv_reg): Likewise.
	* reorg.c (redundant_insn): Likewise.
	* resource.c (mark_target_live_regs): Likewise.
	(incr_ticks_for_insn): Likewise.
	* sanopt.c (pass_sanopt::execute): Likewise.
	* sched-deps.c (sched_analyze_1): Likewise.
	(sched_analyze_2): Likewise.
	(sched_analyze_insn): Likewise.
	(deps_analyze_insn): Likewise.
	* sched-ebb.c (schedule_ebbs): Likewise.
	* sched-rgn.c (find_single_block_region): Likewise.
	(too_large): Likewise.
	(haifa_find_rgns): Likewise.
	(extend_rgns): Likewise.
	(new_ready): Likewise.
	(schedule_region): Likewise.
	(sched_rgn_init): Likewise.
	* sel-sched-ir.c (make_region_from_loop): Likewise.
	* sel-sched-ir.h (MAX_WS): Likewise.
	* sel-sched.c (process_pipelined_exprs): Likewise.
	(sel_setup_region_sched_flags): Likewise.
	* shrink-wrap.c (try_shrink_wrapping): Likewise.
	* targhooks.c (default_max_noce_ifcvt_seq_cost): Likewise.
	* toplev.c (print_version): Likewise.
	(process_options): Likewise.
	* tracer.c (tail_duplicate): Likewise.
	* trans-mem.c (tm_log_add): Likewise.
	* tree-chrec.c (chrec_fold_plus_1): Likewise.
	* tree-data-ref.c (split_constant_offset): Likewise.
	(compute_all_dependences): Likewise.
	* tree-if-conv.c (MAX_PHI_ARG_NUM): Likewise.
	* tree-inline.c (remap_gimple_stmt): Likewise.
	* tree-loop-distribution.c (MAX_DATAREFS_NUM): Likewise.
	* tree-parloops.c (MIN_PER_THREAD): Likewise.
	(create_parallel_loop): Likewise.
	* tree-predcom.c (determine_unroll_factor): Likewise.
	* tree-scalar-evolution.c (instantiate_scev_r): Likewise.
	* tree-sra.c (analyze_all_variable_accesses): Likewise.
	* tree-ssa-ccp.c (fold_builtin_alloca_with_align): Likewise.
	* tree-ssa-dse.c (setup_live_bytes_from_ref): Likewise.
	(dse_optimize_redundant_stores): Likewise.
	(dse_classify_store): Likewise.
	* tree-ssa-ifcombine.c (ifcombine_ifandif): Likewise.
	* tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise.
	* tree-ssa-loop-im.c (LIM_EXPENSIVE): Likewise.
	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Likewise.
	(try_peel_loop): Likewise.
	(tree_unroll_loops_completely): Likewise.
	* tree-ssa-loop-ivopts.c (avg_loop_niter): Likewise.
	(CONSIDER_ALL_CANDIDATES_BOUND): Likewise.
	(MAX_CONSIDERED_GROUPS): Likewise.
	(ALWAYS_PRUNE_CAND_SET_BOUND): Likewise.
	* tree-ssa-loop-manip.c (can_unroll_loop_p): Likewise.
	* tree-ssa-loop-niter.c (MAX_ITERATIONS_TO_TRACK): Likewise.
	* tree-ssa-loop-prefetch.c (PREFETCH_BLOCK): Likewise.
	(L1_CACHE_SIZE_BYTES): Likewise.
	(L2_CACHE_SIZE_BYTES): Likewise.
	(should_issue_prefetch_p): Likewise.
	(schedule_prefetches): Likewise.
	(determine_unroll_factor): Likewise.
	(volume_of_references): Likewise.
	(add_subscript_strides): Likewise.
	(self_reuse_distance): Likewise.
	(mem_ref_count_reasonable_p): Likewise.
	(insn_to_prefetch_ratio_too_small_p): Likewise.
	(loop_prefetch_arrays): Likewise.
	(tree_ssa_prefetch_arrays): Likewise.
	* tree-ssa-loop-unswitch.c (tree_unswitch_single_loop): Likewise.
	* tree-ssa-math-opts.c (gimple_expand_builtin_pow): Likewise.
	(convert_mult_to_fma): Likewise.
	(math_opts_dom_walker::after_dom_children): Likewise.
	* tree-ssa-phiopt.c (cond_if_else_store_replacement): Likewise.
	(hoist_adjacent_loads): Likewise.
	(gate_hoist_loads): Likewise.
	* tree-ssa-pre.c (translate_vuse_through_block): Likewise.
	(compute_partial_antic_aux): Likewise.
	* tree-ssa-reassoc.c (get_reassociation_width): Likewise.
	* tree-ssa-sccvn.c (vn_reference_lookup_pieces): Likewise.
	(vn_reference_lookup): Likewise.
	(do_rpo_vn): Likewise.
	* tree-ssa-scopedtables.c (avail_exprs_stack::lookup_avail_expr): Likewise.
	* tree-ssa-sink.c (select_best_block): Likewise.
	* tree-ssa-strlen.c (new_stridx): Likewise.
	(new_addr_stridx): Likewise.
	(get_range_strlen_dynamic): Likewise.
	(class ssa_name_limit_t): Likewise.
	* tree-ssa-structalias.c (push_fields_onto_fieldstack): Likewise.
	(create_variable_info_for_1): Likewise.
	(init_alias_vars): Likewise.
	* tree-ssa-tail-merge.c (find_clusters_1): Likewise.
	(tail_merge_optimize): Likewise.
	* tree-ssa-threadbackward.c (thread_jumps::profitable_jump_thread_path): Likewise.
	(thread_jumps::fsm_find_control_statement_thread_paths): Likewise.
	(thread_jumps::find_jump_threads_backwards): Likewise.
	* tree-ssa-threadedge.c (record_temporary_equivalences_from_stmts_at_dest): Likewise.
	* tree-ssa-uninit.c (compute_control_dep_chain): Likewise.
	* tree-switch-conversion.c (switch_conversion::check_range): Likewise.
	(jump_table_cluster::can_be_handled): Likewise.
	* tree-switch-conversion.h (jump_table_cluster::case_values_threshold): Likewise.
	(SWITCH_CONVERSION_BRANCH_RATIO): Likewise.
	(param_switch_conversion_branch_ratio): Likewise.
	* tree-vect-data-refs.c (vect_mark_for_runtime_alias_test): Likewise.
	(vect_enhance_data_refs_alignment): Likewise.
	(vect_prune_runtime_alias_test_list): Likewise.
	* tree-vect-loop.c (vect_analyze_loop_costing): Likewise.
	(vect_get_datarefs_in_loop): Likewise.
	(vect_analyze_loop): Likewise.
	* tree-vect-slp.c (vect_slp_bb): Likewise.
	* tree-vectorizer.h: Likewise.
	* tree-vrp.c (find_switch_asserts): Likewise.
	(vrp_prop::check_mem_ref): Likewise.
	* tree.c (wide_int_to_tree_1): Likewise.
	(cache_integer_cst): Likewise.
	* var-tracking.c (EXPR_USE_DEPTH): Likewise.
	(reverse_op): Likewise.
	(vt_find_locations): Likewise.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* gimple-parser.c (c_parser_parse_gimple_body): Replace old parameter syntax
	with the new one, include opts.h if needed.  Use SET_OPTION_IF_UNSET
	macro.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* name-lookup.c (namespace_hints::namespace_hints): Replace old parameter syntax
	with the new one, include opts.h if needed.  Use SET_OPTION_IF_UNSET
	macro.
	* typeck.c (comptypes): Likewise.
2019-11-12  Martin Liska  <mliska@suse.cz>

	* lto-partition.c (lto_balanced_map): Replace old parameter syntax
	with the new one, include opts.h if needed.  Use SET_OPTION_IF_UNSET
	macro.
	* lto.c (do_whole_program_analysis): Likewise.

From-SVN: r278085
2019-11-12 10:08:40 +00:00
Martin Liska
fe1d1a8b4c Relax lto-dump.o dependency.
2019-11-11  Martin Liska  <mliska@suse.cz>

	* Make-lang.in: Relax dependency of lto-dump.o to
	LTO_OBJS which will allow faster linking (mainly with LTO).

From-SVN: r278054
2019-11-11 15:26:03 +00:00
Jan Hubicka
c38ee9a2e8 lto-streamer-in.c: Include alloc-pool.h.
* lto-streamer-in.c: Include alloc-pool.h.
	(freeing_string_slot_hasher): Remove.
	(string_slot_allocator): New object allocator.
	(file_name_hash_table): Turn to hash_table<string_slot_hasher>.
	(file_name_obstack): New obstack.
	(canon_file_name): Allocate in obstack and allocator.
	(lto_reader_init): Initialize obstack and allocator.
	(lto_free_file_name_hash): New function.
	* lto-streamer.h (lto_free_file_name_hash): New.
	* lto.c (do_whole_program_analysis): Call lto_free_file_name_hash.

From-SVN: r277924
2019-11-07 17:06:04 +00:00
Jan Hubicka
c9ef0409cd config.in: Regenerate.
* config.in: Regenerate.
	* configure: Regenerate.
	* configure.ac: Check for mallinfo.
	* ggc-common.c: Include malloc.h if available;
	include options.h
	(report_heap_memory_use): New functoin.
	* ggc-page.c (ggc_grow): Do not print "start".
	* ggc.h (report_heap_memory_use): Declare.
	* pases.c (execute_one_pass): Report memory after IPA passes.
	(ipa_read_summaries_1): Likewise.
	(ipa_read_optimization_summaries_1): Likewise.

	* lto/lto-common.c (read_cgraph_and_symbols): Improve -Q reporting.
	* lto.c (lto_wpa_write_files): Likewise.

From-SVN: r277753
2019-11-03 12:48:43 +00:00
Jakub Jelinek
6773658a80 re PR middle-end/92231 (ICE in gimple_fold_stmt_to_constant_1)
PR middle-end/92231
	* tree.h (fndecl_built_in_p): Use fndecl_built_in_p instead of
	DECL_BUILT_IN in comment.  Remove redundant ()s around return
	argument.
	* tree.c (free_lang_data_in_decl): Check if var is FUNCTION_DECL
	before calling fndecl_built_in_p.
	* gimple-fold.c (gimple_fold_stmt_to_constant_1): Check if
	TREE_OPERAND (fn, 0) is a FUNCTION_DECL before calling
	fndecl_built_in_p on it.
lto/
	* lto-lang.c (handle_const_attribute): Don't call fndecl_built_in_p
	on *node that is not FUNCTION_DECL.
testsuite/
	* gcc.c-torture/compile/pr92231.c: New test.

From-SVN: r277660
2019-10-31 11:04:47 +01:00
Martin Liska
3c56d8d8de Use symtab_node::order in LTO sections with body.
2019-10-30  Martin Liska  <mliska@suse.cz>

	PR lto/91393
	PR lto/88220
	* cgraph.c (cgraph_node::get_create): Overwrite node->order
	from a first_clone in order to get proper LTO section
	in LTO stream.
	(cgraph_node::get_untransformed_body):
	Use lto_get_section_data where symtab_node::order
	must be provided.
	* cgraphclones.c (cgraph_node::find_replacement):
	Update also symbol order.
	* ipa-fnsummary.c (ipa_fn_summary_read):
	Use new function lto_get_summary_section_data.
	* ipa-hsa.c (ipa_hsa_read_summary): Likewise.
	* ipa-icf.c (sem_item_optimizer::read_summary):
	Likewise.
	* ipa-prop.c (ipa_prop_read_jump_functions):
	Likewise.
	(ipcp_read_transformation_summaries): Likewise.
	* ipa-sra.c (ipa_sra_read_summary): Likewise.
	* lto-cgraph.c (input_node): Add also order_base.
	(input_varpool_node): Likewise.
	(input_cgraph_1): Assign the order_base.
	(input_cgraph_opt_summary): Use new lto_get_summary_section_data.
	* lto-opts.c (lto_write_options): Pass new argument.
	* lto-section-in.c (lto_get_section_data): Add new argumente order.
	(lto_get_summary_section_data): New.
	(lto_get_raw_section_data): Add order argument.
	(lto_create_simple_input_block): Likewise.
	* lto-section-out.c (lto_destroy_simple_output_block):
	Likewise.
	* lto-streamer-in.c (lto_input_toplevel_asms):
	Use lto_get_summary_section_data.
	(lto_input_mode_table): Likewise.
	* lto-streamer-out.c (produce_asm): Pass symtab_node::order.
	(lto_output_toplevel_asms): Pass new argument.
	(copy_function_or_variable): Likewise.
	(produce_lto_section):Likewise.
	(produce_symtab): Likewise.
	(lto_write_mode_table): Likewise.
	(produce_asm_for_decls): Likewise.
	* lto-streamer.c (lto_get_section_name): Concat symbol name
	and symbol order.
	* lto-streamer.h (lto_get_section_data): Add order argument.
	(lto_get_summary_section_data): New.
	(lto_get_raw_section_data): Add order argument.
	(lto_get_section_name): Likewise.
	* varpool.c (varpool_node::get_constructor): Pass order argument.
2019-10-30  Martin Liska  <mliska@suse.cz>

	PR lto/91393
	PR lto/88220
	* lto-common.c (lto_file_finalize): Use lto_get_summary_section_data.
	(get_section_data): Add order argument.
2019-10-30  Martin Liska  <mliska@suse.cz>

	PR lto/91393
	PR lto/88220
	* gcc.dg/lto/pr91393_0.c: New test.

From-SVN: r277607
2019-10-30 10:38:52 +00:00
Martin Liska
a62bfab5d2 Remove cgraph_global_info.
From-SVN: r277600
2019-10-30 07:55:39 +00:00
Martin Liska
3518424d4b Print header in dump_memory_report.
2019-10-29  Martin Liska  <mliska@suse.cz>

	* cgraphunit.c (symbol_table::compile): Pass
	title as dump_memory_report argument.
	* toplev.c (dump_memory_report):  New argument.
	(finalize): Pass new argument.
	* toplev.h (dump_memory_report): Add argument.
2019-10-29  Martin Liska  <mliska@suse.cz>

	* lto.c (do_whole_program_analysis): Pass
	title as dump_memory_report argument.

From-SVN: r277559
2019-10-29 08:44:52 +00:00
Martin Liska
c5281d5013 Remove misleading sorting function in ggc memory report.
2019-10-29  Martin Liska  <mliska@suse.cz>

	* cgraphunit.c (symbol_table::compile): Remove argument
	for dump_memory_report.
	* ggc-common.c (dump_ggc_loc_statistics): Likewise.
	(compare_final): Remove in order to make report
	better readable.
	* ggc.h (dump_ggc_loc_statistics):  Remove argument.
	* mem-stats.h (mem_alloc_description::get_list):
	Do not pass cmp.
	(mem_alloc_description::dump): Likewise here.
	* toplev.c (dump_memory_report): Remove final
	argument.
	(finalize): Likewise.
	* toplev.h (dump_memory_report): Remove argument.
2019-10-29  Martin Liska  <mliska@suse.cz>

	* lto.c (do_whole_program_analysis): Remove argument.

From-SVN: r277557
2019-10-29 08:44:28 +00:00
Jan Hubicka
f658ad3002 cgraphunit.c (symbol_table::process_new_functions): Call ipa_free_size_summary.
* cgraphunit.c (symbol_table::process_new_functions): Call
	ipa_free_size_summary.
	* ipa-cp.c (ipcp_cloning_candidate_p): Update.
	(devirtualization_time_bonus): Update.
	(ipcp_propagate_stage): Update.
	* ipa-fnsummary.c (ipa_size_summaries): New.
	(ipa_fn_summary_alloc): Alloc size summary.
	(dump_ipa_call_summary): Update.
	(ipa_dump_fn_summary): Update.
	(analyze_function_body): Update.
	(compute_fn_summary): Likewise.
	(ipa_get_stack_frame_offset): New function.
	(inline_update_callee_summaries): Do not update frame offsets.
	(ipa_merge_fn_summary_after_inlining): Update frame offsets here;
	remove call and function summary.
	(ipa_update_overall_fn_summary): Update.
	(inline_read_section): Update.
	(ipa_fn_summary_write): Update.
	(ipa_free_fn_summary): Do not remove summaries.
	(ipa_free_size_summary): New.
	(release summary pass): Also run at WPA.
	* ipa-fnsummary.h (ipa_size_summary): Declare.
	(ipa_fn_summary): Remove size, self_size, stack_frame_offset,
	estimated_self_stack_size.
	(ipa_size_summary_t): New type.
	(ipa_size_summaries): Declare.
	(ipa_free_size_summary): Declare.
	(ipa_get_stack_frame_offset): Declare.
	* ipa-icf.c (sem_function::merge): Update.
	* ipa-inline-analysis.c (estimate_size_after_inlining): Update.
	(estimate_growth): Update.
	(growth_likely_positive): Update.
	(clone_inlined_nodes): Update.
	(inline_call): Update.
	* ipa-inline.c (caller_growth_limits): Update.
	(edge_badness): Update.
	(recursive_inlining): Update.
	(inline_small_functions): Update.
	(inline_to_all_callers_1): Update.
	* ipa-prop.h (ipa_edge_args_sum_t): Update comment.
	* lto-partition.c (add_symbol_to_partition_1): Update.
	(undo_parittion): Update.

From-SVN: r277424
2019-10-24 22:19:09 +00:00
Jan Hubicka
ebad2eeed9 lto-streamer-out.c (output_constructor): Push CTORS_OUT timevar.
* lto-streamer-out.c (output_constructor): Push CTORS_OUT timevar.
	(cmp_symbol_files): New.
	(lto_output): Copy sections in file order.
	* lto-streamer.h (lto_file_decl_data): Add field order.
	* lto-common.c (lto_file_finalize): Add order attribute.
	(lto_create_files_from_ids): Pass order.
	(lto_file_read): UPdate call of lto_create_files_from_ids.

From-SVN: r277346
2019-10-23 18:22:40 +00:00
Jan Hubicka
7cc4770980 lto-common.c (read_cgraph_and_symbols): Grow ggc memory use after summary streaming.
* lto-common.c (read_cgraph_and_symbols): Grow ggc memory use after
	summary streaming.

From-SVN: r276936
2019-10-13 11:25:57 +00:00
Jan Hubicka
f8cf94cd21 * lto.c (lto_wpa_write_files): Do not update bodies of clones.
From-SVN: r276935
2019-10-13 08:34:10 +00:00
Jan Hubicka
e5207f1a65 ggc-page.c (release_pages): Output statistics when !quiet_flag.
* ggc-page.c (release_pages): Output statistics when !quiet_flag.
	(ggc_collect): Dump later to not interfere with release_page dump.
	(ggc_trim): New function.
	* ggc-none.c (ggc_trim): New.
	* ggc.h (ggc_trim): Declare.

	* lto.c (lto_wpa_write_files): Call ggc_trim.

From-SVN: r276878
2019-10-11 11:53:40 +00:00
Jan Hubicka
1fcf52a6a2 Do not allocate ggc during streaming.
* gimple-streamer-out.c (output_gimple_stmt): Add explicit function
	parameter.
	* lto-streamer-out.c: Include tree-dfa.h.
	(output_cfg): Do not use cfun.
	(lto_prepare_function_for_streaming): New.
	(output_function): Do not push cfun; do not initialize loop optimizer.
	* lto-streamer.h (lto_prepare_function_for_streaming): Declare.
	* passes.c (ipa_write_summaries): Use it.
	(ipa_write_optimization_summaries): Do not modify bodies.
	* tree-dfa.c (renumber_gimple_stmt_uids): Add function parameter.
	* tree.dfa.h (renumber_gimple_stmt_uids): Update prototype.
	* tree-ssa-dse.c (pass_dse::execute): Update use of
	renumber_gimple_stmt_uids.
	* tree-ssa-math-opts.c (pass_optimize_widening_mul::execute): Likewise.

	* lto.c (lto_wpa_write_files): Prepare all bodies for streaming.

From-SVN: r276870
2019-10-11 08:59:16 +00:00
Richard Biener
9142736ee2 lto-common.c (unify_scc): Do not merge anonymous NAMESPACE_DECLs.
2019-10-10  Richard Biener  <rguenther@suse.de>

	* lto-common.c (unify_scc): Do not merge anonymous NAMESPACE_DECLs.

From-SVN: r276796
2019-10-10 09:56:35 +00:00
Joseph Myers
0fa0048302 Mark C2x built-in functions as such.
Various built-in functions that GCC has as extensions are now standard
functions in C2x.  This patch adds DEF_C2X_BUILTIN and uses it to mark
them as such.  Some of the so-marked functions were previously
DEF_EXT_LIB_BUILTIN, while some DFP ones were DEF_GCC_BUILTIN
(i.e. __builtin_* only); both sets become DEF_C2X_BUILTIN.  This in
turn requires flag_isoc2x to be defined in various front ends using
builtins.def.

As the semantics of the built-in functions should already be tested,
the tests added only verify that they are declared in C2x mode but not
in C11 mode.  The test of DFP built-in functions being declared for
C2x goes in gcc.dg/dfp/, as while such built-in functions currently
don't depend on whether DFP is supported, that looks like a bug to me
(see bug 91985), so it seems best for the tests not to depend on
exactly how that bug might be fixed.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc:
	* builtins.def (DEF_C2X_BUILTIN): New macro.
	(exp10, exp10f, exp10l, fabsd32, fabsd64, fabsd128, nand32)
	(nand64, nand128, roundeven, roundevenf, roundevenl, strdup)
	(strndup): Use DEF_C2X_BUILTIN.
	* coretypes.h (enum function_class): Add function_c2x_misc.

gcc/ada:
	* gcc-interface/utils.c (flag_isoc2x): New variable.

gcc/brig:
	* brig-lang.c (flag_isoc2x): New variable.

gcc/lto:
	* lto-lang.c (flag_isoc2x): New variable.

gcc/testsuite:
	* gcc.dg/c11-builtins-1.c, gcc.dg/c2x-builtins-1.c,
	gcc.dg/dfp/c2x-builtins-dfp-1.c: New tests.

From-SVN: r276588
2019-10-04 17:08:06 +01:00
Richard Biener
a3d0946904 re PR lto/91763 (go.go-torture/execute/printnil.go FAILs)
2019-09-18  Richard Biener  <rguenther@suse.de>

	PR lto/91763
	* lto-streamer-in.c (input_eh_regions): Move EH init to
	lto_materialize_function.
	* tree-streamer-in.c (lto_input_ts_function_decl_tree_pointers):
	Likewise.

	lto/
	* lto.c (lto_materialize_function): Initialize EH by looking
	at the function personality and flag_exceptions setting.

From-SVN: r275872
2019-09-18 11:28:20 +00:00
Jakub Jelinek
df375b0321 re PR middle-end/91283 (gcc.dg/torture/c99-contract-1.c FAILs)
PR middle-end/91283
	* common.opt (fexcess-precision=): Add Optimization flag.  Use
	flag_excess_precision variable instead of
	flag_excess_precision_cmdline.
	* flags.h (class target_flag_state): Remove x_flag_excess_precision
	member.
	(flag_excess_precision): Don't define.
	* langhooks.c (lhd_post_options): Set flag_excess_precision instead of
	flag_excess_precision_cmdline.  Remove comment.
	* opts.c (set_fast_math_flags): Use frontend_set_flag_excess_precision
	and x_flag_excess_precision instead of
	frontend_set_flag_excess_precision_cmdline and
	x_flag_excess_precision_cmdline.
	(fast_math_flags_set_p): Use x_flag_excess_precision instead of
	x_flag_excess_precision_cmdline.
	* toplev.c (init_excess_precision): Remove.
	(lang_dependent_init_target): Don't call it.
ada/
	* gcc-interface/misc.c (gnat_post_options): Set flag_excess_precision
	instead of flag_excess_precision_cmdline.
brig/
	* brig-lang.c (brig_langhook_post_options): Set flag_excess_precision
	instead of flag_excess_precision_cmdline.
c-family/
	* c-common.c (c_ts18661_flt_eval_method): Use flag_excess_precision
	instead of flag_excess_precision_cmdline.
	* c-cppbuiltin.c (c_cpp_flt_eval_method_iec_559): Likewise.
	* c-opts.c (c_common_post_options): Likewise.
d/
	* d-lang.cc (d_post_options): Set flag_excess_precision instead of
	flag_excess_precision_cmdline.
fortran/
	* options.c (gfc_post_options): Set flag_excess_precision instead of
	flag_excess_precision_cmdline.  Remove comment.
go/
	* go-lang.c (go_langhook_post_options): Set flag_excess_precision
	instead of flag_excess_precision_cmdline.
lto/
	* lto-lang.c (lto_post_options): Set flag_excess_precision instead of
	flag_excess_precision_cmdline.  Remove comment.

From-SVN: r274850
2019-08-23 13:37:29 +02:00
Richard Sandiford
4d732405bd Use checking forms of DECL_FUNCTION_CODE (PR 91421)
We were shoe-horning all built-in enumerations (including frontend
and target-specific ones) into a field of type built_in_function.  This
was accessed as either an lvalue or an rvalue using DECL_FUNCTION_CODE.

The obvious danger with this (as was noted by several ??? comments)
is that the ranges have nothing to do with each other, and targets can
easily have more built-in functions than generic code.  But my patch to
make the field bigger was the straw that finally made the problem visible.

This patch therefore:

- replaces the field with a plain unsigned int

- turns DECL_FUNCTION_CODE into an rvalue-only accessor that checks
  that the function really is BUILT_IN_NORMAL

- adds corresponding DECL_MD_FUNCTION_CODE and DECL_FE_FUNCTION_CODE
  accessors for BUILT_IN_MD and BUILT_IN_FRONTEND respectively

- adds DECL_UNCHECKED_FUNCTION_CODE for places that need to access the
  underlying field (should be low-level code only)

- adds new helpers for setting the built-in class and function code

- makes DECL_BUILT_IN_CLASS an rvalue-only accessor too, since all
  assignments should go through the new helpers

2019-08-13  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	PR middle-end/91421
	* tree-core.h (function_decl::function_code): Change type to
	unsigned int.
	* tree.h (DECL_FUNCTION_CODE): Rename old definition to...
	(DECL_UNCHECKED_FUNCTION_CODE): ...this.
	(DECL_BUILT_IN_CLASS): Make an rvalue macro only.
	(DECL_FUNCTION_CODE): New function.  Assert that the built-in class
	is BUILT_IN_NORMAL.
	(DECL_MD_FUNCTION_CODE, DECL_FE_FUNCTION_CODE): New functions.
	(set_decl_built_in_function, copy_decl_built_in_function): Likewise.
	(fndecl_built_in_p): Change the type of the "name" argument to
	unsigned int.
	* builtins.c (expand_builtin): Move DECL_FUNCTION_CODE use
	after check for DECL_BUILT_IN_CLASS.
	* cgraphclones.c (build_function_decl_skip_args): Use
	set_decl_built_in_function.
	* ipa-param-manipulation.c (ipa_modify_formal_parameters): Likewise.
	* ipa-split.c (split_function): Likewise.
	* langhooks.c (add_builtin_function_common): Likewise.
	* omp-simd-clone.c (simd_clone_create): Likewise.
	* tree-streamer-in.c (unpack_ts_function_decl_value_fields): Likewise.
	* config/darwin.c (darwin_init_cfstring_builtins): Likewise.
	(darwin_fold_builtin): Use DECL_MD_FUNCTION_CODE instead of
	DECL_FUNCTION_CODE.
	* fold-const.c (operand_equal_p): Compare DECL_UNCHECKED_FUNCTION_CODE
	instead of DECL_FUNCTION_CODE.
	* lto-streamer-out.c (hash_tree): Use DECL_UNCHECKED_FUNCTION_CODE
	instead of DECL_FUNCTION_CODE.
	* tree-streamer-out.c (pack_ts_function_decl_value_fields): Likewise.
	* print-tree.c (print_node): Use DECL_MD_FUNCTION_CODE when
	printing DECL_BUILT_IN_MD.  Handle DECL_BUILT_IN_FRONTEND.
	* config/aarch64/aarch64-builtins.c (aarch64_expand_builtin)
	(aarch64_fold_builtin, aarch64_gimple_fold_builtin): Use
	DECL_MD_FUNCTION_CODE instead of DECL_FUNCTION_CODE.
	* config/aarch64/aarch64.c (aarch64_builtin_reciprocal): Likewise.
	* config/alpha/alpha.c (alpha_expand_builtin, alpha_fold_builtin):
	(alpha_gimple_fold_builtin): Likewise.
	* config/arc/arc.c (arc_expand_builtin): Likewise.
	* config/arm/arm-builtins.c (arm_expand_builtin): Likewise.
	* config/avr/avr-c.c (avr_resolve_overloaded_builtin): Likewise.
	* config/avr/avr.c (avr_expand_builtin, avr_fold_builtin): Likewise.
	* config/bfin/bfin.c (bfin_expand_builtin): Likewise.
	* config/c6x/c6x.c (c6x_expand_builtin): Likewise.
	* config/frv/frv.c (frv_expand_builtin): Likewise.
	* config/gcn/gcn.c (gcn_expand_builtin_1): Likewise.
	(gcn_expand_builtin): Likewise.
	* config/i386/i386-builtins.c (ix86_builtin_reciprocal): Likewise.
	(fold_builtin_cpu): Likewise.
	* config/i386/i386-expand.c (ix86_expand_builtin): Likewise.
	* config/i386/i386.c (ix86_fold_builtin): Likewise.
	(ix86_gimple_fold_builtin): Likewise.
	* config/ia64/ia64.c (ia64_fold_builtin): Likewise.
	(ia64_expand_builtin): Likewise.
	* config/iq2000/iq2000.c (iq2000_expand_builtin): Likewise.
	* config/mips/mips.c (mips_expand_builtin): Likewise.
	* config/msp430/msp430.c (msp430_expand_builtin): Likewise.
	* config/nds32/nds32-intrinsic.c (nds32_expand_builtin_impl): Likewise.
	* config/nios2/nios2.c (nios2_expand_builtin): Likewise.
	* config/nvptx/nvptx.c (nvptx_expand_builtin): Likewise.
	* config/pa/pa.c (pa_expand_builtin): Likewise.
	* config/pru/pru.c (pru_expand_builtin): Likewise.
	* config/riscv/riscv-builtins.c (riscv_expand_builtin): Likewise.
	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
	Likewise.
	* config/rs6000/rs6000-call.c (htm_expand_builtin): Likewise.
	(altivec_expand_dst_builtin, altivec_expand_builtin): Likewise.
	(rs6000_gimple_fold_builtin, rs6000_expand_builtin): Likewise.
	* config/rs6000/rs6000.c (rs6000_builtin_md_vectorized_function)
	(rs6000_builtin_reciprocal): Likewise.
	* config/rx/rx.c (rx_expand_builtin): Likewise.
	* config/s390/s390-c.c (s390_resolve_overloaded_builtin): Likewise.
	* config/s390/s390.c (s390_expand_builtin): Likewise.
	* config/sh/sh.c (sh_expand_builtin): Likewise.
	* config/sparc/sparc.c (sparc_expand_builtin): Likewise.
	(sparc_fold_builtin): Likewise.
	* config/spu/spu-c.c (spu_resolve_overloaded_builtin): Likewise.
	* config/spu/spu.c (spu_expand_builtin): Likewise.
	* config/stormy16/stormy16.c (xstormy16_expand_builtin): Likewise.
	* config/tilegx/tilegx.c (tilegx_expand_builtin): Likewise.
	* config/tilepro/tilepro.c (tilepro_expand_builtin): Likewise.
	* config/xtensa/xtensa.c (xtensa_fold_builtin): Likewise.
	(xtensa_expand_builtin): Likewise.

gcc/ada/
	PR middle-end/91421
	* gcc-interface/trans.c (gigi): Call set_decl_buillt_in_function.
	(Call_to_gnu): Use DECL_FE_FUNCTION_CODE instead of DECL_FUNCTION_CODE.

gcc/c/
	PR middle-end/91421
	* c-decl.c (merge_decls): Use copy_decl_built_in_function.

gcc/c-family/
	PR middle-end/91421
	* c-common.c (resolve_overloaded_builtin): Use
	copy_decl_built_in_function.

gcc/cp/
	PR middle-end/91421
	* decl.c (duplicate_decls):  Use copy_decl_built_in_function.
	* pt.c (declare_integer_pack): Use set_decl_built_in_function.

gcc/d/
	PR middle-end/91421
	* intrinsics.cc (maybe_set_intrinsic): Use set_decl_built_in_function.

gcc/jit/
	PR middle-end/91421
	* jit-playback.c (new_function): Use set_decl_built_in_function.

gcc/lto/
	PR middle-end/91421
	* lto-common.c (compare_tree_sccs_1): Use DECL_UNCHECKED_FUNCTION_CODE
	instead of DECL_FUNCTION_CODE.
	* lto-symtab.c (lto_symtab_merge_p): Likewise.

From-SVN: r274404
2019-08-13 21:35:20 +00:00
Jakub Jelinek
ab20d992c8 Assorted ChangeLog cleanups.
From-SVN: r274250
2019-08-10 11:59:17 +02:00