diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-12 18:01:26 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-12 18:01:26 +0000 |
commit | 299a3cdd6dd1c822a002c6721c18849a231f1e82 (patch) | |
tree | a58f94157b4eb2934df8ba2261b7e46ba75ed2dc /gcc/reg-stack.c | |
parent | 96e8cfb26ef0650b687c105ef78849e4b964415c (diff) | |
download | gcc-299a3cdd6dd1c822a002c6721c18849a231f1e82.tar.gz |
PR inline-asm/4823
* reg-stack.c (any_malformed_asm): New.
(check_asm_stack_operands): Set it.
(convert_regs_1): Check it before aborting.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67845 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 75a59e68727..6efea36d6dc 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -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; |