/* { dg-do compile } */ /* { dg-options "-O3 -fdump-tree-slp2-details -msse2" } */ int x[4]; void foo(int i) { int j = (i+1) & 31; x[0] = (x[0] << j) + j; x[1] = (x[1] << j) + j; x[2] = (x[2] << j) + j; x[3] = (x[3] << j) + j; } /* We should not use vector operations for i + 1 and (i + 1) & 31 but instead use { j, j, j, j }. */ /* { dg-final { scan-tree-dump-times "Using a splat of the uniform operand" 2 "slp2" } } */ /* { dg-final { scan-tree-dump-not " = \{i_" "slp2" } } */ /* { dg-final { scan-tree-dump-times " = \{j_" 1 "slp2" } } */