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.
This commit is contained in:
Andi Kleen 2024-10-15 13:16:02 -07:00
parent e48a65d3b3
commit d5a05db80f
2 changed files with 18 additions and 3 deletions

View file

@ -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;
}

View 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,