rs6000.c (init_float128_ieee): Prevent complex multiply and divide external functions...
authorMichael Meissner <meissner@linux.ibm.com>
Thu, 21 Jun 2018 22:55:50 +0000 (22:55 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Thu, 21 Jun 2018 22:55:50 +0000 (22:55 +0000)
2018-06-23  Michael Meissner  <meissner@linux.ibm.com>

* config/rs6000/rs6000.c (init_float128_ieee): Prevent complex
multiply and divide external functions from being created more
than once.

From-SVN: r261870

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 02d59040db381b296abd07c95520e3b139e11814..9fdd3e62a0ecb5c2acf084b24fe6a0ab3386cf5a 100644 (file)
@@ -5,6 +5,9 @@
        IEEE 128-bit long double.
        (neg<mode>2_internal): Use the correct mode to check whether the
        mode is IBM extended.
+       * config/rs6000/rs6000.c (init_float128_ieee): Prevent complex
+       multiply and divide external functions from being created more
+       than once.
 
 2018-06-21  Eric Botcazou  <ebotcazou@adacore.com>
 
index 11ef766a531ae30240ae854be390f4a19ab108f4..3cc64456a3ed86f7236ef038a97b9d1431f21f59 100644 (file)
@@ -17892,9 +17892,14 @@ init_float128_ieee (machine_mode mode)
 {
   if (FLOAT128_VECTOR_P (mode))
     {
-      /* Set up to call __mulkc3 and __divkc3 under -mabi=ieeelongdouble.  */
-     if (mode == TFmode && TARGET_IEEEQUAD)
+      static bool complex_muldiv_init_p = false;
+
+      /* Set up to call __mulkc3 and __divkc3 under -mabi=ieeelongdouble.  If
+        we have clone or target attributes, this will be called a second
+        time.  We want to create the built-in function only once.  */
+     if (mode == TFmode && TARGET_IEEEQUAD && !complex_muldiv_init_p)
        {
+        complex_muldiv_init_p = true;
         built_in_function fncode_mul =
           (built_in_function) (BUILT_IN_COMPLEX_MUL_MIN + TCmode
                                - MIN_MODE_COMPLEX_FLOAT);