/* Preamble and helpers for the autogenerated generic-match.c file.
- Copyright (C) 2014-2015 Free Software Foundation, Inc.
+ Copyright (C) 2014-2021 Free Software Foundation, Inc.
This file is part of GCC.
#include "config.h"
#include "system.h"
#include "coretypes.h"
-#include "hash-set.h"
-#include "machmode.h"
-#include "vec.h"
-#include "double-int.h"
-#include "input.h"
-#include "alias.h"
-#include "symtab.h"
-#include "options.h"
-#include "wide-int.h"
-#include "inchash.h"
+#include "backend.h"
+#include "target.h"
+#include "rtl.h"
#include "tree.h"
+#include "gimple.h"
+#include "ssa.h"
+#include "cgraph.h"
+#include "vec-perm-indices.h"
#include "fold-const.h"
-#include "stringpool.h"
+#include "fold-const-call.h"
#include "stor-layout.h"
-#include "flags.h"
-#include "tm.h"
-#include "hard-reg-set.h"
-#include "function.h"
-#include "predict.h"
-#include "basic-block.h"
-#include "tree-ssa-alias.h"
-#include "internal-fn.h"
-#include "gimple-expr.h"
-#include "is-a.h"
-#include "gimple.h"
-#include "gimple-ssa.h"
-#include "tree-ssanames.h"
-#include "gimple-fold.h"
-#include "gimple-iterator.h"
-#include "hashtab.h"
-#include "rtl.h"
-#include "statistics.h"
-#include "real.h"
-#include "fixed-value.h"
-#include "insn-config.h"
-#include "expmed.h"
-#include "dojump.h"
-#include "explow.h"
-#include "calls.h"
-#include "emit-rtl.h"
-#include "varasm.h"
-#include "stmt.h"
-#include "expr.h"
#include "tree-dfa.h"
#include "builtins.h"
-#include "tree-phinodes.h"
-#include "ssa-iterators.h"
-#include "dumpfile.h"
-#include "generic-match.h"
+#include "case-cfn-macros.h"
+#include "gimplify.h"
+#include "optabs-tree.h"
+#include "dbgcnt.h"
+
+/* Routine to determine if the types T1 and T2 are effectively
+ the same for GENERIC. If T1 or T2 is not a type, the test
+ applies to their TREE_TYPE. */
+
+static inline bool
+types_match (tree t1, tree t2)
+{
+ if (!TYPE_P (t1))
+ t1 = TREE_TYPE (t1);
+ if (!TYPE_P (t2))
+ t2 = TREE_TYPE (t2);
+
+ return TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2);
+}
+
+/* Return if T has a single use. For GENERIC, we assume this is
+ always true. */
+
+static inline bool
+single_use (tree t ATTRIBUTE_UNUSED)
+{
+ return true;
+}
+
+/* Return true if math operations should be canonicalized,
+ e.g. sqrt(sqrt(x)) -> pow(x, 0.25). */
+
+static inline bool
+canonicalize_math_p ()
+{
+ return true;
+}
+
+/* Return true if math operations that are beneficial only after
+ vectorization should be canonicalized. */
+
+static inline bool
+canonicalize_math_after_vectorization_p ()
+{
+ return false;
+}
+
+/* Return true if we can still perform transformations that may introduce
+ vector operations that are not supported by the target. Vector lowering
+ normally handles those, but after that pass, it becomes unsafe. */
+
+static inline bool
+optimize_vectors_before_lowering_p ()
+{
+ return true;
+}
+/* Return true if successive divisions can be optimized.
+ Defer to GIMPLE opts. */
+static inline bool
+optimize_successive_divisions_p (tree, tree)
+{
+ return false;
+}