--TEST-- Fib2 --TARGET-- x86 --ARGS-- --debug-regset 0x3ff --save --dump-live-ranges -S --run --CODE-- { int32_t zero = 0; double c_0 = 0; double c_1 = 1; double c_10000 = 10000; uintptr_t f = func(printf); uintptr_t format = "%g\n"; l_1 = START(l_6); double lo_1 = COPY(c_0); double hi_1 = COPY(c_1); l_2 = END(l_1); l_3 = LOOP_BEGIN(l_2, l_9); double lo_2 = PHI(l_3, lo_1, lo_3); double hi_2 = PHI(l_3, hi_1, hi_3); bool b = LT(hi_2, c_10000); l_4 = IF(l_3, b); l_7 = IF_TRUE(l_4); double hi_3 = ADD(hi_2, lo_2); double lo_3 = SUB(hi_3, lo_2); ll = CALL/2(l_7, f, format, lo_3); l_8 = CALL/2(ll, f, format, lo_3); l_9 = LOOP_END(l_8, l_3); l_5 = IF_FALSE(l_4); l_6 = RETURN(l_5, zero); } --EXPECT-- { uintptr_t c_1 = 0; bool c_2 = 0; bool c_3 = 1; int32_t c_4 = 0; double c_5 = 0; double c_6 = 1; double c_7 = 10000; uintptr_t c_8 = func(printf); uintptr_t c_9 = "%g\n"; l_1 = START(l_17); l_2 = END(l_1); l_3 = LOOP_BEGIN(l_2, l_15); double d_4 = PHI(l_3, c_5, d_10); double d_5 = PHI(l_3, c_6, d_9); bool d_6 = GT(c_7, d_5); l_7 = IF(l_3, d_6); l_8 = IF_TRUE(l_7); double d_9 = ADD(d_5, d_4); double d_10 = SUB(d_9, d_4); l_11 = CALL/2(l_8, c_8, c_9, d_10); l_13 = CALL/2(l_11, c_8, c_9, d_10); l_15 = LOOP_END(l_13, l_3); l_16 = IF_FALSE(l_7); l_17 = RETURN(l_16, c_4); } { # LIVE-RANGES (vregs_count=3) TMP [%xmm0]: [2.2-2.3) [%xmm1]: [6.0-6.2) [%eax]: [11.0-11.1) [%eax]: [13.0-13.1) [%xmm0]: [15.2-15.3) R1 (d_4) [SPILL=0x0] [%xmm1]: [3.0-6.0), DEF(4.2) : [6.0-8.0) [%xmm1]: [8.0-10.1), USE(9.1/2), USE(10.1/2) R2 (d_5, d_9) [SPILL=0x8] [%xmm0]: [3.0-10.0), DEF(5.2), USE(6.1/2), USE(9.0/1)!, DEF(9.0)!, DEF(9.2)!, USE(10.0/1, hint=R3)! : [10.0-16.0), PHI_USE(15.2, phi=d_5/3) R3 (d_10) [SPILL=0x10] [%xmm0]: [10.0-11.1), DEF(10.0, hint=R2)!, DEF(10.2)!, USE(11.1/4) : [11.1-16.0), USE(13.1/4), PHI_USE(15.2, phi=d_4/3) [%eax] : [17.0-17.1) [%SCRATCH] : [11.1-11.2), [13.1-13.2) } test: subl $0x2c, %esp xorpd %xmm1, %xmm1 movsd %xmm1, 0xc(%esp) movsd .L3, %xmm0 movsd %xmm0, 0x14(%esp) .L1: movsd .L4, %xmm1 ucomisd 0x14(%esp), %xmm1 jbe .L2 movsd 0x14(%esp), %xmm0 addsd 0xc(%esp), %xmm0 movsd %xmm0, 0x14(%esp) movsd 0x14(%esp), %xmm0 subsd 0xc(%esp), %xmm0 movsd %xmm0, 0x1c(%esp) leal .L5, %eax movl %eax, (%esp) movsd 0x1c(%esp), %xmm0 movsd %xmm0, 4(%esp) calll printf leal .L5, %eax movl %eax, (%esp) movsd 0x1c(%esp), %xmm7 movsd %xmm7, 4(%esp) calll printf movsd 0x1c(%esp), %xmm1 movsd %xmm1, 0xc(%esp) jmp .L1 .L2: xorl %eax, %eax addl $0x2c, %esp retl .rodata .db 0x90 .L3: .db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f .L4: .db 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xc3, 0x40 .L5: .db 0x25, 0x67, 0x0a, 0x00 1 1 1 1 2 2 3 3 5 5 8 8 13 13 21 21 34 34 55 55 89 89 144 144 233 233 377 377 610 610 987 987 1597 1597 2584 2584 4181 4181 6765 6765 exit code = 0