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.