| /* { dg-do run } */ |
| /* { dg-options "-fno-tree-scev-cprop -fno-tree-vectorize -g" } */ |
| /* { dg-additional-options "-mno-unroll-only-small-loops" { target ia32 } } */ |
| |
| |
| #include "../nop.h" |
| |
| void __attribute__((noipa,noinline)) |
| foo (int n) |
| { |
| if (n == 0) |
| return; |
| int i = 0; |
| do |
| { |
| ++i; /* { dg-final { gdb-test . "i" "0" } } */ |
| } |
| while (i < n); |
| /* The following works only with final value replacement or with the NOP |
| but not without (which means -Og). Vectorization breaks it, so disable |
| that. At -O3 it currently fails, PR89983. */ |
| __asm__ volatile (NOP : : "g" (i) : "memory"); /* { dg-final { gdb-test . "i" "1" { xfail { aarch64*-*-* && { any-opts "-ftracer" } } } } } */ |
| } |
| int main() { foo(1); } |