Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[qvtd-dev] M4 commits

Hi

My presentation at York had one major flaw. It assumed that a call graph built by considering producers and consumers of region heads was satisfactory for both control and data flow. It isn't.

If A provides something for B (data flow), it is convenient to call B from A (control flow). BUT if B has a further required value that A cannot satisfy, the call of B must be deferred until the further requirement of B is satisfied. A must therefore place its output in a temporary buffer within a suitable ancestor until all the directly referenced inputs of a B invocation are available. This problem for a single headed input is the same as occurs for multi-headed input. The solution can be therefore shared and is now on ewillink/480567, but one test fails intermittently; bug partially understood.

QVTi does not support a mapping that executes by assigning to or accumulating in a buffer. It is possible to fudge a "x : Set(X)" guard variable and then do "x := x->union(more);" but it's a but klunky. Better to introduce an updateable middle guard "where (x : Set(T))" that can be updated by a bottom assignment "x += more;". The new form of an assignment uses a new ConnectionAssignment AS class. The new form of guard variable is distinctive since the middle/where guard had no variables in QVTi.

The intermittency might be fixed today, but the general clean up and review certainly won't be, so I'll try to cherry pick all the ConnectionAssignment support changes for M4 so that M4 can be used as a stable development platform for the new scheduler.

    Regards

        Ed Willink




Back to the top