From 7595989bb427bc128b6752ee312d4d1b7b945f99 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Fri, 18 May 2012 12:09:49 +0000 Subject: [PATCH] re PR tree-optimization/53390 (ICE: tree check: expected integer_cst, have nop_expr in vect_compute_data_ref_alignmen on 32-bit x86 host) 2012-05-18 Richard Guenther PR tree-optimization/53390 * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Ignore strided loads. * gcc.dg/torture/pr53390.c: New testcase. From-SVN: r187653 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr53390.c | 21 +++++++++++++++++++++ gcc/tree-vect-data-refs.c | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/pr53390.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0d91248aedd..70571cd4b58 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-18 Richard Guenther + + PR tree-optimization/53390 + * tree-vect-data-refs.c (vect_compute_data_ref_alignment): Ignore + strided loads. + 2012-05-18 Bill Schmidt * tree-ssa-reassoc.c (bip_map): Remove decl. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64a011c0e87..fb6ede643aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-05-18 Richard Guenther + + PR tree-optimization/53390 + * gcc.dg/torture/pr53390.c: New testcase. + 2012-05-18 Meador Inge PR rtl-optimization/53352 diff --git a/gcc/testsuite/gcc.dg/torture/pr53390.c b/gcc/testsuite/gcc.dg/torture/pr53390.c new file mode 100644 index 00000000000..72a25c52eac --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr53390.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +extern unsigned short var1; +extern int var2; + +extern struct { + int f1; + unsigned short *f2; +} *my_table; + +void foo(void) +{ + unsigned short *local_vec + = __builtin_malloc(var1 * var2 * sizeof(unsigned short)); + unsigned short i; + + my_table[0].f2 = __builtin_malloc(var1 * sizeof(unsigned short)); + + for (i = 0; i < var1; ++i) + my_table[0].f2[i] = local_vec[i * var2]; +} diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index c8882ae39d4..a5ed0533db6 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -824,6 +824,11 @@ vect_compute_data_ref_alignment (struct data_reference *dr) /* Initialize misalignment to unknown. */ SET_DR_MISALIGNMENT (dr, -1); + /* Strided loads perform only component accesses, misalignment information + is irrelevant for them. */ + if (STMT_VINFO_STRIDE_LOAD_P (stmt_info)) + return true; + misalign = DR_INIT (dr); aligned_to = DR_ALIGNED_TO (dr); base_addr = DR_BASE_ADDRESS (dr); -- 2.30.2