mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-28 06:27:16 +00:00
Remap the call sites of a shared function in interrupt line functions.
llvm-svn: 96591
This commit is contained in:
parent
49c6de3b78
commit
7534497c21
@ -270,3 +270,27 @@ PIC16Cloner::cloneFunction(Function *OrgF) {
|
||||
}
|
||||
|
||||
|
||||
// Remap the call sites of shared functions, that are in IL.
|
||||
// Change the IL call site of a shared function to its clone.
|
||||
//
|
||||
void PIC16Cloner::
|
||||
remapAllSites(Function *Caller, Function *OrgF, Function *Clone) {
|
||||
// First find the caller to update. If the caller itself is cloned
|
||||
// then use the cloned caller. Otherwise use it.
|
||||
cloned_map_iterator cm_it = ClonedFunctionMap.find(Caller);
|
||||
if (cm_it != ClonedFunctionMap.end())
|
||||
Caller = cm_it->second;
|
||||
|
||||
// For the lack of a better call site finding mechanism, iterate over
|
||||
// all insns to find the uses of original fn.
|
||||
for (Function::iterator BI = Caller->begin(); BI != Caller->end(); ++BI) {
|
||||
BasicBlock &BB = *BI;
|
||||
for (BasicBlock::iterator II = BB.begin(); II != BB.end(); ++II) {
|
||||
if (II->getNumOperands() > 0 && II->getOperand(0) == OrgF)
|
||||
II->setOperand(0, Clone);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -55,6 +55,9 @@ namespace llvm {
|
||||
// Clone all shared functions.
|
||||
void cloneSharedFunctions(CallGraphNode *isrCGN);
|
||||
|
||||
// Remap all call sites to the shared function.
|
||||
void remapAllSites(Function *Caller, Function *OrgF, Function *Clone);
|
||||
|
||||
// Error reporting for PIC16Pass
|
||||
void reportError(string ErrorString, vector<string> &Values);
|
||||
void reportError(string ErrorString);
|
||||
|
Loading…
Reference in New Issue
Block a user