[Openmp-commits] [PATCH] D106085: [OpenMP] Fix carefully track SPMDCompatibilityTracker
Johannes Doerfert via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Thu Jul 15 11:13:47 PDT 2021
jdoerfert created this revision.
jdoerfert added reviewers: tianshilei1992, ggeorgakoudis, jhuber6.
Herald added subscribers: ormris, guansong, bollu, hiraditya, yaxunl.
jdoerfert requested review of this revision.
Herald added subscribers: llvm-commits, sstefan1.
Herald added a project: LLVM.
We did not properly use SPMDCompatibilityTracker in various places.
This patch makes sure we look at the validity properly and also fix
the state if we can.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D106085
Files:
llvm/lib/Transforms/IPO/OpenMPOpt.cpp
Index: llvm/lib/Transforms/IPO/OpenMPOpt.cpp
===================================================================
--- llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -2793,7 +2793,7 @@
// __kmpc_target_init or
// __kmpc_target_deinit call. We will answer this one with the internal
// state.
- if (!isValidState())
+ if (!SPMDCompatibilityTracker.isValidState())
return nullptr;
if (!SPMDCompatibilityTracker.isAtFixpoint()) {
if (AA)
@@ -3209,17 +3209,19 @@
};
bool UsedAssumedInformationInCheckRWInst = false;
- if (!A.checkForAllReadWriteInstructions(
- CheckRWInst, *this, UsedAssumedInformationInCheckRWInst))
- SPMDCompatibilityTracker.indicatePessimisticFixpoint();
+ if (!SPMDCompatibilityTracker.isAtFixpoint())
+ if (!A.checkForAllReadWriteInstructions(
+ CheckRWInst, *this, UsedAssumedInformationInCheckRWInst))
+ SPMDCompatibilityTracker.indicatePessimisticFixpoint();
// Callback to check a call instruction.
+ bool AllSPMDStatesWereFixed = true;
auto CheckCallInst = [&](Instruction &I) {
auto &CB = cast<CallBase>(I);
auto &CBAA = A.getAAFor<AAKernelInfo>(
*this, IRPosition::callsite_function(CB), DepClassTy::OPTIONAL);
- if (CBAA.getState().isValidState())
- getState() ^= CBAA.getState();
+ getState() ^= CBAA.getState();
+ AllSPMDStatesWereFixed &= CBAA.SPMDCompatibilityTracker.isAtFixpoint();
return true;
};
@@ -3228,6 +3230,12 @@
CheckCallInst, *this, UsedAssumedInformationInCheckCallInst))
return indicatePessimisticFixpoint();
+ // If we haven't used any assumed information for the SPMD state we can fix
+ // it.
+ if (!UsedAssumedInformationInCheckRWInst &&
+ !UsedAssumedInformationInCheckCallInst && AllSPMDStatesWereFixed)
+ SPMDCompatibilityTracker.indicateOptimisticFixpoint();
+
return StateBefore == getState() ? ChangeStatus::UNCHANGED
: ChangeStatus::CHANGED;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106085.359059.patch
Type: text/x-patch
Size: 2115 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20210715/af1f198c/attachment-0001.bin>
More information about the Openmp-commits
mailing list