<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in loop_analysis.rs</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>0889323a - cranelift-codegen: rename most uses of std to core and alloc (#12237)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#0889323a</link>
        <description>cranelift-codegen: rename most uses of std to core and alloc (#12237)* rename most std uses to core and alloc* cargo fmt

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Sat, 03 Jan 2026 00:54:48 +0000</pubDate>
        <dc:creator>SSD &lt;96286755+the-ssd@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>3a14fa39 - refactor(cranelift): merge DominatorTreePreorder into DominatorTree (#11596)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#3a14fa39</link>
        <description>refactor(cranelift): merge DominatorTreePreorder into DominatorTree (#11596)* refactor(cranelift): merge DominatorTreePreorder into DominatorTreeIntegrate preorder functionality directly into DominatorTree toeliminate duplicate computation and improve performance.This eliminates the need for a separate DominatorTreePreorder datastructure, reducing memory usage and providing O(1) block dominancechecks by default. Block dominance checks throughout the compiler nowbenefit from constant-time performance instead of O(depth) treetraversal.* refactor(cranelift): implement the new unified DominatorTreeRemove separate DominatorTreePreorder computation and use unified API:- Context: Remove domtree_preorder field, simplify compute_domtree()- AliasAnalysis: Switch from DominatorTreePreorder to DominatorTree- Update dominance checks to use general dominates() methodAll dominance checks in alias analysis now automatically benefit fromO(1) block dominance performance when instructions are in differentblocks.* refactor(cranelift): update optimization passes for DominatorTree* refactor(cranelift): update verifier and tests for new DominatorTreeSSA dominance validation in the verifier now benefits from O(1)block-to-block dominance checks, improving compilation performanceduring debug builds with verification enabled.

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Wed, 03 Sep 2025 18:56:07 +0000</pubDate>
        <dc:creator>Paul Nodet &lt;5941125+pnodet@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>90ac295e - Update Wasmtime to the 2024 Rust Edition (#10806)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#90ac295e</link>
        <description>Update Wasmtime to the 2024 Rust Edition (#10806)* Update Wasmtime to the 2024 Rust EditionNow that our MSRV supports the 2024 edition it&apos;s possible to make thisswitch. This commit moves Wasmtime to the 2024 Edition to keepup-to-date with Rust idioms and access many of the edition featuresexclusive to the 2024 edition.prtest:full* Reformat with the 2024 edition

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Mon, 19 May 2025 16:40:55 +0000</pubDate>
        <dc:creator>Alex Crichton &lt;alex@alexcrichton.com&gt;</dc:creator>
    </item>
<item>
        <title>3e0b7e50 - loop analysis simplification (#9613)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#3e0b7e50</link>
        <description>loop analysis simplification (#9613)* loop analysis simplification* add iterator over reverse post order* review comments* review comments* use rpo iterator where possible* make use of same struct access pattern throughout* use new directly instead of calling macro

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Tue, 19 Nov 2024 20:00:16 +0000</pubDate>
        <dc:creator>Kirpal Grewal &lt;45569241+KGrewal1@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>8abfe928 - Reuse the DominatorTree postorder travesal in BlockLoweringOrder (#5843)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#8abfe928</link>
        <description>Reuse the DominatorTree postorder travesal in BlockLoweringOrder (#5843)* Rework the blockorder module to reuse the dom tree&apos;s cfg postorder* Update domtree tests* Treat br_table with an empty jump table as multiple block exits* Bless tests* Change branch_idx to succ_idx and fix the comment

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Thu, 23 Feb 2023 22:05:20 +0000</pubDate>
        <dc:creator>Trevor Elliott &lt;telliott@fastly.com&gt;</dc:creator>
    </item>
<item>
        <title>a5698ced - cranelift: Remove brz and brnz (#5630)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#a5698ced</link>
        <description>cranelift: Remove brz and brnz (#5630)Remove the brz and brnz instructions, as their behavior is now redundant with brif.

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Mon, 30 Jan 2023 20:34:56 +0000</pubDate>
        <dc:creator>Trevor Elliott &lt;telliott@fastly.com&gt;</dc:creator>
    </item>
<item>
        <title>f980defe - egraph support: rewrite to work in terms of CLIF data structures.  (#5382)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#f980defe</link>
        <description>egraph support: rewrite to work in terms of CLIF data structures.  (#5382)* egraph support: rewrite to work in terms of CLIF data structures.This work rewrites the &quot;egraph&quot;-based optimization framework inCranelift to operate on aegraphs (acyclic egraphs) represented in theCLIF itself rather than as a separate data structure to which and fromwhich we translate the CLIF.The basic idea is to add a new kind of value, a &quot;union&quot;, that is like analias but refers to two other values rather than one.  This allows us torepresent an eclass of enodes (values) as a tree. The union node allowsfor a value to have *multiple representations*: either constituent valuecould be used, and (in well-formed CLIF produced by correctoptimization rules) they must be equivalent.Like the old egraph infrastructure, we take advantage of acyclicity andeager rule application to do optimization in a single pass. Like before,we integrate GVN (during the optimization pass) and LICM (duringelaboration).Unlike the old egraph infrastructure, everything stays in theDataFlowGraph. &quot;Pure&quot; enodes are represented as instructions that havevalues attached, but that are not placed into the function layout. Whenentering &quot;egraph&quot; form, we remove them from the layout while optimizing.When leaving &quot;egraph&quot; form, during elaboration, we can place aninstruction back into the layout the first time we elaborate the enode;if we elaborate it more than once, we clone the instruction.The implementation performs two passes overall:- One, a forward pass in RPO (to see defs before uses), that (i) removes  &quot;pure&quot; instructions from the layout and (ii) optimizes as it goes. As  before, we eagerly optimize, so we form the entire union of optimized  forms of a value before we see any uses of that value. This lets us  rewrite uses to use the most &quot;up-to-date&quot; form of the value and  canonicalize and optimize that form.  The eager rewriting and acyclic representation make each other work  (we could not eagerly rewrite if there were cycles; and acyclicity  does not miss optimization opportunities only because the first time  we introduce a value, we immediately produce its &quot;best&quot; form). This  design choice is also what allows us to avoid the &quot;parent pointers&quot;  and fixpoint loop of traditional egraphs.  This forward optimization pass keeps a scoped hashmap to &quot;intern&quot;  nodes (thus performing GVN), and also interleaves on a per-instruction  level with alias analysis. The interleaving with alias analysis allows  alias analysis to see the most optimized form of each address (so it  can see equivalences), and allows the next value to see any  equivalences (reuses of loads or stored values) that alias analysis  uncovers.- Two, a forward pass in domtree preorder, that &quot;elaborates&quot; pure enodes  back into the layout, possibly in multiple places if needed. This  tracks the loop nest and hoists nodes as needed, performing LICM as it  goes. Note that by doing this in forward order, we avoid the  &quot;fixpoint&quot; that traditional LICM needs: we hoist a def before its  uses, so when we place a node, we place it in the right place the  first time rather than moving later.This PR replaces the old (a)egraph implementation. It removes both thecranelift-egraph crate and the logic in cranelift-codegen that uses it.On `spidermonkey.wasm` running a simple recursive Fibonaccimicrobenchmark, this work shows 5.5% compile-time reduction and 7.7%runtime improvement (speedup).Most of this implementation was done in (very productive) pairprogramming sessions with Jamey Sharp, thus:Co-authored-by: Jamey Sharp &lt;jsharp@fastly.com&gt;* Review feedback.* Review feedback.* Review feedback.* Bugfix: cprop rule: `(x + k1) - k2` becomes `x - (k2 - k1)`, not `x - (k1 - k2)`.Co-authored-by: Jamey Sharp &lt;jsharp@fastly.com&gt;

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Tue, 06 Dec 2022 22:58:57 +0000</pubDate>
        <dc:creator>Chris Fallin &lt;chris@cfallin.org&gt;</dc:creator>
    </item>
<item>
        <title>2be12a51 - egraph-based midend: draw the rest of the owl (productionized). (#4953)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#2be12a51</link>
        <description>egraph-based midend: draw the rest of the owl (productionized). (#4953)* egraph-based midend: draw the rest of the owl.* Rename `egg` submodule of cranelift-codegen to `egraph`.* Apply some feedback from @jsharp during code walkthrough.* Remove recursion from find_best_node by doing a single pass.Rather than recursively computing the lowest-cost node for a giveneclass and memoizing the answer at each eclass node, we can do a singleforward pass; because every eclass node refers only to earlier nodes,this is sufficient. The behavior may slightly differ from the earlierbehavior because we cannot short-circuit costs to zero once a node iselaborated; but in practice this should not matter.* Make elaboration non-recursive.Use an explicit stack instead (with `ElabStackEntry` entries,alongside a result stack).* Make elaboration traversal of the domtree non-recursive/stack-safe.* Work analysis logic in Cranelift-side egraph glue into a general analysis framework in cranelift-egraph.* Apply static recursion limit to rule application.* Fix aarch64 wrt dynamic-vector support -- broken rebase.* Topo-sort cranelift-egraph before cranelift-codegen in publish script, like the comment instructs me to!* Fix multi-result call testcase.* Include `cranelift-egraph` in `PUBLISHED_CRATES`.* Fix atomic_rmw: not really a load.* Remove now-unnecessary PartialOrd/Ord derivations.* Address some code-review comments.* Review feedback.* Review feedback.* No overlap in mid-end rules, because we are defining a multi-constructor.* rustfmt* Review feedback.* Review feedback.* Review feedback.* Review feedback.* Remove redundant `mut`.* Add comment noting what rules can do.* Review feedback.* Clarify comment wording.* Update `has_memory_fence_semantics`.* Apply @jameysharp&apos;s improved loop-level computation.Co-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Fix suggestion commit.* Fix off-by-one in new loop-nest analysis.* Review feedback.* Review feedback.* Review feedback.* Use `Default`, not `std::default::Default`, as per @fitzgenCo-authored-by: Nick Fitzgerald &lt;fitzgen@gmail.com&gt;* Apply @fitzgen&apos;s comment elaboration to a doc-comment.Co-authored-by: Nick Fitzgerald &lt;fitzgen@gmail.com&gt;* Add stat for hitting the rewrite-depth limit.* Some code motion in split prelude to make the diff a little clearer wrt `main`.* Take @jameysharp&apos;s suggested `try_into()` usage for blockparam indices.Co-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Take @jameysharp&apos;s suggestion to avoid double-match on load op.Co-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Fix suggestion (add import).* Review feedback.* Fix stack_load handling.* Remove redundant can_store case.* Take @jameysharp&apos;s suggested improvement to FuncEGraph::build() logicCo-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Tweaks to FuncEGraph::build() on top of suggestion.* Take @jameysharp&apos;s suggested clarified conditionCo-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Clean up after suggestion (unused variable).* Fix loop analysis.* loop level asserts* Revert constant-space loop analysis -- edge cases were incorrect, so let&apos;s go with the simple thing for now.* Take @jameysharp&apos;s suggestion re: result_tysCo-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Fix up after suggestion* Take @jameysharp&apos;s suggestion to use fold rather than reduceCo-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;* Fixup after suggestion* Take @jameysharp&apos;s suggestion to remove elaborate_eclass_use&apos;s return value.* Clarifying comment in terminator insts.Co-authored-by: Jamey Sharp &lt;jamey@minilop.net&gt;Co-authored-by: Nick Fitzgerald &lt;fitzgen@gmail.com&gt;

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Wed, 12 Oct 2022 01:15:53 +0000</pubDate>
        <dc:creator>Chris Fallin &lt;chris@cfallin.org&gt;</dc:creator>
    </item>
<item>
        <title>07f335dc - Rename &apos;an block&apos; to &apos;a block&apos;</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#07f335dc</link>
        <description>Rename &apos;an block&apos; to &apos;a block&apos;Missed this in the automatic rename of &apos;Ebb&apos; to &apos;Block&apos;.

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Tue, 03 Mar 2020 19:17:30 +0000</pubDate>
        <dc:creator>Ryan Hunt &lt;rhunt@eqrion.net&gt;</dc:creator>
    </item>
<item>
        <title>832666c4 - Mass rename Ebb and relatives to Block (#1365)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#832666c4</link>
        <description>Mass rename Ebb and relatives to Block (#1365)* Manually rename BasicBlock to BlockPredecessorBasicBlock is a pair of (Ebb, Inst) that is used to represent thebasic block subcomponent of an Ebb that is a predecessor to an Ebb.Eventually we will be able to remove this struct, but for now itmakes sense to give it a non-conflicting name so that we can startto transition Ebb to represent a basic block.I have not updated any comments that refer to BasicBlock, aseventually we will remove BlockPredecessor and replace with Block,which is a basic block, so the comments will become correct.* Manually rename SSABuilder block types to avoid conflictSSABuilder has its own Block and BlockData types. These along withassociated identifier will cause conflicts in a later commit, sothey are renamed to be more verbose here.* Automatically rename &apos;Ebb&apos; to &apos;Block&apos; in *.rs* Automatically rename &apos;EBB&apos; to &apos;block&apos; in *.rs* Automatically rename &apos;ebb&apos; to &apos;block&apos; in *.rs* Automatically rename &apos;extended basic block&apos; to &apos;basic block&apos; in *.rs* Automatically rename &apos;an basic block&apos; to &apos;a basic block&apos; in *.rs* Manually update comment for `Block``Block`&apos;s wikipedia article required an update.* Automatically rename &apos;an `Block`&apos; to &apos;a `Block`&apos; in *.rs* Automatically rename &apos;extended_basic_block&apos; to &apos;basic_block&apos; in *.rs* Automatically rename &apos;ebb&apos; to &apos;block&apos; in *.clif* Manually rename clif constant that contains &apos;ebb&apos; as substring to avoid conflict* Automatically rename filecheck uses of &apos;EBB&apos; to &apos;BB&apos;&apos;regex: EBB&apos; -&gt; &apos;regex: BB&apos;&apos;$EBB&apos; -&gt; &apos;$BB&apos;* Automatically rename &apos;EBB&apos; &apos;Ebb&apos; to &apos;block&apos; in *.clif* Automatically rename &apos;an block&apos; to &apos;a block&apos; in *.clif* Fix broken testcase when function name length increasesTest function names are limited to 16 characters. This causesthe new longer name to be truncated and fail a filecheck test. Anoutdated comment was also fixed.

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Fri, 07 Feb 2020 16:46:47 +0000</pubDate>
        <dc:creator>Ryan Hunt &lt;rhunt@eqrion.net&gt;</dc:creator>
    </item>
<item>
        <title>10e226f9 - Always use extern crate std in cranelift-codegen</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#10e226f9</link>
        <description>Always use extern crate std in cranelift-codegen

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Sat, 28 Sep 2019 13:52:23 +0000</pubDate>
        <dc:creator>bjorn3 &lt;bjorn3@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>747ad3c4 - moved crates in lib/ to src/, renamed crates, modified some files&apos; text (#660)</title>
        <link>http://172.16.0.5:8080/history/wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs#747ad3c4</link>
        <description>moved crates in lib/ to src/, renamed crates, modified some files&apos; text (#660)moved crates in lib/ to src/, renamed crates, modified some files&apos; text (#660)

            List of files:
            /wasmtime-44.0.1/cranelift/codegen/src/loop_analysis.rs</description>
        <pubDate>Mon, 28 Jan 2019 23:56:54 +0000</pubDate>
        <dc:creator>lazypassion &lt;25536767+lazypassion@users.noreply.github.com&gt;</dc:creator>
    </item>
</channel>
</rss>
