Commit 29763968 by Jeff Law

* pa.c (pa_reorg): Explode ADDR_DIFF_VEC insns too.

From-SVN: r14577
parent 8dff1027
...@@ -5809,16 +5809,17 @@ pa_reorg (insns) ...@@ -5809,16 +5809,17 @@ pa_reorg (insns)
/* This is fairly cheap, so always run it if optimizing. */ /* This is fairly cheap, so always run it if optimizing. */
if (optimize > 0 && !TARGET_BIG_SWITCH) if (optimize > 0 && !TARGET_BIG_SWITCH)
{ {
/* Find and explode all ADDR_VEC insns. */ /* Find and explode all ADDR_VEC or ADDR_DIFF_VEC insns. */
insns = get_insns (); insns = get_insns ();
for (insn = insns; insn; insn = NEXT_INSN (insn)) for (insn = insns; insn; insn = NEXT_INSN (insn))
{ {
rtx pattern, tmp, location; rtx pattern, tmp, location;
unsigned int length, i; unsigned int length, i;
/* Find an ADDR_VEC insn to explode. */ /* Find an ADDR_VEC or ADDR_DIFF_VEC insn to explode. */
if (GET_CODE (insn) != JUMP_INSN if (GET_CODE (insn) != JUMP_INSN
|| GET_CODE (PATTERN (insn)) != ADDR_VEC) || (GET_CODE (PATTERN (insn)) != ADDR_VEC
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
continue; continue;
/* If needed, emit marker for the beginning of the branch table. */ /* If needed, emit marker for the beginning of the branch table. */
...@@ -5827,7 +5828,7 @@ pa_reorg (insns) ...@@ -5827,7 +5828,7 @@ pa_reorg (insns)
pattern = PATTERN (insn); pattern = PATTERN (insn);
location = PREV_INSN (insn); location = PREV_INSN (insn);
length = XVECLEN (pattern, 0); length = XVECLEN (pattern, GET_CODE (pattern) == ADDR_DIFF_VEC);
for (i = 0; i < length; i++) for (i = 0; i < length; i++)
{ {
...@@ -5838,12 +5839,24 @@ pa_reorg (insns) ...@@ -5838,12 +5839,24 @@ pa_reorg (insns)
emit_label_after (tmp, location); emit_label_after (tmp, location);
location = NEXT_INSN (location); location = NEXT_INSN (location);
/* Emit the jump itself. */ if (GET_CODE (pattern) == ADDR_VEC)
tmp = gen_switch_jump (XEXP (XVECEXP (pattern, 0, i), 0)); {
tmp = emit_jump_insn_after (tmp, location); /* Emit the jump itself. */
JUMP_LABEL (tmp) = XEXP (XVECEXP (pattern, 0, i), 0); tmp = gen_switch_jump (XEXP (XVECEXP (pattern, 0, i), 0));
LABEL_NUSES (JUMP_LABEL (tmp))++; tmp = emit_jump_insn_after (tmp, location);
location = NEXT_INSN (location); JUMP_LABEL (tmp) = XEXP (XVECEXP (pattern, 0, i), 0);
LABEL_NUSES (JUMP_LABEL (tmp))++;
location = NEXT_INSN (location);
}
else
{
/* Emit the jump itself. */
tmp = gen_switch_jump (XEXP (XVECEXP (pattern, 1, i), 0));
tmp = emit_jump_insn_after (tmp, location);
JUMP_LABEL (tmp) = XEXP (XVECEXP (pattern, 1, i), 0);
LABEL_NUSES (JUMP_LABEL (tmp))++;
location = NEXT_INSN (location);
}
/* Emit a BARRIER after the jump. */ /* Emit a BARRIER after the jump. */
emit_barrier_after (location); emit_barrier_after (location);
...@@ -5858,7 +5871,7 @@ pa_reorg (insns) ...@@ -5858,7 +5871,7 @@ pa_reorg (insns)
emit_barrier_after (location); emit_barrier_after (location);
} }
/* Delete the ADDR_VEC. */ /* Delete the ADDR_VEC or ADDR_DIFF_VEC. */
delete_insn (insn); delete_insn (insn);
} }
} }
...@@ -5870,7 +5883,8 @@ pa_reorg (insns) ...@@ -5870,7 +5883,8 @@ pa_reorg (insns)
{ {
/* Find an ADDR_VEC insn. */ /* Find an ADDR_VEC insn. */
if (GET_CODE (insn) != JUMP_INSN if (GET_CODE (insn) != JUMP_INSN
|| GET_CODE (PATTERN (insn)) != ADDR_VEC) || (GET_CODE (PATTERN (insn)) != ADDR_VEC
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC))
continue; continue;
/* Now generate markers for the beginning and end of the /* Now generate markers for the beginning and end of the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment