This makes sure to not consider calls to builtin decls with
mismatching arguments as inexpensive.

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

2022-04-13  Richard Biener  <rguent...@suse.de>

        * tree-scalar-evolution.cc (expression_expensive_p):
        Never consider mismatched calls as cheap.
---
 gcc/tree-scalar-evolution.cc | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc
index 44157265ce8..b53d7aaa71d 100644
--- a/gcc/tree-scalar-evolution.cc
+++ b/gcc/tree-scalar-evolution.cc
@@ -3420,12 +3420,15 @@ expression_expensive_p (tree expr, hash_map<tree, 
uint64_t> &cache,
                  break;
              return true;
            }
+         break;
+
        default:
+         if (cfn == CFN_LAST
+             || !is_inexpensive_builtin (get_callee_fndecl (expr)))
+           return true;
          break;
        }
 
-      if (!is_inexpensive_builtin (get_callee_fndecl (expr)))
-       return true;
       FOR_EACH_CALL_EXPR_ARG (arg, iter, expr)
        if (expression_expensive_p (arg, cache, op_cost))
          return true;
-- 
2.34.1

Reply via email to