2023-03-02 15:57:26 +01:00
|
|
|
--TEST--
|
|
|
|
FibI
|
|
|
|
--TARGET--
|
|
|
|
Windows-x86_64
|
|
|
|
--ARGS--
|
|
|
|
--save --dump-live-ranges -S --run
|
|
|
|
--CODE--
|
|
|
|
{
|
|
|
|
int32_t c_0 = 0;
|
|
|
|
int32_t c_1 = 1;
|
|
|
|
int32_t c_10000 = 10000;
|
|
|
|
uintptr_t f = func(printf, 4);
|
|
|
|
uintptr_t format = "%d\n";
|
|
|
|
l_1 = START(l_6);
|
|
|
|
int32_t lo_1 = COPY(c_0);
|
|
|
|
int32_t hi_1 = COPY(c_1);
|
|
|
|
l_2 = END(l_1);
|
|
|
|
l_3 = LOOP_BEGIN(l_2, l_9);
|
|
|
|
int32_t lo_2 = PHI(l_3, lo_1, lo_3);
|
|
|
|
int32_t 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);
|
|
|
|
int32_t hi_3 = ADD(hi_2, lo_2);
|
|
|
|
int32_t lo_3 = SUB(hi_3, lo_2);
|
|
|
|
l_8 = CALL/2(l_7, f, format, lo_3);
|
2023-03-22 22:47:27 +01:00
|
|
|
l_9 = LOOP_END(l_8);
|
2023-03-02 15:57:26 +01:00
|
|
|
l_5 = IF_FALSE(l_4);
|
|
|
|
l_6 = RETURN(l_5, c_0);
|
|
|
|
}
|
|
|
|
--EXPECT--
|
|
|
|
{
|
|
|
|
uintptr_t c_1 = 0;
|
|
|
|
bool c_2 = 0;
|
|
|
|
bool c_3 = 1;
|
|
|
|
int32_t c_4 = 0;
|
|
|
|
int32_t c_5 = 1;
|
|
|
|
int32_t c_6 = 10000;
|
|
|
|
uintptr_t c_7 = func(printf, 4);
|
|
|
|
uintptr_t c_8 = "%d\n";
|
2023-03-29 14:13:17 +02:00
|
|
|
l_1 = START(l_14);
|
2023-03-02 15:57:26 +01:00
|
|
|
l_2 = END(l_1);
|
2023-03-29 14:13:17 +02:00
|
|
|
l_3 = LOOP_BEGIN(l_2, l_12);
|
|
|
|
int32_t d_4 = PHI(l_3, c_4, d_5);
|
2023-03-02 15:57:26 +01:00
|
|
|
int32_t d_5 = PHI(l_3, c_5, d_9);
|
|
|
|
bool d_6 = LT(d_5, c_6);
|
|
|
|
l_7 = IF(l_3, d_6);
|
|
|
|
l_8 = IF_TRUE(l_7);
|
|
|
|
int32_t d_9 = ADD(d_5, d_4);
|
2023-03-29 14:13:17 +02:00
|
|
|
l_10 = CALL/2(l_8, c_7, c_8, d_5);
|
|
|
|
l_12 = LOOP_END(l_10);
|
|
|
|
l_13 = IF_FALSE(l_7);
|
|
|
|
l_14 = RETURN(l_13, c_4);
|
2023-03-02 15:57:26 +01:00
|
|
|
}
|
|
|
|
{ # LIVE-RANGES (vregs_count=3)
|
|
|
|
TMP
|
2023-05-17 21:49:26 +02:00
|
|
|
[%eax]: [2.2-2.3)/0
|
|
|
|
[%eax]: [12.2-12.3)/0
|
2023-03-29 14:13:17 +02:00
|
|
|
R1 (d_4) [%eax]: [3.0-9.1), DEF(4.2), USE(9.1/2)!
|
2023-04-05 18:20:43 +02:00
|
|
|
R2 (d_5) [%ebx]: [3.0-13.0), DEF(5.2), USE(7.1/6.1), USE(9.1/1)!, USE(10.0/4, hint=%edx), PHI_USE(12.2, phi=d_4/3)
|
2023-03-29 14:13:17 +02:00
|
|
|
R3 (d_9) [%ebp]: [9.2-13.0), DEF(9.2)!, PHI_USE(12.2, phi=d_5/3)
|
|
|
|
[%rax] : [14.0-14.1)
|
|
|
|
[%rcx] : [10.0-10.1)
|
|
|
|
[%rdx] : [10.0-10.1)
|
|
|
|
[%SCRATCH] : [10.1-10.2)
|
2023-03-02 15:57:26 +01:00
|
|
|
}
|
|
|
|
test:
|
|
|
|
subq $0x38, %rsp
|
|
|
|
movq %rbx, 0x30(%rsp)
|
|
|
|
movq %rbp, 0x28(%rsp)
|
|
|
|
xorl %eax, %eax
|
|
|
|
movl $1, %ebx
|
|
|
|
.L1:
|
|
|
|
cmpl $0x2710, %ebx
|
|
|
|
jge .L2
|
2023-03-29 14:13:17 +02:00
|
|
|
leal (%rbx, %rax), %ebp
|
|
|
|
movl %ebx, %edx
|
2023-03-02 15:57:26 +01:00
|
|
|
leaq .L3(%rip), %rcx
|
|
|
|
movabsq $printf, %rax
|
|
|
|
callq *%rax
|
2023-03-29 14:13:17 +02:00
|
|
|
movl %ebx, %eax
|
|
|
|
movl %ebp, %ebx
|
2023-03-02 15:57:26 +01:00
|
|
|
jmp .L1
|
|
|
|
.L2:
|
|
|
|
xorl %eax, %eax
|
|
|
|
movq 0x30(%rsp), %rbx
|
|
|
|
movq 0x28(%rsp), %rbp
|
|
|
|
addq $0x38, %rsp
|
|
|
|
retq
|
|
|
|
.rodata
|
2023-03-29 14:13:17 +02:00
|
|
|
.db 0x90, 0x90, 0x90, 0x90
|
2023-03-02 15:57:26 +01:00
|
|
|
.L3:
|
|
|
|
.db 0x25, 0x64, 0x0a, 0x00
|
|
|
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
2
|
|
|
|
3
|
|
|
|
5
|
|
|
|
8
|
|
|
|
13
|
|
|
|
21
|
|
|
|
34
|
|
|
|
55
|
|
|
|
89
|
|
|
|
144
|
|
|
|
233
|
|
|
|
377
|
|
|
|
610
|
|
|
|
987
|
|
|
|
1597
|
|
|
|
2584
|
|
|
|
4181
|
|
|
|
6765
|
|
|
|
|
|
|
|
exit code = 0
|