Lines Matching defs:BaseNode
7220 /// Verify that \p BaseNode can be used as the "base type" in the struct-path
7221 /// TBAA scheme. This means \p BaseNode is either a scalar node, or a
7224 TBAAVerifier::verifyTBAABaseNode(Instruction &I, const MDNode *BaseNode,
7226 if (BaseNode->getNumOperands() < 2) {
7227 CheckFailed("Base nodes must have at least two operands", &I, BaseNode);
7231 auto Itr = TBAABaseNodes.find(BaseNode);
7235 auto Result = verifyTBAABaseNodeImpl(I, BaseNode, IsNewFormat);
7236 auto InsertResult = TBAABaseNodes.insert({BaseNode, Result});
7243 TBAAVerifier::verifyTBAABaseNodeImpl(Instruction &I, const MDNode *BaseNode,
7247 if (BaseNode->getNumOperands() == 2) {
7249 return isValidScalarTBAANode(BaseNode)
7255 if (BaseNode->getNumOperands() % 3 != 0) {
7257 "multiple of 3!", BaseNode);
7261 if (BaseNode->getNumOperands() % 2 != 1) {
7263 BaseNode);
7271 BaseNode->getOperand(1));
7273 CheckFailed("Type size nodes must be constants!", &I, BaseNode);
7279 if (!IsNewFormat && !isa<MDString>(BaseNode->getOperand(0))) {
7281 BaseNode);
7290 // We've already checked that BaseNode is not a degenerate root node with one
7294 for (unsigned Idx = FirstFieldOpNo; Idx < BaseNode->getNumOperands();
7296 const MDOperand &FieldTy = BaseNode->getOperand(Idx);
7297 const MDOperand &FieldOffset = BaseNode->getOperand(Idx + 1);
7299 CheckFailed("Incorrect field entry in struct type node!", &I, BaseNode);
7307 CheckFailed("Offset entries must be constants!", &I, BaseNode);
7318 BaseNode);
7332 CheckFailed("Offsets must be increasing!", &I, BaseNode);
7340 BaseNode->getOperand(Idx + 2));
7342 CheckFailed("Member size entries must be constants!", &I, BaseNode);
7390 /// Returns the field node at the offset \p Offset in \p BaseNode. Update \p
7393 /// We assume we've okayed \p BaseNode via \c verifyTBAABaseNode.
7395 const MDNode *BaseNode,
7398 assert(BaseNode->getNumOperands() >= 2 && "Invalid base node!");
7403 if (BaseNode->getNumOperands() == 2)
7404 return cast<MDNode>(BaseNode->getOperand(1));
7408 for (unsigned Idx = FirstFieldOpNo; Idx < BaseNode->getNumOperands();
7411 mdconst::extract<ConstantInt>(BaseNode->getOperand(Idx + 1));
7415 BaseNode, &Offset);
7421 mdconst::extract<ConstantInt>(BaseNode->getOperand(PrevIdx + 1));
7423 return cast<MDNode>(BaseNode->getOperand(PrevIdx));
7427 unsigned LastIdx = BaseNode->getNumOperands() - NumOpsPerField;
7429 BaseNode->getOperand(LastIdx + 1));
7431 return cast<MDNode>(BaseNode->getOperand(LastIdx));
7459 MDNode *BaseNode = dyn_cast_or_null<MDNode>(MD->getOperand(0));
7493 CheckTBAA(BaseNode && AccessType,
7496 &I, MD, BaseNode, AccessType);
7512 for (/* empty */; BaseNode && !IsRootTBAANode(BaseNode);
7513 BaseNode = getFieldNodeFromTBAABaseNode(I, BaseNode, Offset,
7515 if (!StructPath.insert(BaseNode).second) {
7522 std::tie(Invalid, BaseNodeBitWidth) = verifyTBAABaseNode(I, BaseNode,
7530 SeenAccessTypeInPath |= BaseNode == AccessType;
7532 if (isValidScalarTBAANode(BaseNode) || BaseNode == AccessType)