https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100499
Bug ID: 100499 Summary: Different results with -fpeel-loops -ftree-loop-vectorize options Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: dongjianqiang2 at huawei dot com Target Milestone: --- cat demo.c #include<stdio.h> typedef unsigned short uint16_t; typedef signed int int32_t; static uint16_t g_2823 = 0xEC75L; static uint16_t g_116 = 0xBC07L; static uint16_t (safe_mul_func_uint16_t_u_u)(uint16_t ui1, uint16_t ui2 ) { return ((unsigned int)ui1) * ((unsigned int)ui2); } int main (int argc, char* argv[]) { uint16_t l_2815 = 65535UL; uint16_t *l_2821 = &g_116; uint16_t *l_2822 = &g_2823; printf ("start g_2823 = %d\n", g_2823); lbl_2826: l_2815 &= 0x9DEF1EAEL; if (+(safe_mul_func_uint16_t_u_u(((*l_2821) = l_2815), (--(*l_2822))))) { goto lbl_2826; } printf ("end g_2823 = %d\n", g_2823); return 0; } Compiling with gcc demo.c -O1 ./a.out start g_2823 = 60533 end g_2823 = 32768 gcc demo.c -O1 -fpeel-loops -ftree-loop-vectorize ./a.out start g_2823 = 60533 end g_2823 = 60526 gives different results