implement complex subtraction

llvm-svn: 41345
This commit is contained in:
Chris Lattner 2007-08-23 23:46:33 +00:00
parent 08b15df766
commit 0b984995b7
1 changed files with 13 additions and 1 deletions

View 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());