Index: lib/CodeGen/CodeGenPrepare.cpp =================================================================== --- lib/CodeGen/CodeGenPrepare.cpp +++ lib/CodeGen/CodeGenPrepare.cpp @@ -462,7 +462,10 @@ if (!DisableBranchOpts) { MadeChange = false; - SmallPtrSet WorkList; + // Use a set vector to get deterministic iteration order. The order the + // blocks are removed may affect whether or not PHI nodes in successors + // are removed. + SmallSetVector WorkList; for (BasicBlock &BB : F) { SmallVector Successors(succ_begin(&BB), succ_end(&BB)); MadeChange |= ConstantFoldTerminator(&BB, true); @@ -478,7 +481,7 @@ MadeChange |= !WorkList.empty(); while (!WorkList.empty()) { BasicBlock *BB = *WorkList.begin(); - WorkList.erase(BB); + WorkList.remove(BB); SmallVector Successors(succ_begin(BB), succ_end(BB)); DeleteDeadBlock(BB);