int foo(int a){
 return a ? 100 : 300;
}

をgcc -O2にかけたら、

foo:
  pushl %ebp
  movl  %esp, %ebp
  xorl  %eax, %eax
  cmpl  $0, 8(%ebp)
  sete  %al
  decl  %eax
  andl  $-200, %eax
  addl  $300, %eax
  leave
  ret

こんなの吐きました。