unsequenced modification and access

I have an answer for my own question. NO, the compiler does not necessarily push the ++ to the end of the instruction. This code, compiled with -O1 (I have not tested -O0) provides a counterexample:

while(p!=top) *p++=*(p+k);

when it comes to evaluating the instruction, p is in ecx. The compiler moves it to eax, then increments ecx, then stores the value of ecx in p, then acquires the just stored value again in ecx (which obviously does nothing), then increments ecx by k, then takes the contents of ecx into eax, effectively doing: