]> granicus.if.org Git - clang/commitdiff
implement complex subtraction
authorChris Lattner <sabre@nondot.org>
Thu, 23 Aug 2007 23:46:33 +0000 (23:46 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 23 Aug 2007 23:46:33 +0000 (23:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41345 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGComplexExpr.cpp

index 1597f8e2c78bee569c822e3b5040845f298bed65..38cdd05ec9cd25fcfcd0c3220eba8d2426e67028 100644 (file)
@@ -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());