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:
parent
79b59cc3d3
commit
d6fc04926d
2 changed files with 17 additions and 2 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue