From: Michael Matz Date: Fri, 5 Oct 2007 15:36:16 +0000 (+0000) Subject: re PR inline-asm/33600 (Breakage caused by the fix to PR33552) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1596d61e6efe75dd6fdf2b23d6028f1431143ccb;p=gcc.git re PR inline-asm/33600 (Breakage caused by the fix to PR33552) gcc/ PR inline-asm/33600 * function.c (match_asm_constraints_1): Check for input being used in the outputs. testsuite/ * gcc.target/i386/pr33600.c: New testcase. From-SVN: r129035 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 70c369a0c4b..8c6c7737c52 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-10-05 Michael Matz + + PR inline-asm/33600 + * function.c (match_asm_constraints_1): Check for input + being used in the outputs. + 2007-10-05 Richard Guenther * tree-cfg.c (verify_gimple_expr): Accept OBJ_TYPE_REF. diff --git a/gcc/function.c b/gcc/function.c index c37368415ea..d05d1b23bf4 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5716,7 +5716,7 @@ match_asm_constraints_1 (rtx insn, rtx *p_sets, int noutputs) which wouldn't have happen without this pass. So, iterate over all operands and replace all occurences of the register used. */ for (j = 0; j < noutputs; j++) - if (!rtx_equal_p (SET_DEST (p_sets[j]), output) + if (!rtx_equal_p (SET_DEST (p_sets[j]), input) && reg_overlap_mentioned_p (input, SET_DEST (p_sets[j]))) SET_DEST (p_sets[j]) = replace_rtx (SET_DEST (p_sets[j]), input, output); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ca33da8fa45..6b06d140c31 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-10-05 Michael Matz + + PR inline-asm/33600 + * gcc.target/i386/pr33600.c: New testcase. + 2007-10-05 Richard Guenther * g++.dg/tree-ssa/obj-type-ref.C: New testcase. diff --git a/gcc/testsuite/gcc.target/i386/pr33600.c b/gcc/testsuite/gcc.target/i386/pr33600.c new file mode 100644 index 00000000000..a2ab91e57b9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr33600.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +int f(int n) +{ + int x; + + asm("" : "=&c"(n), "=r"(x) : "1"(n), "0"(n)); + + return n; +}