Commit 0b5a2724 by Richard Sandiford Committed by Richard Sandiford

tree-vect-data-refs.c (vect_drs_dependent_in_basic_block): Use operand_equal_p…

tree-vect-data-refs.c (vect_drs_dependent_in_basic_block): Use operand_equal_p to compare DR_BASE_ADDRESSes.

gcc/
	* tree-vect-data-refs.c (vect_drs_dependent_in_basic_block): Use
	operand_equal_p to compare DR_BASE_ADDRESSes.
	(vect_check_interleaving): Likewise.

gcc/testsuite/
	* gcc.dg/vect/vect-119.c: New test.

From-SVN: r172817
parent 5a2e5608
2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
* tree-vect-data-refs.c (vect_drs_dependent_in_basic_block): Use
operand_equal_p to compare DR_BASE_ADDRESSes.
(vect_check_interleaving): Likewise.
2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
PR target/46329
* config/arm/arm.c (arm_legitimate_constant_p_1): Return false
for all Neon struct constants.
......
2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.dg/vect/vect-119.c: New test.
2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
* gcc.dg/vect/vect.exp: Run the main tests twice, one with -flto
and once without.
......
/* { dg-do compile } */
#define OUTER 32
#define INNER 40
static unsigned int
bar (const unsigned int x[INNER][2], unsigned int sum)
{
int i;
for (i = 0; i < INNER; i++)
sum += x[i][0] * x[i][0] + x[i][1] * x[i][1];
return sum;
}
unsigned int foo (const unsigned int x[OUTER][INNER][2])
{
int i;
unsigned int sum;
sum = 0.0f;
for (i = 0; i < OUTER; i++)
sum = bar (x[i], sum);
return sum;
}
/* { dg-final { scan-tree-dump-times "Detected interleaving of size 2" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
......@@ -314,11 +314,7 @@ vect_drs_dependent_in_basic_block (struct data_reference *dra,
/* Check that the data-refs have same bases and offsets. If not, we can't
determine if they are dependent. */
if ((DR_BASE_ADDRESS (dra) != DR_BASE_ADDRESS (drb)
&& (TREE_CODE (DR_BASE_ADDRESS (dra)) != ADDR_EXPR
|| TREE_CODE (DR_BASE_ADDRESS (drb)) != ADDR_EXPR
|| TREE_OPERAND (DR_BASE_ADDRESS (dra), 0)
!= TREE_OPERAND (DR_BASE_ADDRESS (drb),0)))
if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0)
|| !dr_equal_offsets_p (dra, drb))
return true;
......@@ -364,11 +360,7 @@ vect_check_interleaving (struct data_reference *dra,
/* Check that the data-refs have same first location (except init) and they
are both either store or load (not load and store). */
if ((DR_BASE_ADDRESS (dra) != DR_BASE_ADDRESS (drb)
&& (TREE_CODE (DR_BASE_ADDRESS (dra)) != ADDR_EXPR
|| TREE_CODE (DR_BASE_ADDRESS (drb)) != ADDR_EXPR
|| TREE_OPERAND (DR_BASE_ADDRESS (dra), 0)
!= TREE_OPERAND (DR_BASE_ADDRESS (drb),0)))
if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0)
|| !dr_equal_offsets_p (dra, drb)
|| !tree_int_cst_compare (DR_INIT (dra), DR_INIT (drb))
|| DR_IS_READ (dra) != DR_IS_READ (drb))
......
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