sway
sway copied to clipboard
Write a `mem2reg` optimisation pass
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.
Blocked by #2775