BoiseState-AdaptLab / IEGenLib

Inspector/Executor Generation Library for manipulating sets and relations with uninterpreted function symbols.
BSD 2-Clause "Simplified" License
2 stars 4 forks source link

Remove producer-consumer nodes #106

Open Aaron3154518 opened 3 years ago

Aaron3154518 commented 3 years ago

Some dataspaces are written to and then only used once. These are unnecessary to display on the dot graph. We would like to remove these and have all reads used by that dataspace instead point that statement which reads from the dataspace.

Example: foo = 45; bar = 65; baz = 85; foo = bar + 10; baz = foo + 10;

Normally we would display dependencies as follows: bar -> foo, foo -> baz

Because foo is only read once, we would instead display: bar -> baz

Aaron3154518 commented 3 years ago

Ran into bug where removing a producer-consumer dependency creates new instances of such dependencies. I haven't been able to account for all cases where this occurs yet. I've implemented a rough solution which just keeps calling the producer-consumer function until we stop removing statements.

Aaron3154518 commented 3 years ago

In implementing this, I created a graph data structure using the Stmt object. This structure has some bugs: 1) When removing statements, it needs to remap specific read/write dataspaces around the deleted statement. We can't edit the Stmt's actual reads and writes though, just the graph representation of them. 2) We can't get read/write relation information which we need to determine whether or not to perform the compression.

I'll add more bugs here as I find them

Edit: fixed by #116, #117