reimplement addition of complex numbers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41215 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGExpr.cpp b/CodeGen/CGExpr.cpp
index 9713cf8..2b6fd72 100644
--- a/CodeGen/CGExpr.cpp
+++ b/CodeGen/CGExpr.cpp
@@ -42,15 +42,13 @@
/// EmitLoadOfComplex - Given an RValue reference for a complex, emit code to
/// load the real and imaginary pieces, returning them as Real/Imag.
-void CodeGenFunction::EmitLoadOfComplex(RValue V,
+void CodeGenFunction::EmitLoadOfComplex(llvm::Value *SrcPtr,
llvm::Value *&Real, llvm::Value *&Imag){
- llvm::Value *Ptr = V.getAggregateAddr();
-
llvm::Constant *Zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
llvm::Constant *One = llvm::ConstantInt::get(llvm::Type::Int32Ty, 1);
// FIXME: It would be nice to make this "Ptr->getName()+realp"
- llvm::Value *RealPtr = Builder.CreateGEP(Ptr, Zero, Zero, "realp");
- llvm::Value *ImagPtr = Builder.CreateGEP(Ptr, Zero, One, "imagp");
+ llvm::Value *RealPtr = Builder.CreateGEP(SrcPtr, Zero, Zero, "realp");
+ llvm::Value *ImagPtr = Builder.CreateGEP(SrcPtr, Zero, One, "imagp");
// FIXME: Handle volatility.
// FIXME: It would be nice to make this "Ptr->getName()+real"
@@ -1106,12 +1104,12 @@
}
RValue CodeGenFunction::EmitMul(RValue LHS, RValue RHS, QualType ResTy) {
- if (LHS.isScalar())
- return RValue::get(Builder.CreateMul(LHS.getVal(), RHS.getVal(), "mul"));
+ return RValue::get(Builder.CreateMul(LHS.getVal(), RHS.getVal(), "mul"));
+#if 0
// Otherwise, this must be a complex number.
llvm::Value *LHSR, *LHSI, *RHSR, *RHSI;
-
+
EmitLoadOfComplex(LHS, LHSR, LHSI);
EmitLoadOfComplex(RHS, RHSR, RHSI);
@@ -1126,6 +1124,7 @@
llvm::Value *Res = CreateTempAlloca(ConvertType(ResTy));
EmitStoreOfComplex(ResR, ResI, Res);
return RValue::getAggregate(Res);
+#endif
}
RValue CodeGenFunction::EmitDiv(RValue LHS, RValue RHS, QualType ResTy) {
@@ -1157,21 +1156,7 @@
}
RValue CodeGenFunction::EmitAdd(RValue LHS, RValue RHS, QualType ResTy) {
- if (LHS.isScalar())
- return RValue::get(Builder.CreateAdd(LHS.getVal(), RHS.getVal(), "add"));
-
- // Otherwise, this must be a complex number.
- llvm::Value *LHSR, *LHSI, *RHSR, *RHSI;
-
- EmitLoadOfComplex(LHS, LHSR, LHSI);
- EmitLoadOfComplex(RHS, RHSR, RHSI);
-
- llvm::Value *ResR = Builder.CreateAdd(LHSR, RHSR, "add.r");
- llvm::Value *ResI = Builder.CreateAdd(LHSI, RHSI, "add.i");
-
- llvm::Value *Res = CreateTempAlloca(ConvertType(ResTy));
- EmitStoreOfComplex(ResR, ResI, Res);
- return RValue::getAggregate(Res);
+ return RValue::get(Builder.CreateAdd(LHS.getVal(), RHS.getVal(), "add"));
}
RValue CodeGenFunction::EmitPointerAdd(RValue LHS, QualType LHSTy,
@@ -1285,6 +1270,7 @@
LHS.getVal(), RHS.getVal(), "cmp");
}
} else {
+#if 0
// Struct/union/complex
llvm::Value *LHSR, *LHSI, *RHSR, *RHSI, *ResultR, *ResultI;
EmitLoadOfComplex(LHS, LHSR, LHSI);
@@ -1303,6 +1289,7 @@
} else {
assert(0 && "Complex comparison other than == or != ?");
}
+#endif
}
// ZExt result to int.