PR110776 exposes one issue that we could query unaligned
load for vector type but actually no unaligned vector load
is supported there. The reason is that the costed load is
with single-lane vector type and its memory access type is
VMAT_ELEMENTWISE, we actually take it as scalar load and
set its alignment_support_scheme as dr_unaligned_supported.
To avoid the ICE as exposed, following Rich's suggestion,
this patch is to make VMAT_ELEMENTWISE be costed as scalar
load.
Co-authored-by: Richard Biener <rguenther@suse.de>
PR tree-optimization/110776
gcc/ChangeLog:
* tree-vect-stmts.cc (vectorizable_load): Always cost VMAT_ELEMENTWISE
as scalar load.
gcc/testsuite/ChangeLog:
* gcc.target/powerpc/pr110776.c: New test.
--- /dev/null
+/* { 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 (;;)
+ ;
+}
{
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,