Компилятор MS C # и неоптимизированный код

Примечание: я заметил некоторые ошибки в своем опубликованном примере - редактирование, чтобы исправить это

Официальный компилятор C # делает некоторые интересные вещи, если вы не включаете оптимизацию.

Например, простое утверждение if:

int x;
// ... //
if (x == 10)
   // do something

становится что-то вроде следующего, если оптимизировано:

ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:

но если мы отключим оптимизацию, она станет примерно такой:

ldloc.0
ldc.i4.s 10
ceq
ldc.i4.0
ceq
stloc.1
ldloc.1
brtrue.s do_not_do_something
// do something
do_not_do_something:

Я не могу разобраться с этим. Зачем весь этот дополнительный код, который, по-видимому, отсутствует в исходном коде? В C # это будет эквивалентно:

int x, y;
// ... //
y = x == 10;
if (y != 0)
   // do something

Кто-нибудь знает, почему это происходит?