1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -fno-ipa-icf -fdump-tree-ldist-details" } */
       3  
       4  struct Foo
       5  {
       6    char a;
       7  };
       8  
       9  struct Foo x[256];
      10  
      11  static void __attribute__((noinline,noclone))
      12  foo()
      13  {
      14    int i;
      15    for (i = 0; i < 256; ++i)
      16      x[i] = (struct Foo){};
      17  }
      18  
      19  static void __attribute__((noinline,noclone))
      20  bar()
      21  {
      22    int i;
      23    for (i = 0; i < 256; ++i)
      24      x[i].a = 1;
      25  }
      26  
      27  static void __attribute__((noinline,noclone))
      28  foobar(unsigned char c)
      29  {
      30    int i;
      31    for (i = 0; i < 256; ++i)
      32      x[i].a = c;
      33  }
      34  
      35  static void __attribute__((noinline,noclone))
      36  foobar2(char c)
      37  {
      38    int i;
      39    for (i = 0; i < 256; ++i)
      40      x[i].a = c;
      41  }
      42  
      43  struct Baz
      44  {
      45    short a;
      46  };
      47  
      48  struct Baz y[256];
      49  
      50  static void __attribute__((noinline,noclone))
      51  baz()
      52  {
      53    int i;
      54    for (i = 0; i < 256; ++i)
      55      y[i].a = -1;
      56  }
      57  
      58  int main()
      59  {
      60    volatile int x;
      61    foo();
      62    bar();
      63    foobar(x);
      64    foobar2(x);
      65    baz();
      66    return 0;
      67  }
      68  
      69  /* { dg-final { scan-tree-dump-times "generated memset zero" 1 "ldist" } } */
      70  /* { dg-final { scan-tree-dump-times "generated memset" 5 "ldist" } } */