mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-15 07:59:33 +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.
|
// Clone all shared functions.
|
||||||
void cloneSharedFunctions(CallGraphNode *isrCGN);
|
void cloneSharedFunctions(CallGraphNode *isrCGN);
|
||||||
|
|
||||||
|
// Remap all call sites to the shared function.
|
||||||
|
void remapAllSites(Function *Caller, Function *OrgF, Function *Clone);
|
||||||
|
|
||||||
// Error reporting for PIC16Pass
|
// Error reporting for PIC16Pass
|
||||||
void reportError(string ErrorString, vector<string> &Values);
|
void reportError(string ErrorString, vector<string> &Values);
|
||||||
void reportError(string ErrorString);
|
void reportError(string ErrorString);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user