diff options
author | Andi Kleen <ak@gcc.gnu.org> | 2024-10-15 13:16:02 -0700 |
---|---|---|
committer | Andi Kleen <ak@gcc.gnu.org> | 2024-10-16 06:48:55 -0700 |
commit | d5a05db80fa95dcae1ebc177f7790e1d34fa73ed (patch) | |
tree | 62e98b98a2e6476d93747ef4d0e059e446e6b144 /gcc | |
parent | e48a65d3b3fcbcf6059df247d9c87a9a19b35861 (diff) | |
download | gcc-d5a05db80fa95dcae1ebc177f7790e1d34fa73ed.zip gcc-d5a05db80fa95dcae1ebc177f7790e1d34fa73ed.tar.gz gcc-d5a05db80fa95dcae1ebc177f7790e1d34fa73ed.tar.bz2 |
PR116510: Add missing fold_converts into tree switch if conversion
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-switch-ifcvt-3.c | 12 | ||||
-rw-r--r-- | gcc/tree-if-conv.cc | 9 |
2 files changed, 18 insertions, 3 deletions
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 index 0000000..41bc8a1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-switch-ifcvt-3.c @@ -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; +} diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc index 90c754a..376a464 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -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, |