From: Chris Lattner Date: Tue, 21 Aug 2007 20:08:23 +0000 (+0000) Subject: implement codegen for complex unary +/- X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fa2b9c9103393680889fe09924a3456657b23d46;p=clang implement codegen for complex unary +/- git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41247 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/CodeGen/CGComplexExpr.cpp b/CodeGen/CGComplexExpr.cpp index 7b159a3224..f20157b3b1 100644 --- a/CodeGen/CGComplexExpr.cpp +++ b/CodeGen/CGComplexExpr.cpp @@ -74,7 +74,10 @@ public: ComplexPairTy VisitArraySubscriptExpr(Expr *E) { return EmitLoadOfLValue(E); } // Operators. - // case Expr::UnaryOperatorClass: + ComplexPairTy VisitUnaryPlus (const UnaryOperator *E) { + return Visit(E->getSubExpr()); + } + ComplexPairTy VisitUnaryMinus (const UnaryOperator *E); // case Expr::ImplicitCastExprClass: // case Expr::CastExprClass: // case Expr::CallExprClass: @@ -143,6 +146,14 @@ ComplexPairTy ComplexExprEmitter::VisitExpr(Expr *E) { return ComplexPairTy(U, U); } +ComplexPairTy ComplexExprEmitter::VisitUnaryMinus(const UnaryOperator *E) { + ComplexPairTy Op = Visit(E->getSubExpr()); + llvm::Value *ResR = Builder.CreateNeg(Op.first, "neg.r"); + llvm::Value *ResI = Builder.CreateNeg(Op.second, "neg.i"); + return ComplexPairTy(ResR, ResI); +} + + ComplexPairTy ComplexExprEmitter::VisitBinAdd(const BinaryOperator *E) { ComplexPairTy LHS = Visit(E->getLHS()); ComplexPairTy RHS = Visit(E->getRHS());