mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Always emit a function pointer as a pointer to the function stub (if there is one). This makes it possible to compare function pointer values in lazy compilation mode. This fixes PR3043.
llvm-svn: 59265
This commit is contained in:
parent
0cefa8f2ff
commit
f8ba919d76
@ -115,6 +115,10 @@ namespace {
|
||||
TheJITResolver = 0;
|
||||
}
|
||||
|
||||
/// getFunctionStubIfAvailable - This returns a pointer to a function stub
|
||||
/// if it has already been created.
|
||||
void *getFunctionStubIfAvailable(Function *F);
|
||||
|
||||
/// getFunctionStub - This returns a pointer to a function stub, creating
|
||||
/// one on demand as needed.
|
||||
void *getFunctionStub(Function *F);
|
||||
@ -151,6 +155,16 @@ namespace {
|
||||
|
||||
JITResolver *JITResolver::TheJITResolver = 0;
|
||||
|
||||
/// getFunctionStubIfAvailable - This returns a pointer to a function stub
|
||||
/// if it has already been created.
|
||||
void *JITResolver::getFunctionStubIfAvailable(Function *F) {
|
||||
MutexGuard locked(TheJIT->lock);
|
||||
|
||||
// If we already have a stub for this function, recycle it.
|
||||
void *&Stub = state.getFunctionToStubMap(locked)[F];
|
||||
return Stub;
|
||||
}
|
||||
|
||||
/// getFunctionStub - This returns a pointer to a function stub, creating
|
||||
/// one on demand as needed.
|
||||
void *JITResolver::getFunctionStub(Function *F) {
|
||||
@ -596,7 +610,12 @@ void *JITEmitter::getPointerToGlobal(GlobalValue *V, void *Reference,
|
||||
|
||||
// If we have already compiled the function, return a pointer to its body.
|
||||
Function *F = cast<Function>(V);
|
||||
void *ResultPtr = TheJIT->getPointerToGlobalIfAvailable(F);
|
||||
void *ResultPtr;
|
||||
if (!DoesntNeedStub)
|
||||
// Return the function stub if it's already created.
|
||||
ResultPtr = Resolver.getFunctionStubIfAvailable(F);
|
||||
else
|
||||
ResultPtr = TheJIT->getPointerToGlobalIfAvailable(F);
|
||||
if (ResultPtr) return ResultPtr;
|
||||
|
||||
if (F->isDeclaration() && !F->hasNotBeenReadFromBitcode()) {
|
||||
|
Loading…
Reference in New Issue
Block a user