1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -msse2 -fdump-tree-cddce1" } */
       3  
       4  typedef int v4si __attribute__((vector_size(16)));
       5  typedef int v2si __attribute__((vector_size(8)));
       6  
       7  void low (v2si *dst, v4si *srcp)
       8  {
       9    v4si src = *srcp;
      10    *dst = (v2si) { src[0], src[1] };
      11  }
      12  
      13  void high (v2si *dst, v4si *srcp)
      14  {
      15    v4si src = *srcp;
      16    *dst = (v2si) { src[2], src[3] };
      17  }
      18  
      19  void even (v2si *dst, v4si *srcp)
      20  {
      21    v4si src = *srcp;
      22    *dst = (v2si) { src[0], src[2] };
      23  }
      24  
      25  void odd (v2si *dst, v4si *srcp)
      26  {
      27    v4si src = *srcp;
      28    *dst = (v2si) { src[1], src[3] };
      29  }
      30  
      31  /* { dg-final { scan-tree-dump-times "BIT_FIELD_REF" 4 "cddce1" } } */
      32  /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 3 "cddce1" { xfail *-*-* } } } */
      33  /* Ideally highpart extraction would elide the permutation as well.  */
      34  /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 2 "cddce1" } } */