diff options
author | Chris Lattner <sabre@nondot.org> | 2007-08-21 20:41:44 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-08-21 20:41:44 +0000 |
commit | e98a11c70483b924f558ead1ae24fd6fd70c7df3 (patch) | |
tree | 8d44fcd52e9b7dd0278be89fa9855085bdbdee0d /CodeGen/CGComplexExpr.cpp | |
parent | 4ce854736dd196e2304f554ebeac8b43c89cf9e2 (diff) |
implement __extension__ and unary~ for complex.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41249 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CGComplexExpr.cpp')
-rw-r--r-- | CodeGen/CGComplexExpr.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
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()); |