aboutsummaryrefslogtreecommitdiff
path: root/CodeGen/CGComplexExpr.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-08-21 20:41:44 +0000
committerChris Lattner <sabre@nondot.org>2007-08-21 20:41:44 +0000
commite98a11c70483b924f558ead1ae24fd6fd70c7df3 (patch)
tree8d44fcd52e9b7dd0278be89fa9855085bdbdee0d /CodeGen/CGComplexExpr.cpp
parent4ce854736dd196e2304f554ebeac8b43c89cf9e2 (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.cpp12
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());