In many cases, an assignment expression which contains two or more function calls will need to save one or more temporary values around all but one of the function calls. If one can perform the function call before evaluating any other part of the expression, then "all but one" would translate to "none".
For example, given extern int *a,*b,*f(void);, all of the assignments *a=*f()+*b;, *a=*b+f();, and *f() = *a+*b; would be processed most efficiently by performing the function call before the loads of a and b, despite the fact that the function calls appear at different places within the expression.