本文整理汇总了C++中NamedMDNode::operands方法的典型用法代码示例。如果您正苦于以下问题:C++ NamedMDNode::operands方法的具体用法?C++ NamedMDNode::operands怎么用?C++ NamedMDNode::operands使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NamedMDNode
的用法示例。
在下文中一共展示了NamedMDNode::operands方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: buildBitSets
void DevirtModule::buildBitSets(
std::vector<VTableBits> &Bits,
DenseMap<Metadata *, std::set<BitSetInfo>> &BitSets) {
NamedMDNode *BitSetNM = M.getNamedMetadata("llvm.bitsets");
if (!BitSetNM)
return;
DenseMap<GlobalVariable *, VTableBits *> GVToBits;
Bits.reserve(BitSetNM->getNumOperands());
for (auto Op : BitSetNM->operands()) {
auto OpConstMD = dyn_cast_or_null<ConstantAsMetadata>(Op->getOperand(1));
if (!OpConstMD)
continue;
auto BitSetID = Op->getOperand(0).get();
Constant *OpConst = OpConstMD->getValue();
if (auto GA = dyn_cast<GlobalAlias>(OpConst))
OpConst = GA->getAliasee();
auto OpGlobal = dyn_cast<GlobalVariable>(OpConst);
if (!OpGlobal)
continue;
uint64_t Offset =
cast<ConstantInt>(
cast<ConstantAsMetadata>(Op->getOperand(2))->getValue())
->getZExtValue();
VTableBits *&BitsPtr = GVToBits[OpGlobal];
if (!BitsPtr) {
Bits.emplace_back();
Bits.back().GV = OpGlobal;
Bits.back().ObjectSize = M.getDataLayout().getTypeAllocSize(
OpGlobal->getInitializer()->getType());
BitsPtr = &Bits.back();
}
BitSets[BitSetID].insert({BitsPtr, Offset});
}
}