]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[ldist] Don't add lib calls with -fno-tree-loop-distribute-patterns
authorTom de Vries <tdevries@suse.de>
Mon, 31 Jan 2022 16:05:28 +0000 (17:05 +0100)
committerTom de Vries <tdevries@suse.de>
Tue, 1 Feb 2022 07:12:24 +0000 (08:12 +0100)
As mentioned in PR56888 comment 21:
...
-fno-tree-loop-distribute-patterns is the reliable way to not
transform loops into library calls.
...

However, since commit 6f966f06146 ("ldist: Recognize strlen and rawmemchr like
loops") a strlen or rawmemchr library call may be introduced by ldist.

This caused regressions in testcases
gcc.c-torture/execute/builtins/strlen{,-2,-3}.c for nvptx.

Fix this by not calling transform_reduction_loop from
loop_distribution::execute for -fno-tree-loop-distribute-patterns.

Tested regressed test-cases as well as gcc.dg/tree-ssa/ldist-*.c on
nvptx.

gcc/ChangeLog:

2022-01-31  Tom de Vries  <tdevries@suse.de>

* tree-loop-distribution.cc (generate_reduction_builtin_1): Check for
-ftree-loop-distribute-patterns.
(loop_distribution::execute): Don't call transform_reduction_loop for
-fno-tree-loop-distribute-patterns.

gcc/testsuite/ChangeLog:

2022-01-31  Tom de Vries  <tdevries@suse.de>

* gcc.dg/tree-ssa/ldist-strlen-4.c: New test.

gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-4.c [new file with mode: 0644]
gcc/tree-loop-distribution.cc

diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ldist-strlen-4.c
new file mode 100644 (file)
index 0000000..eafb37e
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-loop-distribution -fno-tree-loop-distribute-patterns -fdump-tree-ldist-details" } */
+/* { dg-final { scan-tree-dump-not "generated strlen" "ldist" } } */
+
+/* Copied from gcc/testsuite/gcc.c-torture/execute/builtins/lib/strlen.c.  */
+
+__SIZE_TYPE__
+foo (const char *s)
+{
+  __SIZE_TYPE__ i;
+
+  i = 0;
+  while (s[i] != 0)
+    i++;
+
+  return i;
+}
index 6fe59cd56855fb5332768d1fe5127a8ec9c56b2c..c7b42857263627665f5bd0241b77ad93c56b8c0a 100644 (file)
@@ -3290,6 +3290,8 @@ generate_reduction_builtin_1 (loop_p loop, gimple_seq &seq,
                              tree reduction_var_old, tree reduction_var_new,
                              const char *info, machine_mode load_mode)
 {
+  gcc_assert (flag_tree_loop_distribute_patterns);
+
   /* Place new statements before LOOP.  */
   gimple_stmt_iterator gsi = gsi_last_bb (loop_preheader_edge (loop)->src);
   gsi_insert_seq_after (&gsi, seq, GSI_CONTINUE_LINKING);
@@ -3773,7 +3775,8 @@ loop_distribution::execute (function *fun)
       if (niters == NULL_TREE || niters == chrec_dont_know)
        {
          datarefs_vec.create (20);
-         if (transform_reduction_loop (loop))
+         if (flag_tree_loop_distribute_patterns
+             && transform_reduction_loop (loop))
            {
              changed = true;
              loops_to_be_destroyed.safe_push (loop);