aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched.c
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1993-02-05 15:33:36 -0800
committerJim Wilson <wilson@gcc.gnu.org>1993-02-05 15:33:36 -0800
commit0b298be41774d1999726d9e4f3a5547403ca41c9 (patch)
treea87bef4d23830355e56938af12b8159a00ad7bd7 /gcc/sched.c
parent0a56ad627e91edd29d348813c4fd15c57e1c930a (diff)
downloadgcc-0b298be41774d1999726d9e4f3a5547403ca41c9.zip
gcc-0b298be41774d1999726d9e4f3a5547403ca41c9.tar.gz
gcc-0b298be41774d1999726d9e4f3a5547403ca41c9.tar.bz2
(true_dependence, anti_dependence, output_dependence):
Assume that MEM_IN_STRUCT_P QImode varying addresses can overlap a non-MEM_IN_STRUCT_P fixed address. From-SVN: r3426
Diffstat (limited to 'gcc/sched.c')
-rw-r--r--gcc/sched.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/gcc/sched.c b/gcc/sched.c
index 5483fc8..386d66e 100644
--- a/gcc/sched.c
+++ b/gcc/sched.c
@@ -696,8 +696,11 @@ memrefs_conflict_p (xsize, x, ysize, y, c)
changed. A volatile and non-volatile reference can be interchanged
though.
- A MEM_IN_STRUCT reference at a varying address can never conflict with a
- non-MEM_IN_STRUCT reference at a fixed address. */
+ A MEM_IN_STRUCT reference at a non-QImode varying address can never
+ conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must
+ allow QImode aliasing because the ANSI C standard allows character
+ pointers to alias anything. We are assuming that characters are
+ always QImode here. */
/* Read dependence: X is read after read in MEM takes place. There can
only be a dependence here if both reads are volatile. */
@@ -731,8 +734,10 @@ true_dependence (mem, x)
|| (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
SIZE_FOR_MODE (x), XEXP (x, 0), 0)
&& ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
+ && GET_MODE (mem) != QImode
&& ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
&& ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
+ && GET_MODE (x) != QImode
&& ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
}
@@ -753,8 +758,10 @@ anti_dependence (mem, x)
|| (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
SIZE_FOR_MODE (x), XEXP (x, 0), 0)
&& ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
+ && GET_MODE (mem) != QImode
&& ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
&& ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
+ && GET_MODE (x) != QImode
&& ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
}
@@ -769,8 +776,10 @@ output_dependence (mem, x)
|| (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
SIZE_FOR_MODE (x), XEXP (x, 0), 0)
&& ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
+ && GET_MODE (mem) != QImode
&& ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
&& ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
+ && GET_MODE (x) != QImode
&& ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
}