Index: lib/CodeGen/MachineBlockPlacement.cpp =================================================================== --- lib/CodeGen/MachineBlockPlacement.cpp +++ lib/CodeGen/MachineBlockPlacement.cpp @@ -1491,8 +1491,13 @@ assert(LoopChain.UnscheduledPredecessors == 0); UpdatedPreds.insert(&LoopChain); - for (MachineBasicBlock *LoopBB : LoopBlockSet) - fillWorkLists(LoopBB, UpdatedPreds, &LoopBlockSet); + // Add the basic blocks to LoopBlockSet. Note that we are NOT using the + // LoopBlockSet iterator here because its order depends on the pointer + // values. This nondeterministic order will fail to produce a bit-to-bit + // matching clang binary in bootstrap build. + for (MachineBasicBlock &LoopBB : *F) + if (LoopBlockSet.count(&LoopBB)) + fillWorkLists(&LoopBB, UpdatedPreds, &LoopBlockSet); buildChain(LoopTop, LoopChain, &LoopBlockSet);