summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-08-23 21:38:16 +0000
committerChris Lattner <sabre@nondot.org>2007-08-23 21:38:16 +0000
commit1aaab49a3eb4d4a1b70590f5d5c4220db580d430 (patch)
treeb46787443ca903ca126379d7e2aaafe0ec3b0dab
parent9e1e551c01803ef110edbd2a0509de14224d6403 (diff)
downloadbcm5719-llvm-1aaab49a3eb4d4a1b70590f5d5c4220db580d430.tar.gz
bcm5719-llvm-1aaab49a3eb4d4a1b70590f5d5c4220db580d430.zip
add support for codegen of calls returning complex.
llvm-svn: 41336
-rw-r--r--clang/CodeGen/CGComplexExpr.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/CodeGen/CGComplexExpr.cpp b/clang/CodeGen/CGComplexExpr.cpp
index e5abf686ded..90bb078b77c 100644
--- a/clang/CodeGen/CGComplexExpr.cpp
+++ b/clang/CodeGen/CGComplexExpr.cpp
@@ -74,10 +74,9 @@ public:
ComplexPairTy VisitArraySubscriptExpr(Expr *E) { return EmitLoadOfLValue(E); }
ComplexPairTy VisitMemberExpr(Expr *E) { return EmitLoadOfLValue(E); }
- // FIXME: Call
// FIXME: CompoundLiteralExpr
// FIXME: ImplicitCastExpr
- // FIXME: CastExpr
+ ComplexPairTy VisitCallExpr(const CallExpr *E);
// Operators.
ComplexPairTy VisitPrePostIncDec(const UnaryOperator *E,
@@ -107,7 +106,7 @@ public:
ComplexPairTy VisitBinMul (const BinaryOperator *E);
ComplexPairTy VisitBinAdd (const BinaryOperator *E);
- // FIXME: div/rem
+ // FIXME: sub/div/rem
// GCC rejects and/or/xor for integer complex.
// Logical and/or always return int, never complex.
@@ -170,6 +169,11 @@ ComplexPairTy ComplexExprEmitter::VisitExpr(Expr *E) {
return ComplexPairTy(U, U);
}
+ComplexPairTy ComplexExprEmitter::VisitCallExpr(const CallExpr *E) {
+ llvm::Value *AggPtr = CGF.EmitCallExpr(E).getAggregateAddr();
+ return EmitLoadOfComplex(AggPtr, false);
+}
+
ComplexPairTy ComplexExprEmitter::VisitPrePostIncDec(const UnaryOperator *E,
bool isInc, bool isPre) {
LValue LV = CGF.EmitLValue(E->getSubExpr());
OpenPOWER on IntegriCloud