diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-11-04 22:28:42 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-11-04 22:28:42 +0000 |
commit | 139a6a2bc56c6440525159692314518419a71f29 (patch) | |
tree | 48a1a5149647347dc91c04d22e688821843f2894 | |
parent | aadebaa7f7076f308dedaa46e244ad04c0a95469 (diff) | |
download | gcc-139a6a2bc56c6440525159692314518419a71f29.tar.gz |
* combine.c: Adjust toplevel comment.
(make_extraction): Adjust head comment and move up canonicalization.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@193141 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/combine.c | 23 |
2 files changed, 19 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2538bfb8adc..5ee5ef7f8d4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,10 @@ -2012-11-04 Alexandre Oliva <aoliva@redhat.com>, Jakub Jelinek <jakub@redhat.com> +2012-11-04 Eric Botcazou <ebotcazou@adacore.com> + + * combine.c: Adjust toplevel comment. + (make_extraction): Adjust head comment and move up canonicalization. + +2012-11-04 Alexandre Oliva <aoliva@redhat.com> + Jakub Jelinek <jakub@redhat.com> PR debug/54693 * tree-ssa-loop-ivopts.c (remove_unused_ivs): Emit debug temps diff --git a/gcc/combine.c b/gcc/combine.c index 214a466bd46..00719a76f77 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -30,8 +30,10 @@ along with GCC; see the file COPYING3. If not see They were set up by the preceding pass (lifetime analysis). We try to combine each pair of insns joined by a logical link. - We also try to combine triples of insns A, B and C when - C has a link back to B and B has a link back to A. + We also try to combine triplets of insns A, B and C when C has + a link back to B and B has a link back to A. Likewise for a + small number of quadruplets of insns A, B, C and D for which + there's high likelihood of of success. LOG_LINKS does not have links for use of the CC0. They don't need to, because the insn that sets the CC0 is always immediately @@ -6958,14 +6960,13 @@ expand_field_assignment (const_rtx x) } /* Return an RTX for a reference to LEN bits of INNER. If POS_RTX is nonzero, - it is an RTX that represents a variable starting position; otherwise, - POS is the (constant) starting bit position (counted from the LSB). + it is an RTX that represents the (variable) starting position; otherwise, + POS is the (constant) starting bit position. Both are counted from the LSB. - UNSIGNEDP is nonzero for an unsigned reference and zero for a - signed reference. + UNSIGNEDP is nonzero for an unsigned reference and zero for a signed one. - IN_DEST is nonzero if this is a reference in the destination of a - SET. This is used when a ZERO_ or SIGN_EXTRACT isn't needed. If nonzero, + IN_DEST is nonzero if this is a reference in the destination of a SET. + This is used when a ZERO_ or SIGN_EXTRACT isn't needed. If nonzero, a STRICT_LOW_PART will be used, if zero, ZERO_EXTEND or SIGN_EXTEND will be used. @@ -6996,6 +6997,9 @@ make_extraction (enum machine_mode mode, rtx inner, HOST_WIDE_INT pos, rtx orig_pos_rtx = pos_rtx; HOST_WIDE_INT orig_pos; + if (pos_rtx && CONST_INT_P (pos_rtx)) + pos = INTVAL (pos_rtx), pos_rtx = 0; + if (GET_CODE (inner) == SUBREG && subreg_lowpart_p (inner)) { /* If going from (subreg:SI (mem:QI ...)) to (mem:QI ...), @@ -7025,9 +7029,6 @@ make_extraction (enum machine_mode mode, rtx inner, HOST_WIDE_INT pos, inner_mode = GET_MODE (inner); - if (pos_rtx && CONST_INT_P (pos_rtx)) - pos = INTVAL (pos_rtx), pos_rtx = 0; - /* See if this can be done without an extraction. We never can if the width of the field is not the same as that of some integer mode. For registers, we can only avoid the extraction if the position is at the |