diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp index 1ca1e311449f43fc525867bf4a9e63af911db5f7..8286cd05a035a59442c686007504a1938b4d9e01 100644 --- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -255,11 +255,12 @@ static void findNonImmUse(SDNode *Use, SDNode* Def, SDNode *ImmedUse, continue; if (N == Def) { if (Use == ImmedUse) - continue; // We are not looking for immediate use. + continue; // We are not looking for immediate use. if (Use == Root) { + // Must be a chain reading node where it is possible to reach its own + // chain operand through a path started from another operand. assert(Use->getOpcode() == ISD::STORE || Use->getOpcode() == X86ISD::CMP || - Use->getOpcode() == ISD::INTRINSIC_WO_CHAIN || Use->getOpcode() == ISD::INTRINSIC_W_CHAIN || Use->getOpcode() == ISD::INTRINSIC_VOID); continue;