1/* { dg-do compile } */
2/* { dg-options "-O1 -fdump-tree-optimized" } */
3
4struct _fat_ptr
5{
6  unsigned char *curr;
7  unsigned char *base;
8  unsigned char *last_plus_one;
9};
10int Cyc_string_ungetc (int ignore, struct _fat_ptr *sptr);
11int
12Cyc_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*-*-*" } } } } */
40/* { dg-final { cleanup-tree-dump "optimized" } } */
41