On 09/16/2013 12:42 AM, Claudio Fontana wrote: >> + /* Hoist the loads of the most common arguments. */ >> > + TCGArg a0 = args[0]; >> > + TCGArg a1 = args[1]; >> > + TCGArg a2 = args[2]; >> > + int c2 = const_args[2]; >> > + > Either all or none (add c0, c1), I would expect the compiler not to > generate code for the paths that don't use C[n].
I chose the most common. Those used in 90% of all of the cases. > > Btw, if the compiler generates bloated code without this, we should notify > the projects working on gcc for aarch64. It's not the compiler's fault. After parameter decomposition, the arrays become pointers, and the compiler can't tell that it's always safe to perform the loads. So in general it can't hoist the loads higher than the first explicit reference that proves the pointers must be non-null. Now that I think about it, we might actually do better, generically, to package all of these arguments up into a struct. The compiler can more easily reason about the collective safety of structure access... r~