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

            Bug ID: 96415
           Summary: GCC produces incorrect code for loops with -O3 for
                    skylake-avx512 and icelake-server
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vsevolod.livinskij at frtk dot ru
  Target Milestone: ---

Error:
>$ g++ -O0 driver.cpp func.cpp && ./a.out
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 
>$ g++ -O3 driver.cpp func.cpp -march=skylake-avx512 && sde -skx -- ./a.out
1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 

Reproducer:
//driver.cpp 
#include <stdio.h>

unsigned short var_0 = 14;
unsigned int arr_10 [16];
void test(unsigned short var_0);

int main() {
    test(var_0);
    for (int i = 0; i < 16; ++i) 
        printf("%u ", arr_10[i]);
    printf("\n");
}

//func.cpp
extern int arr_10[16];
void test(unsigned short a) {
    for (unsigned e = 0; e < 16; e += 4)
        for (char f = 0; f < 6; f += 4)
            for (unsigned g = 0; g < a + 1; g++)
                arr_10[g] = 1;
}

GCC version:
11.0.0 (3a4a92598014d33ef2c8b8ec38d8ad917812921a)
I also applied the fix for bug #95396

Reply via email to