mirror of
https://github.com/danog/ir.git
synced 2024-12-02 17:55:40 +01:00
125 lines
3.2 KiB
Plaintext
125 lines
3.2 KiB
Plaintext
--TEST--
|
|
VA_ARG 004: va_arg() expanded on x86
|
|
--TARGET--
|
|
x86
|
|
--ARGS--
|
|
--run
|
|
--CODE--
|
|
extern func printf(uintptr_t, ...): int32_t;
|
|
func sum(int32_t, ...): int32_t
|
|
{
|
|
uintptr_t c_1 = 0;
|
|
bool c_2 = 0;
|
|
bool c_3 = 1;
|
|
int32_t c_4 = 0;
|
|
int32_t c_5 = 3;
|
|
int32_t c_6 = 4;
|
|
int32_t c_7 = -4;
|
|
uintptr_t c_8 = 0x4;
|
|
uintptr_t c_9 = 0x8;
|
|
uintptr_t c_10 = 0xc;
|
|
uintptr_t c_11 = 0x10;
|
|
int32_t c_12 = 1;
|
|
l_1 = START(l_77);
|
|
int32_t d_2 = PARAM(l_1, "arg_1", 1);
|
|
uintptr_t d_3 = VAR(l_1, "var_3");
|
|
uintptr_t d_4 = VADDR(d_3);
|
|
l_5 = VA_START(l_1, d_4);
|
|
bool d_6 = GT(d_2, c_4);
|
|
l_7 = IF(l_5, d_6);
|
|
l_8 = IF_FALSE(l_7);
|
|
l_9 = END(l_8);
|
|
l_10 = IF_TRUE(l_7);
|
|
uintptr_t d_11, l_11 = VLOAD(l_10, d_3);
|
|
bool d_12 = ULT(d_2, c_6);
|
|
l_13 = IF(l_11, d_12);
|
|
l_14 = IF_TRUE(l_13);
|
|
l_15 = END(l_14);
|
|
l_16 = IF_FALSE(l_13);
|
|
int32_t d_17 = AND(d_2, c_7);
|
|
l_18 = END(l_16);
|
|
l_19 = LOOP_BEGIN(l_18, l_45);
|
|
int32_t d_20 = PHI(l_19, c_4, d_38);
|
|
uintptr_t d_21 = PHI(l_19, d_11, d_35);
|
|
int32_t d_22 = PHI(l_19, c_4, d_39);
|
|
uintptr_t d_23 = ADD(d_21, c_8);
|
|
l_24 = VSTORE(l_19, d_3, d_23);
|
|
int32_t d_25, l_25 = LOAD(l_24, d_21);
|
|
int32_t d_26 = ADD(d_25, d_20);
|
|
uintptr_t d_27 = ADD(d_21, c_9);
|
|
l_28 = VSTORE(l_25, d_3, d_27);
|
|
int32_t d_29, l_29 = LOAD(l_28, d_23);
|
|
int32_t d_30 = ADD(d_29, d_26);
|
|
uintptr_t d_31 = ADD(d_21, c_10);
|
|
l_32 = VSTORE(l_29, d_3, d_31);
|
|
int32_t d_33, l_33 = LOAD(l_32, d_27);
|
|
int32_t d_34 = ADD(d_33, d_30);
|
|
uintptr_t d_35 = ADD(d_21, c_11);
|
|
l_36 = VSTORE(l_33, d_3, d_35);
|
|
int32_t d_37, l_37 = LOAD(l_36, d_31);
|
|
int32_t d_38 = ADD(d_37, d_34);
|
|
int32_t d_39 = ADD(d_22, c_6);
|
|
bool d_40 = EQ(d_39, d_17);
|
|
l_41 = IF(l_37, d_40);
|
|
l_42 = IF_TRUE(l_41);
|
|
l_43 = END(l_42);
|
|
l_44 = IF_FALSE(l_41);
|
|
l_45 = LOOP_END(l_44);
|
|
l_46 = MERGE(l_15, l_43);
|
|
int32_t d_47 = PHI(l_46, c_4, d_38);
|
|
int32_t d_48 = PHI(l_46, c_4, d_38);
|
|
uintptr_t d_49 = PHI(l_46, d_11, d_35);
|
|
int32_t d_50 = AND(d_2, c_5);
|
|
bool d_51 = EQ(d_50, c_4);
|
|
l_52 = IF(l_46, d_51);
|
|
l_53 = IF_TRUE(l_52);
|
|
l_54 = END(l_53);
|
|
l_55 = IF_FALSE(l_52);
|
|
l_56 = END(l_55);
|
|
l_57 = LOOP_BEGIN(l_56, l_71);
|
|
int32_t d_58 = PHI(l_57, d_48, d_64);
|
|
uintptr_t d_59 = PHI(l_57, d_49, d_61);
|
|
int32_t d_60 = PHI(l_57, c_4, d_65);
|
|
uintptr_t d_61 = ADD(d_59, c_8);
|
|
l_62 = VSTORE(l_57, d_3, d_61);
|
|
int32_t d_63, l_63 = LOAD(l_62, d_59);
|
|
int32_t d_64 = ADD(d_63, d_58);
|
|
int32_t d_65 = ADD(d_60, c_12);
|
|
bool d_66 = EQ(d_65, d_50);
|
|
l_67 = IF(l_63, d_66);
|
|
l_68 = IF_TRUE(l_67);
|
|
l_69 = END(l_68);
|
|
l_70 = IF_FALSE(l_67);
|
|
l_71 = LOOP_END(l_70);
|
|
l_72 = MERGE/3(l_9, l_54, l_69);
|
|
int32_t d_73 = PHI/3(l_72, c_4, d_47, d_64);
|
|
uintptr_t d_75 = VADDR(d_3);
|
|
l_76 = VA_END(l_72, d_75);
|
|
l_77 = RETURN(l_76, d_73);
|
|
}
|
|
func main(void): int32_t
|
|
{
|
|
uintptr_t c_1 = 0;
|
|
bool c_2 = 0;
|
|
bool c_3 = 1;
|
|
int32_t c_4 = 7;
|
|
int32_t c_5 = 1;
|
|
int32_t c_6 = 2;
|
|
int32_t c_7 = 3;
|
|
int32_t c_8 = 4;
|
|
int32_t c_9 = 5;
|
|
int32_t c_10 = 6;
|
|
uintptr_t c_11 = func sum(int32_t, ...): int32_t;
|
|
uintptr_t c_12 = "sum %d\n";
|
|
uintptr_t c_13 = func printf(uintptr_t, ...): int32_t;
|
|
int32_t c_14 = 0;
|
|
int32_t c_15 = 8;
|
|
int32_t c_16 = 9;
|
|
l_1 = START(l_7);
|
|
int32_t d_2, l_2 = CALL/10(l_1, c_11, c_16, c_5, c_6, c_7, c_8, c_9, c_10, c_4, c_15, c_16);
|
|
int32_t d_5, l_5 = CALL/2(l_2, c_13, c_12, d_2);
|
|
l_7 = RETURN(l_5, c_14);
|
|
}
|
|
--EXPECT--
|
|
sum 45
|