1  /* { dg-do compile } */
       2  /* { dg-options "-O1 -fdump-tree-optimized" } */
       3  
       4  struct _fat_ptr
       5  {
       6    unsigned char *curr;
       7    unsigned char *base;
       8    unsigned char *last_plus_one;
       9  };
      10  int Cyc_string_ungetc (int ignore, struct _fat_ptr *sptr);
      11  int
      12  Cyc_string_ungetc (int ignore, struct _fat_ptr *sptr)
      13  {
      14    struct _fat_ptr *_T0;
      15    struct _fat_ptr *_T1;
      16    struct _fat_ptr _T2;
      17    int _T3;
      18    struct _fat_ptr _ans;
      19    int _change;
      20  
      21    {
      22      _T0 = sptr;
      23      _T1 = sptr;
      24      _T2 = *sptr;
      25      _T3 = -1;
      26      _ans = _T2;
      27      _change = -1;
      28      _ans.curr += 4294967295U;
      29      *sptr = _ans;
      30      return (0);
      31    }
      32  }
      33  
      34  /* The local aggregates . */
      35  /* Whether the structs are totally scalarized or not depends on the
      36     MOVE_RATIO macro definition in the back end.  The scalarization will
      37     not take place when using small values for MOVE_RATIO.  */
      38  /* { dg-final { scan-tree-dump-times "struct _fat_ptr _ans" 0 "optimized" { target { ! "aarch64*-*-* alpha*-*-* arm*-*-* avr-*-* nds32*-*-* powerpc*-*-* s390*-*-* sh*-*-*" } } } } */
      39  /* { dg-final { scan-tree-dump-times "struct _fat_ptr _T2" 0 "optimized" { target { ! "aarch64*-*-* alpha*-*-* arm*-*-* avr-*-* nds32*-*-* powerpc*-*-* s390*-*-* sh*-*-*" } } } } */