| /* { dg-do compile } */ |
| /* { dg-options -O2 } */ |
| |
| /* Basic tests for flatten attribute, check we end up |
| with only the flattened function bodies. */ |
| |
| static int foobar(int i); |
| static int bar(int i); |
| |
| int __attribute__((flatten)) leaf0a(int i) |
| { |
| return bar(i); |
| } |
| int __attribute__((flatten)) leaf0b(int i) |
| { |
| return foobar(i); |
| } |
| int __attribute__((flatten)) leaf1(int i) |
| { |
| return bar(foobar(i)); |
| } |
| int __attribute__((flatten)) leaf2(int i) |
| { |
| int j; |
| j = foobar(i); |
| return bar(j); |
| } |
| |
| static int foobar(int i) |
| { |
| return i-1; |
| } |
| static int bar(int i) |
| { |
| return i + foobar(i); |
| } |
| |
| |
| static int gloobar(int i) |
| { |
| return i*5+1; |
| } |
| static int floobar(int i) |
| { |
| return gloobar(i); |
| } |
| int __attribute__((flatten)) leaf3(int i) |
| { |
| int j; |
| j = floobar(i); |
| j += floobar(i); |
| return j; |
| } |
| |
| /* { dg-final { scan-assembler-not "bar\[: \t\n\]" } } */ |