[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-12-15 Thread steven at gcc dot gnu dot org
-- Bug 18499 depends on bug 17340, which changed state. Bug 17340 Summary: [4.0 Regression] Internal error compiling with -O3 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17340 What|Old Value |New Value ---

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-12-07 Thread steven at gcc dot gnu dot org
--- Additional Comments From steven at gcc dot gnu dot org 2004-12-07 09:15 --- Fixed: Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 10 samples %symbol name 63499 4.4898 replace_goto_queu

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-24 Thread steven at gcc dot gnu dot org
--- Additional Comments From steven at gcc dot gnu dot org 2004-11-24 11:12 --- (From update of attachment 7547) The problem was searching edges the edge->dest block in remove_edge, but we now have dest_idx on for edge (thanks to Kazu's O(1) PHI arg lookup patches) so we don't have to se

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread stevenb at suse dot de
--- Additional Comments From stevenb at suse dot de 2004-11-15 19:31 --- Subject: Re: [4.0 Regression] quadratic behavior in cfgexpand The complexity is O(N) with vectors and with lists. How on earth do you get to O(N*M)? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18499

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread pinskia at gcc dot gnu dot org
--- Additional Comments From pinskia at gcc dot gnu dot org 2004-11-15 19:30 --- No they come from that fact remove_edge is O(number of edges in succ of BB)+O(number of edges in pred of BB) and then you are doing O(number of edges) with calling remove_edge the whole thing now becomes

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread giovannibajo at libero dot it
--- Additional Comments From giovannibajo at libero dot it 2004-11-15 19:25 --- Doesn't the quadraticy come from VEC_unordered_remove? If you have M total edges and you want to remove N of them, the complexity is O(N*M) with vectors, but used to be O(N) with lists. -- http://gcc.gn

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread pinskia at gcc dot gnu dot org
--- Additional Comments From pinskia at gcc dot gnu dot org 2004-11-15 18:12 --- confirmed. -- What|Removed |Added Status|UNCONFIRMED |NEW E

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread steven at gcc dot gnu dot org
--- Additional Comments From steven at gcc dot gnu dot org 2004-11-15 11:38 --- Created an attachment (id=7547) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=7547&action=view) Suggestion for removing many edges at once Something like this might help. There are still a few other p

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread stevenb at suse dot de
--- Additional Comments From stevenb at suse dot de 2004-11-15 10:41 --- Subject: Re: [4.0 Regression] quadratic behavior in cfgexpand Actually this has always been there, independent of the edge vector work. The old code has exactly the same problem. There is *no* canonical way to r

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread jh at suse dot cz
--- Additional Comments From jh at suse dot cz 2004-11-15 10:37 --- Subject: Re: New: [4.0 Regression] quadratic behavior in cfgexpand > The test case for 17340 exposes quadratic behavior caused by > abnormal edges in the CFG: > > > % cumulative self self to

[Bug middle-end/18499] [4.0 Regression] quadratic behavior in cfgexpand

2004-11-15 Thread steven at gcc dot gnu dot org
--- Additional Comments From steven at gcc dot gnu dot org 2004-11-15 10:34 --- Perhaps we should have an edge flag to mark edges dead, then walk the entire CFG visiting all succ edges once (marking the dead ones) and have a function remove_many_edges() in cfg.c to kill marked edges...