Essa transformação do compilador é permitida?

Considere este código, ondex ey são inteiros:

if (x)
    y = 42;

A transformação do compilador a seguir é permitida?

int tmp = y;
y = 42;

if (!x)
    y = tmp;

contexto:

Este é o FAQ de Bjarne Stroustrup:

// start with x==0 and y==0

if (x) y = 1;   // Thread 1 

if (y) x = 1;   // Thread 2

O FAQ declara que é livre de corrida de dados; comx ey ambos 0, nenhum dos vars deve ser gravado.
Mas e se a transformação for permitida?

questionAnswers(1)

yourAnswerToTheQuestion