From 27ea9e0635cd6267f9f1b517a6538001c4766be8 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 6 May 2013 16:53:03 +0200 Subject: [PATCH] re PR target/57106 (-fcompare-debug failure with -O2 -fschedule-insns -funroll-all-loops) PR target/57106 * config/i386/i386.c (add_parameter_dependencies): Add dependence between "first_arg" and "insn", not "last" and "insn". testsuite/ChangeLog: PR target/57106 * gcc.target/i386/pr57106.c: New test. From-SVN: r198629 --- gcc/config/i386/i386.c | 5 +++-- gcc/testsuite/gcc.target/i386/pr57106.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr57106.c diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d28a0ff07f0..86439ba2fb9 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -24662,7 +24662,7 @@ add_parameter_dependencies (rtx call, rtx head) /* Add output depdendence between two function arguments if chain of output arguments contains likely spilled HW registers. */ if (is_spilled) - add_dependence (last, insn, REG_DEP_OUTPUT); + add_dependence (first_arg, insn, REG_DEP_OUTPUT); first_arg = last = insn; } else @@ -41355,7 +41355,8 @@ ix86_enum_va_list (int idx, const char **pname, tree *ptree) #undef TARGET_SCHED_ADJUST_PRIORITY #define TARGET_SCHED_ADJUST_PRIORITY ix86_adjust_priority #undef TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK -#define TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK ix86_dependencies_evaluation_hook +#define TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK \ + ix86_dependencies_evaluation_hook /* The size of the dispatch window is the total number of bytes of object code allowed in a window. */ diff --git a/gcc/testsuite/gcc.target/i386/pr57106.c b/gcc/testsuite/gcc.target/i386/pr57106.c new file mode 100644 index 00000000000..6fccd8aac84 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr57106.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fschedule-insns -funroll-all-loops -fcompare-debug" } */ + +typedef void block128_f (int *, int); + +void +foo (int *out, int *iv, block128_f block) +{ + while (1) + { + *out = *out ^ *iv; + block (out, *out); + iv = out; + } +} -- 2.30.2