[APFloat] Make functions that produce APFloaat objects use correct semantics.

Summary:
Fixes PR30869.

In D25977 I meant to change all functions that care about lifetime. I
changed constructors, factory functions, but I missed member/free
functions that return new instances. This patch changes them.

Reviewers: hfinkel, kbarton, echristo, joerg

Subscribers: llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D26269

llvm-svn: 286060
diff --git a/llvm/unittests/ADT/APFloatTest.cpp b/llvm/unittests/ADT/APFloatTest.cpp
index 18734eb..eea3222 100644
--- a/llvm/unittests/ADT/APFloatTest.cpp
+++ b/llvm/unittests/ADT/APFloatTest.cpp
@@ -1527,6 +1527,34 @@
   // This is what we get with our 106-bit mantissa approximation
   EXPECT_EQ(0x0000000000000000ull, test.bitcastToAPInt().getRawData()[1]);
 #endif
+
+  // PR30869
+  {
+    auto Result = APFloat(APFloat::PPCDoubleDouble, "1.0") +
+                  APFloat(APFloat::PPCDoubleDouble, "1.0");
+    EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+    Result = APFloat(APFloat::PPCDoubleDouble, "1.0") -
+             APFloat(APFloat::PPCDoubleDouble, "1.0");
+    EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+    Result = APFloat(APFloat::PPCDoubleDouble, "1.0") *
+             APFloat(APFloat::PPCDoubleDouble, "1.0");
+    EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+    Result = APFloat(APFloat::PPCDoubleDouble, "1.0") /
+             APFloat(APFloat::PPCDoubleDouble, "1.0");
+    EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+    int Exp;
+    Result = frexp(APFloat(APFloat::PPCDoubleDouble, "1.0"), Exp,
+                   APFloat::rmNearestTiesToEven);
+    EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+    Result = scalbn(APFloat(APFloat::PPCDoubleDouble, "1.0"), 1,
+                    APFloat::rmNearestTiesToEven);
+    EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+  }
 }
 
 TEST(APFloatTest, isNegative) {