================
@@ -283,9 +283,23 @@ class ComplexExprEmitter
   ComplexPairTy EmitComplexBinOpLibCall(StringRef LibCallName,
                                         const BinOpInfo &Op);
 
-  QualType getPromotionType(QualType Ty) {
+  QualType getPromotionType(QualType Ty, bool IsDivOpCode = false) {
     if (auto *CT = Ty->getAs<ComplexType>()) {
       QualType ElementType = CT->getElementType();
+      if (CGF.getLangOpts().getComplexRange() ==
+              LangOptions::ComplexRangeKind::CX_Extend &&
+          IsDivOpCode) {
+        if (ElementType->isFloatingType()) {
+          if (const auto *BT = dyn_cast<BuiltinType>(ElementType))
+            switch (BT->getKind()) {
+            case BuiltinType::Kind::Float:
+              return 
CGF.getContext().getComplexType(CGF.getContext().DoubleTy);
+            default:
----------------
andykaylor wrote:

This doesn't look general enough. I'm not sure how to implement this. We need 
some handling for fp16 and fp128. I guess fp16 would promote to float, but 
fp128 will require using runtime library calls. For Windows, double and long 
double are the same by default. Does the front end have a way to specifically 
recognize x86_fp80 and ppc_fp128? Will something in Sema prevent us from 
getting here with bf16?

https://github.com/llvm/llvm-project/pull/81514
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to