re PR tree-optimization/49518 (ICE in vect_enhance_data_refs_alignment, at tree-vect-data-refs.c:1555)
2011-07-05 Richard Guenther <rguenther@suse.de> PR tree-optimization/49518 PR tree-optimization/49628 * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Skip irrelevant and invariant data-references. (vect_analyze_data_ref_access): For invariant loads clear the group association. * g++.dg/torture/pr49628.C: New testcase. * gcc.dg/torture/pr49518.c: Likewise. From-SVN: r175847
This commit is contained in:
parent
08b3c764e8
commit
39becbac3d
@ -1,3 +1,12 @@
|
||||
2011-07-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/49518
|
||||
PR tree-optimization/49628
|
||||
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Skip
|
||||
irrelevant and invariant data-references.
|
||||
(vect_analyze_data_ref_access): For invariant loads clear the
|
||||
group association.
|
||||
|
||||
2011-07-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/49619
|
||||
|
@ -1,3 +1,10 @@
|
||||
2011-07-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/49518
|
||||
PR tree-optimization/49628
|
||||
* g++.dg/torture/pr49628.C: New testcase.
|
||||
* gcc.dg/torture/pr49518.c: Likewise.
|
||||
|
||||
2011-07-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* ada/acats/run_acats (which): Extract last field from type -p,
|
||||
|
37
gcc/testsuite/g++.dg/torture/pr49628.C
Normal file
37
gcc/testsuite/g++.dg/torture/pr49628.C
Normal file
@ -0,0 +1,37 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
#include <vector>
|
||||
|
||||
template <int rank, int dim> class Tensor;
|
||||
template <int dim> class Tensor<1,dim> {
|
||||
public:
|
||||
explicit Tensor (const bool initialize = true);
|
||||
Tensor (const Tensor<1,dim> &);
|
||||
Tensor<1,dim> & operator = (const Tensor<1,dim> &);
|
||||
double values[(dim!=0) ? (dim) : 1];
|
||||
};
|
||||
template <int dim>
|
||||
inline Tensor<1,dim> & Tensor<1,dim>::operator = (const Tensor<1,dim> &p)
|
||||
{
|
||||
for (unsigned int i=0; i<dim; ++i)
|
||||
values[i] = p.values[i];
|
||||
};
|
||||
template <int dim> class Quadrature {
|
||||
public:
|
||||
const unsigned int n_quadrature_points;
|
||||
};
|
||||
class MappingQ1
|
||||
{
|
||||
class InternalData {
|
||||
public:
|
||||
std::vector<Tensor<1,3> > shape_derivatives;
|
||||
unsigned int n_shape_functions;
|
||||
};
|
||||
void compute_data (const Quadrature<3> &quadrature, InternalData &data)
|
||||
const;
|
||||
};
|
||||
void MappingQ1::compute_data (const Quadrature<3> &q, InternalData &data) const
|
||||
{
|
||||
const unsigned int n_q_points = q.n_quadrature_points;
|
||||
data.shape_derivatives.resize(data.n_shape_functions * n_q_points);
|
||||
}
|
19
gcc/testsuite/gcc.dg/torture/pr49518.c
Normal file
19
gcc/testsuite/gcc.dg/torture/pr49518.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
int a, b;
|
||||
struct S { unsigned int s, t, u; } c, d = { 0, 1, 0 };
|
||||
|
||||
void
|
||||
test (unsigned char z)
|
||||
{
|
||||
char e[] = {0, 0, 0, 0, 1};
|
||||
for (c.s = 1; c.s; c.s++)
|
||||
{
|
||||
b = e[c.s];
|
||||
if (a)
|
||||
break;
|
||||
b = z >= c.u;
|
||||
if (d.t)
|
||||
break;
|
||||
}
|
||||
}
|
@ -1495,12 +1495,19 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
|
||||
stmt = DR_STMT (dr);
|
||||
stmt_info = vinfo_for_stmt (stmt);
|
||||
|
||||
if (!STMT_VINFO_RELEVANT (stmt_info))
|
||||
continue;
|
||||
|
||||
/* For interleaving, only the alignment of the first access
|
||||
matters. */
|
||||
if (STMT_VINFO_STRIDED_ACCESS (stmt_info)
|
||||
&& GROUP_FIRST_ELEMENT (stmt_info) != stmt)
|
||||
continue;
|
||||
|
||||
/* For invariant accesses there is nothing to enhance. */
|
||||
if (integer_zerop (DR_STEP (dr)))
|
||||
continue;
|
||||
|
||||
supportable_dr_alignment = vect_supportable_dr_alignment (dr, true);
|
||||
do_peeling = vector_alignment_reachable_p (dr);
|
||||
if (do_peeling)
|
||||
@ -2304,7 +2311,10 @@ vect_analyze_data_ref_access (struct data_reference *dr)
|
||||
|
||||
/* Allow invariant loads in loops. */
|
||||
if (loop_vinfo && dr_step == 0)
|
||||
return DR_IS_READ (dr);
|
||||
{
|
||||
GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) = NULL;
|
||||
return DR_IS_READ (dr);
|
||||
}
|
||||
|
||||
if (loop && nested_in_vect_loop_p (loop, stmt))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user