/* { dg-do compile } */ /* { dg-options "-O2 -msse2 -fdump-tree-cddce1" } */ typedef int v4si __attribute__((vector_size(16))); typedef int v2si __attribute__((vector_size(8))); void low (v2si *dst, v4si *srcp) { v4si src = *srcp; *dst = (v2si) { src[0], src[1] }; } void high (v2si *dst, v4si *srcp) { v4si src = *srcp; *dst = (v2si) { src[2], src[3] }; } void even (v2si *dst, v4si *srcp) { v4si src = *srcp; *dst = (v2si) { src[0], src[2] }; } void odd (v2si *dst, v4si *srcp) { v4si src = *srcp; *dst = (v2si) { src[1], src[3] }; } /* { dg-final { scan-tree-dump-times "BIT_FIELD_REF" 4 "cddce1" } } */ /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 3 "cddce1" } } */ /* Ideally highpart extraction would elide the permutation as well. */ /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 2 "cddce1" { xfail *-*-* } } } */