]> granicus.if.org Git - clang/commitdiff
implement codegen for complex unary +/-
authorChris Lattner <sabre@nondot.org>
Tue, 21 Aug 2007 20:08:23 +0000 (20:08 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 21 Aug 2007 20:08:23 +0000 (20:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41247 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGComplexExpr.cpp

index 7b159a3224abb9a34d3ca14f1efee29624fb98f0..f20157b3b1e870cadc92f370f4c4e9a2bee395cb 100644 (file)
@@ -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());