Commit 9cd9e512 by Richard Henderson Committed by Richard Henderson

alias.h (ALIAS_SET_MEMORY_BARRIER): New.

        * alias.h (ALIAS_SET_MEMORY_BARRIER): New.
        * alias.c (true_dependence): Respect it.
        (canon_true_dependence, write_dependence_p): Likewise.
        * builtins.c (get_builtin_sync_mem): Set it.

From-SVN: r110189
parent 7faaba28
2006-01-24 Richard Henderson <rth@redehat.com>
* alias.h (ALIAS_SET_MEMORY_BARRIER): New.
* alias.c (true_dependence): Respect it.
(canon_true_dependence, write_dependence_p): Likewise.
* builtins.c (get_builtin_sync_mem): Set it.
2006-01-25 Zdenek Dvorak <dvorakz@suse.cz> 2006-01-25 Zdenek Dvorak <dvorakz@suse.cz>
* loop-iv.c (iv_analysis_loop_init): Use df analysis in a more * loop-iv.c (iv_analysis_loop_init): Use df analysis in a more
......
/* Alias analysis for GNU C /* Alias analysis for GNU C
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by John Carr (jfc@mit.edu). Contributed by John Carr (jfc@mit.edu).
...@@ -2209,6 +2209,9 @@ true_dependence (rtx mem, enum machine_mode mem_mode, rtx x, ...@@ -2209,6 +2209,9 @@ true_dependence (rtx mem, enum machine_mode mem_mode, rtx x,
return 1; return 1;
if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH) if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
return 1; return 1;
if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
|| MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
return 1;
if (DIFFERENT_ALIAS_SETS_P (x, mem)) if (DIFFERENT_ALIAS_SETS_P (x, mem))
return 0; return 0;
...@@ -2282,6 +2285,9 @@ canon_true_dependence (rtx mem, enum machine_mode mem_mode, rtx mem_addr, ...@@ -2282,6 +2285,9 @@ canon_true_dependence (rtx mem, enum machine_mode mem_mode, rtx mem_addr,
return 1; return 1;
if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH) if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
return 1; return 1;
if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
|| MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
return 1;
if (DIFFERENT_ALIAS_SETS_P (x, mem)) if (DIFFERENT_ALIAS_SETS_P (x, mem))
return 0; return 0;
...@@ -2341,6 +2347,9 @@ write_dependence_p (rtx mem, rtx x, int writep) ...@@ -2341,6 +2347,9 @@ write_dependence_p (rtx mem, rtx x, int writep)
return 1; return 1;
if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH) if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
return 1; return 1;
if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
|| MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
return 1;
if (DIFFERENT_ALIAS_SETS_P (x, mem)) if (DIFFERENT_ALIAS_SETS_P (x, mem))
return 0; return 0;
......
...@@ -27,4 +27,10 @@ extern HOST_WIDE_INT get_frame_alias_set (void); ...@@ -27,4 +27,10 @@ extern HOST_WIDE_INT get_frame_alias_set (void);
extern void record_base_value (unsigned int, rtx, int); extern void record_base_value (unsigned int, rtx, int);
extern bool component_uses_parent_alias_set (tree); extern bool component_uses_parent_alias_set (tree);
/* This alias set can be used to force a memory to conflict with all
other memories, creating a barrier across which no memory reference
can move. Note that there are other legacy ways to create such
memory barriers, including an address of SCRATCH. */
#define ALIAS_SET_MEMORY_BARRIER ((HOST_WIDE_INT) -1)
#endif /* GCC_ALIAS_H */ #endif /* GCC_ALIAS_H */
/* Expand builtin functions. /* Expand builtin functions.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -5406,6 +5406,7 @@ get_builtin_sync_mem (tree loc, enum machine_mode mode) ...@@ -5406,6 +5406,7 @@ get_builtin_sync_mem (tree loc, enum machine_mode mode)
mem = validize_mem (gen_rtx_MEM (mode, addr)); mem = validize_mem (gen_rtx_MEM (mode, addr));
set_mem_align (mem, get_pointer_alignment (loc, BIGGEST_ALIGNMENT)); set_mem_align (mem, get_pointer_alignment (loc, BIGGEST_ALIGNMENT));
set_mem_alias_set (mem, ALIAS_SET_MEMORY_BARRIER);
MEM_VOLATILE_P (mem) = 1; MEM_VOLATILE_P (mem) = 1;
return mem; return mem;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment