Lines Matching defs:ProfileData
71 static void extractFromBranchWeightMD(const MDNode *ProfileData,
73 assert(isBranchWeightMD(ProfileData) && "wrong metadata");
75 unsigned NOps = ProfileData->getNumOperands();
76 unsigned WeightsIdx = getBranchWeightOffset(ProfileData);
82 mdconst::dyn_extract<ConstantInt>(ProfileData->getOperand(Idx));
98 bool isBranchWeightMD(const MDNode *ProfileData) {
99 return isTargetMD(ProfileData, "branch_weights", MinBWOps);
102 bool isValueProfileMD(const MDNode *ProfileData) {
103 return isTargetMD(ProfileData, "VP", MinVPOps);
107 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
108 return isBranchWeightMD(ProfileData);
112 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
114 if (isValueProfileMD(ProfileData))
118 return isa<CallBase>(I) && !isBranchWeightMD(ProfileData);
126 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
127 return hasBranchWeightOrigin(ProfileData);
130 bool hasBranchWeightOrigin(const MDNode *ProfileData) {
131 if (!isBranchWeightMD(ProfileData))
133 auto *ProfDataName = dyn_cast<MDString>(ProfileData->getOperand(1));
141 unsigned getBranchWeightOffset(const MDNode *ProfileData) {
142 return hasBranchWeightOrigin(ProfileData) ? 2 : 1;
145 unsigned getNumBranchWeights(const MDNode &ProfileData) {
146 return ProfileData.getNumOperands() - getBranchWeightOffset(&ProfileData);
150 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
151 if (!isBranchWeightMD(ProfileData))
153 return ProfileData;
157 auto *ProfileData = getBranchWeightMDNode(I);
158 if (ProfileData && getNumBranchWeights(*ProfileData) == I.getNumSuccessors())
159 return ProfileData;
163 void extractFromBranchWeightMD32(const MDNode *ProfileData,
165 extractFromBranchWeightMD(ProfileData, Weights);
168 void extractFromBranchWeightMD64(const MDNode *ProfileData,
170 extractFromBranchWeightMD(ProfileData, Weights);
173 bool extractBranchWeights(const MDNode *ProfileData,
175 if (!isBranchWeightMD(ProfileData))
177 extractFromBranchWeightMD(ProfileData, Weights);
183 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
184 return extractBranchWeights(ProfileData, Weights);
195 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
196 if (!extractBranchWeights(ProfileData, Weights))
207 bool extractProfTotalWeight(const MDNode *ProfileData, uint64_t &TotalVal) {
209 if (!ProfileData)
212 auto *ProfDataName = dyn_cast<MDString>(ProfileData->getOperand(0));
217 unsigned Offset = getBranchWeightOffset(ProfileData);
218 for (unsigned Idx = Offset; Idx < ProfileData->getNumOperands(); ++Idx) {
219 auto *V = mdconst::dyn_extract<ConstantInt>(ProfileData->getOperand(Idx));
226 if (ProfDataName->getString() == "VP" && ProfileData->getNumOperands() > 3) {
227 TotalVal = mdconst::dyn_extract<ConstantInt>(ProfileData->getOperand(2))
248 auto *ProfileData = I.getMetadata(LLVMContext::MD_prof);
249 if (ProfileData == nullptr)
252 auto *ProfDataName = dyn_cast<MDString>(ProfileData->getOperand(0));
264 Vals.push_back(ProfileData->getOperand(0));
267 ProfileData->getNumOperands() > 0) {
271 ProfileData->getOperand(getBranchWeightOffset(ProfileData)))
278 for (unsigned i = 1; i < ProfileData->getNumOperands(); i += 2) {
280 Vals.push_back(ProfileData->getOperand(i));
282 mdconst::dyn_extract<ConstantInt>(ProfileData->getOperand(i + 1))
287 Vals.push_back(ProfileData->getOperand(i + 1));