D51664 added Instruction::comesBefore which should provide better
performance than the manual check.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Unit Tests
Time | Test | |
---|---|---|
130 ms | lldb-unit.Host/_/HostTests::Unknown Unit Message ("") |
Event Timeline
llvm/lib/Analysis/ValueTracking.cpp | ||
---|---|---|
652 | Isn't the !DT condition still relevant here? If we have DT, then this was already covered by the domination check. Generally, I think this code is a bit convoluted, and I think it would be clearer to rewrite along these lines: BasicBlock *InvBB = Inv->getParent(), *CxtBB = CxtI->getParent(); if (InvBB != CxtBB) { if (DT) return DT->dominates(InvBB, CxtBB); else // We don't have a DT, but this trivially dominates. return InvBB == CxtBB->getSinglePredecessor(); } // If Inv and CtxI are in the same block, check if the assume (Inv) is first // in the BB. if (Inv->comesBefore(CxtI)) return true; // Rest of the code... |
Generally, I think this code is a bit convoluted, and I think it would be clearer to rewrite along these lines.
Agreed, I've restructured the code a bit. It seemed a bit more straight forward to check and handle the case were both instructions are in the same BB up front, followed by the DT check. WDYT?
clang-format-diff not found in user's PATH; not linting file.