Hi, I have recently been working on merging if-else statement blocks, and I found a rather bizarre phenomenon that I would like to ask about. A rough explanation is that for two consecutive if-else blocks, if their if statements are exactly the same, they should be merged, like the following program:
int a = atoi(argv[1]); if (a) { printf("if 1"); } else { printf("else 1"); } if (a) { printf("if 2"); } else { printf("else 2"); } After using the -O3 -flto optimization option, it can be optimized as follows: int a = atoi(argv[1]); if (a) { printf("if 1"); printf("if 2"); } else { printf("else 1"); printf("else 2"); } But `a` here is a local variable. If I declare a as a global variable, it cannot be optimized as above. I would like to ask why this is? And is there any solution? Thanks. Hanke Zhang.