From 0b298be41774d1999726d9e4f3a5547403ca41c9 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Fri, 5 Feb 1993 15:33:36 -0800 Subject: [PATCH] (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 --- gcc/sched.c | 13 +++++++++++-- 1 file 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)))); } -- 2.7.4