re PR inline-asm/4823 (gcc reports internal compiler error on legal code)

PR inline-asm/4823
        * reg-stack.c (any_malformed_asm): New.
        (check_asm_stack_operands): Set it.
        (convert_regs_1): Check it before aborting.

From-SVN: r67845
This commit is contained in:
Richard Henderson 2003-06-12 11:01:26 -07:00 committed by Richard Henderson
parent 79b59cc3d3
commit d6fc04926d
2 changed files with 17 additions and 2 deletions

View file

@ -1,3 +1,10 @@
2003-06-10 Richard Henderson <rth@redhat.com>
PR inline-asm/4823
* reg-stack.c (any_malformed_asm): New.
(check_asm_stack_operands): Set it.
(convert_regs_1): Check it before aborting.
2003-06-12 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/spe.md: Change all clobbers of the accumulator to sets.

View file

@ -591,6 +591,9 @@ get_true_reg (pat)
}
}
/* Set if we find any malformed asms in a block. */
static bool any_malformed_asm;
/* There are many rules that an asm statement for stack-like regs must
follow. Those rules are explained at the top of this file: the rule
numbers below refer to that explanation. */
@ -772,6 +775,7 @@ check_asm_stack_operands (insn)
{
/* Avoid further trouble with this insn. */
PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
any_malformed_asm = true;
return 0;
}
@ -2692,6 +2696,7 @@ convert_regs_1 (file, block)
edge e, beste = NULL;
inserted = 0;
any_malformed_asm = false;
/* Find the edge we will copy stack from. It should be the most frequent
one as it will get cheapest after compensation code is generated,
@ -2805,9 +2810,12 @@ convert_regs_1 (file, block)
}
}
/* Something failed if the stack lives don't match. */
/* Something failed if the stack lives don't match. If we had malformed
asms, we zapped the instruction itself, but that didn't produce the
same pattern of register kills as before. */
GO_IF_HARD_REG_EQUAL (regstack.reg_set, bi->out_reg_set, win);
abort ();
if (!any_malformed_asm)
abort ();
win:
bi->stack_out = regstack;