diff options
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp index 49d5cb34a0d..be50288849c 100644 --- a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp +++ b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp @@ -208,7 +208,16 @@ bool HexagonOptAddrMode::allValidCandidates(NodeAddr<StmtNode *> SA, NodeAddr<UseNode *> UN = *I; RegisterRef UR = UN.Addr->getRegRef(*DFG); NodeSet Visited, Defs; - const auto &ReachingDefs = LV->getAllReachingDefsRec(UR, UN, Visited, Defs); + const auto &P = LV->getAllReachingDefsRec(UR, UN, Visited, Defs); + if (!P.second) { + DEBUG({ + dbgs() << "*** Unable to collect all reaching defs for use ***\n" + << PrintNode<UseNode*>(UN, *DFG) << '\n' + << "The program's complexity may exceed the limits.\n"; + }); + return false; + } + const auto &ReachingDefs = P.first; if (ReachingDefs.size() > 1) { DEBUG({ dbgs() << "*** Multiple Reaching Defs found!!! ***\n"; |