blob: e25c6c04543af800ca448874e6f9da8582b746d1 [file] [log] [blame]
/* { dg-additional-options "-fdump-tree-optimized" } */
#include "tree-vect.h"
#define N 4
int a[N];
int __attribute__ ((noipa))
f1 (void)
{
int b[N] = { 15, 0, 0, 0 }, res = 0;
for (int i = 0; i < N; ++i)
res += a[i] & b[i];
return res;
}
int __attribute__ ((noipa))
f2 (void)
{
int b[N] = { 0, 31, 0, 0 }, res = 0;
for (int i = 0; i < N; ++i)
res += a[i] & b[i];
return res;
}
int __attribute__ ((noipa))
f3 (void)
{
int b[N] = { 0, 0, 0, -1 }, res = 0;
for (int i = 0; i < N; ++i)
res += a[i] & b[i];
return res;
}
int
main ()
{
check_vect ();
for (int i = 0; i < N; ++i)
a[i] = 0xe0 + i;
if (f1 () != (a[0] & 15)
|| f2 () != (a[1] & 31)
|| f3 () != a[N - 1])
__builtin_abort ();
return 0;
}
/* ??? We need more constant folding for this to work with fully-masked
loops. */
/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail aarch64_sve } } } */