I remember reading somewhere in avr libc docs to do e.g. this:
PCIFR = _BV (some_bit)
loop_until_bit_is_clear (PCIFR, some_bit);
This may be a bad example becuase of the odd write-one-to-clear
semantics. That isn't the point here, I don't remember which
registers this advice applied to. And I can't find it now.
The only thing I could find in the datasheet that related to this was
in section 13.2.4 of ATMega328P datasheet, where it says that you
have to wait a cycle after assigning an output pin value before
reading it back in.
Are there other cases where loop_until_* or a nop is required?
Maybe it's needed after setting some registers to make sure
the functionality specified by the assignment is actually in
effect? If so, is this the same issue as the one mentioned in
13.2.4 and is a single nop therefore sufficient?