completely refactor codegen of scalar expressions out into its own CGExprScalar.cpp file.

This patch temporarily breaks compound assignment operators, but greatly simplifies many
things.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41355 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGStmt.cpp b/CodeGen/CGStmt.cpp
index 7b69e51..9ce2a67 100644
--- a/CodeGen/CGStmt.cpp
+++ b/CodeGen/CGStmt.cpp
@@ -275,8 +275,9 @@
   // Emit the result value, even if unused, to evalute the side effects.
   const Expr *RV = S.getRetValue();
   // FIXME: Handle return of an aggregate!
-  if (RV)
-    RetVal = EmitExpr(RV);
+  if (RV) 
+    // FIXME: This could be much better for return of aggregate: return inplace.
+    RetVal = EmitAnyExpr(RV);
   else  // Silence a bogus GCC warning. 
     RetVal = RValue::get(0);