summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2012-11-04 22:28:42 +0000
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>2012-11-04 22:28:42 +0000
commit139a6a2bc56c6440525159692314518419a71f29 (patch)
tree48a1a5149647347dc91c04d22e688821843f2894
parentaadebaa7f7076f308dedaa46e244ad04c0a95469 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/combine.c23
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