https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54742

Sebastian Pop <spop at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |spop at gcc dot gnu.org

--- Comment #37 from Sebastian Pop <spop at gcc dot gnu.org> ---
Hi Jeff, can you fix this bug, or should I give it a try?
I know some folks who would be happy to have this coremark perf bug fixed in
trunk ;-)

Thanks,
Sebastian

(In reply to jgreenhalgh from comment #27)
> Created attachment 31308 [details]
> Dumps for less reduced testcase in comment 27
> 
> As of revision 205398, I'm not seeing this optimisation trigger when
> compiling the benchmark in question.
> 
> I've attached the dumps from a less agressively reduced version of the
> testcase given in the intial report, which we don't currently thread.
> 
> This testcase is more representative of the control structure in the
> benchmark code. In particular, we have the problematic scenario of two
> 'joiner' blocks in the thread path.
> 
> Looking at the dumps for this testcase I think that we would need to spot
> threads like:
> 
>   (17, 23) incoming edge; (23, 4) joiner; (4, 5) joiner; (5, 8) back-edge;
> (8, 15) switch-statement;
> 
> The testcase I am using is:
> 
> ---
> 
> int sum0, sum1, sum2, sum3;
> int foo(char * s, char** ret)
> {
>   int state=0;
>   char c;
> 
>   for (; *s && state != 4; s++)
>     {
>       c = *s;
>       if (c == '*')
>       {
>         s++;
>         break;
>       }
>       switch (state) {
>       case 0:
>         if (c == '+') state = 1;
>         else if (c != '-') sum0+=c;
>         break;
>       case 1:
>         if (c == '+') state = 2;
>         else if (c == '-') state = 0;
>         else sum1+=c;
>         break;
>       case 2:
>         if (c == '+') state = 3;
>         else if (c == '-') state = 1;
>         else sum2+=c;
>         break;
>       case 3:
>         if (c == '-') state = 2;
>         else if (c == 'x') state = 4;
>         break;
>       default:
>         break;
>       }
>     }
>   *ret = s;
>   return state;
> }

Reply via email to