if (0) condition, but entered.

Hi,

I am using GNU compiler in uVision 3.51. A portion of code is simliar to below:

X = 100; Y = 100; If(x!=y){ Xxxx; }else{ Yyyy; }

By using break point, i found that both Xxxx and Yyyy are entered. It happened in both subroutine, and main. Both X and Y are declared as unsigned integer as global variables. The entire code is less than 16K (about 70% of 16K). Do you have any idea on this? The IC used is LPC2129. Thanks for your advice.

Regards,

Parents
  • Most likely what happens is this: in the ARM instruction set, almost all instructions can be conditional, i.e. when they are executed their effect depends on the condition code flags in the current program status register. The compiler takes advantage of this when generating code for simple if statements: both branches are executed by the CPU, but only one of them has effect.
    As Christoph mentioned, you should not see this at lower optimization levels.

    Regards,
    - mike

Reply
  • Most likely what happens is this: in the ARM instruction set, almost all instructions can be conditional, i.e. when they are executed their effect depends on the condition code flags in the current program status register. The compiler takes advantage of this when generating code for simple if statements: both branches are executed by the CPU, but only one of them has effect.
    As Christoph mentioned, you should not see this at lower optimization levels.

    Regards,
    - mike

Children
More questions in this forum