In this PR it was requested that -mveclibabi=svml takes precedence
over simd annotations of <math.h> which is a reasonable expectation.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2018-10-23  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/86144
        * tree-vect-stmts.c (vect_analyze_stmt): Prefer -mveclibabi
        over simd attribute.

Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c       (revision 265411)
+++ gcc/tree-vect-stmts.c       (working copy)
@@ -9533,14 +9533,18 @@ vect_analyze_stmt (stmt_vec_info stmt_in
   if (!bb_vinfo
       && (STMT_VINFO_RELEVANT_P (stmt_info)
          || STMT_VINFO_DEF_TYPE (stmt_info) == vect_reduction_def))
-    ok = (vectorizable_simd_clone_call (stmt_info, NULL, NULL, node, cost_vec)
+    /* Prefer vectorizable_call over vectorizable_simd_clone_call so
+       -mveclibabi= takes preference over ibrary functions with
+       the simd attribute.  */
+    ok = (vectorizable_call (stmt_info, NULL, NULL, node, cost_vec)
+         || vectorizable_simd_clone_call (stmt_info, NULL, NULL, node,
+                                          cost_vec)
          || vectorizable_conversion (stmt_info, NULL, NULL, node, cost_vec)
          || vectorizable_shift (stmt_info, NULL, NULL, node, cost_vec)
          || vectorizable_operation (stmt_info, NULL, NULL, node, cost_vec)
          || vectorizable_assignment (stmt_info, NULL, NULL, node, cost_vec)
          || vectorizable_load (stmt_info, NULL, NULL, node, node_instance,
                                cost_vec)
-         || vectorizable_call (stmt_info, NULL, NULL, node, cost_vec)
          || vectorizable_store (stmt_info, NULL, NULL, node, cost_vec)
          || vectorizable_reduction (stmt_info, NULL, NULL, node,
                                     node_instance, cost_vec)
@@ -9552,8 +9556,9 @@ vect_analyze_stmt (stmt_vec_info stmt_in
   else
     {
       if (bb_vinfo)
-       ok = (vectorizable_simd_clone_call (stmt_info, NULL, NULL, node,
-                                           cost_vec)
+       ok = (vectorizable_call (stmt_info, NULL, NULL, node, cost_vec)
+             || vectorizable_simd_clone_call (stmt_info, NULL, NULL, node,
+                                              cost_vec)
              || vectorizable_conversion (stmt_info, NULL, NULL, node,
                                          cost_vec)
              || vectorizable_shift (stmt_info, NULL, NULL, node, cost_vec)
@@ -9562,7 +9567,6 @@ vect_analyze_stmt (stmt_vec_info stmt_in
                                          cost_vec)
              || vectorizable_load (stmt_info, NULL, NULL, node, node_instance,
                                    cost_vec)
-             || vectorizable_call (stmt_info, NULL, NULL, node, cost_vec)
              || vectorizable_store (stmt_info, NULL, NULL, node, cost_vec)
              || vectorizable_condition (stmt_info, NULL, NULL, NULL, 0, node,
                                         cost_vec)

Reply via email to