/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-O2 -fno-omit-frame-pointer -fshrink-wrap-frame-pointer -fdump-rtl-ira-details-blocks" } */ /* { dg-final { scan-assembler-times "lea\[^\n\r\]*bp" 2 } } */ /* { dg-final { scan-rtl-dump-not "loop 1\[^\n\r\]*fp" "ira" } } */ /* { dg-final { cleanup-rtl-dump "ira" } } */ /* Check the fp setting of goo and hoo inside loops could be promoted to loop header. */ int a[1000], b[1000], cond1, cond2, x, y; unsigned M, N; extern void goo(); extern void hoo(); void foo() { int r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15; unsigned i, j; 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]; r13 = a[13]; r14 = a[14]; r15 = a[15]; if (cond1) hoo(); 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[13] = r13; b[14] = r14; b[15] = r15; for (i = 0; i < M; i++) { r1 = x; goo(); y = r1; if (cond1) { for (j = 0; j < N; j++) { r2 = a[j]; hoo(); b[j] = r2; } } } }