まともなコンパイラは確かにその最適化を行うべきであり、GCCはそうします。次のソース:
#include <cstdio>
inline void foo(bool maybe)
{
    if (maybe) {
        printf("Maybe\n");
    }
    printf("Always\n");
}
int main()
{
    foo(true);
    foo(false);
}
(最適化を使用して-O3)コンパイルして次のようにします。
0000000000400410 <main>:
  400410:   48 83 ec 08             sub    $0x8,%rsp
  400414:   bf e4 05 40 00          mov    $0x4005e4,%edi
  400419:   e8 d2 ff ff ff          callq  4003f0 <puts@plt>
  40041e:   bf ea 05 40 00          mov    $0x4005ea,%edi
  400423:   e8 c8 ff ff ff          callq  4003f0 <puts@plt>
  400428:   bf ea 05 40 00          mov    $0x4005ea,%edi
  40042d:   e8 be ff ff ff          callq  4003f0 <puts@plt>
  400432:   31 c0                   xor    %eax,%eax
  400434:   48 83 c4 08             add    $0x8,%rsp
  400438:   c3                      retq   
  400439:   0f 1f 00                nopl   (%rax)
puts無条件に3回呼び出す。