where t11 is a 64-bit quantity for later use. Unfortunately, t11 is not rematerializable. We should have a rematerializable pseudo that captures {o3,o4,o5}.
A function that suffers from this is atom_buffer_init. Due to this phenomenon, 512 is made and spilled in one block, and unspilled in another block.
uni import -f atom_buffer_init atom_buffer_init.mir -o atom_buffer_init.uni --target=X86 --explicitcallreg --maxblocksize=25 --goal=speed --copyremat --lint
uni linearize atom_buffer_init.uni -o atom_buffer_init.lssa.uni --target=X86 --lint
uni extend atom_buffer_init.lssa.uni -o atom_buffer_init.ext.uni --target=X86 --lint
uni augment atom_buffer_init.ext.uni -o atom_buffer_init.alt.uni --target=X86 --copyremat --lint
A common idiom is code like
where
t11
is a 64-bit quantity for later use. Unfortunately,t11
is not rematerializable. We should have a rematerializable pseudo that captures {o3,o4,o5}.A function that suffers from this is
atom_buffer_init
. Due to this phenomenon, 512 is made and spilled in one block, and unspilled in another block.etc. atom_buffer_init.mir.zip