public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches
@ 2005-02-19 15:55 amylaar at gcc dot gnu dot org
2005-02-19 16:03 ` [Bug rtl-optimization/20070] " amylaar at gcc dot gnu dot org
` (15 more replies)
0 siblings, 16 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-02-19 15:55 UTC (permalink / raw)
To: gcc-bugs
If-conversion currently lacks the ability to merge two
basic blocks that are identical except for an input register
that can be set up using a conditional move, and possibly some
different local registers.
Cross-jumping lacks the ability to recognize that two blocks are
equivalent when there are different local registers, and (for -Os)
to find opportunities where setting up input registers will allow
to do cross jumping.
The problem has been discussed here:
http://gcc.gnu.org/ml/gcc-patches/2004-01/msg03281.html
http://gcc.gnu.org/ml/gcc-patches/2005-01/msg00672.html
A patch against 4.0 20050218 has been posted here:
http://gcc.gnu.org/ml/gcc-patches/2005-02/msg01066.html
--
Summary: If-conversion can't match equivalent code, and cross-
jumping only works for literal matches
Product: gcc
Version: 3.3
Status: UNCONFIRMED
Keywords: missed-optimization, patch
Severity: enhancement
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: amylaar at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
OtherBugsDependingO 17652
nThis:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
@ 2005-02-19 16:03 ` amylaar at gcc dot gnu dot org
2005-02-19 16:24 ` pinskia at gcc dot gnu dot org
` (14 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-02-19 16:03 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
2005-02-19 16:03 ` [Bug rtl-optimization/20070] " amylaar at gcc dot gnu dot org
@ 2005-02-19 16:24 ` pinskia at gcc dot gnu dot org
2005-02-21 21:47 ` amylaar at gcc dot gnu dot org
` (13 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-02-19 16:24 UTC (permalink / raw)
To: gcc-bugs
------- 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|0000-00-00 00:00:00 |2005-02-19 05:04:56
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
2005-02-19 16:03 ` [Bug rtl-optimization/20070] " amylaar at gcc dot gnu dot org
2005-02-19 16:24 ` pinskia at gcc dot gnu dot org
@ 2005-02-21 21:47 ` amylaar at gcc dot gnu dot org
2005-02-21 22:15 ` amylaar at gcc dot gnu dot org
` (12 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-02-21 21:47 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (2 preceding siblings ...)
2005-02-21 21:47 ` amylaar at gcc dot gnu dot org
@ 2005-02-21 22:15 ` amylaar at gcc dot gnu dot org
2005-03-02 22:06 ` amylaar at gcc dot gnu dot org
` (11 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-02-21 22:15 UTC (permalink / raw)
To: gcc-bugs
------- 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 <joern.rennecke@superh.com>
* 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (3 preceding siblings ...)
2005-02-21 22:15 ` amylaar at gcc dot gnu dot org
@ 2005-03-02 22:06 ` amylaar at gcc dot gnu dot org
2005-03-03 2:44 ` pinskia at gcc dot gnu dot org
` (10 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-03-02 22:06 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (4 preceding siblings ...)
2005-03-02 22:06 ` amylaar at gcc dot gnu dot org
@ 2005-03-03 2:44 ` pinskia at gcc dot gnu dot org
2005-03-03 15:00 ` joern dot rennecke at st dot com
` (9 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-03-03 2:44 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (5 preceding siblings ...)
2005-03-03 2:44 ` pinskia at gcc dot gnu dot org
@ 2005-03-03 15:00 ` joern dot rennecke at st dot com
2005-04-05 2:00 ` pinskia at gcc dot gnu dot org
` (8 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: joern dot rennecke at st dot com @ 2005-03-03 15:00 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (6 preceding siblings ...)
2005-03-03 15:00 ` joern dot rennecke at st dot com
@ 2005-04-05 2:00 ` pinskia at gcc dot gnu dot org
2005-04-12 18:56 ` amylaar at gcc dot gnu dot org
` (7 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-04-05 2:00 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.1.0 |---
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (7 preceding siblings ...)
2005-04-05 2:00 ` pinskia at gcc dot gnu dot org
@ 2005-04-12 18:56 ` amylaar at gcc dot gnu dot org
2005-05-26 14:35 ` amylaar at gcc dot gnu dot org
` (6 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-04-12 18:56 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (8 preceding siblings ...)
2005-04-12 18:56 ` amylaar at gcc dot gnu dot org
@ 2005-05-26 14:35 ` amylaar at gcc dot gnu dot org
2005-06-01 12:00 ` amylaar at gcc dot gnu dot org
` (5 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-05-26 14:35 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
BugsThisDependsOn| |21767
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20070
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (9 preceding siblings ...)
2005-05-26 14:35 ` amylaar at gcc dot gnu dot org
@ 2005-06-01 12:00 ` amylaar at gcc dot gnu dot org
2005-07-07 18:30 ` amylaar at gcc dot gnu dot org
` (4 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-06-01 12:00 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (10 preceding siblings ...)
2005-06-01 12:00 ` amylaar at gcc dot gnu dot org
@ 2005-07-07 18:30 ` amylaar at gcc dot gnu dot org
2005-07-12 13:30 ` amylaar at gcc dot gnu dot org
` (3 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-07-07 18:30 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (11 preceding siblings ...)
2005-07-07 18:30 ` amylaar at gcc dot gnu dot org
@ 2005-07-12 13:30 ` amylaar at gcc dot gnu dot org
2005-07-12 13:35 ` cvs-commit at gcc dot gnu dot org
` (2 subsequent siblings)
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-07-12 13:30 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (12 preceding siblings ...)
2005-07-12 13:30 ` amylaar at gcc dot gnu dot org
@ 2005-07-12 13:35 ` cvs-commit at gcc dot gnu dot org
2005-07-15 14:22 ` amylaar at gcc dot gnu dot org
2005-07-15 14:43 ` cvs-commit at gcc dot gnu dot org
15 siblings, 0 replies; 30+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-07-12 13:35 UTC (permalink / raw)
To: gcc-bugs
------- 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: amylaar@gcc.gnu.org 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 <kazu@cs.umass.edu>
* 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (13 preceding siblings ...)
2005-07-12 13:35 ` cvs-commit at gcc dot gnu dot org
@ 2005-07-15 14:22 ` amylaar at gcc dot gnu dot org
2005-07-15 14:43 ` cvs-commit at gcc dot gnu dot org
15 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-07-15 14:22 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
` (14 preceding siblings ...)
2005-07-15 14:22 ` amylaar at gcc dot gnu dot org
@ 2005-07-15 14:43 ` cvs-commit at gcc dot gnu dot org
15 siblings, 0 replies; 30+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-07-15 14:43 UTC (permalink / raw)
To: gcc-bugs
------- 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: amylaar@gcc.gnu.org 2005-07-15 14:25:24
Modified files:
gcc : cfgcleanup.c ChangeLog
Log message:
Update this patch:
2005-07-14 J"orn Rennecke <joern.rennecke@st.com>
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 <kazu@cs.umass.edu>
* 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (11 preceding siblings ...)
2010-01-11 12:34 ` rahul at icerasemi dot com
@ 2010-04-23 7:39 ` steven at gcc dot gnu dot org
12 siblings, 0 replies; 30+ messages in thread
From: steven at gcc dot gnu dot org @ 2010-04-23 7:39 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (10 preceding siblings ...)
2010-01-09 21:27 ` steven at gcc dot gnu dot org
@ 2010-01-11 12:34 ` rahul at icerasemi dot com
2010-04-23 7:39 ` steven at gcc dot gnu dot org
12 siblings, 0 replies; 30+ messages in thread
From: rahul at icerasemi dot com @ 2010-01-11 12:34 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (9 preceding siblings ...)
2010-01-08 17:08 ` steven at gcc dot gnu dot org
@ 2010-01-09 21:27 ` steven at gcc dot gnu dot org
2010-01-11 12:34 ` rahul at icerasemi dot com
2010-04-23 7:39 ` steven at gcc dot gnu dot org
12 siblings, 0 replies; 30+ messages in thread
From: steven at gcc dot gnu dot org @ 2010-01-09 21:27 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (8 preceding siblings ...)
2009-09-04 14:51 ` rahul at icerasemi dot com
@ 2010-01-08 17:08 ` steven at gcc dot gnu dot org
2010-01-09 21:27 ` steven at gcc dot gnu dot org
` (2 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: steven at gcc dot gnu dot org @ 2010-01-08 17:08 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (7 preceding siblings ...)
2009-06-14 19:54 ` steven at gcc dot gnu dot org
@ 2009-09-04 14:51 ` rahul at icerasemi dot com
2010-01-08 17:08 ` steven at gcc dot gnu dot org
` (3 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: rahul at icerasemi dot com @ 2009-09-04 14:51 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (6 preceding siblings ...)
2006-11-17 18:58 ` amylaar at gcc dot gnu dot org
@ 2009-06-14 19:54 ` steven at gcc dot gnu dot org
2009-09-04 14:51 ` rahul at icerasemi dot com
` (4 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: steven at gcc dot gnu dot org @ 2009-06-14 19:54 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (5 preceding siblings ...)
2006-03-21 14:24 ` amylaar at gcc dot gnu dot org
@ 2006-11-17 18:58 ` amylaar at gcc dot gnu dot org
2009-06-14 19:54 ` steven at gcc dot gnu dot org
` (5 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2006-11-17 18:58 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (4 preceding siblings ...)
2006-03-21 8:27 ` bonzini at gnu dot org
@ 2006-03-21 14:24 ` amylaar at gcc dot gnu dot org
2006-11-17 18:58 ` amylaar at gcc dot gnu dot org
` (6 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2006-03-21 14:24 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (3 preceding siblings ...)
2005-12-19 14:37 ` amylaar at gcc dot gnu dot org
@ 2006-03-21 8:27 ` bonzini at gnu dot org
2006-03-21 14:24 ` amylaar at gcc dot gnu dot org
` (7 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: bonzini at gnu dot org @ 2006-03-21 8:27 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2005-12-13 13:04 ` amylaar at gcc dot gnu dot org
@ 2005-12-19 14:37 ` amylaar at gcc dot gnu dot org
2006-03-21 8:27 ` bonzini at gnu dot org
` (8 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-12-19 14:37 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
2005-12-01 20:17 ` steven at gcc dot gnu dot org
2005-12-07 13:31 ` amylaar at gcc dot gnu dot org
@ 2005-12-13 13:04 ` amylaar at gcc dot gnu dot org
2005-12-19 14:37 ` amylaar at gcc dot gnu dot org
` (9 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-12-13 13:04 UTC (permalink / raw)
To: gcc-bugs
------- 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 <kazu@cs.umass.edu>
* 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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
2005-12-01 20:17 ` steven at gcc dot gnu dot org
@ 2005-12-07 13:31 ` amylaar at gcc dot gnu dot org
2005-12-13 13:04 ` amylaar at gcc dot gnu dot org
` (10 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: amylaar at gcc dot gnu dot org @ 2005-12-07 13:31 UTC (permalink / raw)
To: gcc-bugs
------- 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 <joern.rennecke@st.com>
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
^ permalink raw reply [flat|nested] 30+ messages in thread
* [Bug rtl-optimization/20070] If-conversion can't match equivalent code, and cross-jumping only works for literal matches
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
@ 2005-12-01 20:17 ` steven at gcc dot gnu dot org
2005-12-07 13:31 ` amylaar at gcc dot gnu dot org
` (11 subsequent siblings)
12 siblings, 0 replies; 30+ messages in thread
From: steven at gcc dot gnu dot org @ 2005-12-01 20:17 UTC (permalink / raw)
To: gcc-bugs
------- 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
^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2010-04-23 7:39 UTC | newest]
Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-02-19 15:55 [Bug rtl-optimization/20070] New: If-conversion can't match equivalent code, and cross-jumping only works for literal matches amylaar at gcc dot gnu dot org
2005-02-19 16:03 ` [Bug rtl-optimization/20070] " amylaar at gcc dot gnu dot org
2005-02-19 16:24 ` pinskia at gcc dot gnu dot org
2005-02-21 21:47 ` amylaar at gcc dot gnu dot org
2005-02-21 22:15 ` amylaar at gcc dot gnu dot org
2005-03-02 22:06 ` amylaar at gcc dot gnu dot org
2005-03-03 2:44 ` pinskia at gcc dot gnu dot org
2005-03-03 15:00 ` joern dot rennecke at st dot com
2005-04-05 2:00 ` pinskia at gcc dot gnu dot org
2005-04-12 18:56 ` amylaar at gcc dot gnu dot org
2005-05-26 14:35 ` amylaar at gcc dot gnu dot org
2005-06-01 12:00 ` amylaar at gcc dot gnu dot org
2005-07-07 18:30 ` amylaar at gcc dot gnu dot org
2005-07-12 13:30 ` amylaar at gcc dot gnu dot org
2005-07-12 13:35 ` cvs-commit at gcc dot gnu dot org
2005-07-15 14:22 ` amylaar at gcc dot gnu dot org
2005-07-15 14:43 ` cvs-commit at gcc dot gnu dot org
[not found] <bug-20070-5394@http.gcc.gnu.org/bugzilla/>
2005-12-01 20:17 ` steven at gcc dot gnu dot org
2005-12-07 13:31 ` amylaar at gcc dot gnu dot org
2005-12-13 13:04 ` amylaar at gcc dot gnu dot org
2005-12-19 14:37 ` amylaar at gcc dot gnu dot org
2006-03-21 8:27 ` bonzini at gnu dot org
2006-03-21 14:24 ` amylaar at gcc dot gnu dot org
2006-11-17 18:58 ` amylaar at gcc dot gnu dot org
2009-06-14 19:54 ` steven at gcc dot gnu dot org
2009-09-04 14:51 ` rahul at icerasemi dot com
2010-01-08 17:08 ` steven at gcc dot gnu dot org
2010-01-09 21:27 ` steven at gcc dot gnu dot org
2010-01-11 12:34 ` rahul at icerasemi dot com
2010-04-23 7:39 ` steven at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).