if (GET_CODE (insn) == JUMP_INSN
&& GET_CODE (PATTERN (insn)) == SET
&& SET_DEST (PATTERN (insn)) == pc_rtx
- && GET_CODE (SET_SRC (PATTERN (insn))) == REG)
+ && (GET_CODE (SET_SRC (PATTERN (insn))) == REG
+ || GET_CODE (SET_SRC (PATTERN (insn))) == MEM))
{
rtx x;
for (x = label_value_list; x; x = XEXP (x, 1))
case BIND_EXPR:
print_node (file, "vars", TREE_OPERAND (node, 0), indent + 4);
print_node (file, "body", TREE_OPERAND (node, 1), indent + 4);
+ print_node (file, "block", TREE_OPERAND (node, 2), indent + 4);
return;
}
if (v->new_reg)
{
- /* If the giv is an address destination, it could be something other
- than a simple register, these have to be treated differently. */
- if (v->giv_type == DEST_REG)
- splittable_regs[REGNO (v->new_reg)] = value;
-
- /* If an addr giv was combined with another addr giv, then we
- can only split this giv if the addr giv it was combined with
- was reduced. This is because the value of v->new_reg is
- meaningless in this case. (There is no problem if it was
- combined with a dest_reg giv which wasn't reduced, v->new_reg
- is still meaningful in this case.) */
-
- else if (v->same && v->same->giv_type == DEST_ADDR
- && ! v->same->new_reg)
+ /* If a giv was combined with another giv, then we can only split
+ this giv if the giv it was combined with was reduced. This
+ is because the value of v->new_reg is meaningless in this
+ case. */
+ if (v->same && ! v->same->new_reg)
{
if (loop_dump_stream)
fprintf (loop_dump_stream,
- "DEST_ADDR giv not split, because combined with unreduced DEST_ADDR giv.\n");
+ "giv combined with unreduced giv not split.\n");
+ continue;
}
+ /* If the giv is an address destination, it could be something other
+ than a simple register, these have to be treated differently. */
+ else if (v->giv_type == DEST_REG)
+ splittable_regs[REGNO (v->new_reg)] = value;
else
{
/* Splitting address givs is useful since it will often allow us