mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[OpenMP][FIX] Use name + type checks not only name checks for calls
A call that is analyzed in an optimization needs to be verified against the name and type of the runtime function to avoid that we look at arguments that do not exist (anymore). This can happen if the signature was rewritten. Since we will not set RFI.Declaration if the type doesn't match we can use it (if it's not null) to determine if the signature is as expected. Differential Revision: https://reviews.llvm.org/D106341
This commit is contained in:
parent
59bc220605
commit
76691e60d6
@ -790,7 +790,8 @@ struct OpenMPOpt {
|
||||
Use &U, OMPInformationCache::RuntimeFunctionInfo *RFI = nullptr) {
|
||||
CallInst *CI = dyn_cast<CallInst>(U.getUser());
|
||||
if (CI && CI->isCallee(&U) && !CI->hasOperandBundles() &&
|
||||
(!RFI || CI->getCalledFunction() == RFI->Declaration))
|
||||
(!RFI ||
|
||||
(RFI->Declaration && CI->getCalledFunction() == RFI->Declaration)))
|
||||
return CI;
|
||||
return nullptr;
|
||||
}
|
||||
@ -801,7 +802,8 @@ struct OpenMPOpt {
|
||||
Value &V, OMPInformationCache::RuntimeFunctionInfo *RFI = nullptr) {
|
||||
CallInst *CI = dyn_cast<CallInst>(&V);
|
||||
if (CI && !CI->hasOperandBundles() &&
|
||||
(!RFI || CI->getCalledFunction() == RFI->Declaration))
|
||||
(!RFI ||
|
||||
(RFI->Declaration && CI->getCalledFunction() == RFI->Declaration)))
|
||||
return CI;
|
||||
return nullptr;
|
||||
}
|
||||
@ -2463,7 +2465,8 @@ ChangeStatus AAExecutionDomainFunction::updateImpl(Attributor &A) {
|
||||
// Match: -1 == __kmpc_target_init (for non-SPMD kernels only!)
|
||||
if (C->isAllOnesValue()) {
|
||||
auto *CB = dyn_cast<CallBase>(Cmp->getOperand(0));
|
||||
if (!CB || CB->getCalledFunction() != RFI.Declaration)
|
||||
CB = CB ? OpenMPOpt::getCallIfRegularCall(*CB, &RFI) : nullptr;
|
||||
if (!CB)
|
||||
return false;
|
||||
const int InitIsSPMDArgNo = 1;
|
||||
auto *IsSPMDModeCI =
|
||||
|
Loading…
x
Reference in New Issue
Block a user