aboutsummaryrefslogtreecommitdiff
path: root/CodeGen/CodeGenFunction.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-08-11 00:04:45 +0000
committerChris Lattner <sabre@nondot.org>2007-08-11 00:04:45 +0000
commit883f6a7cc7dccb1d675e27121a82614d63492a8d (patch)
treedd376960a5940da9ffa03630df17e40776d52a9d /CodeGen/CodeGenFunction.h
parentee41ce53f7017591a9d62d5986cf3fd6fc98a120 (diff)
start splitting out aggregate value computation from EmitExpr into EmitAggExpr.
aggregate value and scalar expression computation are very different, this gets them away from each other. This causes a temporary regression on some complex number examples. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41014 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CodeGenFunction.h')
-rw-r--r--CodeGen/CodeGenFunction.h33
1 files changed, 31 insertions, 2 deletions
diff --git a/CodeGen/CodeGenFunction.h b/CodeGen/CodeGenFunction.h
index 5cebb53074..314896a874 100644
--- a/CodeGen/CodeGenFunction.h
+++ b/CodeGen/CodeGenFunction.h
@@ -336,7 +336,7 @@ public:
LValue EmitOCUVectorElementExpr(const OCUVectorElementExpr *E);
//===--------------------------------------------------------------------===//
- // Expression Emission
+ // Scalar Expression Emission
//===--------------------------------------------------------------------===//
void EmitCompoundAssignmentOperands(const CompoundAssignOperator *CAO,
@@ -344,7 +344,6 @@ public:
RValue EmitCompoundAssignmentResult(const CompoundAssignOperator *E,
LValue LHSLV, RValue ResV);
-
RValue EmitExpr(const Expr *E);
RValue EmitIntegerLiteral(const IntegerLiteral *E);
RValue EmitFloatingLiteral(const FloatingLiteral *E);
@@ -396,6 +395,36 @@ public:
// Conditional Operator.
RValue EmitConditionalOperator(const ConditionalOperator *E);
RValue EmitChooseExpr(const ChooseExpr *E);
+
+ //===--------------------------------------------------------------------===//
+ // Aggregate Expression Emission
+ //===--------------------------------------------------------------------===//
+
+ void EmitAggregateCopy(llvm::Value *DestPtr, llvm::Value *SrcPtr,
+ QualType EltTy);
+
+ /// EmitAggExpr - Emit the computation of the specified expression of
+ /// aggregate type. The result is computed into DestPtr. Note that if
+ /// DestPtr is null, the value of the aggregate expression is not needed.
+ void EmitAggExpr(const Expr *E, llvm::Value *DestPtr, bool VolatileDest);
+
+ /// EmitAggLoadOfLValue - Given an expression with aggregate type that
+ /// represents a value lvalue, this method emits the address of the lvalue,
+ /// then loads the result into DestPtr.
+ void EmitAggLoadOfLValue(const Expr *E, llvm::Value *DestPtr, bool VolDest);
+
+
+
+ // Binary Operators.
+ void EmitAggBinaryOperator(const BinaryOperator *E,
+ llvm::Value *DestPtr, bool VolatileDest);
+
+
+ void EmitAggBinaryAssign(const BinaryOperator *E, llvm::Value *DestPtr,
+ bool VolatileDest);
+
+ void EmitAggConditionalOperator(const ConditionalOperator *E,
+ llvm::Value *DestPtr, bool VolatileDest);
};
} // end namespace CodeGen
} // end namespace clang