diff options
| -rw-r--r-- | llvm/include/llvm/Transforms/IPO/Attributor.h | 8 | ||||
| -rw-r--r-- | llvm/lib/Transforms/IPO/Attributor.cpp | 5 |
2 files changed, 8 insertions, 5 deletions
diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h index 0b72394e8e9..435aaca75d1 100644 --- a/llvm/include/llvm/Transforms/IPO/Attributor.h +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h @@ -199,8 +199,12 @@ struct Attributor { const auto &KindToAbstractAttributeMap = AAMap.lookup({&V, ArgNo}); if (AAType *AA = static_cast<AAType *>( KindToAbstractAttributeMap.lookup(AAType::ID))) { - QueryMap[AA].insert(&QueryingAA); - return AA; + // Do not return an attribute with an invalid state. This minimizes checks + // at the calls sites and allows the fallback below to kick in. + if (AA->getState().isValidState()) { + QueryMap[AA].insert(&QueryingAA); + return AA; + } } // If no abstract attribute was found and we look for a call site argument, diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index 85aa7a63ada..5fea3d0b87a 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -655,7 +655,7 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) { // Try to find a assumed unique return value for the called function. auto *RetCSAA = A.getAAFor<AAReturnedValuesImpl>(*this, *RV); - if (!RetCSAA || !RetCSAA->isValidState()) { + if (!RetCSAA) { HasOverdefinedReturnedCalls = true; LLVM_DEBUG(dbgs() << "[AAReturnedValues] Returned call site (" << *RV << ") with " << (RetCSAA ? "invalid" : "no") @@ -965,8 +965,7 @@ ChangeStatus AANoFreeFunction::updateImpl(Attributor &A) { auto ICS = ImmutableCallSite(I); auto *NoFreeAA = A.getAAFor<AANoFreeFunction>(*this, *I); - if ((!NoFreeAA || !NoFreeAA->isValidState() || - !NoFreeAA->isAssumedNoFree()) && + if ((!NoFreeAA || !NoFreeAA->isAssumedNoFree()) && !ICS.hasFnAttr(Attribute::NoFree)) { indicatePessimisticFixpoint(); return ChangeStatus::CHANGED; |

