[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #33 from steven at gcc dot gnu dot org 2010-04-23 07:38 --- *** Bug 43864 has been marked as a duplicate of this bug. *** -- steven at gcc dot gnu dot org changed: What|Removed |Added CC||carrot at google dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #32 from rahul at icerasemi dot com 2010-01-11 12:34 --- I will re-test on our port and report my findings, cheers! -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #31 from steven at gcc dot gnu dot org 2010-01-09 21:27 --- Created an attachment (id=19525) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19525&action=view) Patch agains r155731, works pre-RA only Bootstrapped&tested on ia64-unknown-linux-gnu. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #30 from steven at gcc dot gnu dot org 2010-01-08 17:08 --- (From update of attachment 17995) The ifcvt.c part of the patch does not work anymore, because it doesn't handle DEBUG_INSNs properly. I am working on an update. -- steven at gcc dot gnu dot org changed: What|Removed |Added Attachment #17995|0 |1 is obsolete|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #29 from rahul at icerasemi dot com 2009-09-04 14:51 --- I am testing Steven's Crossjumping patch attached here. With CoreMark we see a 1% increase in performance when using Os. Other proprietary tests show ~0.5% decrease in code size. The path however does not fix PR30905. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #28 from steven at gcc dot gnu dot org 2009-06-14 19:54 --- Created an attachment (id=17995) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17995&action=view) Patch agains r148322, works pre-RA only Joern's original ifcvt.c patch only dealt with pre-reload if-conversion. The subsequent changes to make struct-equiv work for crossjumping and after reload, made the code too complicated IMHO. So I've gone back to the roots of the patch. I've simplified things a bit -- mostly by using the DF machinery. This new attached patch is far from complete though. The struct-equiv code should use rtx_equal_p_cb, but the rtx_equal_p_cb needs to be modified first (to be more like for_each_rtx: 3-state and passing around a pointer to auxiliary data). The local_reg_p stuff should probably go into df-problems.c as a _p function. And so on. But the patch does work. I wanted to let folks now that this bug is not yet forgotten! -- steven at gcc dot gnu dot org changed: What|Removed |Added AssignedTo|unassigned at gcc dot gnu |steven at gcc dot gnu dot |dot org |org Status|NEW |ASSIGNED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #27 from amylaar at gcc dot gnu dot org 2006-11-17 18:58 --- We've been using this patch: http://gcc.gnu.org/ml/gcc-patches/2006-02/msg01488.html successfully in a 4.1.1 based compiler. It is not optimal, though: the check for equality of the regsets in struct_equiv_init is unnecessary, and it can also lead skipping possible optimizations. The frequent live updates are also not necessary. This optimization can work with register life info that is inexact, as long as it is conservative, i.e. it may flag registers as live that are not, but it most not pretend that live registers are dead. Note also that re-integration of the if-conversion improvements was not within the scope of this patch, i.e. this is still an outstanding issue. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #26 from amylaar at gcc dot gnu dot org 2006-03-21 14:24 --- (In reply to comment #25) > can we close this? > No, we still have to actually re-enable the cross-jumping code, and we haven't even gotten to the review of the if-conversion part. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #25 from bonzini at gnu dot org 2006-03-21 08:27 --- can we close this? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #24 from amylaar at gcc dot gnu dot org 2005-12-19 14:37 --- Subject: Bug 20070 Author: amylaar Date: Mon Dec 19 14:36:59 2005 New Revision: 108792 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=108792 Log: * cfgcleanup.c: Temporarily revert patches for PR 20070 till Bernd comes back. Modified: trunk/gcc/ChangeLog trunk/gcc/cfgcleanup.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #23 from amylaar at gcc dot gnu dot org 2005-12-13 13:04 --- Subject: Bug 20070 Author: amylaar Date: Tue Dec 13 13:04:18 2005 New Revision: 108480 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=108480 Log: PR rtl-optimization/20070 / part1 * flow.c (update_life_info): If PROP_POST_REGSTACK is set, call count_or_remove_death_notes with kill == -1. (mark_set_1): Don't add REG_DEAD / REG_UNUSED notes for stack registers if PROP_POST_REGSTACK is set. (mark_used_reg): Likewise. (count_or_remove_death_notes): If kill is -1, don't remove REG_DEAD / REG_UNUSED notes for stack regs. * cfgcleanup.c (condjump_equiv_p): Change parameters and processing to match rtx_equiv_p machinery. Change caller. (outgoing_edges_match): Likewise. (try_crossjump_to_edge): Use struct_equiv_block_eq instead of flow_find_cross_jump. * basic-block.h (PROP_POST_REGSTACK, STRUCT_EQUIV_START): Define. (STRUCT_EQUIV_RERUN, STRUCT_EQUIV_FINAL): Likewise. (STRUCT_EQUIV_NEED_FULL_BLOCK, STRUCT_EQUIV_MATCH_JUMPS): Likewise. (STRUCT_EQUIV_MAX_LOCAL): Likewise. (struct struct_equiv_checkpoint, struct equiv_info): Likewise. (insns_match_p): Update prototype. (flow_find_cross_jump): Remove prototype. (struct_equiv_block_eq, struct_equiv_init): Declare. (rtx_equiv_p, condjump_equiv_p): Likewise. * struct-equiv.c: Include reload.h. (IMPOSSIBLE_MOVE_FACTOR): Define. (assign_reg_reg_set, struct_equiv_make_checkpoint): New functions. (struct_equiv_improve_checkpoint): Likewise. (struct_equiv_restore_checkpoint, rtx_equiv_p): Likewise. (set_dest_equiv_p, set_dest_addr_equiv_p, struct_equiv_init): Likewise. (struct_equiv_merge, find_dying_input): Likewise. (resolve_input_conflict, note_local_live): Likewise. (death_notes_match_p): Change parameters and processing to match rtx_equiv_p machinery. Change caller. (insns_match_p): Likewise. (flow_find_cross_jump): Replace with: (struct_equiv_block_eq). Back out this change: 2005-03-07 Kazu Hirata <[EMAIL PROTECTED]> * recog.c (verify_changes): Make it static. * recog.h: Remove the corresponding prototype. Modified: trunk/gcc/ChangeLog trunk/gcc/basic-block.h trunk/gcc/cfgcleanup.c trunk/gcc/flow.c trunk/gcc/recog.c trunk/gcc/recog.h trunk/gcc/struct-equiv.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #22 from amylaar at gcc dot gnu dot org 2005-12-07 13:31 --- Subject: Bug 20070 Author: amylaar Date: Wed Dec 7 13:31:41 2005 New Revision: 108164 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=108164 Log: 2005-12-07 J"orn Rennecke <[EMAIL PROTECTED]> Preparation for PR rtl-optimization/20070 / part1 * basic-block.h (insns_match_p, flow_find_cross_jump): Declare. * cfgcleanup.c (condjump_equiv_p): New function, broken out of outgoing_edges_match. (outgoing_edges_match): Use condjump_equiv_p. (merge_memattrs, insns_match_p, flow_find_cross_jump): Move from here into.. * struct-equiv.c: New file. (death_notes_match_p) New function, broken out of insns_match_p. * Makefile.in (OBJS-common): Add struct-equiv.o. (struct-equiv.o): New target. Added: trunk/gcc/struct-equiv.c - copied, changed from r107723, trunk/gcc/cfgcleanup.c Modified: trunk/gcc/ChangeLog trunk/gcc/Makefile.in trunk/gcc/basic-block.h trunk/gcc/cfgcleanup.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Comment #21 from steven at gcc dot gnu dot org 2005-12-01 20:17 --- For Bug 21803 we could use similar infrastructure to what is proposed for this bug. -- steven at gcc dot gnu dot org changed: What|Removed |Added OtherBugsDependingO||21803 nThis|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-07-15 14:25 --- Subject: Bug 20070 CVSROOT:/cvs/gcc Module name:gcc Branch: sh-elf-4_1-branch Changes by: [EMAIL PROTECTED] 2005-07-15 14:25:24 Modified files: gcc: cfgcleanup.c ChangeLog Log message: Update this patch: 2005-07-14 J"orn Rennecke <[EMAIL PROTECTED]> PR rtl-optimization/20070 http://gcc.gnu.org/ml/gcc-patches/2005-07/msg01041.html * basic-block.h (STRUCT_EQUIV_START, STRUCT_EQUIV_RERUN): Define. (STRUCT_EQUIV_FINAL, STRUCT_EQUIV_MAX_LOCAL): Likewise. (struct struct_equiv_checkpoint, struct equiv_info): Likewise. (struct_equiv_block_eq): Declare. * cfgcleanup.c (reload.h, expr.h): #include. (IMPOSSIBLE_MOVE_FACTOR): Define. (flow_find_cross_jump): Remove. (assign_reg_reg_set, struct_equiv, struct_equiv_set): New functions. (struct_equiv_dst_mem, struct_equiv_make_checkpoint): Likewise. (struct_equiv_improve_checkpoint): Likewise. (struct_equiv_restore_checkpoint, struct_equiv_death): Likewise. (struct_equiv_block_eq): Likewise. (find_dying_inputs, resolve_input_conflict): Likewise. (try_crossjump_to_edge): Use struct_equiv_block_eq instead of flow_find_cross_jump. * ifcvt.c (noce_try_complex_cmove): New function. (noce_process_if_block): Call it. For flag_expensive_optimizations, update cond_exec_changed_p on success. (rest_of_handle_if_conversion): For flag_expensive_optimizations, provide if_convert with register lifeness info. Back out this change: 2005-03-07 Kazu Hirata <[EMAIL PROTECTED]> * recog.c (verify_changes): Make it static. * recog.h: Remove the corresponding prototype. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfgcleanup.c.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=1.143.2.3&r2=1.143.2.4 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=2.8142.2.22&r2=2.8142.2.23 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-07-15 14:07 --- An updated patch is here: http://gcc.gnu.org/ml/gcc-patches/2005-07/msg01041.html -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-07-12 13:30 --- Subject: Bug 20070 CVSROOT:/cvs/gcc Module name:gcc Branch: sh-elf-4_1-branch Changes by: [EMAIL PROTECTED] 2005-07-12 13:29:58 Modified files: gcc: ChangeLog basic-block.h cfgcleanup.c ifcvt.c recog.c recog.h Log message: PR rtl-optimization/20070 http://gcc.gnu.org/ml/gcc-patches/2005-07/msg00843.html * basic-block.h (STRUCT_EQUIV_START, STRUCT_EQUIV_RERUN): Define. (STRUCT_EQUIV_FINAL, STRUCT_EQUIV_MAX_LOCAL): Likewise. (struct struct_equiv_checkpoint, struct equiv_info): Likewise. (struct_equiv_block_eq): Declare. * cfgcleanup.c (reload.h, expr.h): #include. (IMPOSSIBLE_MOVE_FACTOR): Define. (flow_find_cross_jump): Remove. (assign_reg_reg_set, struct_equiv, struct_equiv_set): New functions. (struct_equiv_dst_mem, struct_equiv_make_checkpoint): Likewise. (struct_equiv_improve_checkpoint): Likewise. (struct_equiv_restore_checkpoint, struct_equiv_death): Likewise. (struct_equiv_block_eq): Likewise. (find_dying_inputs, resolve_input_conflict): Likewise. (try_crossjump_to_edge): Use struct_equiv_block_eq instead of flow_find_cross_jump. * ifcvt.c (noce_try_complex_cmove): New function. (noce_process_if_block): Call it. For flag_expensive_optimizations, update cond_exec_changed_p on success. (rest_of_handle_if_conversion): For flag_expensive_optimizations, provide if_convert with register lifeness info. Back out this change: 2005-03-07 Kazu Hirata <[EMAIL PROTECTED]> * recog.c (verify_changes): Make it static. * recog.h: Remove the corresponding prototype. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=2.8142.2.17&r2=2.8142.2.18 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/basic-block.h.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=1.246.2.2&r2=1.246.2.3 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cfgcleanup.c.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=1.143.2.1&r2=1.143.2.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ifcvt.c.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=1.184.2.1&r2=1.184.2.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/recog.c.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=1.221.4.1&r2=1.221.4.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/recog.h.diff?cvsroot=gcc&only_with_tag=sh-elf-4_1-branch&r1=1.55.4.1&r2=1.55.4.2 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-07-12 13:14 --- An updated patch is here: http://gcc.gnu.org/ml/gcc-patches/2005-07/msg00843.html -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-07-07 18:29 --- An updated patch is here: http://gcc.gnu.org/ml/gcc-patches/2005-07/msg00482.html -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-06-01 11:59 --- For the purposes of PR20070, it is sufficient that PR21767 is fixed on mainline. -- What|Removed |Added BugsThisDependsOn|21767 | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
-- What|Removed |Added BugsThisDependsOn||21767 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-04-12 18:56 --- PR and patch predate gcc 4.0 branch. -- What|Removed |Added OtherBugsDependingO||17652 nThis|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
-- What|Removed |Added Target Milestone|4.1.0 |--- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From joern dot rennecke at st dot com 2005-03-03 14:59 --- Subject: Re: If-conversion can't match equivalent code, and cross-jumping only works for literal matches pinskia at gcc dot gnu dot org wrote: >--- Additional Comments From pinskia at gcc dot gnu dot org 2005-03-03 >02:44 --- >(In reply to comment #4) > > >>The recog.c / recog.h part of the patch has been committed as part >>of another patch: >>http://gcc.gnu.org/ml/gcc-patches/2005-03/msg00133.html >> >> > >Yes this also caused a regression on ppc-darwin (it might also be reproducable >with ppc-elf and ppc- >linux). > > > I've tried ppc-eabisim, but can't reproduce a failure there building gcc or newlib. powerpc-apple-darwin7.4.0 wants lots of include files which I don't have. Could you send me a preprocessed file so that I can test my patch against that? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From pinskia at gcc dot gnu dot org 2005-03-03 02:44 --- (In reply to comment #4) > The recog.c / recog.h part of the patch has been committed as part > of another patch: > http://gcc.gnu.org/ml/gcc-patches/2005-03/msg00133.html Yes this also caused a regression on ppc-darwin (it might also be reproducable with ppc-elf and ppc- linux). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-03-02 22:06 --- The recog.c / recog.h part of the patch has been committed as part of another patch: http://gcc.gnu.org/ml/gcc-patches/2005-03/msg00133.html -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-02-21 16:38 --- While merging the patch in a 3.4.3 based branch, I noticed three small issues: - The rest_of_handle_life prototype in passes.c is not necessary. It is a vestige from a previous (more intrusive) attempt to provide life information to if_convert. - In passes.c:rest_of_handle_if_conversion, at the end of the flag_expensive_optimizations code, EXIT_BLOCK_PTR->global_live_at_start has to be cleared for compatibility with this patch: 2004-05-17 J"orn Rennecke <[EMAIL PROTECTED]> * cse.c (trivially_dead_nonlocal_regs): New variable. (note_dead_set): New function. (delete_trivially_dead_insns): If life info is available, update it. For completeness, we might also clear ENTRY_BLOCK_PTR->global_live_at_end. - config/pa/pa.c:pa_commutative_p is missing the parameter list: (rtx x, int outer_code) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From amylaar at gcc dot gnu dot org 2005-02-21 15:44 --- regression testing of the patch in gcc 4.0 20050218 was successful. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
--- Additional Comments From pinskia at gcc dot gnu dot org 2005-02-19 05:04 --- Confirmed based on RTH's comments to the patch. -- What|Removed |Added Status|UNCONFIRMED |NEW Ever Confirmed||1 Last reconfirmed|-00-00 00:00:00 |2005-02-19 05:04:56 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
[Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
-- What|Removed |Added Target Milestone|--- |4.1.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070