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
This commit is contained in:
parent
7faaba2884
commit
9cd9e512cb
4 changed files with 25 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
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>
|
||||
|
||||
* loop-iv.c (iv_analysis_loop_init): Use df analysis in a more
|
||||
|
|
11
gcc/alias.c
11
gcc/alias.c
|
@ -1,5 +1,5 @@
|
|||
/* 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.
|
||||
Contributed by John Carr (jfc@mit.edu).
|
||||
|
||||
|
@ -2209,6 +2209,9 @@ true_dependence (rtx mem, enum machine_mode mem_mode, rtx x,
|
|||
return 1;
|
||||
if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
|
||||
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))
|
||||
return 0;
|
||||
|
@ -2282,6 +2285,9 @@ canon_true_dependence (rtx mem, enum machine_mode mem_mode, rtx mem_addr,
|
|||
return 1;
|
||||
if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
|
||||
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))
|
||||
return 0;
|
||||
|
@ -2341,6 +2347,9 @@ write_dependence_p (rtx mem, rtx x, int writep)
|
|||
return 1;
|
||||
if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
|
||||
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))
|
||||
return 0;
|
||||
|
|
|
@ -27,4 +27,10 @@ extern HOST_WIDE_INT get_frame_alias_set (void);
|
|||
extern void record_base_value (unsigned int, rtx, int);
|
||||
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 */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Expand builtin functions.
|
||||
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.
|
||||
|
||||
|
@ -5406,6 +5406,7 @@ get_builtin_sync_mem (tree loc, enum machine_mode mode)
|
|||
mem = validize_mem (gen_rtx_MEM (mode, addr));
|
||||
|
||||
set_mem_align (mem, get_pointer_alignment (loc, BIGGEST_ALIGNMENT));
|
||||
set_mem_alias_set (mem, ALIAS_SET_MEMORY_BARRIER);
|
||||
MEM_VOLATILE_P (mem) = 1;
|
||||
|
||||
return mem;
|
||||
|
|
Loading…
Add table
Reference in a new issue