When a byref function argument is passed through like this:
void leaf(struct X); void middle(struct X a) { leaf(a); }
... an unnecessary temporary copy may be introduced inside middle().
This patch makes that copy being eliminated by MemCpyOptimizer unless size of
the byref argument is 8 bytes or less (in that case memcpy() is eliminated by
InstCombine first preventing later optimization).
I thought we have a shortcut to check for both attributes. If not, we might want one.