<!doctype html> <html> <!-- HTMLLogger.cpp ---------------------------------------------------- Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. See https://llvm.org/LICENSE.txt for license information. SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception //===------------------------------------------------------------------------> <head> <?INJECT?> <template id="value-template"> <details class="value" open> <summary> <span>{{v.kind}} <template data-if="v.value_id"><span class="address">#{{v.value_id}}</span></template> </span> <template data-if="v.location"> <span class="location">{{v.type}} <span class="address">@{{v.location}}</span></span> </template> </summary> <template data-for="kv in Object.entries(v)" data-if="['kind', 'value_id', 'type', 'location'].indexOf(kv[0]) < 0"> <div class="property"><span class="key">{{kv[0]}}</span> <template data-if="typeof(kv[1]) != 'object'">{{kv[1]}}</template> <template data-if="typeof(kv[1]) == 'object'" data-let="v = kv[1]"> <template data-use="value-template"></template> </template> </div> </template> </details> </template> </head> <body> <section id="timeline" data-selection=""> <header>Timeline</header> <template data-for="entry in timeline"> <div id="{{entry.block}}:{{entry.iter}}" data-bb="{{entry.block}}" class="entry"> {{entry.block}} <template data-if="entry.post_visit">(post-visit)</template> <template data-if="!entry.post_visit">({{entry.iter}})</template> <template data-if="entry.converged"> →|<!--Rightwards arrow, vertical line--></template> </div> </template> </section> <section id="function" data-selection=""> <header>Function</header> <div id="code"></div> <div id="cfg"></div> </section> <section id="block" data-selection="bb"> <header><template>Block {{selection.bb}}</template></header> <div id="iterations"> <template data-for="iter in cfg[selection.bb].iters"> <a class="chooser {{selection.bb}}:{{iter.iter}}" data-iter="{{selection.bb}}:{{iter.iter}}"> <template data-if="iter.post_visit">Post-visit</template> <template data-if="!iter.post_visit">{{iter.iter}}</template> <template data-if="iter.converged"> →|<!--Rightwards arrow, vertical line--></template> </a> </template> </div> <table id="bb-elements"> <template> <tr id="{{selection.bb}}.0"> <td class="{{selection.bb}}">{{selection.bb}}.0</td> <td>(initial state)</td> </tr> </template> <template data-for="elt in cfg[selection.bb].elements"> <tr id="{{selection.bb}}.{{elt_index+1}}"> <td class="{{selection.bb}}">{{selection.bb}}.{{elt_index+1}}</td> <td>{{elt}}</td> </tr> </template> </table> </section> <section id="element" data-selection="iter,elt"> <template data-let="state = states[selection.iter + '_' + selection.elt]"> <header> <template data-if="state.element == 0">{{state.block}} initial state</template> <template data-if="state.element != 0">Element {{selection.elt}}</template> <template data-if="state.post_visit"> (post-visit)</template> <template data-if="!state.post_visit"> (iteration {{state.iter}})</template> </header> <template data-if="state.value" data-let="v = state.value"> <h2>Value</h2> <template data-use="value-template"></template> </template> <template data-if="state.logs"> <h2>Logs</h2> <pre>{{state.logs}}</pre> </template> <h2>Built-in lattice</h2> <pre>{{state.builtinLattice}}</pre> </template> </section> <script> addBBColors(Object.keys(HTMLLoggerData.cfg).length); watchSelection(HTMLLoggerData); updateSelection({}, HTMLLoggerData); // Copy code and cfg from <template>s into the body. for (tmpl of document.querySelectorAll('template[data-copy]')) document.getElementById(tmpl.dataset.copy).replaceChildren( ...tmpl.content.cloneNode(/*deep=*/true).childNodes); </script> </body> </html>