(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
ipa/
pr105160.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O -fdump-ipa-modref" } */
       3  #define sysreg_read(regname)		\
       4  ({					\
       5  	unsigned long __sr_val;		\
       6  	asm volatile("");		\
       7  					\
       8  	__sr_val;			\
       9  })
      10  
      11  #define sysreg_write(regname, __sw_val)	\
      12  do {					\
      13  	asm volatile("");			\
      14  } while (0)
      15  
      16  #define isb()				\
      17  do {					\
      18  	asm volatile(			\
      19  	"isb"				\
      20  	:				\
      21  	:				\
      22  	: "memory");			\
      23  } while (0)
      24  
      25  static unsigned long sctlr_read(void)
      26  {
      27  	return sysreg_read(sctlr_el1);
      28  }
      29  
      30  static void sctlr_write(unsigned long val)
      31  {
      32  	sysreg_write(sctlr_el1, val);
      33  }
      34  
      35  static void sctlr_rmw(void)
      36  {
      37  	unsigned long val;
      38  
      39  	val = sctlr_read();
      40  	val |= 1UL << 7;
      41  	sctlr_write(val);
      42  }
      43  
      44  void sctlr_read_multiple(void)
      45  {
      46  	sctlr_read();
      47  	sctlr_read();
      48  	sctlr_read();
      49  	sctlr_read();
      50  }
      51  
      52  void sctlr_write_multiple(void)
      53  {
      54  	sctlr_write(0);
      55  	sctlr_write(0);
      56  	sctlr_write(0);
      57  	sctlr_write(0);
      58  	sctlr_write(0);
      59  }
      60  
      61  void sctlr_rmw_multiple(void)
      62  {
      63  	sctlr_rmw();
      64  	sctlr_rmw();
      65  	sctlr_rmw();
      66  	sctlr_rmw();
      67  }
      68  
      69  void function(void)
      70  {
      71  	sctlr_read_multiple();
      72  	sctlr_write_multiple();
      73  	sctlr_rmw_multiple();
      74  
      75  	isb();
      76  }
      77  /* { dg-final { scan-ipa-dump-not "Function found to be const" "modref"  } } */