mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:50:50 +08:00
invoke.texi: (-devirtualize-at-ltrans): Document.
* doc/invoke.texi: (-devirtualize-at-ltrans): Document. * lto-cgraph.c (lto_output_varpool_node): Mark initializer as removed when it is not streamed to the given ltrans. (compute_ltrans_boundary): Make code adding all polymorphic call targets conditional with !flag_wpa || flag_ltrans_devirtualize. * common.opt (fdevirtualize-at-ltrans): New flag. From-SVN: r218609
This commit is contained in:
parent
a06478dd6c
commit
1e29e4d36f
@ -1,3 +1,12 @@
|
||||
2014-12-10 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* doc/invoke.texi: (-devirtualize-at-ltrans): Document.
|
||||
* lto-cgraph.c (lto_output_varpool_node): Mark initializer as removed
|
||||
when it is not streamed to the given ltrans.
|
||||
(compute_ltrans_boundary): Make code adding all polymorphic
|
||||
call targets conditional with !flag_wpa || flag_ltrans_devirtualize.
|
||||
* common.opt (fdevirtualize-at-ltrans): New flag.
|
||||
|
||||
2014-12-10 Ilya Verbin <ilya.verbin@intel.com>
|
||||
|
||||
* varpool.c (varpool_node::get_create): Force output of vars with
|
||||
|
@ -1062,6 +1062,10 @@ fdelete-null-pointer-checks
|
||||
Common Report Var(flag_delete_null_pointer_checks) Init(1) Optimization
|
||||
Delete useless null pointer checks
|
||||
|
||||
fdevirtualize-at-ltrans
|
||||
Common Report Var(flag_ltrans_devirtualize)
|
||||
Perofrm extra streaming to support more agressive devirtualization at LTO ltrans stage.
|
||||
|
||||
fdevirtualize-speculatively
|
||||
Common Report Var(flag_devirtualize_speculatively) Optimization
|
||||
Perform speculative devirtualization
|
||||
|
@ -375,7 +375,8 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
|
||||
-fcx-limited-range @gol
|
||||
-fdata-sections -fdce -fdelayed-branch @gol
|
||||
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively -fdse @gol
|
||||
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively @gol
|
||||
-devirtualize-at-ltrans -fdse @gol
|
||||
-fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol
|
||||
-ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
|
||||
-fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
|
||||
@ -7730,6 +7731,13 @@ the call into an conditional deciding on direct and indirect call. The
|
||||
speculative calls enable more optimizations, such as inlining. When they seem
|
||||
useless after further optimization, they are converted back into original form.
|
||||
|
||||
@item -fdevirtualize-at-ltrans
|
||||
@opindex fdevirtualize-at-ltrans
|
||||
Perform extra streaming needed for agressive devirtualization during LTO local
|
||||
transformation stage. This option enables more devirtualization but
|
||||
significantly increases the size of streamed data. For this reason it is
|
||||
disabled by default.
|
||||
|
||||
@item -fexpensive-optimizations
|
||||
@opindex fexpensive-optimizations
|
||||
Perform a number of minor optimizations that are relatively expensive.
|
||||
|
@ -615,7 +615,8 @@ lto_output_varpool_node (struct lto_simple_output_block *ob, varpool_node *node,
|
||||
bp_pack_value (&bp, node->force_output, 1);
|
||||
bp_pack_value (&bp, node->forced_by_abi, 1);
|
||||
bp_pack_value (&bp, node->unique_name, 1);
|
||||
bp_pack_value (&bp, node->body_removed, 1);
|
||||
bp_pack_value (&bp, node->body_removed
|
||||
|| !lto_symtab_encoder_encode_initializer_p (encoder, node), 1);
|
||||
bp_pack_value (&bp, node->implicit_section, 1);
|
||||
bp_pack_value (&bp, node->writeonly, 1);
|
||||
bp_pack_value (&bp, node->definition, 1);
|
||||
@ -910,8 +911,11 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
|
||||
{
|
||||
if (!lto_symtab_encoder_encode_initializer_p (encoder,
|
||||
vnode)
|
||||
&& (vnode->ctor_useable_for_folding_p ()
|
||||
|| POINTER_BOUNDS_P (vnode->decl)))
|
||||
&& (((vnode->ctor_useable_for_folding_p ()
|
||||
&& (!DECL_VIRTUAL_P (vnode->decl)
|
||||
|| !flag_wpa
|
||||
|| flag_ltrans_devirtualize))
|
||||
|| POINTER_BOUNDS_P (vnode->decl))))
|
||||
{
|
||||
lto_set_symtab_encoder_encode_initializer (encoder, vnode);
|
||||
create_references (encoder, vnode);
|
||||
@ -936,7 +940,7 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
|
||||
}
|
||||
}
|
||||
/* Add all possible targets for late devirtualization. */
|
||||
if (flag_devirtualize)
|
||||
if (flag_ltrans_devirtualize || !flag_wpa)
|
||||
for (edge = node->indirect_calls; edge; edge = edge->next_callee)
|
||||
if (edge->indirect_info->polymorphic)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user