From aaf7f05a96e6c21b7a6d1ad9e73fb7ab5eee7d83 Mon Sep 17 00:00:00 2001 From: Whitney Tsang Date: Mon, 25 Nov 2019 17:51:24 +0000 Subject: [NFC][LoopFusion] Use isControlFlowEquivalent() from CodeMoverUtils. Reviewer: kbarton, jdoerfert, Meinersbur, bmahjour, etiotto Reviewed By: Meinersbur Subscribers: hiraditya, llvm-commits Tag: LLVM Differential Revision: https://reviews.llvm.org/D70619 --- llvm/lib/Transforms/Utils/CodeMoverUtils.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Transforms/Utils/CodeMoverUtils.cpp') diff --git a/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp b/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp index 5aab27fa094..7a3a8adfea8 100644 --- a/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp +++ b/llvm/lib/Transforms/Utils/CodeMoverUtils.cpp @@ -33,10 +33,17 @@ STATISTIC(NotMovedTerminator, "Movement of Terminator are not supported"); bool llvm::isControlFlowEquivalent(const Instruction &I0, const Instruction &I1, const DominatorTree &DT, const PostDominatorTree &PDT) { - const BasicBlock *BB0 = I0.getParent(); - const BasicBlock *BB1 = I1.getParent(); - return ((DT.dominates(BB0, BB1) && PDT.dominates(BB1, BB0)) || - (PDT.dominates(BB0, BB1) && DT.dominates(BB1, BB0))); + return isControlFlowEquivalent(*I0.getParent(), *I1.getParent(), DT, PDT); +} + +bool llvm::isControlFlowEquivalent(const BasicBlock &BB0, const BasicBlock &BB1, + const DominatorTree &DT, + const PostDominatorTree &PDT) { + if (&BB0 == &BB1) + return true; + + return ((DT.dominates(&BB0, &BB1) && PDT.dominates(&BB1, &BB0)) || + (PDT.dominates(&BB0, &BB1) && DT.dominates(&BB1, &BB0))); } static bool reportInvalidCandidate(const Instruction &I, -- cgit v1.2.3