| /* { dg-do compile } */ |
| /* { dg-options "-O -fdump-ipa-modref" } */ |
| #define sysreg_read(regname) \ |
| ({ \ |
| unsigned long __sr_val; \ |
| asm volatile(""); \ |
| \ |
| __sr_val; \ |
| }) |
| |
| #define sysreg_write(regname, __sw_val) \ |
| do { \ |
| asm volatile(""); \ |
| } while (0) |
| |
| #define isb() \ |
| do { \ |
| asm volatile( \ |
| "isb" \ |
| : \ |
| : \ |
| : "memory"); \ |
| } while (0) |
| |
| static unsigned long sctlr_read(void) |
| { |
| return sysreg_read(sctlr_el1); |
| } |
| |
| static void sctlr_write(unsigned long val) |
| { |
| sysreg_write(sctlr_el1, val); |
| } |
| |
| static void sctlr_rmw(void) |
| { |
| unsigned long val; |
| |
| val = sctlr_read(); |
| val |= 1UL << 7; |
| sctlr_write(val); |
| } |
| |
| void sctlr_read_multiple(void) |
| { |
| sctlr_read(); |
| sctlr_read(); |
| sctlr_read(); |
| sctlr_read(); |
| } |
| |
| void sctlr_write_multiple(void) |
| { |
| sctlr_write(0); |
| sctlr_write(0); |
| sctlr_write(0); |
| sctlr_write(0); |
| sctlr_write(0); |
| } |
| |
| void sctlr_rmw_multiple(void) |
| { |
| sctlr_rmw(); |
| sctlr_rmw(); |
| sctlr_rmw(); |
| sctlr_rmw(); |
| } |
| |
| void function(void) |
| { |
| sctlr_read_multiple(); |
| sctlr_write_multiple(); |
| sctlr_rmw_multiple(); |
| |
| isb(); |
| } |
| /* { dg-final { scan-ipa-dump-not "Function found to be const" "modref" } } */ |