Not commenting on the correctness... but On Mon, Jul 24, 2017 at 1:29 PM, Alexander Monakov <amona...@ispras.ru> wrote: > + basic_block bb0 = bbs[0], bb1 = bbs[1]; > + if (bb_postorder[bb0->index] < bb_postorder[bb1->index]) > + bbs[0] = bb1, bbs[1] = bb0; > + } > + else if (__builtin_expect (n == 3, true)) > + { > + basic_block t, bb0 = bbs[0], bb1 = bbs[1], bb2 = bbs[2]; > + if (bb_postorder[bb0->index] < bb_postorder[bb1->index]) > + t = bb0, bb0 = bb1, bb1 = t; > + if (bb_postorder[bb1->index] < bb_postorder[bb2->index]) > + { > + t = bb1, bb1 = bb2, bb2 = t; > + if (bb_postorder[bb0->index] < bb_postorder[bb1->index]) > + t = bb0, bb0 = bb1, bb1 = t; > + } > + bbs[0] = bb0, bbs[1] = bb1, bbs[2] = bb2;
... maybe use std::swap() in all four cases?