1  /* { dg-do run } */
       2  /* { dg-options "-g -fno-ipa-icf" } */
       3  
       4  
       5  void __attribute__((noipa))
       6  use (int x)
       7  {
       8    asm volatile ("" : : "r" (x) : "memory");
       9  }
      10  
      11  static int __attribute__((noinline))
      12  bar (int i, int k)
      13  {
      14    asm ("" : "+r" (i));
      15    use (i);		/* { dg-final { gdb-test . "k" "3" { xfail { ! { aarch64*-*-* && { any-opts "-O0" "-O1" "-Og" } } } } } } */
      16    return 6;
      17  }
      18  
      19  volatile int v;
      20  
      21  static int __attribute__((noinline))
      22  foo (int i, int k)
      23  {
      24    int r;
      25    v = 9;
      26    k = (k + 14)/k;
      27    r = bar (i, k);		/* { dg-final { gdb-test . "k" "3" } } */
      28    return r;
      29  }
      30  
      31  volatile int v;
      32  
      33  int __attribute__((noipa))
      34  get_val1 (void)  {return 20;}
      35  int __attribute__((noipa))
      36  get_val2 (void)  {return 7;}
      37  
      38  int
      39  main (void)
      40  {
      41    int k = get_val2 ();
      42    int r = foo (get_val1 (), k);
      43    v = r + k;   /* k has to live accross the call or all is probably lost  */
      44    return 0;
      45  }