How to prevent Arduino compiler from merging changing of port pin outputs into a single operation
I certainly can't duplicate what you are saying.  The small code snippet:

void setup() {
    PORTD |= _BV(0);
    PORTD |= _BV(1);
    PORTD &amp;= ~(_BV(1));
}

void loop() {
}


compiles into:

000000a6 &lt;setup&gt;:
  a6:   58 9a           sbi 0x0b, 0 ; 11
  a8:   59 9a           sbi 0x0b, 1 ; 11
  aa:   59 98           cbi 0x0b, 1 ; 11
  ac:   08 95           ret

000000ae &lt;loop&gt;:
  ae:   08 95           ret


That is clearly two separate bit sets followed by a bit clear.

I am using UECIDE that is set to use GCC 4.3.2

If I switch to GCC 4.8.1 instead, the code generated is identical.

Even turning on full -O3 optimization I still get the same results.

So how are you determining that it's happening at the same time?