(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
pr48863.c
       1  /* PR target/48863.  */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2" } */
       4  
       5  /* Check that Temporary Expression Replacement does not move a
       6    libcall-producing expression across a statement initialising a local
       7    register variable.  */
       8  
       9  static inline int
      10  dosvc (int fd, unsigned long high, unsigned low)
      11  {
      12    register int r0 asm("r0") = fd;
      13    register int r2 asm("r2") = high;
      14    register int r3 asm("r3") = low;
      15  
      16    asm volatile("" : "=r"(r0) : "0"(r0), "r"(r2), "r"(r3));
      17    return r0;
      18  }
      19  
      20  struct s
      21  {
      22    int fd;
      23    long long length;
      24  } s = { 2, 0 }, *p = &s;
      25  
      26  int
      27  main (void)
      28  {
      29    unsigned low = p->length & 0xffffffff;
      30    unsigned high = p->length / 23;
      31  
      32    if (dosvc (p->fd, high, low) != 2)
      33      __builtin_abort ();
      34    return 0;
      35  }