Hi,
My doubt is why stalls are reduced ? Is basic block reordering optimization pass is considered while calculating stalls during instruction scheduling? because i placed pass_reorder_blocks after the pass_sched2
Second scheduler is run on extended basic blocks (EBBs). An EBB is a sequence of basic blocks with single entry (at the head of the first block of the sequence) and such that every its basic block except the first is a fallthrough successor of its predecessor. Thus, my speculation is that pass_reorded_blocks forms larger EBBs, and therefore scheduler sees stalls that otherwise would be hidden from it, because the corresponding dependency would be between instructions in different EBBs. You can verify this by inspecting your scheduler dumps (AFAIR, number of basic blocks in EBB is printed in the beginning of each scheduler invocation, just before dependencies table).
Hope that helps -- Alexander Monakov