http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58033
--- Comment #3 from Oleg Endo <olegendo at gcc dot gnu.org> --- Created attachment 30574 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30574&action=edit bbro dump (In reply to Teresa Johnson from comment #2) > > I assume it is the above branch that is the issue (not the bf/s .L2 > below as that is the same in both versions of the code). I'm assuming > this is not build with FDO? Right, no FDO. > In that case bbro is probably at the mercy > of whatever probabilities the static heuristics assigned to the > branches. Although if it is 50-50 then I'm not sure offhand what > happens - maybe it is biasing in favor of having the shortest trace? > This is a great test case for motivating range propagation. =) > > Can you attach the dump created with -fdump-rtl-bbro-all? We can see > what the edge probabilities are. For some reason it is not compiling > for me - what options do you use? My (4_7-based) g++ is complaining > about the "auto": Sorry, it's C++11, so you need to specify -std=c++11. Here's a C++03 version, which on my setup (4.9 trunk rev 201282) results in exactly the same code: #include <bitset> std::bitset<32> make_bits2 (void) { static const int ii[] = { 4, 5, 6, 10 }; std::bitset<32> r; for (int i = 0; i < 4; ++i) if (ii[i] < r.size ()) r.set (ii[i]); return r; }