================
@@ -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

Reply via email to