aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i386/i386.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr57106.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index d28a0ff..86439ba 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 0000000..6fccd8a
--- /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;
+ }
+}