sway icon indicating copy to clipboard operation
sway copied to clipboard

Write a `mem2reg` optimisation pass

Open vaivaswatha opened this issue 2 years ago • 1 comments

For code such as

let a: u8 = 2;                                                                                                                                                                                      
let b: u8 = 22;                                                                                                                                                                                     
assert(__add(a, b) == 24);

we generate the IR

        local ptr u64 a
        local ptr u64 a_
        local ptr u64 a__
        local ptr u64 a___
        local ptr u64 b
        local ptr u64 b_
        local ptr u64 b__
        local ptr u64 b___

        entry:
        v0 = get_ptr ptr u64 a, ptr u64, 0, !2
        v1 = const u64 2, !3
        store v1, ptr v0, !2
        v2 = get_ptr ptr u64 b, ptr u64, 0, !4
        v3 = const u64 22, !5
        store v3, ptr v2, !4
        v4 = get_ptr ptr u64 a, ptr u64, 0, !6
        v5 = load ptr v4, !6
        v6 = get_ptr ptr u64 b, ptr u64, 0, !7
        v7 = load ptr v6, !7
        v8 = add v5 v7
        v9 = const u64 24, !8
        v10 = cmp eq v8 v9, !9
        v11 = const bool false, !11
        v12 = cmp eq v10 v11, !15
        cbr v12, assert_0_block0, assert_0_block1, !16

A mem2reg pass will promote these memory variables to live in SSA registers, thus saving on a bunch of loads and stores.

vaivaswatha avatar Sep 12 '22 15:09 vaivaswatha

Blocked by #2775

vaivaswatha avatar Sep 13 '22 04:09 vaivaswatha