| /* { dg-do run } */ |
| /* { dg-require-effective-target arm_neon_hw } */ |
| /* { dg-options "-fno-omit-frame-pointer -mapcs-frame -O" } |
| /* { dg-add-options arm_neon } */ |
| |
| extern void abort (void); |
| |
| float data; |
| |
| void __attribute__((noinline, noclone)) bar (float f) |
| { |
| data = f; |
| } |
| |
| float __attribute__((noinline, noclone)) foo (float f) |
| { |
| int error_reported = 0; |
| |
| void __attribute__((noinline, noclone)) |
| nested (int a, int b, int c, int d, float f0, float f1, float f2, float f3) |
| { |
| float e; |
| |
| if (f3 > f2) |
| e = f3; |
| else |
| e = f2; |
| |
| if (f0 - f1 > e) |
| { |
| error_reported = a + b + c + d; |
| bar (f0); |
| bar (e); |
| } |
| } |
| |
| nested (1, 2, 3, 4, 1.0, 1.0, 3.5, 4.2); |
| return f + (float)error_reported; |
| } |
| |
| #define PI 3.1415927f |
| |
| int main (void) |
| { |
| if (foo (PI) != PI) |
| abort (); |
| return 0; |
| } |