Re: Enable pointer TBAA for LTO

2015-11-24 Thread Jan Hubicka
> > Now alias set of the initialization is alias set of "struct a". The alias > > set > > of of the pointer store is "float *". We ask alias oracle if "struct a" can > > conflict with "float *" and answer is no, because "int *" (component of > > struct > > b) and "float *" are not conflicting.

Re: Fix verify_type ICE during Ada bootstrap

2015-11-24 Thread Jan Hubicka
> > > > We do already wrap all bases into MEM_REFs at streaming time, it would > > be easy to adjust it to make it effectively alias-set zero. But of > > course the overhead and the downstream effects of having more MEM_REFs > > (we strip the unneeded ones at stream-in) are unknown (compared to >

Do not leak function local blocks to global LTO stream

2015-11-25 Thread Jan Hubicka
Hi, ipa-inline-analysis sometimes takes random IP invariant expression and stores it to the summary. This is similar to situation we treated earlier in ipa-prop. We need to produce a local copy that does not have locators pointing to function's body. LTO-bootstrapped x86_64-linux, commited. Honz

[RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
Hi, PR 67548 is about LTO not supporting incremental linking. I never really considered our current incremental linking very useful, because it triggers code generation at the incremental link time basically nullifying any benefits of whole program optimization and in fact I think it is harmful, b

Add new timers for lowlevel LTO streaming

2015-11-25 Thread Jan Hubicka
Hi, this patch adds timevar for loweleve LTO streaming stuff. Bootstrapped/regtested x86_64-linux, OK? * timevar.def (TV_IPA_LTO_DECOMPRESS, TV_IPA_LTO_COMPRESS, TV_IPA_LTO_OUTPUT): New. * lto-comporess.c: Include timevar.h (lto_end_compression, lto_end_uncompression

Re: Enable pointer TBAA for LTO

2015-11-25 Thread Jan Hubicka
> > Might be a bit expensive though. It also reminds me of all the > ICEs we have PRs for WRT the type verifier. Remember we are in stage3 > now so rather than introducing new issues you should spend some time > fixing the existing ones you caused ;)) (just look for bugs > CCed to hubi...@gcc.g

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
> > > > 1) linker plugin is modified to pass -flinker-output to lto wrapper > > linker-output is either dyn (.so), pie or exec > > for incremental linking I added .rel for 3) and noltorel for 1) > > > > currently it does rel because 3) (nor 2) can not be done when > > incremnetal >

Re: RFA: PATCH to gimple_canonical_types_compatible_p for middle-end/66214

2015-11-25 Thread Jan Hubicka
> The problem here is that we're trying to compare the TYPE_FIELDS of > two variants of an incomplete type, which doesn't make sense; we > shouldn't expect TYPE_FIELDS of an incomplete type to be meaningful. > > Tested x86_64-pc-linux-gnu. OK for trunk? > commit c6f5cd55d0bbebc2fa46628ebb8fdec2a

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
> > > > Your patch means that Andis/HJs work is no longer needed and we can > > drop the section suffixes again? > > > > > > There is a difference between "ld -r " and "gcc -r". "ld -r" may not > perform any LTO. Theoretically ld -r may look up for the linker plugin on it search path that will i

Re: RFA: PATCH to gimple_canonical_types_compatible_p for middle-end/66214

2015-11-25 Thread Jan Hubicka
> On 11/25/2015 02:10 PM, Jan Hubicka wrote: > >>The problem here is that we're trying to compare the TYPE_FIELDS of > >>two variants of an incomplete type, which doesn't make sense; we > >>shouldn't expect TYPE_FIELDS of an incomplete type to be me

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
Hi, this is the first part of patch that adds -flinker-output flags and gets symbol visibility right. It makes the testcase in the PR to pass, but I do not know how to turn it into a testsuite ready version. I remember there was other PRs related to incremental linking and symbol visibility, I wi

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
Hi, here is the patch that implement incremental LTO linking. I will wait few days for feedback. gcc -r now does LTO IL linking only. To force codegen, one can use -Wl,-rnolto which I found no right place to document. We may want -rnolto flag uspported by GCC driver, so the testsuite can be upd

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
> > Moreover we do have all infrastructure ready to implement 3). Our tree > > merging > > and symbol table handling is fuly incremental and I think made a patch to > > implement it today. The scheme is easy: > > What happens when .S (assembler) files are part of the incremential object? > Th

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
> > > In theory we could change the build system to avoid that case though, but > > > it would need some changes. > > > > > > It would be better if that could be handled somehow. > > > > How does this work with your patchset? Ideally we should have way to claim > > only portions of object files,

Re: [RFC] Getting LTO incremental linking work

2015-11-25 Thread Jan Hubicka
> > Actually I think it is harder than that, because we need to strip LTO data > > from the object files, so we do not end up with duplicated LTO if the object > > file was already having both LTO and non-LTO stuff in it. > > When I started with LTO I was looking into that, and that is why I origi

Re: RFA: PATCH to gimple_canonical_types_compatible_p for middle-end/66214

2015-11-25 Thread Jan Hubicka
Hi, what aout this? Index: tree.c === --- tree.c (revision 230924) +++ tree.c (working copy) @@ -13424,6 +13424,12 @@ gimple_canonical_types_compatible_p (con { tree f1, f2; + /* Don't try to compare v

Re: [RFC] Getting LTO incremental linking work

2015-11-26 Thread Jan Hubicka
> > what about allowing -flinker-output=XXX at link time as a driver option > and avoiding to override it if already present? That sounds good. I will implement that. > > > > >struct cgraph_node *node = order[i]; > > > > > > > > - if (node->has_gimple_body_p ()) > > > > + if

Re: Fix verify_type ICE during Ada bootstrap

2015-11-26 Thread Jan Hubicka
> On Tue, 24 Nov 2015, Jan Hubicka wrote: > > > > > > > > > We do already wrap all bases into MEM_REFs at streaming time, it would > > > > be easy to adjust it to make it effectively alias-set zero. But of > > > > course the overh

Fix -fdump-ipa-devirt ICE

2015-11-29 Thread Jan Hubicka
Hi, this dump ICEs becuase the locations are still cached. There is no point of dumping this because we now output warning. Bootstrapped/regtested x86_64-linux, comitted. Honza * ipa-devirt.c (add_type_duplicate): Remove redundant ODR violation dump Index: ipa-devirt.c

Fix verify_type ICE with transparent aggr

2015-11-29 Thread Jan Hubicka
Hi, in this testcase we ICE on type variant of TYPE_TRANSPARENT_AGGR type being !TYPE_TRANSPARENT_AGGR. Bootstrapped/regtested x86_64-linux, OK? PR c/67581 * g++.dg/torture/pr67581.C: New testcase. * c-family/c-common.c (handle_transparent_union_attribute): Update

Fix TYPE_PACKED verify_type ICE

2015-11-29 Thread Jan Hubicka
Hi, this patch fixes verifier ICE where we have !TYPE_PACKED variant of TYPE_PACKED type. The fix is symmetric to earlier fix for enums. Bootstrapped/regtested x86_64-linux, OK? Honza PR c/67106 * gcc.c-torture/compile/pr67106.c: New testcase. * c-decl.c: Set TYPE_PACKED

Fix resolution handling WRT incremental linking

2015-11-29 Thread Jan Hubicka
Hi, I went through the visibility code and update it for incremental linking. On few places we now need to take into account the fact that next round of static linking may remove whole sections, common symbols and comdats. Also we can't assume that hidden symbols have unique name as we do not know

Re: [RFC] Getting LTO incremental linking work

2015-11-29 Thread Jan Hubicka
> > 2015-11-28 Tom de Vries > > * lto-wrapper.c (run_gcc): Handle -flinker-output argument. Thanks, this looks fine to me. THe way options are handled in lto-wrapper seems like a gross hack. Hopefully we will manage to clean this up eventually. What happens when I call one of input ob

Re: Fix verify_type ICE during Ada bootstrap

2015-11-29 Thread Jan Hubicka
Hi, here is updated patch which bootstraps®testes, lto-bootstraps x86_64-linux and also works for Firefox. The basic pain is to identify which calls to get_alias_set are used to build alias sets themselves and thus must be made -fstrict-aliasing independent and which are used to drive queries to

Re: Fix verify_type ICE during Ada bootstrap

2015-11-29 Thread Jan Hubicka
> > * misc.c (gnat_get_alias_set): Pass true to get_alias_set. > > * utils.c (relate_alias_sets): Likewise. > > * trans.c (validate_unchecked_conversion): Likewise. > > Missing gcc-interface/ prefix here. Updated. > > But can't we use a default value (of true I suppose) for the new pa

Re: Fix verify_type ICE during Ada bootstrap

2015-11-30 Thread Jan Hubicka
> > I think you are doing too many things in one patch. I'm fine with > dropping the zero-alias-set streaming (but I'd rather not assert > as FE get_alias_set langhook may assign zero to random tree nodes). Ok, the assert was there mostly to double check that all zero alias sets rematerialize co

[RFA] Implement incremental IL linking

2015-11-30 Thread Jan Hubicka
Hi, this is polished version of the patch to implement IL level incremental inking. -flinker-output is now documented and can be specified to the GCC driver. In this case plugin gets option -linker-output-known and it stops from attempts to detect it from info passed down by linker. I also added do

-fstrict-aliasing fixes 1/5: propagate -fno-strict-aliasing in the inliner

2015-11-30 Thread Jan Hubicka
Hi, this is first patch in the broken up series. It adds the logic into ipa-inline-transform to drop the flag when inlining. I do it always until we find a way to make early optimizations safe WRT this transform. The testcase triggers with GCC 5.0/4.9 too, older compilers passes if -fstrict-alia

Re: [RFA] Implement incremental IL linking

2015-11-30 Thread Jan Hubicka
> Hi, > this is polished version of the patch to implement IL level incremental > inking. > -flinker-output is now documented and can be specified to the GCC driver. > In this case plugin gets option -linker-output-known and it stops from > attempts to detect it from info passed down by linker. I

-fstrict-aliasing fixes 2/5: drop alias set 0 streaming

2015-11-30 Thread Jan Hubicka
Hi, this patch disables the streaming of alias 0 flag and adds a comment why. Bootstrapped/regtested x86_64-linux, OK? Honza * lto-streamer-out.c (hash_tree): Do not stream TYPE_ALIAS_SET. * tree-streamer-out.c (pack_ts_type_common_value_fields): Do not stream TYPE_ALIAS_

-fstrict-aliasing fixes 3/5: Do not ignore -fstrict-aliasing changes when parsing optimization attribute

2015-11-30 Thread Jan Hubicka
Hi, this is third part which enables us to change -fstrict-aliasing using optimize attribute. This ought to work safely now because inliner propagate the flag. Bootstrapped/regtested x86_64-linux. Honza * gcc.c-torture/execute/alias-1.c: New testcase. * c-common.c: Do not silent

When not optimizing do not compute RTX memory attributes

2015-11-30 Thread Jan Hubicka
Hi, memory attributes are currently optimized and attached to RTL even when not optimizing. This is obviously just a wasted effort. Bootstrapped/regtested x86_64-linux, OK? Honza * emit-rtl.c (set_mem_attrs, set_mem_attributes_minus_bitpos): Do not compute memory attributes when n

Re: When not optimizing do not compute RTX memory attributes

2015-12-01 Thread Jan Hubicka
> On Tue, 1 Dec 2015, Jan Hubicka wrote: > > > Hi, > > memory attributes are currently optimized and attached to RTL even when not > > optimizing. This is obviously just a wasted effort. > > Huh, are you sure? What about globals used from different optimize > c

Re: -fstrict-aliasing fixes 1/5: propagate -fno-strict-aliasing in the inliner

2015-12-01 Thread Jan Hubicka
> > * ipa-inline-transform.c (inline_call): Drop -fstrict-aliasing when > > inlining -fno-strict-aliasing into -fstrict-aliasing body. > > * gcc.dg/lto/alias-1_0.c: New testcase. > > * gcc.dg/lto/alias-1_1.c: New testcase. > >Index: ipa-inline-transform.c > >

-fstrict-aliasing fixes 4/6: do not fiddle with flag_strict_aliasing when expanding debug locations

2015-12-02 Thread Jan Hubicka
Hi, this patch removes flag_strict_aliasing kludge in expanding debug locations and instead it introduces explicit parameter DEBUG that makes set_mem_attributes_minus_bitpos to not affect alias sets. This is sanity checked by comparing number of alias sets before and after at a time we originally

-fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-02 Thread Jan Hubicka
Hi, this patch makes the type system to be unchanged by flag_strict_aliasing. This is needed to prevent optimization loss in flag_strict_aliasing code where some !flag_strict_aliasing code put alias set 0 into a type (this happens in all cases I modified in my original patch). It is also necessary

Re: -fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-02 Thread Jan Hubicka
> > Rather than adjusting this function please adjust > alias_sets_must_conflict_p. > > Otherwise this looks ok and indeed much nicer. OK, will update it. Will hold this patch until we resolve what we want to do with the debug dumps. I do not seem to be able to reproduce any -fcompare-debug is

Re: -fstrict-aliasing fixes 4/6: do not fiddle with flag_strict_aliasing when expanding debug locations

2015-12-02 Thread Jan Hubicka
> On Wed, 2 Dec 2015, Jakub Jelinek wrote: > > > On Wed, Dec 02, 2015 at 10:05:13AM +0100, Richard Biener wrote: > > > On Wed, 2 Dec 2015, Jan Hubicka wrote: > > > > > > > Hi, > > > > this patch removes flag_strict_aliasing kludge in exp

Re: -fstrict-aliasing fixes 4/6: do not fiddle with flag_strict_aliasing when expanding debug locations

2015-12-02 Thread Jan Hubicka
Hi, I discussed the situation with Jakub on IRC today. It seems we still want to have alias sets in the dumps, but Jakub agrees with introduction new global var to control this instead of tampering with flag_strict_aliasing. This patch does that and also fixes expand_call_stmt which forget to set

Fix ipa-pure-const wrt thunks

2015-12-02 Thread Jan Hubicka
Hi, the testcase expose a bug in nothrow propagation. We forget to set the flag that call from thunk may throw. I probably should flip the default of the flag to prevent similar bugs next stage1. Bootstrapped/regtested x86_64-linux. Comitted. Honza PR ipa/68184 * g++.dg/tortur

Fix visibility handling in ipa-pure-const

2015-12-02 Thread Jan Hubicka
Hi, while analyzing the previous bug I noticed that nothrow propagation handles visibility wrong wrt aliases. This patch fixes it and also makes the code a bit more effective. Bootstrapped/regtested x86_64-linux, comitted. Honza * ipa-pure-const.c (ignore_edge): Rename to ... (i

Fix pure/const propagation with interposable functions

2015-12-02 Thread Jan Hubicka
Hi, this patch implements symmetric fix to ipa-pure-const. In this case it just slightly improves code quality for the case of recursive calls involving interposable functions. Bootstrapped/regtested x86_64-linux, comitted. * ipa-pure-const.c (ignore_edge_for_pure_const): New function.

Re: [PATCH] Handle OBJ_TYPE_REF in FRE

2015-12-03 Thread Jan Hubicka
> > The following patch handles CSEing OBJ_TYPE_REF which was omitted > because it is a GENERIC expression even on GIMPLE (for whatever Why it is generic? It is part of gimple grammar :) > reason...). Rather than changing this now the following patch > simply treats it properly as such. Thanks

Re: [PATCH] Handle OBJ_TYPE_REF in FRE

2015-12-03 Thread Jan Hubicka
> >may lead to wrong code. > > Can you try generating a testcase? > Because with equal vptr and voffset I can't see how that can happen unless > some pass extracts information from the pointer types without sanity checking > with the pointers and offsets. I am not sure I can get a wrong code w

-fstrict-aliasing fixes 6/6: permit inlining of comdats

2015-12-03 Thread Jan Hubicka
Hi, this is the last patch of the series. It makes operand_equal_p to compare alias sets even in !flag_strict_aliasing before inlining so inlining !flag_strict_aliasing to flag_strict_aliasing is possible when callee is merged comdat. I tried to explain it in greater detail in the comment in ipa

Re: [PATCH] Handle OBJ_TYPE_REF in FRE

2015-12-04 Thread Jan Hubicka
> Indeed we don't do code hoisting yet. Maybe one could trick PPRE > into doing it. > > Note that for OBJ_TYPE_REFs in calls you probably should better use > gimple_call_fntype instead of the type of the OBJ_TYPE_REF anyway > (well, fntype will be the method-type, not pointer-to-method-type). >

Re: -fstrict-aliasing fixes 6/6: permit inlining of comdats

2015-12-04 Thread Jan Hubicka
> > I wonder if you can split out the re-naming at this stage. Further > comments below. OK, I will commit the renaming and ipa-icf fix separately. > > > Bootstrapped/regtested x86_64-linux, OK? > > > > I will work on some testcases for the ICF and fold-const that would lead > > to wrong code

Re: [PATCH] Handle OBJ_TYPE_REF in FRE

2015-12-04 Thread Jan Hubicka
> On Fri, 4 Dec 2015, Jan Hubicka wrote: > > > > Indeed we don't do code hoisting yet. Maybe one could trick PPRE > > > into doing it. > > > > > > Note that for OBJ_TYPE_REFs in calls you probably should better use > > > gimple_ca

Re: -fstrict-aliasing fixes 6/6: permit inlining of comdats

2015-12-04 Thread Jan Hubicka
Hi, this is the patch implementing renaming and fixing logic in ipa-icf/lto-symtab WRT compuattion of this flag. I don't seem to be able to construct testcase for this: the merged flag is currently used in inliner only to decide whether to ingore optimize_size/optimize levels which should not lead

Re: -fstrict-aliasing fixes 6/6: permit inlining of comdats

2015-12-04 Thread Jan Hubicka
Hi, this is the patch for fold-const.c. Can you think of some testcase for the MR_DEPENDENCE_CLIQUE comparsion? I am not that familiar with the code to be able to construct it :( Bootstrapped/regtested x86_64-linux, OK? Honza * fold-const.c (operand_equal_p): Do not use flag_strict_alias

Fix ipa-icf.c segfault

2015-12-05 Thread Jan Hubicka
Hi, this patch fixes segfault that crept into my prevoius patch. Bootstrapped/regtested x86_64-linux, comitted. Honza * ipa-icf.c (sem_function::merge): Check that local_original exists. Index: ipa-icf.c === --- ipa-icf.c

Transparent alias suport part 1

2015-12-06 Thread Jan Hubicka
Hi, this is first patch to fix PR 61886 which is one of several PRs we have about need for duplicate declarations. The cgraph code at the moment expects that there is one declaration for every symbol. This is unfortunately not true and in several side cases (such as fortify source, bounds checkin

Re: -fstrict-aliasing fixes 6/6: permit inlining of comdats

2015-12-07 Thread Jan Hubicka
> > > > Well, not exactly of the case mentioned above, but still think that this is > > safe (ugly, too). An alternative is to keep around the bodies until after > > inlining. I have infrastructure for that in my tree, but it is hard to > > tune to > > do: first the alternative function body may

Re: -fstrict-aliasing fixes 6/6: permit inlining of comdats

2015-12-07 Thread Jan Hubicka
> On Fri, 4 Dec 2015, Jan Hubicka wrote: > > > Hi, > > this is the patch for fold-const.c. Can you think of some testcase for the > > MR_DEPENDENCE_CLIQUE comparsion? I am not that familiar with the code to > > be able to construct it :( > > With ICF it wo

Re: -fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-07 Thread Jan Hubicka
> > Bootstrapped/regtested x86_64-linux and also lto-bootstraped. Looks OK? > > > > * alias.c (alias_set_subset_of, alias_sets_conflict_p, > > objects_must_conflict_p): Short circuit for !flag_strict_aliasing > > (get_alias_set): Remove flag_strict_aliasing check. > > (new_alias_se

Re: -fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-07 Thread Jan Hubicka
> > > Bootstrapped/regtested x86_64-linux and also lto-bootstraped. Looks OK? > > > > > > * alias.c (alias_set_subset_of, alias_sets_conflict_p, > > > objects_must_conflict_p): Short circuit for !flag_strict_aliasing > > > (get_alias_set): Remove flag_strict_aliasing check. > > > (new_alia

Re: [PATCH] Fix PR ipa/68790

2015-12-08 Thread Jan Hubicka
> Hi. > > I'm sending patch for the PR, unfortunately I've back-ported Honza's patch > that introduced the regression to GCC 5.3. > > Fix is obvious, I've been running regression tests for both > trunk and gcc-5-branch. Identical patch can be applied (modulo a line with > 'cleanup-ipa-dump'). >

Re: -fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-08 Thread Jan Hubicka
> > Usually cycles happen through structure members and it might be that > > all other frontends have the pointed-to type incomplete. But the > > above recursion shouldn't apply for the structure case. > > All types are equal in Ada and can be forward declared; the language > specifies > that t

Transparent alias suport part 2 (lto-partition fixes)

2015-12-08 Thread Jan Hubicka
Hi, this patch fixes lto-partition WRT transparent aliases. Normal aliases are always put to the same partition as their target and in other partitions they become part of the boundary (so we know that the two symbols are in fact equivalent). Weakrefs and transparent aliases go only into the part

Transparent alias suport part 3 (lto-symtab fixes)

2015-12-08 Thread Jan Hubicka
Hi, this patch fixes and ICE in symtab_node::verify_base when there is a missing entry in the symol table - bug I noticed while debugging the patch. Second fix makes symtab_node::noninterposable_alias to skip all transaprent aliases because these can not change visibility. (this is needed because t

Transparent alias suport part 4 (ipa-visibility fixes)

2015-12-08 Thread Jan Hubicka
Hi, this patch fixes two issues with transparent laiases in ipa-visibility. First one can't replace weakrefs by local aliases because those would lose the weakness and second transparent aliases do not really have resolution info set in all cases, so we want to skip them when considering a comdat f

Transparent alias suport part 5 (varpool fixes)

2015-12-08 Thread Jan Hubicka
Hi, this patch fixes ICE in varpool_node::get_availability which happens when you dump a node with weakref and makes symbol_table::remove_unreferenced_decls to keep aliases in the boundary so we do not lose the information that they actually represent the same location in the binary. This is neede

Transparent alias suport part 6 (lto-cgraph fixes)

2015-12-08 Thread Jan Hubicka
Hi, this patch modifies lto-cgraph to ship the alias target into every partition that use the alias. This is again needed to keep the information that the two declarations are in fact in same place so we can fix alias.c Honza * lto-cgraph.c (compute_ltrans_boundary): Add transparent alia

Transparent alias suport part 7 (lto-symtab support)

2015-12-08 Thread Jan Hubicka
Hi, this patch adds support to lto-symtab.c to prevent merging of certain declarations. The new predicate lto_symtab_merge_p can be used to decide about this. The change is pretty straigforward. lto_symtab_merge_decls_2 makes the decisions about what decls to merge and lto_symtab_merge_symbols_

Transparent alias suport part 8 (equal_address_to support)

2015-12-08 Thread Jan Hubicka
Hi, this patch makes symtab_node::equal_address_to to understand transparent aliases and always return true for symbol and its transparent alias. In addition I introduced new parameter MEMORY_ACCESSED which makes the function useful for base/ofset alias oracle implementation. We are bit schisofren

Transparent alias suport part 9 (ipa-reference fixes)

2015-12-08 Thread Jan Hubicka
Hi, this patch makes ipa-reference safe WRT aliases. The basic idea is to use ultimate alias targets as representative for each group of aliases via ipa_reference_var_uid. Bootstrapped/regtested x86_64-linux with slightly earlier version. Re testing with last minute changes and plan to commit aft

[RFA] Transparent alias suport part 10: Fix base+offset alias analysis oracle WRT aliases

2015-12-08 Thread Jan Hubicka
Hi, this patch fixes base+offset alias oracles to consider variable aliases. With this patch and one extra hack I can LTO bootstrap with variale symbol merging disabled in lto-symtab.c The basic idea is simple - there is new comparer compare_base_decls which knows how to handle aliases via symbol

Wrap fewer refs for LTO

2015-12-08 Thread Jan Hubicka
Hi, while debugging an renaming issue I run into ADDR_EXPR of MEM_REF of ADDR_EXPR which seemed somewhat odd + we don't really get the CONSTANT and other flags right because recompute_tree_invariant_for_addr_expr punts on ADDR_EXPR inside ADDR_EXPR. The expression is created by wrap_refs. While lo

Re: Wrap fewer refs for LTO

2015-12-08 Thread Jan Hubicka
> Hi, > while debugging an renaming issue I run into ADDR_EXPR of MEM_REF of ADDR_EXPR > which seemed somewhat odd + we don't really get the CONSTANT and other flags > right because recompute_tree_invariant_for_addr_expr punts on ADDR_EXPR inside > ADDR_EXPR. > > The expression is created by wrap_

Re: -fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-08 Thread Jan Hubicka
Hi this patch implements the trik for punting if we get too many nested pointers. This fixes the ada tstcases. Curiously enough I would like to replace safe_push by quick_push but doing so I get weird error about freeing non-heap object in the auto_vec desructor... Bootstraping/regtesting x86_64-l

Re: Fix tree-ssa-dce Ada LTO bootstrap ice

2015-12-08 Thread Jan Hubicka
> Jan, > > > this patch fixes tree-ssa-dce ICE seen during Ada bootstrap. It is updated > > version of https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02876.html for > > current mainline > > > > Bootstrapped/regtested x86_64-linux, OK? > > > > PR middle-end/65337 > > * tree-ssa-dce.c (bb_

Re: [RFA] Transparent alias suport part 10: Fix base+offset alias analysis oracle WRT aliases

2015-12-09 Thread Jan Hubicka
> > + bool in_symtab1 = decl_in_symtab_p (base1); > > + bool in_symtab2 = decl_in_symtab_p (base2); > > + > > + /* Declarations of non-automatic variables may have aliases. All other > > + decls are unique. */ > > + if (in_symtab1 != in_symtab2 || !in_symtab1) > > +return 0; > > + re

Re: -fstrict-aliasing fixes 5/6: make type system independent of flag_strict_aliasing

2015-12-09 Thread Jan Hubicka
> On Wed, 9 Dec 2015, Arnaud Charlet wrote: > > > > Hi > > > this patch implements the trik for punting if we get too many nested > > > pointers. > > > This fixes the ada tstcases. Curiously enough I would like to replace > > > safe_push > > > by quick_push but doing so I get weird error about fre

Fix thinko in lto-symtab prevailing decl merging

2015-12-09 Thread Jan Hubicka
Hi, this patch fixes a thinko I introduced into lto_symtab_merge_decls_2 yesterday: a decl can not be prevailed by itself. Bootstrapped/regtested x86_64-linux, comitted. PR lto/68811 * g++.dg/lto/pr68811_0.C: New testcase. * g++.dg/lto/pr68811_1.C: New testcase. *

Re: Transparent alias suport part 9 (ipa-reference fixes)

2015-12-09 Thread Jan Hubicka
) @@ -1,3 +1,19 @@ +2015-12-08 Jan Hubicka + + PR ipa/61886 + PR middle-end/25140 + * ipa-reference.c (ipa_reference_get_not_read_global, + ipa_reference_get_not_read_global): Fix WRT aliases. + (is_improper): Break out from ... + (is_proper_for_analysis): ... here

Transparent alias suport part 11 (vtable rewritting fix)

2015-12-09 Thread Jan Hubicka
Hi, this patch fixes a thinko in vtable rewritting where instead of checking references we was checking list of nodes referring to vtable. The loop looks for the entries in vtable that can be replaced by local aliases, so this bug probably disabled most of the transformations. It reproduced as an

Fix lto.c ICE

2015-12-09 Thread Jan Hubicka
231473) +++ ChangeLog (working copy) @@ -1,6 +1,13 @@ 2015-12-08 Jan Hubicka PR lto/68811 + * lto.c (lto_fixup_prevailing_decls): Do not check TREE_CHAIN of + DECL. + (LTO_NO_PREVAIL): Use gcc_checking_assert. + +2015-12-08 Jan Hubicka + + PR lto/68811

Re: [RFA] Transparent alias suport part 10: Fix base+offset alias analysis oracle WRT aliases

2015-12-09 Thread Jan Hubicka
> > > + bool in_symtab1 = decl_in_symtab_p (base1); > > > + bool in_symtab2 = decl_in_symtab_p (base2); > > > + > > > + /* Declarations of non-automatic variables may have aliases. All other > > > + decls are unique. */ > > > + if (in_symtab1 != in_symtab2 || !in_symtab1) > > > +retur

ipa-cp heuristics fixes

2015-12-09 Thread Jan Hubicka
Martin, while looking into the ipa-cp dumps for bzip and Firefox I noticed few issues. First of all, ipcp_cloning_candidate_p calls optimize_function_for_speed_p (DECL_STRUCT_FUNCTION (node->decl)) which can not be used at WPA time, becuase we have no DECL_STRUCT_FUNCTION around. I replaced it by

Re: ipa-cp heuristics fixes

2015-12-10 Thread Jan Hubicka
> Is this really necessary, is it not enough to remove the assignment to > ret below? If the parameter is not used, devirtualization time bonus, > which you then rely on estimate_local_effects, should be zero for it. > > It is a very minor point, I suppose, but if the function gets cloned > for a

Transparent alias suport part 11: fix warning and error attributes with LTO

2015-12-10 Thread Jan Hubicka
Hi, this patch makes lto-symtab to not merge decls where warning and error attributes mismatch and finally clears up the invalid wanring compiling testcase from PR 61886. So it took only 11 patches and year and half to fix this beast... I am now finished with merging the original transparent alia

Do not decompress functions sections when copying them to ltrans

2015-12-10 Thread Jan Hubicka
Hi, this patch makes WPA to copy sections w/o decompressing them. This leads to a nice /tmp usage for GCC bootstrap (about 70%) and little for Firefox. In GCC about 5% of the ltrans object file is the global decl section, while for Firefox it is 85%. I will try to figure out if there is something

Reduce global decl stream

2015-12-10 Thread Jan Hubicka
Hi, this patch saves about 30% of global decl stream size in firefox. While implementing the lto sections for initializers I put very stupid heursitcs to get_symbol_initial_value deciding whether the initializer is better streamed inline or offline. This ignores strings and may get bit out of han

Re: [PATCH] Add debug counter for IPA bits CP.

2020-08-11 Thread Jan Hubicka
> Hey. > > I'm debugging PR96482 and it would be handy for me to have a debug counter > for the problematic transformation. > > Ready for master? Looks good to me. Perhaps it would be more systematic to add them to the remaining propagators as well - bugs tends to pop up from time to time relat

Do not combine PRED_LOOP_GUARD and PRED_LOOP_GUARD_WITH_RECURSION

2020-08-11 Thread Jan Hubicka
, not by an accident. Bootstrapped/regtested x86_64-linux, comitted. Honza gcc/ChangeLog: 2020-08-11 Jan Hubicka * predict.c (not_loop_guard_equal_edge_p): New function. (maybe_predict_edge): New function. (predict_paths_for_bb): Use it

Re: [PATCH] ipa-inline: Improve growth accumulation for recursive calls

2020-08-12 Thread Jan Hubicka
Hello, with Martin we spent some time looking into exchange2 and my understanding of the problem is the following: There is the self recursive function digits_2 with the property that it has 10 nested loops and calls itself from the innermost. Now we do not do amazing job on guessing the profile s

Re: [PATCH] ipa-inline: Improve growth accumulation for recursive calls

2020-08-13 Thread Jan Hubicka
> Hi! > > On Wed, Aug 12, 2020 at 09:03:35PM +0200, Richard Biener wrote: > > On August 12, 2020 7:53:07 PM GMT+02:00, Jan Hubicka wrote: > > >> From: Xiong Hu Luo > > >> 523.xalancbmk_r +1.32% > > >> 541.leela_r +1.51% > > >> 5

Re: [PATCH] ipa-inline: Improve growth accumulation for recursive calls

2020-08-13 Thread Jan Hubicka
> > Thanks for the information :) Tamar replied that there is another > regression *on exchange2 is 11%.*, I've also rebased my code and confirmed > it really getting even slower than before (revert the patch could pull the > performance back)... Yep, we need to figure out how to fix this - the

Re: Backporting streaming and enum changes

2020-08-14 Thread Jan Hubicka
Hi, > > Since this was backported as > r10-8623-g0d96c3424bbb5e5f994b78c8f65d8704d215be54, Yes, after discussion with Jakub on IRC. > I've noticed ICEs on arm and aarch64: > gcc.dg/pr34457-1.c (internal compiler error) > gcc.dg/torture/pr92088-1.c -O2 -flto -fno-use-linker-plugin > -fl

Re: Backporting streaming and enum changes

2020-08-14 Thread Jan Hubicka
> Hi, > > > > Since this was backported as > > r10-8623-g0d96c3424bbb5e5f994b78c8f65d8704d215be54, > > Yes, after discussion with Jakub on IRC. > > I've noticed ICEs on arm and aarch64: > > gcc.dg/pr34457-1.c (internal compiler error) > > gcc.dg/torture/pr92088-1.c -O2 -flto -fno-use-l

Re: [PATCH] ipa-inline: Improve growth accumulation for recursive callsg

2020-08-20 Thread Jan Hubicka
> > > > Really appreciate for your detailed explanation. BTW, My previous patch > > for PGO build on exchange2 takes this similar method by setting each cloned > > node to 1/10th of the frequency several month agao :) > > > > https://gcc.gnu.org/pipermail/gcc-patches/2020-June/546926.html I was l

Re: [PATCH] Add cold attribute to one time construction APIs

2020-08-24 Thread Jan Hubicka
> On Tue, Aug 18, 2020 at 4:36 PM Jonathan Wakely via Gcc-patches > wrote: > > > > On 17/08/20 18:15 +, Aditya K via Libstdc++ wrote: > > >This would help compiler optimize local static objects. > > > > > >Added changelog. > > > > Please don't :-) > > > > GCC patch policies always said NOT to

Re: [PATCH] Check calls before loop unrolling

2020-08-24 Thread Jan Hubicka
> On Thu, Aug 20, 2020 at 6:35 AM guojiufu via Gcc-patches > wrote: > > > > Hi, > > > > When unroll loops, if there are calls inside the loop, those calls > > may raise negative impacts for unrolling. This patch adds a param > > param_max_unrolled_calls, and checks if the number of calls inside >

Re: [PATCH 2/2] IPA symver: support visibility and static symbols.

2020-08-25 Thread Jan Hubicka
> > gcc/ChangeLog: > > * cgraphunit.c (process_symver_attribute): Remove checks that > are not needed now. > (cgraph_node::assemble_thunks_and_aliases): Change second > argument to decl. > * config/elfos.h (ASM_OUTPUT_SYMVER_DIRECTIVE): Add new > VISIBILITY par

Re: [PATCH 1/2] IPA symver: allow multiple symvers for a definition

2020-08-25 Thread Jan Hubicka
> > gcc/ChangeLog: > > * cgraphunit.c (process_symver_attribute): Allow multiple > symver attributes for one symbol. > * doc/extend.texi: Document the change. > > gcc/testsuite/ChangeLog: > > * lib/target-supports-dg.exp: Add dg-require-symver. > * lib/target-suppo

Re: [PATCH 2/2] IPA symver: support visibility and static symbols.

2020-08-26 Thread Jan Hubicka
> On 8/25/20 8:46 PM, Jan Hubicka wrote: > > What will happen here with protected visibility? > > I forgot about it. Should it be mapped also to "local"? > > + const char *visibility = NULL; > + if (!TREE_PUBLIC (origin_decl)) > +visibility = &q

Re: [PATCH 2/2] IPA symver: support visibility and static symbols.

2020-08-26 Thread Jan Hubicka
> On 8/26/20 11:22 AM, Jan Hubicka wrote: > > > On 8/25/20 8:46 PM, Jan Hubicka wrote: > > > > What will happen here with protected visibility? > > > > > > I forgot about it. Should it be mapped also to "local"? > > > > > > +

Re: [PATCH] [AVX512] [PR87767] Optimize memory broadcast for constant vector under AVX512

2020-08-27 Thread Jan Hubicka
> Under what circumstances are we seeing a SEQUENCE in the x86 backend? I'm > surprised we need to handle that case. > > So your pass modifies the insn in place, which is fine. But do we actually > remove the original constant pool entry if it's no longer used? If not, does > this patch actuall

Re: [PATCH 2/6] Implement a new partitioner for parallel compilation

2020-08-27 Thread Jan Hubicka
> When using the LTO infrastructure to compile files in parallel, we > can't simply use any of the LTO partitioner, once extra dependency > analysis is required to ensure that some nodes are correctly > partitioned together. > > Therefore, here we implement a new partitioner called > "lto_merge_co

Re: [PATCH 3/6] Implement fork-based parallelism engine

2020-08-27 Thread Jan Hubicka
> We also implemented a GNU Make Jobserver integration to this mechanism, > as implemented in jobserver.cc. This works as follows: > diff --git a/gcc/jobserver.cc b/gcc/jobserver.cc > new file mode 100644 > index 000..8cb374de86e > --- /dev/null > +++ b/gcc/jobserver.cc I wonder if this ca

<    7   8   9   10   11   12   13   14   15   16   >