TwoAddressInstructionPass stops after a successful commuting but 3 Addr conversion might be good for some cases.
Consider:
int foo(int a, int b) { return a + b; }
LLVM emits:
addl %esi, %edi movl %edi, %eax ret
If we try 3 Addr conversion:
leal (%rsi,%rdi), %eax ret
This patch is going to produce one less instruction and save one byte.