Compilador MS C # y código no optimizado

Nota: Noté algunos errores en mi ejemplo publicado: edición para corregirlo

El compilador oficial de C # hace algunas cosas interesantes si no habilita la optimización.

Por ejemplo, una simple declaración if:

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

se convierte en algo parecido a lo siguiente si está optimizado:

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

pero si deshabilitamos la optimización, se convierte en algo así:

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:

No puedo entenderlo. ¿Por qué todo ese código extra, que aparentemente no está presente en la fuente? En C #, esto sería el equivalente de:

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

¿Alguien sabe por qué hace esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta