From: Jan Hubicka Date: Sun, 14 Jan 2018 11:20:31 +0000 (+0100) Subject: re PR ipa/83051 (ICE on valid code at -O3: in edge_badness, at ipa-inline.c:1024) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3f05a4f0727bac6f4456fbbecdc1315cc8bd59cf;p=gcc.git re PR ipa/83051 (ICE on valid code at -O3: in edge_badness, at ipa-inline.c:1024) PR ipa/83051 * gcc.c-torture/compile/pr83051.c: New testcase. * ipa-inline.c (edge_badness): Tolerate roundoff errors. From-SVN: r256659 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index abce2c83d53..ed1e0ef1324 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-01-14 Jan Hubicka + + PR ipa/83051 + * ipa-inline.c (edge_badness): Tolerate roundoff errors. + 2018-01-14 Richard Sandiford * ipa-inline.c (want_inline_small_function_p): Return false if diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index c3acfb29b40..145ffbb5ef0 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -997,7 +997,8 @@ edge_badness (struct cgraph_edge *edge, bool dump) /* Check that inlined time is better, but tolerate some roundoff issues. FIXME: When callee profile drops to 0 we account calls more. This should be fixed by never doing that. */ - gcc_checking_assert ((edge_time - callee_info->time).to_int () <= 0 + gcc_checking_assert ((edge_time * 100 + - callee_info->time * 101).to_int () <= 0 || callee->count.ipa ().initialized_p ()); gcc_checking_assert (growth <= callee_info->size); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d8263d6ab3a..c07fada1ac8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-14 Jan Hubicka + + PR ipa/83051 + * gcc.c-torture/compile/pr83051.c: New testcase. + 2018-01-14 Prathamesh Kulkarni PR tree-optimization/83501 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr83051.c b/gcc/testsuite/gcc.c-torture/compile/pr83051.c new file mode 100644 index 00000000000..133cabc538b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr83051.c @@ -0,0 +1,31 @@ + +int a[1], b, c, d, e, f, g, h; + +void fn1 (int p) +{ + b = b >> 8 ^ a[b ^ (c & 5)] >> 8 ^ a[(b ^ c) & 5]; + b = b >> 8 ^ a[(b ^ c) & 5]; +} + +static void fn2 () +{ + int k; + while (1) + while (e) + { + while (g) + while (h) + for (k = 0; k < 6; k++) + while (f) + fn1 (0); + fn1 (0); + fn1 (0); + fn1 (0); + } +} + +int main () +{ + fn2 (); + return 0; +}