diff --git a/gcc/testsuite/gcc.target/powerpc/pr110776.c b/gcc/testsuite/gcc.target/powerpc/pr110776.c new file mode 100644 index 00000000000..749159fd675 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr110776.c @@ -0,0 +1,22 @@ +/* { dg-require-effective-target powerpc_altivec_ok } */ +/* { dg-options "-O2 -mdejagnu-cpu=power6 -maltivec" } */ + +/* Verify there is no ICE. */ + +int a; +long *b; +int +c () +{ + long e; + int d = 0; + for (long f; f; f++) + { + e = b[f * a]; + if (e) + d = 1; + } + if (d) + for (;;) + ; +} diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 5018bd23e6e..6a4e8fce126 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -9876,7 +9876,10 @@ vectorizable_load (vec_info *vinfo, { if (costing_p) { - if (VECTOR_TYPE_P (ltype)) + /* For VMAT_ELEMENTWISE, just cost it as scalar_load to + avoid ICE, see PR110776. */ + if (VECTOR_TYPE_P (ltype) + && memory_access_type != VMAT_ELEMENTWISE) vect_get_load_cost (vinfo, stmt_info, 1, alignment_support_scheme, misalignment, false, &inside_cost, nullptr, cost_vec,