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

--- Comment #7 from Marius Messerschmidt <marius.messerschmidt at googlemail 
dot com> ---
Thanks a lot for working on this!

A simple example would be the following:


-------------- CODE -------------------

int calc(int x, int y, int *flag)
{
    if(flag > 5)
        return x + y;
    else
        return x * y;

    *flag += 2; // BAD LINE
}

int main(int argc, char **argv)
{
    int flag = argc;
    int array[250*250];
    for(int i = 0; i < 250; i++)
    {
        for(int j = 0; j < 250
        array[i*250 + j] = calc(i, j, &flag);
    }

    return array[42 + argc];
}

---------------------------------------

The line marked with "BAD LINE" is obviously preventing the unswitching as the
loop condition is no longer constant during the loop. If you uncomment the line
gcc reports ";; unswitched loop" which is great. But if you keep the line, you
get no output at all. The minimal output I would expect is:

";; not unswitching loop: REASON"

so in this case:

";; not unswitching loop: Condition is not invariant"

To further improve the output it would be great if there would be some more
information about the loop, but I do not know which information is available
during this stage. The most helpful additional information would be (also
applies for the successful message):

  - File
  - Function
  - Line number of the loop head (or some other way to identify the loop, e.g.
loop number XY)
  - Line number of the if-statement that should be unswitched out of the loop
  - Line number of the issue that caused the loop unswitching to stop so in the
example above the commented line.

So I think the perfect log message would be something like this:

";; unswitching loop: testFile.c:82 (Condition: otherFile.c:502)"
";; not unswitching loop: testFile.c:91: Condition (otherFile.c:541) is not
invariant (modified at otherFile.c:32)"


But as I said above I do not know how many information about the original
source file is still available during this stage.

Reply via email to