Create as few pieces of an argument as possible when promoting an argument.
When LLVM finds a by-ref argument is only read by the callee and its the safe to dereference.
It could choose to promote this argument to one or more value arguments. Currently it goes through
all the loads and create them at every callsites.
This patch minimize the # of arguments passed in. i.e. If we have an argument thats completely
part of another argument (due to gep in the callee), we do not need to pass in this argument,
instead we do extractvalue from the other argument.