Esempio n. 1
0
static void merge_pair(struct node **dst,
                       struct node *sub1,
                       struct node *sub2)
{
    // merge two sorted sub-lists into one
    while (sub1 || sub2) {
        if (!sub2 || (sub1 && sub1->value < sub2->value))
            merge_single_node(&dst, &sub1);
        else
            merge_single_node(&dst, &sub2);
    }
}
Esempio n. 2
0
File: main.c Progetto: olivo/BP
static void merge_pair(struct node **dst , struct node *sub1 , struct node *sub2 )
{   struct node **__cil_tmp4 ;
    struct node **__cil_tmp5 ;
    struct node **__cil_tmp6 ;
    struct node *__cil_tmp7 ;
    struct node **__cil_tmp8 ;
    struct node **__cil_tmp9 ;
    struct node *__cil_tmp10 ;
    unsigned int __cil_tmp11 ;
    unsigned int __cil_tmp12 ;
    int __cil_tmp13 ;
    struct node **__cil_tmp14 ;
    struct node *__cil_tmp15 ;
    unsigned int __cil_tmp16 ;
    unsigned int __cil_tmp17 ;
    int __cil_tmp18 ;

    {
        {
#line 43
            while (1) {
while_0_continue: /* CIL Label */
                ;
                {
#line 43
                    __cil_tmp4 = & sub1;
#line 43
                    if (*__cil_tmp4) {

                    } else {
                        {
#line 43
                            __cil_tmp5 = & sub2;
#line 43
                            if (*__cil_tmp5) {

                            } else {
                                goto while_0_break;
                            }
                        }
                    }
                }
                {
#line 44
                    __cil_tmp6 = & sub2;
#line 44
                    __cil_tmp7 = *__cil_tmp6;
#line 44
                    if (! __cil_tmp7) {
                        {
#line 45
                            merge_single_node(& dst, & sub1);
                        }
                    } else {
                        {
#line 44
                            __cil_tmp8 = & sub1;
#line 44
                            if (*__cil_tmp8) {
                                {
#line 44
                                    __cil_tmp9 = & sub2;
#line 44
                                    __cil_tmp10 = *__cil_tmp9;
#line 44
                                    __cil_tmp11 = (unsigned int )__cil_tmp10;
#line 44
                                    __cil_tmp12 = __cil_tmp11 + 4;
#line 44
                                    __cil_tmp13 = *((int *)__cil_tmp12);
#line 44
                                    __cil_tmp14 = & sub1;
#line 44
                                    __cil_tmp15 = *__cil_tmp14;
#line 44
                                    __cil_tmp16 = (unsigned int )__cil_tmp15;
#line 44
                                    __cil_tmp17 = __cil_tmp16 + 4;
#line 44
                                    __cil_tmp18 = *((int *)__cil_tmp17);
#line 44
                                    if (__cil_tmp18 < __cil_tmp13) {
                                        {
#line 45
                                            merge_single_node(& dst, & sub1);
                                        }
                                    } else {
                                        {
#line 47
                                            merge_single_node(& dst, & sub2);
                                        }
                                    }
                                }
                            } else {
                                {
#line 47
                                    merge_single_node(& dst, & sub2);
                                }
                            }
                        }
                    }
                }
            }
while_0_break: /* CIL Label */
            ;
        }
#line 49
        return;
    }
}
void merge_pair(unsigned int dst, unsigned int sub1, unsigned int sub2)
{
		TRACK_VALUE[9] = dst;
		TRACK_VALUE[10] = sub1;
		TRACK_VALUE[11] = sub2;
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		if (!(TRACK_VALUE[10] || TRACK_VALUE[11]))
		{
				goto __exit_loop_1;
		}

		{
				if ((!TRACK_VALUE[11]) || (TRACK_VALUE[10] && (READ_NORMAL(TRACK_VALUE[10] + 1) < READ_NORMAL(TRACK_VALUE[11] + 1))))
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[10]);
				}
				else
				{
						merge_single_node(TRACK_ADDRESS[9], TRACK_ADDRESS[11]);
				}

		}
		assume(!(TRACK_VALUE[10] || TRACK_VALUE[11]));
		__exit_loop_1:
		;

}