-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[pull] master from phate:master #185
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This PR adds support for annotations to region trees. Here is an example of how it will look like: ``` RootRegion -STRUCTURAL_TEST_NODE --Region[0] --Region[1] ---STRUCTURAL_TEST_NODE ----Region[0] ----Region[1] ----Region[2] NumNodes:0 NumArguments:0 ``` The plan is to use this for introducing a pass that enables the printing of RVSDG properties for debugging as well as metric gathering for pass evaluations. --------- Co-authored-by: Magnus Sjalander <[email protected]>
I was having an issue where tests of the command parser would fail due to some MLIR option, even when neither `--enable-mlir` nor `--enable-hls` are passed to `configure.sh`. That is a separate issue that should be fixed, but I thought it was about time I got MLIR and CIRCT running on my own machine anyway. These changes should make the build scripts work no matter where LLVM is installed. This is as a draft PR for now, to check that these changes do not break CI. PS: Some `.cpp` files used symbols imported from the standard library indirectly, so I had to add some `#include <>` to make it work. I am on arch (btw), but I am guessing these changes will become necessary on Ubuntu eventually as well.
A test was failing when compiling without `--enable-mlir`, due to `--output-format mlir` being unknown when `ENABLE_MLIR` is not defined. This issue could have been fixed in a different location, such as not defining the `Mlir` value in the `OutputFormat` enum at all, but that would have created some additional situations where `#ifdef`s would have to be added. I think it is nice to use as few `#ifdef`s as possible, to avoid situations like this where tests fail in specific `#ifdef` configurations. I would not be opposed to including the `--output-format mlir` option in all builds, but possibly making it invisible in the help-text. If `OutputFormat::Mlir` is selected without being enabled in the build, it eventually triggers a `JLM_UNREACHABLE` that informs you that jlm has been compiled without the MLIR dialect. I think this is much more user-friendly than just denying that there ever was an output format called `mlir`.
This change simplifies a helper function in `TestJlcCommandLineParser.cpp` and `TestJlmOptCommandLineParser.cpp` by using `c_str()`. It is safe to do this as the strings owning the underlying data live longer than the vector of `const char *` (and the strings are never modified). To make this change legal, some `const` had to be added, but only in places where no mutation is happening. The `const char * const *` is necessary, as `char **` can not be cast to `const char **`. I had to google this to [understand why](https://isocpp.org/wiki/faq/const-correctness#constptrptr-conversion).
Makes it possible to manually change the size of a pointer by changing GetPointerSizeInBits() in base-hls.cpp.
Duplicates the cne optimization found in the llvm backend for the hls backend with the addition of supporting the hls::loop_op.
The argument constructor did not check whether the type of the provided input is the same as the handed in type. In the future, the constructor should be refactored such that we either hand in an input or a simple type, but not both at the same time. This would avoid this check altogether. Closes #555
The result constructors did not check whether the type of the provided output is the same as the handed in type. In the future, these constructors should be refactored such that we either hand in an output or a simple type, but not both at the same time. This would avoid this check altogether. Closes #556
…w double checking is performed (#570) This PR is the first step towards getting all the Andersen techniques into main. It makes a couple of changes, without adding any new techniques: - Configurations have a text representation - Configurations are not specified via environment variable, but there is instead a function for getting all possible configurations. - Double-checking against a different configuration is cleaner and faster. `PointerObjectSet`s are cloned, solved separately, and compared directly after solving. - The template stuff used to invoke the worklist solver uses `std::visit` now, making dispatch much nicer. - Some additional statistics have been added - Re-orders some of the existing operations in the worklist solver. This is the order they ended up in in the final code when all techniques are added. - Added `Erase` to `HashSet`, which is a thin wrapper around `std::unordered_set::erase()`. - Register tests in `TestAndersen.cpp` individually.
This PR does the following: 1. Introduces a Copy() method to the argument class. 2. The introduced method enables us to fix a bug in the copy() method of the region. Previously, arguments were not copied according to their argument subtypes, but simply a new instance of argument was created. 3. Add unit test. This PR is a necessary step to get rid off ports.
Adds Hybrid Cycle Detection from Hardekopf 2007. The implementation is quite simple, but requires some extra info to be kept from the Offline Variable Substitution.
This PR does the following: 1. Introduces the GraphImport class and its subclasses to model external entities to the module. These classes serve as a replacement for the old impport classes. 2. Replaces all usages of impport with GraphImport 3. Removes old impport classes. This is one of the steps necessary in order to completely remove ports from the code base.
This PR does the following: 1. Introduces a Copy() method to the result class. 2. The introduced method enables us to fix a bug in the copy() method of the region. Previously, results were not copied according to their result subtypes, but simply a new instance of result was created. 3. Extend unit test. This PR is a necessary step to get rid off ports.
…for Andersen (#581) When propagating along the edge a->b, it is because a has something new. If b already has everything a has, that might indicate that there is a path from b to a. Lazy cycle detection looks for such a path using a DFS from b, and unifies everything that is on such a path b->*->a. It tries at most once per edge.
This PR does the following: 1. Introduces the GraphExport class and its subclasses to model the export of internal entities from the module. These classes serve as a replacement for the old expport class. 2. Replaces all usages of expport with GraphExport 3. Removes old expport classes. This is one of the steps necessary in order to completely remove ports from the code base.
Adds difference propagation, which is one of the more "invasive" techniques, as it needs to intercept modifications to the points-to sets. When iterating over a points-to set, you sometimes only need the set of pointees that have been added since last visit, while you other times need all pointees. For the flags, we get away with not intercepting the setting of them. Difference propagation can just remember if the flag was set the last time the work item was visited, which only takes up 2 bits per PointerObject.
The title says it all...
Clang format seems to have caused some files to be formatted differently, which makes the diff larger than necessary.
We forgot to bump the LLVM version to 18.
… MLIR install paths in configure.sh (#591) This PR started as a fix of formatting that changed with clang-format 18. I also noticed that the constructor had an unnecessary `const`, so I fixed that. Looking into why this was not caught by the ClangFormat workflow, I saw that the `configure.sh` script's `--enable-mlir` "consumed" the `--enable-hls`, causing hls to not be enabled, which affects the set of files found by `make format-dry-run`. In an attempt to make this not happen in the future, I made `configure.sh` complain and fail if the path you pass to `--enable-mlir` or `--enable-hls` is not a folder that exists. This forces the user to set up the folder first, but it should be helpful in preventing this type of mistake. Formatting is a bit of a special case, as we want to "enable" hls and mlir without needing to install either, so I passed in `/usr` as the path, since that is a folder we know exists.
This PR adds an argument subclass for the entry arguments of the HLS loop. This is necessary in order to make the `rvsdg::argument` class abstract. Co-authored-by: HKrogstie <[email protected]>
1. Replaces all usages of `argument::create()` with `TestGraphArgument::Create()` in the unit tests. 2. Makes the argument class abstract 3. Minor clean ups in the argument class 4. Add documentation to argument class
Add class for representing the predicate result of a theta node.
This pass enables the printing of the RVSDG tree between optimizations. Intended usage: `jlm-opt --RvsdgTreePrinter --DeadNodeElimination --RvsdgTreePrinter -s /tmp input.ll` This will write the files `input-rvsdgTree-0` and `input-rvsdgTree-1` to `/tmp`, containing the RVSDG tree from before applying dead node elimination and from after dead node elimination, respectively. The plan is to extend this pass with support for annotations to the RVSDG tree. Moreover, the pass can also be generalized to print not just RVSDG tree, but also the ASCII version of the RVSDG or other debug output.
1. Add the ExitResult class for representing result values before the HLS loop terminates 2. Replaces respective `result::create()` with `ExitResult::Create()` usages
1. Replaces all usages of `result::create()` in the unit tests with the appropriate subclasses. 2. Makes the result class abstract 3. Minor clean ups in the result class 4. Add documentation to result class
This PR does the following: 1. Adds support for annotating the number of RVSDG nodes to the RVSDG tree in the RvsdgTreePrinter pass. 2. Adds support for controlling the annotations from jlm-opt 3. Adds a unit test for the printing of the introduced annotation Usage: `jlm-opt --RvsdgTreePrinter -s /tmp --annotations=NumRvsdgNodes input.ll` Example output: ``` RootRegion NumRvsdgNodes:2 -STRUCTURAL_TEST_NODE NumRvsdgNodes:2 --Region[0] NumRvsdgNodes:1 --Region[1] NumRvsdgNodes:1 ``` --------- Co-authored-by: Magnus Sjalander <[email protected]>
…VM phi instructions (#598) As detailed in #597, the `::llvm::ReversePostOrderTraversal` does not visit unreachable LLVM basic blocks. As these BBs are never reached at runtime, and do not exist in our tac, this PR makes phi nodes ignore all operands from these basic blocks. If a phi node is left with only none operand, it is not converted to a `phi_op`, but instead uses the value directly. Fixes #597, (the minimal example given there now compiles), but there are still issues with the SPEC benchmark `577.xz`. --------- Co-authored-by: Magnus Sjalander <[email protected]> Co-authored-by: Håvard Krogstie <[email protected]>
PR #593 made optimizations dynamically configurable, but also screwed up the invariant that an optimization was only created once. This PR restores this invariant and moves the optimization creation from the JlmOptCommandLineOptions class to JlmOptCommand class. --------- Co-authored-by: HKrogstie <[email protected]>
Tests involving the long double type would fail on ARM processors, because of a discrepancy in bit-length. A new fpsize is now added for ARM. --------- Co-authored-by: Håvard Krogstie <[email protected]> Co-authored-by: Magnus Sjalander <[email protected]> Co-authored-by: Nico Reissmann <[email protected]>
Co-authored-by: Magnus Sjalander <[email protected]>
1. Cleans up the basic block conversion in the LLVM backend 2. Assigns name "bb[0...]" to the basic block in the output This PR is required for #586 in order to better follow the output. It is also part of the effort in #529. Example output: ``` ; Function Attrs: noinline nounwind optnone uwtable define i64 @fac(i64 noundef %0) #0 { bb0: %1 = alloca i64, align 8 %2 = alloca i64, align 8 store i64 %0, ptr %2, align 8 store i64 1, ptr %1, align 8 br label %bb1 bb1: ; preds = %bb4, %bb0 %3 = load i64, ptr %1, align 8 %4 = load i64, ptr %2, align 8 %5 = icmp ugt i64 %4, 1 br i1 %5, label %bb3, label %bb2 bb2: ; preds = %bb1 br label %bb4 bb3: ; preds = %bb1 %6 = mul i64 %3, %4 store i64 %6, ptr %1, align 8 %7 = load i64, ptr %2, align 8 %8 = add i64 %7, -1 store i64 %8, ptr %2, align 8 br label %bb4 bb4: ; preds = %bb3, %bb2 %9 = phi i1 [ false, %bb2 ], [ true, %bb3 ] br i1 %9, label %bb1, label %bb5 bb5: ; preds = %bb4 %10 = load i64, ptr %1, align 8 ret i64 %10 } ```
Adds the command line option `--output-format=dot`, which causes the final RVSDG to be dumped as the GraphViz dot format. One non-standard thing about the output is that each region becomes a separate graph, but with globally unique ids. This is done to make it easier to focus on parts of the RVSDG at a time, but it requires a renderer that expects multiple graphs in a single file. I have made a webapp that takes concatenated graphs as input, and creates a tree based on which graphs are referenced as subgraphs in other graphs. Selecting a node, edge or port will show all its properties, and highlight other nodes/edges they reference. The viewer should also work with any other GraphViz you may have. See the webapp [here](https://dot-tree-viz.vercel.app/). Repo for webapp [here](https://github.com/haved/dot-tree-viz). The webapp needs more polish to make it pleasant to work with complex graphs (resizing views, rendering subgraphs inside graphs, rendering \n properly). <details> <summary>Example output (long)</summary> ``` digraph graph0 { node[shape=box style=filled fillcolor=white]; penwidth=6; label="Type graph" node0 [label=ptr tooltip="5e0edd496b28" ]; node1 [label=iostate tooltip="5e0edd496b38" ]; node2 [label=mem tooltip="5e0edd496b40" ]; node3 [label=bit32 tooltip="5e0edd496e80" ]; node4 [label="ctl(2)" tooltip="5e0edd499200" ]; node5 [label="ctl(3)" tooltip="5e0edd499210" ]; node6 [label=bit1 tooltip="5e0edd496c90" ]; } digraph graph1 { node[shape=box style=filled fillcolor=white]; penwidth=6; label="RVSDG root graph" tooltip="5e0f07188b80" node7 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">LAMBDA[lzma_decode]</TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="4" CELLPADDING="2"><TR> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph2">graph2</TD> </TR></TABLE> </TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o0" type="node0" BGCOLOR="#FFFFFF" tooltip="5e0f071a73f0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718e890" ]; { rank=sink; r13 [label=r13 tooltip="5e0f0719eec0" ]; } node7:o0:s -> r13[id=edge48 ]; } digraph graph2 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f07184ac0" { rank=source; a0 [label=a0 type=node1 tooltip="5e0f071a0b00" ]; a1 [label=a1 type=node2 tooltip="5e0f071a0c80" ]; a0 -> a1[style=invis]; } node8 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BITS32(2)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o1" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a3110" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a70c0" ]; node9 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">undef</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o2" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a21b0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a20e0" ]; node10 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BITS32(1)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o3" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a1600" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718f7d0" ]; node11 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BITS32(1)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o4" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a0f10" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718e420" ]; node12 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">undef</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o5" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a0370" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718e9c0" ]; node13 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i0" BGCOLOR="#FFFFFF" tooltip="5e0f0719cb00" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">ALLOCA[bit32]</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o6" type="node0" BGCOLOR="#FFFFFF" tooltip="5e0f071a10d0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o7" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a1160" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718f710" ]; node14 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i1" BGCOLOR="#FFFFFF" tooltip="5e0f0719c8e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i2" BGCOLOR="#FFFFFF" tooltip="5e0f0719c520" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">MemoryStateMerge</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o8" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a1550" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718e760" ]; node15 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i3" BGCOLOR="#FFFFFF" tooltip="5e0f071a1710" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i4" BGCOLOR="#FFFFFF" tooltip="5e0f071a17e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i5" BGCOLOR="#FFFFFF" tooltip="5e0f071a18d0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">Store</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o9" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a1980" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f07192640" ]; node16 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i6" BGCOLOR="#FFFFFF" tooltip="5e0f071a1a80" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i7" BGCOLOR="#FFFFFF" tooltip="5e0f071a1ae0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">Load</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o10" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a1bd0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o11" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a1c40" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071926d0" ]; node17 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i8" BGCOLOR="#FFFFFF" tooltip="5e0f071a1f20" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">MATCH[1 -> 1, 0 -> 0, 2]</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o12" type="node5" BGCOLOR="#FFFFFF" tooltip="5e0f071a2010" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a1da0" ]; node18 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i9" BGCOLOR="#FFFFFF" tooltip="5e0f071a03e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">GAMMA</TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="4" CELLPADDING="2"><TR> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph3">graph3</TD> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph4">graph4</TD> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph5">graph5</TD> </TR></TABLE> </TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o13" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a2bf0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f0718e590" ]; node22 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i10" BGCOLOR="#FFFFFF" tooltip="5e0f0719a8e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i11" BGCOLOR="#FFFFFF" tooltip="5e0f0718b2d0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i12" BGCOLOR="#FFFFFF" tooltip="5e0f071a3180" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">GAMMA</TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="4" CELLPADDING="2"><TR> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph6">graph6</TD> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph7">graph7</TD> </TR></TABLE> </TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o17" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a3560" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071924c0" ]; { rank=sink; r10 [label=r10 tooltip="5e0f071a72d0" ]; r11 [label=r11 tooltip="5e0f071a7320" ]; r10 -> r11[style=invis]; r12 [label=r12 tooltip="5e0f071a7370" ]; r11 -> r12[style=invis]; } node11:o4:s -> node13:i0:n[id=edge32 ]; node13:o7:s -> node14:i1:n[id=edge33 color="#FF0000" ]; a1 -> node14:i2:n[id=edge34 color="#FF0000" ]; node13:o6:s -> node15:i3:n[id=edge35 ]; node10:o3:s -> node15:i4:n[id=edge36 ]; node14:o8:s -> node15:i5:n[id=edge37 color="#FF0000" ]; node13:o6:s -> node16:i6:n[id=edge38 ]; node15:o9:s -> node16:i7:n[id=edge39 color="#FF0000" ]; node16:o10:s -> node17:i8:n[id=edge40 ]; node17:o12:s -> node18:i9:n[id=edge41 ]; node18:o13:s -> node22:i10:n[id=edge42 ]; node13:o6:s -> node22:i11:n[id=edge43 ]; node16:o11:s -> node22:i12:n[id=edge44 color="#FF0000" ]; node8:o1:s -> r10[id=edge45 ]; a0 -> r11[id=edge46 color="#00FF00" ]; node22:o17:s -> r12[id=edge47 color="#FF0000" ]; } digraph graph3 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a2260" node19 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">CTL(1)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o14" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a26a0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a25c0" ]; { rank=sink; r0 [label=r0 tooltip="5e0f071a2c80" ]; } node19:o14:s -> r0[id=edge0 ]; } digraph graph4 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a2320" node20 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">CTL(1)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o15" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a2770" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a28a0" ]; { rank=sink; r1 [label=r1 tooltip="5e0f071a2cd0" ]; } node20:o15:s -> r1[id=edge1 ]; } digraph graph5 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a23e0" node21 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">CTL(0)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o16" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a29c0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a2a50" ]; { rank=sink; r2 [label=r2 tooltip="5e0f071a2dd0" ]; } node21:o16:s -> r2[id=edge2 ]; } digraph graph6 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a2ef0" { rank=source; a2 [label=a2 type=node0 tooltip="5e0f0719c1c0" ]; a3 [label=a3 type=node2 tooltip="5e0f0719aac0" ]; a2 -> a3[style=invis]; } { rank=sink; r3 [label=r3 tooltip="5e0f071a35f0" ]; } a3 -> r3[id=edge3 color="#FF0000" ]; } digraph graph7 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a2fb0" { rank=source; a4 [label=a4 type=node0 tooltip="5e0f0719c2b0" ]; a5 [label=a5 type=node2 tooltip="5e0f0719ae60" ]; a4 -> a5[style=invis]; } node23 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i13" BGCOLOR="#FFFFFF" tooltip="5e0f071a3810" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i14" BGCOLOR="#FFFFFF" tooltip="5e0f071a3bf0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">THETA</TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="4" CELLPADDING="2"><TR> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph8">graph8</TD> </TR></TABLE> </TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o18" type="node0" BGCOLOR="#FFFFFF" tooltip="5e0f071a3920" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o19" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a3d00" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a33b0" ]; { rank=sink; r9 [label=r9 tooltip="5e0f071a7070" ]; } a4 -> node23:i13:n[id=edge29 ]; a5 -> node23:i14:n[id=edge30 color="#FF0000" ]; node23:o19:s -> r9[id=edge31 color="#FF0000" ]; } digraph graph8 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a3480" { rank=source; a6 [label=a6 type=node0 tooltip="5e0f07195020" ]; a7 [label=a7 type=node2 tooltip="5e0f0719ab40" ]; a6 -> a7[style=invis]; } node24 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i15" BGCOLOR="#FFFFFF" tooltip="5e0f071a4020" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i16" BGCOLOR="#FFFFFF" tooltip="5e0f071a4080" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">Load</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o20" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a4100" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o21" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a4170" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a3ee0" ]; node25 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BITS32(5)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o22" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a67b0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a6690" ]; node26 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BITS32(10)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o23" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a4360" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a4240" ]; node27 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i17" BGCOLOR="#FFFFFF" tooltip="5e0f071a4670" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i18" BGCOLOR="#FFFFFF" tooltip="5e0f071a4760" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BitSlt32</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o24" type="node6" BGCOLOR="#FFFFFF" tooltip="5e0f071a4850" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a4550" ]; node28 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i19" BGCOLOR="#FFFFFF" tooltip="5e0f071a4a20" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">MATCH[1 -> 1, 0]</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o25" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a4b10" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a48e0" ]; node29 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i20" BGCOLOR="#FFFFFF" tooltip="5e0f071a4df0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i21" BGCOLOR="#FFFFFF" tooltip="5e0f071a4ee0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i22" BGCOLOR="#FFFFFF" tooltip="5e0f071a5030" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">GAMMA</TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="4" CELLPADDING="2"><TR> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph9">graph9</TD> <TD BORDER="1" STYLE="ROUNDED" WIDTH="40" BGCOLOR="white" SUBGRAPH="graph10">graph10</TD> </TR></TABLE> </TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o26" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a6320" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a4be0" ]; node34 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i30" BGCOLOR="#FFFFFF" tooltip="5e0f071a5150" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i31" BGCOLOR="#FFFFFF" tooltip="5e0f071a65a0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">Load</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o32" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a52e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o33" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a65e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a64c0" ]; node35 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i32" BGCOLOR="#FFFFFF" tooltip="5e0f071a69a0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i33" BGCOLOR="#FFFFFF" tooltip="5e0f071a6a90" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BitSlt32</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o34" type="node6" BGCOLOR="#FFFFFF" tooltip="5e0f071a6b80" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a6880" ]; node36 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i34" BGCOLOR="#FFFFFF" tooltip="5e0f071a6dd0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">MATCH[1 -> 1, 0]</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o35" type="node4" BGCOLOR="#FFFFFF" tooltip="5e0f071a6ec0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a6c10" ]; { rank=sink; r6 [label=r6 tooltip="5e0f071a3710" ]; r7 [label=r7 tooltip="5e0f071a39f0" ]; r6 -> r7[style=invis]; r8 [label=r8 tooltip="5e0f071a3d90" ]; r7 -> r8[style=invis]; } a6 -> node24:i15:n[id=edge13 ]; a7 -> node24:i16:n[id=edge14 color="#FF0000" ]; node24:o20:s -> node27:i17:n[id=edge15 ]; node26:o23:s -> node27:i18:n[id=edge16 ]; node27:o24:s -> node28:i19:n[id=edge17 ]; node28:o25:s -> node29:i20:n[id=edge18 ]; a6 -> node29:i21:n[id=edge19 ]; node24:o21:s -> node29:i22:n[id=edge20 color="#FF0000" ]; a6 -> node34:i30:n[id=edge21 ]; node29:o26:s -> node34:i31:n[id=edge22 color="#FF0000" ]; node34:o32:s -> node35:i32:n[id=edge23 ]; node25:o22:s -> node35:i33:n[id=edge24 ]; node35:o34:s -> node36:i34:n[id=edge25 ]; node36:o35:s -> r6[id=edge26 ]; a6 -> r7[id=edge27 ]; node34:o33:s -> r8[id=edge28 color="#FF0000" ]; } digraph graph9 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a4c90" { rank=source; a8 [label=a8 type=node0 tooltip="5e0f0719c140" ]; a9 [label=a9 type=node2 tooltip="5e0f0719b190" ]; a8 -> a9[style=invis]; } { rank=sink; r4 [label=r4 tooltip="5e0f071a63b0" ]; } a9 -> r4[id=edge4 color="#FF0000" ]; } digraph graph10 { node[shape=box style=filled fillcolor=white]; penwidth=6; tooltip="5e0f071a4d30" { rank=source; a10 [label=a10 type=node0 tooltip="5e0f0719af20" ]; a11 [label=a11 type=node2 tooltip="5e0f0719c4a0" ]; a10 -> a11[style=invis]; } node30 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i23" BGCOLOR="#FFFFFF" tooltip="5e0f071a54c0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i24" BGCOLOR="#FFFFFF" tooltip="5e0f071a5590" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">Load</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o27" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a5680" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o28" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a56f0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a53b0" ]; node31 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BITS32(1)</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o29" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a58e0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a57c0" ]; node32 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i25" BGCOLOR="#FFFFFF" tooltip="5e0f071a5c80" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i26" BGCOLOR="#FFFFFF" tooltip="5e0f071a5d70" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">BitAdd32</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o30" type="node3" BGCOLOR="#FFFFFF" tooltip="5e0f071a5e60" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a5b60" ]; node33 [shape=plain style=solid label=< <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i27" BGCOLOR="#FFFFFF" tooltip="5e0f071a6040" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i28" BGCOLOR="#FFFFFF" tooltip="5e0f071a60a0" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="10"></TD> <TD BORDER="1" CELLPADDING="1" PORT="i29" BGCOLOR="#FFFFFF" tooltip="5e0f071a6190" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> <TR><TD> <TABLE BORDER="1" STYLE="ROUNDED" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#FFFFFF" > <TR><TD CELLPADDING="1">Store</TD></TR> </TABLE> </TD></TR> <TR><TD> <TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"><TR> <TD WIDTH="20"></TD> <TD BORDER="1" CELLPADDING="1" PORT="o31" type="node2" BGCOLOR="#FFFFFF" tooltip="5e0f071a6270" WIDTH="8" HEIGHT="5" FIXEDSIZE="true"></TD> <TD WIDTH="20"></TD> </TR></TABLE> </TD></TR> </TABLE> > tooltip="5e0f071a5f20" ]; { rank=sink; r5 [label=r5 tooltip="5e0f071a6400" ]; } a10 -> node30:i23:n[id=edge5 ]; a11 -> node30:i24:n[id=edge6 color="#FF0000" ]; node30:o27:s -> node32:i25:n[id=edge7 ]; node31:o29:s -> node32:i26:n[id=edge8 ]; a10 -> node33:i27:n[id=edge9 ]; node32:o30:s -> node33:i28:n[id=edge10 ]; node30:o28:s -> node33:i29:n[id=edge11 color="#FF0000" ]; node33:o31:s -> r5[id=edge12 color="#FF0000" ]; } ``` </details> --------- Co-authored-by: Håvard Krogstie <[email protected]>
make target for header consistency checking Provide a "check-headers" target that verifies whether all header files are correctly correctly declared for the build system. This avoids cases when a header is used, but not declared in any library build rule. In principle, the build system should always be aware of every single file used during build. Otherwise, this can cause problems, e.g. when a library is built but the "install" rule misses headers that should go without, hence publishing a broken package. The present checking does not verify if the header is "assigned" to the library that "uses" it (or some dependent library) -- that is difficult to express in "make", but this check should be sufficient for the purposes of manually rectifying any oversight. Fix missing headers detected by check-headers target Add all headers detected missing by the build target to declarations in the makefiles.
1. Extends the structural test node with an interface for adding inputs/outputs/arguments/results 2. Add support for printing of memory state typed inputs/outputs to RvsdgTreePrinter class 3. Adds support for this annotation to jlm-opt
1. Moves all the gamma tests of the RVSDG to CFG pass into a single file 2. Cleans them up a bit 3. Fix indentation of test files in Makefile This is part of the fix for #586.
The ascii output for the control flow graph is not easily readable. This is the first PR on improving it. It does the following: 1. Moves the functions for converting a CFG to ascii to the cfg class 2. Adds a unit test for the conversion of three address codes In order to add a unit test for the CFG conversion, I first need to make the output more deterministic. This will happen in a follow up PR. This PR is part of issue #586
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )