OSDN Git Service

* simplify-rtx.c (simplify_subreg): When simplifying a CONCAT, at
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Jun 2001 21:15:01 +0000 (21:15 +0000)
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Jun 2001 21:15:01 +0000 (21:15 +0000)
least get rid of the CONCAT if we can't simplify further.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43659 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/simplify-rtx.c

index 407ae10..1feafbe 100644 (file)
@@ -1,3 +1,8 @@
+2001-06-29  DJ Delorie  <dj@redhat.com>
+
+       * simplify-rtx.c (simplify_subreg): When simplifying a CONCAT, at
+       least get rid of the CONCAT if we can't simplify further.
+
 Fri Jun 29 12:27:24 2001  Jeffrey A Law  (law@cygnus.com)
 
        * ssa-dce.c (ssa_eliminate_dead_code): Renamed from
index a5ef099..20471cc 100644 (file)
@@ -2430,9 +2430,14 @@ simplify_subreg (outermode, op, innermode, byte)
       int is_realpart = byte < GET_MODE_UNIT_SIZE (innermode);
       rtx part = is_realpart ? XEXP (op, 0) : XEXP (op, 1);
       unsigned int final_offset;
+      rtx res;
 
       final_offset = byte % (GET_MODE_UNIT_SIZE (innermode));
-      return simplify_subreg (outermode, part, GET_MODE (part), final_offset);
+      res = simplify_subreg (outermode, part, GET_MODE (part), final_offset);
+      if (res)
+       return res;
+      /* We can at least simplify it by referring directly to the relevent part. */
+      return gen_rtx_SUBREG (outermode, part, final_offset);
     }
 
   return NULL_RTX;