================ @@ -1967,11 +1969,23 @@ void llvm::updateProfileCallee( uint64_t CloneEntryCount = PriorEntryCount - NewEntryCount; for (auto Entry : *VMap) { if (isa<CallInst>(Entry.first)) - if (auto *CI = dyn_cast_or_null<CallInst>(Entry.second)) + if (auto *CI = dyn_cast_or_null<CallInst>(Entry.second)) { ---------------- minglotus-6 wrote:
Makes sense to not further duplicate the code. How about something like this? ``` if (isa<CallBase>(Entry.first)) { if(auto* CB = dyn_cast_or_null<CallBase>(Entry.Base)) { CB->updateProfWeight(... Instruction* VPtr = PGOIndirectCallVisitor::tryGetVTableInstruction(CB); if (VPtr) scaleProfData(VPtr...) } ``` `CallBase` is the base class of five IR instructions [1] now. Among them `CoroAwaitSuspendInst` [1] and `GCStatePointInst` [2] are relatively new; the rest three are well understood. Despite more derived classes of `CallBase` might be added for new cases, the code above should be future-proof since `updateProfWeight` and `scaleProfData` are programmed to `!prof` (not `CallBase`). [1] https://github.com/llvm/llvm-project/blob/692ae5443b1778e138527ef55d799a4b535a36f9/llvm/lib/Transforms/Coroutines/CoroInstr.h#L85-L88 [2] https://github.com/llvm/llvm-project/blob/692ae5443b1778e138527ef55d799a4b535a36f9/llvm/include/llvm/IR/Statepoint.h#L61-L63 https://github.com/llvm/llvm-project/pull/81442 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits