[llvm] c5e6872 - [Attributor] Guarantee getAAFor not to update AA in the manifestation stage
Shinji Okumura via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 27 12:09:46 PDT 2020
Author: Shinji Okumura
Date: 2020-08-28T04:07:42+09:00
New Revision: c5e6872ec6e5269a6d92098765eec266ed4ce4ae
URL: https://github.com/llvm/llvm-project/commit/c5e6872ec6e5269a6d92098765eec266ed4ce4ae
DIFF: https://github.com/llvm/llvm-project/commit/c5e6872ec6e5269a6d92098765eec266ed4ce4ae.diff
LOG: [Attributor] Guarantee getAAFor not to update AA in the manifestation stage
If we query an AA with `Attributor::getAAFor` in `AbstractAttribute::manifest`, the AA may be updated.
This patch makes use of the phase flag in Attributor, and handle `getAAFor` behavior according to the flag.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D86635
Added:
Modified:
llvm/include/llvm/Transforms/IPO/Attributor.h
llvm/lib/Transforms/IPO/Attributor.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h
index 7a53a0b17f42..7c5254d6537d 100644
--- a/llvm/include/llvm/Transforms/IPO/Attributor.h
+++ b/llvm/include/llvm/Transforms/IPO/Attributor.h
@@ -969,6 +969,7 @@ struct Attributor {
/// attribute. Using this after Attributor started running is restricted to
/// only the Attributor itself. Initial seeding of AAs can be done via this
/// function.
+ /// NOTE: ForceUpdate is ignored in any stage other than the update stage.
template <typename AAType>
const AAType &getOrCreateAAFor(const IRPosition &IRP,
const AbstractAttribute *QueryingAA = nullptr,
@@ -976,7 +977,7 @@ struct Attributor {
DepClassTy DepClass = DepClassTy::OPTIONAL,
bool ForceUpdate = false) {
if (AAType *AAPtr = lookupAAFor<AAType>(IRP, QueryingAA, TrackDependence)) {
- if (ForceUpdate)
+ if (ForceUpdate && Phase == AttributorPhase::UPDATE)
updateAA(*AAPtr);
return *AAPtr;
}
@@ -1020,6 +1021,13 @@ struct Attributor {
return AA;
}
+ // If this is queried in the manifest stage, we force the AA to indicate
+ // pessimistic fixpoint immediately.
+ if (Phase == AttributorPhase::MANIFEST) {
+ AA.getState().indicatePessimisticFixpoint();
+ return AA;
+ }
+
// Allow seeded attributes to declare dependencies.
// Remember the seeding state.
AttributorPhase OldPhase = Phase;
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 6e72d278a9be..48565a4678cc 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -1347,6 +1347,8 @@ ChangeStatus Attributor::run() {
ChangeStatus Attributor::updateAA(AbstractAttribute &AA) {
TimeTraceScope TimeScope(AA.getName() + "::updateAA");
+ assert(Phase == AttributorPhase::UPDATE &&
+ "We can update AA only in the update stage!");
// Use a new dependence vector for this update.
DependenceVector DV;
More information about the llvm-commits
mailing list