diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/FlattenCFG.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/FlattenCFG.cpp | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Utils/FlattenCFG.cpp b/llvm/lib/Transforms/Utils/FlattenCFG.cpp index 2fb2ab82e41a..1925b91c4da7 100644 --- a/llvm/lib/Transforms/Utils/FlattenCFG.cpp +++ b/llvm/lib/Transforms/Utils/FlattenCFG.cpp @@ -487,17 +487,10 @@ bool FlattenCFGOpt::MergeIfRegion(BasicBlock *BB, IRBuilder<> &Builder) { BasicBlock::iterator SaveInsertPt = Builder.GetInsertPoint(); Builder.SetInsertPoint(PBI); if (InvertCond2) { - // If this is a "cmp" instruction, only used for branching (and nowhere - // else), then we can simply invert the predicate. - auto Cmp2 = dyn_cast<CmpInst>(CInst2); - if (Cmp2 && Cmp2->hasOneUse()) - Cmp2->setPredicate(Cmp2->getInversePredicate()); - else - CInst2 = cast<Instruction>(Builder.CreateNot(CInst2)); - PBI->swapSuccessors(); + InvertBranch(PBI, Builder); } - Value *NC = Builder.CreateBinOp(CombineOp, CInst1, CInst2); - PBI->replaceUsesOfWith(CInst2, NC); + Value *NC = Builder.CreateBinOp(CombineOp, CInst1, PBI->getCondition()); + PBI->replaceUsesOfWith(PBI->getCondition(), NC); Builder.SetInsertPoint(SaveInsertBB, SaveInsertPt); // Handle PHI node to replace its predecessors to FirstEntryBlock. |