* postreload.c (reload_combine): Fix code detecting returns.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Mar 2013 11:25:28 +0000 (11:25 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Mar 2013 11:25:28 +0000 (11:25 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@197037 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/postreload.c

index 072efd7..89e0b7a 100644 (file)
@@ -1,5 +1,9 @@
 2013-03-25  Eric Botcazou  <ebotcazou@adacore.com>
 
+       * postreload.c (reload_combine): Fix code detecting returns.
+
+2013-03-25  Eric Botcazou  <ebotcazou@adacore.com>
+
        * function.c (emit_use_return_register_into_block): On cc0 targets,
        do not emit the sequence between cc0 setter and user.
 
index daabaa1..33462e4 100644 (file)
@@ -1387,7 +1387,7 @@ reload_combine (void)
             }
        }
 
-      if (control_flow_insn && GET_CODE (PATTERN (insn)) != RETURN)
+      if (control_flow_insn && !ANY_RETURN_P (PATTERN (insn)))
        {
          /* Non-spill registers might be used at the call destination in
             some unknown fashion, so we have to mark the unknown use.  */
@@ -1395,13 +1395,19 @@ reload_combine (void)
 
          if ((condjump_p (insn) || condjump_in_parallel_p (insn))
              && JUMP_LABEL (insn))
-           live = &LABEL_LIVE (JUMP_LABEL (insn));
+           {
+             if (ANY_RETURN_P (JUMP_LABEL (insn)))
+               live = NULL;
+             else
+               live = &LABEL_LIVE (JUMP_LABEL (insn));
+           }
          else
            live = &ever_live_at_start;
 
-         for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
-           if (TEST_HARD_REG_BIT (*live, r))
-             reg_state[r].use_index = -1;
+         if (live)
+           for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
+             if (TEST_HARD_REG_BIT (*live, r))
+               reg_state[r].use_index = -1;
        }
 
       reload_combine_note_use (&PATTERN (insn), insn, reload_combine_ruid,