diff options
author | Sam Parker <sam.parker@arm.com> | 2020-09-28 15:46:56 +0100 |
---|---|---|
committer | Sam Parker <sam.parker@arm.com> | 2020-09-30 08:10:48 +0100 |
commit | 700f93e92b6d4cdbab66133f75c143c9677f2d41 (patch) | |
tree | b546b90fc7a8dc1e0c893ac39b89bfd5382472a3 /llvm/lib/CodeGen/ReachingDefAnalysis.cpp | |
parent | 195c22f2733cf923b932412f0fe212f4ef397d2c (diff) | |
download | llvm-700f93e92b6d4cdbab66133f75c143c9677f2d41.zip llvm-700f93e92b6d4cdbab66133f75c143c9677f2d41.tar.gz llvm-700f93e92b6d4cdbab66133f75c143c9677f2d41.tar.bz2 |
[RDA] Switch isSafeToMove iterators
So forwards is forwards and backwards is reverse. Also add a check
so that we know the instructions are in the expected order.
Differential Revision: https://reviews.llvm.org/D88419
Diffstat (limited to 'llvm/lib/CodeGen/ReachingDefAnalysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/ReachingDefAnalysis.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/ReachingDefAnalysis.cpp b/llvm/lib/CodeGen/ReachingDefAnalysis.cpp index f553bad..63989bd 100644 --- a/llvm/lib/CodeGen/ReachingDefAnalysis.cpp +++ b/llvm/lib/CodeGen/ReachingDefAnalysis.cpp @@ -540,7 +540,7 @@ static bool mayHaveSideEffects(MachineInstr &MI) { template<typename Iterator> bool ReachingDefAnalysis::isSafeToMove(MachineInstr *From, MachineInstr *To) const { - if (From->getParent() != To->getParent()) + if (From->getParent() != To->getParent() || From == To) return false; SmallSet<int, 2> Defs; @@ -569,12 +569,22 @@ bool ReachingDefAnalysis::isSafeToMove(MachineInstr *From, bool ReachingDefAnalysis::isSafeToMoveForwards(MachineInstr *From, MachineInstr *To) const { - return isSafeToMove<MachineBasicBlock::reverse_iterator>(From, To); + using Iterator = MachineBasicBlock::iterator; + // Walk forwards until we find the instruction. + for (auto I = Iterator(From), E = From->getParent()->end(); I != E; ++I) + if (&*I == To) + return isSafeToMove<Iterator>(From, To); + return false; } bool ReachingDefAnalysis::isSafeToMoveBackwards(MachineInstr *From, MachineInstr *To) const { - return isSafeToMove<MachineBasicBlock::iterator>(From, To); + using Iterator = MachineBasicBlock::reverse_iterator; + // Walk backwards until we find the instruction. + for (auto I = Iterator(From), E = From->getParent()->rend(); I != E; ++I) + if (&*I == To) + return isSafeToMove<Iterator>(From, To); + return false; } bool ReachingDefAnalysis::isSafeToRemove(MachineInstr *MI, |