From e98a11c70483b924f558ead1ae24fd6fd70c7df3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 21 Aug 2007 20:41:44 +0000 Subject: [PATCH] implement __extension__ and unary~ for complex. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41249 91177308-0d34-0410-b5e6-96231b3b80d8 --- CodeGen/CGComplexExpr.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CodeGen/CGComplexExpr.cpp b/CodeGen/CGComplexExpr.cpp index f20157b3b1..f62a315f3a 100644 --- a/CodeGen/CGComplexExpr.cpp +++ b/CodeGen/CGComplexExpr.cpp @@ -78,6 +78,12 @@ public: return Visit(E->getSubExpr()); } ComplexPairTy VisitUnaryMinus (const UnaryOperator *E); + ComplexPairTy VisitUnaryNot (const UnaryOperator *E); + // LNot,SizeOf,AlignOf,Real,Imag never return complex. + ComplexPairTy VisitUnaryExtension(const UnaryOperator *E) { + return Visit(E->getSubExpr()); + } + // case Expr::ImplicitCastExprClass: // case Expr::CastExprClass: // case Expr::CallExprClass: @@ -153,6 +159,12 @@ ComplexPairTy ComplexExprEmitter::VisitUnaryMinus(const UnaryOperator *E) { return ComplexPairTy(ResR, ResI); } +ComplexPairTy ComplexExprEmitter::VisitUnaryNot(const UnaryOperator *E) { + // ~(a+ib) = a + i*-b + ComplexPairTy Op = Visit(E->getSubExpr()); + llvm::Value *ResI = Builder.CreateNeg(Op.second, "conj.i"); + return ComplexPairTy(Op.first, ResI); +} ComplexPairTy ComplexExprEmitter::VisitBinAdd(const BinaryOperator *E) { ComplexPairTy LHS = Visit(E->getLHS()); -- 2.50.1