知ったかする素人って見苦しい。gcc -O2 -Sでaとbのコード比べてみろ。
アセンブリくらい読めるんだろ。

long aaa(long);
long a(long *x)
{
return aaa(*x) * *x;
}
long b(long * restrict x)
{
return aaa(*x) * *x;
}