Must be executed intervals are stretches of instructions that are
guaranteed to be executed together without any other instruction
executed in-between. In addition, an interval I can end in a link into
another interval J. This means that the instructions of the interval
J, starting from the position the link points to, are always executed
before or respectively after the instruction in I. Note that there
might be other instructions executed in-between linked intervals.
With this patch the must-be-executed-context explorer will created an
overlay of the CFG using partially connected intervals. In contrast to
the old scheme, we do not need to recompute join points or next/previous
instructions more than once, the information is part of the interval
web. Furthermore, iterators are changed to be lightweight, only
containing the position on the forward and backward web of intervals as
well as pointer to the explorer. The latter could potentially be
removed as well.
The interface of the explorer was changed because the users do not need
to create and hold on to iterators anymore.
Early test results show significant improvements wrt. compile time and
no changes to the context.