This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: g++ doesn't unroll a loop it should unroll



loop anyway... you C++ people tend to overtax compiler with
optimizations. Is it really necessary to do (i == j) * factor
when (i == j) ? factor : 0 is easier for compiler to grok?

Of course I tried it. It's even slower. Doesn't help the compiler unroll the loop, and now there's a branch at each iteration.

This is another compiler bug. Note however, that if I want to use oldskool tricks to remove ?:, I would instead do -(i == j) & factor.


The compiler should be able to transform the ?: expression to the faster form (and to transform the latter into ?: on architectures where it's better) but it does this quite late in the compilation. It can happen that things are screwed up by the time we reach that part of the optimization pipeline, and the ?: idiom is not recognized anymore.

We are currently discussing including ?: in the compiler's intermediate representation, instead of representing it as an "if" statement; this might be a case where it helps.

Paolo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]