Status fields:
creation_ts: | 2006-04-18 19:56 |
---|---|
component: | unspecified |
version: | 0.95 |
rep_platform: | All |
op_sys: | Linux |
bug_status: | RESOLVED |
resolution: | WONTFIX |
reporter: | yshi@cs.tcd.ie |
The function below in the original code(src/vm/jit/loop/analyze.c) doesn't perform correctly as it is intended to. /* This function is used to merge two loops with the same header together. A simple merge sort of the lists nodes of both loops is performed. */ void analyze_merge(struct LoopContainer *l1, struct LoopContainer *l2) { struct LoopElement *start, *last, *le1, *le2, *ptr; /* start and last are pointers to the newly built list, le1 and le2 step */ /* step through the lists, that have to be merged. */ le1 = l1->nodes; le2 = l2->nodes; /* start a simple merge sort of the nodes of both loops. These lists are */ /* already sorted, so merging is easy. */ if (le1->node < le2->node) { start = last = le1; le1 = le1->next; } else if (le1->node == le2->node) { start = last = le1; le1 = le1->next; le2 = le2->next; } else { assert(false); start = last = le2; le2 = le2->next; } /* while the first loop != NULL, depending of the first element of second */ /* loop, add new node to result list */ while (le1 != NULL && le2 != NULL) { if (le1->node < le2->node) { last->next = le1; le1 = le1->next; } else if (le1->node == le2->node) { last->next = le1; le1 = le1->next; le2 = le2->next; } else { last->next = le2; le2 = le2->next; } last = last->next; } if ( le1 == NULL) { last->next = le2; } else { last->next = le1; } }
The loop optimization code is really unmaintained and outdated. But we will reactivate it when are implementing our optimization stuff.
Noone will touch that ever again.