diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/fpomit-6.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/fpomit-6.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/fpomit-6.c b/gcc-4.9/gcc/testsuite/gcc.dg/fpomit-6.c new file mode 100644 index 000000000..42b7c6a28 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/fpomit-6.c @@ -0,0 +1,50 @@ +/* { dg-do compile { target {{ i?86-*-* x86_64-*-* } && lp64 } } } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -fshrink-wrap-frame-pointer -fno-schedule-insns2 -fdisable-rtl-ce1 -fdisable-rtl-ce2 -fdisable-rtl-ce3 -ffixed-ax -fdump-rtl-ira-details-blocks" } */ +/* { dg-final { scan-assembler "mov\[^\n\r\]*a\\+56\[^\n\r\]*bp\[^\n\r\]*\[\n\r\]\[^\n\r\]*mov\[^\n\r\]*bp\[^\n\r\]*b\\+56" } } */ +/* { dg-final { scan-rtl-dump "loop 1\[^\n\r\]*fp" "ira" } } */ +/* { dg-final { cleanup-rtl-dump "ira" } } */ + +/* Check loop1 should set fp free, and lra could use fp too. */ +int a[1000], b[1000], M, N, cond1, cond2, cond3; +extern void goo(); +int *p; + +void foo() { + int r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15; + int i, j; + + r15 = a[15]; + for (i = 0; i < M; i++) { + if (__builtin_expect(cond1, 0)) + if (__builtin_expect(cond2, 0)) + goo(); + r1 = a[1]; + r2 = a[2]; + r3 = a[3]; + r4 = a[4]; + r5 = a[5]; + r6 = a[6]; + r7 = a[7]; + r8 = a[8]; + r9 = a[9]; + r10 = a[10]; + r11 = a[11]; + r12 = a[12]; + asm volatile ("" : : : "memory"); + b[14] = a[14]; + asm volatile ("" : : : "memory"); + b[1] = r1; + b[2] = r2; + b[3] = r3; + b[4] = r4; + b[5] = r5; + b[6] = r6; + b[7] = r7; + b[8] = r8; + b[9] = r9; + b[10] = r10; + b[11] = r11; + b[12] = r12; + } + b[15] = r15; +} |