]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Make cselib COND_EXEC-safe
authorBernd Schmidt <bernds@redhat.com>
Wed, 8 Aug 2001 10:00:56 +0000 (10:00 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 8 Aug 2001 10:00:56 +0000 (10:00 +0000)
From-SVN: r44713

gcc/ChangeLog
gcc/cselib.c

index dafb983ebb2e61c68cc2b6be364c2f10e39858c7..fdc4d58430c72a6238a8d4448c055bed7f913558 100644 (file)
@@ -1,3 +1,8 @@
+2001-08-08  Bernd Schmidt  <bernds@redhat.com>
+
+       * cselib.c (cselib_record_sets): If insn is predicated, turn
+       sources into IF_THEN_ELSEs.
+               
 2001-08-08  Graham Stott  <grahams@redhat.com>
 
        * final.c (shorten_branches): Update the INSN_ADDRESSES of insns
index 6497de0bbc7b94ff44242af741edf4aef13db81e..1311766800635d1ad7ff4cb7080f8a4c0936b32e 100644 (file)
@@ -1179,8 +1179,15 @@ cselib_record_sets (insn)
   int i;
   struct set sets[MAX_SETS];
   rtx body = PATTERN (insn);
+  rtx cond = 0;
 
   body = PATTERN (insn);
+  if (GET_CODE (body) == COND_EXEC)
+    {
+      cond = COND_EXEC_TEST (body);
+      body = COND_EXEC_CODE (body);
+    }
+
   /* Find all sets.  */
   if (GET_CODE (body) == SET)
     {
@@ -1219,6 +1226,9 @@ cselib_record_sets (insn)
       /* We don't know how to record anything but REG or MEM.  */
       if (GET_CODE (dest) == REG || GET_CODE (dest) == MEM)
         {
+         rtx src = sets[i].src;
+         if (cond)
+           src = gen_rtx_IF_THEN_ELSE (GET_MODE (src), cond, src, dest);
          sets[i].src_elt = cselib_lookup (sets[i].src, GET_MODE (dest), 1);
          if (GET_CODE (dest) == MEM)
            sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1);