Skip extra copy from aggregate where it isn't necessary; rdar://problem/8139919 .  This shouldn't make much of a difference at -O3, but should substantially reduce the number of generated memcpy's at -O0.

llvm-svn: 130717
diff --git a/clang/lib/CodeGen/CGCall.h b/clang/lib/CodeGen/CGCall.h
index 3f600c0..160a62e 100644
--- a/clang/lib/CodeGen/CGCall.h
+++ b/clang/lib/CodeGen/CGCall.h
@@ -47,8 +47,9 @@
   struct CallArg {
     RValue RV;
     QualType Ty;
-    CallArg(RValue rv, QualType ty)
-    : RV(rv), Ty(ty)
+    bool NeedsCopy;
+    CallArg(RValue rv, QualType ty, bool needscopy)
+    : RV(rv), Ty(ty), NeedsCopy(needscopy)
     { }
   };
 
@@ -57,8 +58,8 @@
   class CallArgList :
     public llvm::SmallVector<CallArg, 16> {
   public:
-    void add(RValue rvalue, QualType type) {
-      push_back(CallArg(rvalue, type));
+    void add(RValue rvalue, QualType type, bool needscopy = false) {
+      push_back(CallArg(rvalue, type, needscopy));
     }
   };