https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113907
--- Comment #39 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
This testcase
#include <stdio.h>
int data[100];
__attribute__((noinline))
int bar (int d, unsigned int d2)
{
if (d2 > 10)
printf ("Bingo\n");
return d + d2;
}
int
test2 (unsigned int i)
{
if (i > 10)
__builtin_unreachable ();
if (__builtin_expect (data[i] != 0, 1))
return data[i];
printf ("%i\n",i);
for (int j = 0; j < 100; j++)
data[i] += bar (data[j], i+17);
return data[i];
}
int
test (unsigned int i)
{
if (i > 100)
__builtin_unreachable ();
if (__builtin_expect (data[i] != 0, 1))
return data[i];
printf ("%i\n",i);
for (int j = 0; j < 100; j++)
data[i] += bar (data[j], i+17);
return data[i];
}
int
main ()
{
test (1);
test (2);
test (3);
test2 (4);
test2 (100);
return 0;
}
gets me most of what I want to reproduce ipa-prop problem. Functions test and
test2 are split with different value ranges visible in the fnsplit dump.
However curiously enough ipa-prop analysis seems to ignore the value ranges and
does not attach them to the jump function, which is odd...