From: Chris Lattner Date: Thu, 23 Aug 2007 23:46:33 +0000 (+0000) Subject: implement complex subtraction X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6bc1adec849c8ab1934464c2595baa896e43060f;p=clang implement complex subtraction git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41345 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/CodeGen/CGComplexExpr.cpp b/CodeGen/CGComplexExpr.cpp index 1597f8e2c7..38cdd05ec9 100644 --- a/CodeGen/CGComplexExpr.cpp +++ b/CodeGen/CGComplexExpr.cpp @@ -106,7 +106,8 @@ public: ComplexPairTy VisitBinMul (const BinaryOperator *E); ComplexPairTy VisitBinAdd (const BinaryOperator *E); - // FIXME: sub/div/rem + ComplexPairTy VisitBinSub (const BinaryOperator *E); + // FIXME: div/rem // GCC rejects and/or/xor for integer complex. // Logical and/or always return int, never complex. @@ -225,6 +226,17 @@ ComplexPairTy ComplexExprEmitter::VisitBinAdd(const BinaryOperator *E) { return ComplexPairTy(ResR, ResI); } +ComplexPairTy ComplexExprEmitter::VisitBinSub(const BinaryOperator *E) { + ComplexPairTy LHS = Visit(E->getLHS()); + ComplexPairTy RHS = Visit(E->getRHS()); + + llvm::Value *ResR = Builder.CreateSub(LHS.first, RHS.first, "sub.r"); + llvm::Value *ResI = Builder.CreateSub(LHS.second, RHS.second, "sub.i"); + + return ComplexPairTy(ResR, ResI); +} + + ComplexPairTy ComplexExprEmitter::VisitBinMul(const BinaryOperator *E) { ComplexPairTy LHS = Visit(E->getLHS()); ComplexPairTy RHS = Visit(E->getRHS());