From: Aldy Hernandez Date: Sat, 13 Nov 2021 11:16:40 +0000 (+0100) Subject: Drop tree overflow in irange setter. X-Git-Tag: basepoints/gcc-13~3039 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6c29c9d6a7d80ece7e08eb546ca4a1ba1430a9b3;p=thirdparty%2Fgcc.git Drop tree overflow in irange setter. Drop meaningless overflow that may creep into the IL. gcc/ChangeLog: PR tree-optimization/103207 * value-range.cc (irange::set): Drop overflow. gcc/testsuite/ChangeLog: * gcc.dg/pr103207.c: New test. --- diff --git a/gcc/testsuite/gcc.dg/pr103207.c b/gcc/testsuite/gcc.dg/pr103207.c new file mode 100644 index 000000000000..69c0f555f86c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr103207.c @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-O2 --param case-values-threshold=1 -w" } + +int f (int i) +{ + switch (i) { + case 2147483647: + return 1; + case 9223372036854775807L: + return 2; + case (2147483647*4)%4: + return 4; + } + return 0; +} diff --git a/gcc/value-range.cc b/gcc/value-range.cc index caef24989594..82509fa55a7a 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -270,6 +270,14 @@ irange::irange_set_anti_range (tree min, tree max) void irange::set (tree min, tree max, value_range_kind kind) { + if (kind != VR_UNDEFINED) + { + if (TREE_OVERFLOW_P (min)) + min = drop_tree_overflow (min); + if (TREE_OVERFLOW_P (max)) + max = drop_tree_overflow (max); + } + if (!legacy_mode_p ()) { if (kind == VR_RANGE)