================ @@ -1210,12 +1210,22 @@ Instruction *Instruction::cloneImpl() const { void Instruction::swapProfMetadata() { MDNode *ProfileData = getBranchWeightMDNode(*this); - if (!ProfileData || ProfileData->getNumOperands() != 3) + if (!isBranchWeightMD(ProfileData)) return; - // The first operand is the name. Fetch them backwards and build a new one. - Metadata *Ops[] = {ProfileData->getOperand(0), ProfileData->getOperand(2), - ProfileData->getOperand(1)}; + SmallVector<Metadata *, 4> Ops; + unsigned int FirstIdx = getBranchWeightOffset(ProfileData); + unsigned int SecondIdx = FirstIdx + 1; + // If there are more weights past the second, we can't swap them + if (ProfileData->getNumOperands() > SecondIdx + 1) + return; + Ops.push_back(ProfileData->getOperand(0)); + if (hasExpectedProvenance(ProfileData)) { + Ops.push_back(ProfileData->getOperand(1)); + } ---------------- MatzeB wrote:
Maybe this (I just have a feeling that leaving it more generic may help in case new sources are added one day): ```suggestion for (unsigned I = 0; I < FirstIdx; I++) { Ops.push_back(ProfileData->getOperand(I)); } ``` https://github.com/llvm/llvm-project/pull/86609 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits