From 96672a3e826a879876daf3391fbc79daede9fa82 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 4 Sep 2012 11:16:24 -0700 Subject: [PATCH] * alias.c (read_dependence): Return true for ALIAS_SET_MEMORY_BARRIER. From-SVN: r190941 --- gcc/ChangeLog | 4 ++++ gcc/alias.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc3a2ed16d5..11bbf7eb871 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2012-09-04 Richard Henderson + + * alias.c (read_dependence): Return true for ALIAS_SET_MEMORY_BARRIER. + 2012-09-04 Richard Guenther * tree-ssa-pre.c (value_expressions): Make it a vector of diff --git a/gcc/alias.c b/gcc/alias.c index c1d5c8a8f36..b7182074c5d 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -2177,12 +2177,18 @@ memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c) storeqi_unaligned pattern. */ /* Read dependence: X is read after read in MEM takes place. There can - only be a dependence here if both reads are volatile. */ + only be a dependence here if both reads are volatile, or if either is + an explicit barrier. */ int read_dependence (const_rtx mem, const_rtx x) { - return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem); + if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) + return true; + if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER + || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER) + return true; + return false; } /* Return true if we can determine that the fields referenced cannot -- 2.30.2