OSDN Git Service

(copy_loop_body): Don't assume (pc) can be on either leg of jump; use
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Aug 1992 22:41:07 +0000 (22:41 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Aug 1992 22:41:07 +0000 (22:41 +0000)
invert_exp and redirect_exp instead.

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

gcc/unroll.c

index 0be4bb9..9ff78f4 100644 (file)
@@ -1662,23 +1662,18 @@ copy_loop_body (copy_start, copy_end, map, exit_label, last_iteration,
              int fall_through;
 
              /* Never map the label in this case.  */
-             pattern = copy_rtx (PATTERN (insn));
+             rtx tmp_pattern = copy_rtx (PATTERN (insn));
              
-             /* Assume a conditional branch, since the code above
-                does not let unconditional branches be copied.  */
-             if (! condjump_p (insn))
+             /* Set the fall through case to the exit label.  If we 
+                can't do this in place, abort for now.  Maybe
+                we can do something more sophisticated eventually.  */
+
+             if (! invert_exp (tmp_pattern, insn)
+                 || ! redirect_exp (&tmp_pattern, JUMP_LABEL (insn),
+                                    exit_label, insn))
                abort ();
-             fall_through
-               = (XEXP (SET_SRC (PATTERN (insn)), 2) == pc_rtx) + 1;
 
-             /* Set the fall through case to the exit label.  Must
-                create a new label_ref since they can't be shared.  */
-             XEXP (SET_SRC (pattern), fall_through)
-               = gen_rtx (LABEL_REF, VOIDmode, exit_label);
-                     
-             /* Set the original branch case to fall through.  */
-             XEXP (SET_SRC (pattern), 3 - fall_through)
-               = pc_rtx;
+             pattern = tmp_pattern;
            }
          else
            pattern = copy_rtx_and_substitute (PATTERN (insn), map);