]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR116510: Add missing fold_converts into tree switch if conversion
authorAndi Kleen <ak@gcc.gnu.org>
Tue, 15 Oct 2024 20:16:02 +0000 (13:16 -0700)
committerAndi Kleen <ak@gcc.gnu.org>
Wed, 16 Oct 2024 13:48:55 +0000 (06:48 -0700)
Passes test suite. Ok to commit?

gcc/ChangeLog:

PR middle-end/116510
* tree-if-conv.cc (predicate_bbs): Add missing fold_converts.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-switch-ifcvt-3.c: New test.

gcc/testsuite/gcc.dg/vect/vect-switch-ifcvt-3.c [new file with mode: 0644]
gcc/tree-if-conv.cc

diff --git a/gcc/testsuite/gcc.dg/vect/vect-switch-ifcvt-3.c b/gcc/testsuite/gcc.dg/vect/vect-switch-ifcvt-3.c
new file mode 100644 (file)
index 0000000..41bc8a1
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+// PR116510
+
+char excmap_def_0;
+int gg_strescape_i;
+void gg_strescape() {
+  for (; gg_strescape_i; gg_strescape_i++)
+    switch ((unsigned char)gg_strescape_i)
+    case '\\':
+    case '"':
+      excmap_def_0 = 0;
+}
index 90c754a48147c7eb29e65411e0456516b404fd5a..376a4642954d6a4362184c8ed67ad693947aa161 100644 (file)
@@ -1477,10 +1477,12 @@ predicate_bbs (loop_p loop)
                {
                  tree low = build2_loc (loc, GE_EXPR,
                                         boolean_type_node,
-                                        index, CASE_LOW (label));
+                                        index, fold_convert_loc (loc, TREE_TYPE (index),
+                                                CASE_LOW (label)));
                  tree high = build2_loc (loc, LE_EXPR,
                                          boolean_type_node,
-                                         index, CASE_HIGH (label));
+                                         index, fold_convert_loc (loc, TREE_TYPE (index),
+                                                 CASE_HIGH (label)));
                  case_cond = build2_loc (loc, TRUTH_AND_EXPR,
                                          boolean_type_node,
                                          low, high);
@@ -1489,7 +1491,8 @@ predicate_bbs (loop_p loop)
                case_cond = build2_loc (loc, EQ_EXPR,
                                        boolean_type_node,
                                        index,
-                                       CASE_LOW (gimple_switch_label (sw, i)));
+                                       fold_convert_loc (loc, TREE_TYPE (index),
+                                                         CASE_LOW (label)));
              if (i > 1)
                switch_cond = build2_loc (loc, TRUTH_OR_EXPR,
                                          boolean_type_node,