前置インクリメントと後置インクリメントの最適化の違いを調べようとした

前置インクリメント演算子の方が効率がいい、とかいうのを見たのでC言語で試してみたんだけど、そもそもその記事にはJavaScriptで書いてあったのでC言語で試すのは間違いだったかも。あとC言語力もアセンブリ力もそんなにあるわけじゃないから全然わからない……
環境:MacOS 10.7.1 / gcc 4.2.1

ソースコード

/* aaa.c */
int main(void)
{
  int i = 0;
  return i++;
}
/* bbb.c */
int main(void)
{
  int i = 0;
  return ++i;
}

最適化なし (gcc -S -O0)

--- aaa.s       2011-09-20 22:15:49.000000000 +0900
+++ bbb.s       2011-09-20 22:15:54.000000000 +0900
@@ -9,10 +9,10 @@
 Ltmp1:
        movl    $0, -12(%rbp)
        movl    -12(%rbp), %eax
-       movl    %eax, -8(%rbp)
-       movl    -12(%rbp), %eax
        addl    $1, %eax
        movl    %eax, -12(%rbp)
+       movl    -12(%rbp), %eax
+       movl    %eax, -8(%rbp)
        movl    -8(%rbp), %eax
        movl    %eax, -4(%rbp)
        movl    -4(%rbp), %eax

最適化レベル1 (gcc -S -O1)

--- aaa2.s      2011-09-20 22:18:55.000000000 +0900
+++ bbb2.s      2011-09-20 22:18:43.000000000 +0900
@@ -7,7 +7,7 @@
 Ltmp0:
        movq    %rsp, %rbp
 Ltmp1:
-       xorl    %eax, %eax
+       movl    $1, %eax
        popq    %rbp
        ret
 Leh_func_end1:


結論:全然わからない