Handle the same VALUE for true dependence.

gcc/

2010-05-04  H.J. Lu  <hongjiu.lu@intel.com>

	Backport from mainline
	2010-05-04  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/43671
	* alias.c (true_dependence): Handle the same VALUE in x and mem.
	(canon_true_dependence): Likewise.
	(write_dependence_p): Likewise.

gcc/testsuite/

2010-05-04  H.J. Lu  <hongjiu.lu@intel.com>

	Backport from mainline
	2010-05-04  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/43671
	* gcc.target/i386/pr43671.c: New.

From-SVN: r159035
This commit is contained in:
H.J. Lu 2010-05-04 15:50:53 +00:00 committed by H.J. Lu
parent 7ca5bf53b6
commit 0cf902980e
4 changed files with 79 additions and 5 deletions

View File

@ -1,3 +1,13 @@
2010-05-04 H.J. Lu <hongjiu.lu@intel.com>
Backport from mainline
2010-05-04 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/43671
* alias.c (true_dependence): Handle the same VALUE in x and mem.
(canon_true_dependence): Likewise.
(write_dependence_p): Likewise.
2010-05-02 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_target_string): Output 'flags', not 'isa',

View File

@ -2214,8 +2214,18 @@ true_dependence (const_rtx mem, enum machine_mode mem_mode, const_rtx x,
if (mem_mode == VOIDmode)
mem_mode = GET_MODE (mem);
x_addr = get_addr (XEXP (x, 0));
mem_addr = get_addr (XEXP (mem, 0));
x_addr = XEXP (x, 0);
mem_addr = XEXP (mem, 0);
if (!((GET_CODE (x_addr) == VALUE
&& GET_CODE (mem_addr) != VALUE
&& reg_mentioned_p (x_addr, mem_addr))
|| (GET_CODE (x_addr) != VALUE
&& GET_CODE (mem_addr) == VALUE
&& reg_mentioned_p (mem_addr, x_addr))))
{
x_addr = get_addr (x_addr);
mem_addr = get_addr (mem_addr);
}
base = find_base_term (x_addr);
if (base && (GET_CODE (base) == LABEL_REF
@ -2287,7 +2297,16 @@ canon_true_dependence (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
return 0;
if (! x_addr)
x_addr = get_addr (XEXP (x, 0));
{
x_addr = XEXP (x, 0);
if (!((GET_CODE (x_addr) == VALUE
&& GET_CODE (mem_addr) != VALUE
&& reg_mentioned_p (x_addr, mem_addr))
|| (GET_CODE (x_addr) != VALUE
&& GET_CODE (mem_addr) == VALUE
&& reg_mentioned_p (mem_addr, x_addr))))
x_addr = get_addr (x_addr);
}
if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
return 0;
@ -2347,8 +2366,18 @@ write_dependence_p (const_rtx mem, const_rtx x, int writep)
if (nonoverlapping_memrefs_p (x, mem))
return 0;
x_addr = get_addr (XEXP (x, 0));
mem_addr = get_addr (XEXP (mem, 0));
x_addr = XEXP (x, 0);
mem_addr = XEXP (mem, 0);
if (!((GET_CODE (x_addr) == VALUE
&& GET_CODE (mem_addr) != VALUE
&& reg_mentioned_p (x_addr, mem_addr))
|| (GET_CODE (x_addr) != VALUE
&& GET_CODE (mem_addr) == VALUE
&& reg_mentioned_p (mem_addr, x_addr))))
{
x_addr = get_addr (x_addr);
mem_addr = get_addr (mem_addr);
}
if (! writep)
{

View File

@ -1,3 +1,11 @@
2010-05-04 H.J. Lu <hongjiu.lu@intel.com>
Backport from mainline
2010-05-04 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/43671
* gcc.target/i386/pr43671.c: New.
2010-05-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* ada/acats/run_acats (which): New function.

View File

@ -0,0 +1,27 @@
/* { dg-do run } */
/* { dg-require-effective-target ilp32 } */
/* { dg-options "-mtune=i686 -O1 -fpeel-loops -fschedule-insns2 -ftree-vectorize -fsched2-use-superblocks" } */
extern void abort ();
int main ()
{
struct {
char ca[16];
} s;
int i;
for (i = 0; i < 16; i++)
{
s.ca[i] = 5;
}
for (i = 0; i < 16; i++)
{
if (s.ca[i] != 5)
abort ();
}
return 0;
}