Lines Matching defs:ED

2737       const ExecutionDomainTy &ED = CB ? CEDMap[{CB, PRE}] : BEDMap[nullptr];
2738 if (!ED.IsReachedFromAlignedBarrierOnly ||
2739 ED.EncounteredNonLocalSideEffect)
2741 if (!ED.EncounteredAssumes.empty() && !A.isModulePass())
2756 } else if (!ED.AlignedBarriers.empty()) {
2758 SmallVector<CallBase *> Worklist(ED.AlignedBarriers.begin(),
2759 ED.AlignedBarriers.end());
2785 if (!ED.EncounteredAssumes.empty() && (CB || !ED.AlignedBarriers.empty()))
2786 for (auto *AssumeCB : ED.EncounteredAssumes)
2805 /// \p ED.
2807 mergeInPredecessorBarriersAndAssumptions(Attributor &A, ExecutionDomainTy &ED,
2810 /// Merge all information from \p PredED into the successor \p ED. If
2812 /// represented by \p ED from this predecessor.
2813 bool mergeInPredecessor(Attributor &A, ExecutionDomainTy &ED,
2987 Attributor &A, ExecutionDomainTy &ED, const ExecutionDomainTy &PredED) {
2989 ED.addAssumeInst(A, *EA);
2992 ED.addAlignedBarrier(A, *AB);
2996 Attributor &A, ExecutionDomainTy &ED, const ExecutionDomainTy &PredED,
3001 setAndRecord(ED.IsExecutedByInitialThreadOnly,
3003 ED.IsExecutedByInitialThreadOnly));
3005 Changed |= setAndRecord(ED.IsReachedFromAlignedBarrierOnly,
3006 ED.IsReachedFromAlignedBarrierOnly &&
3008 Changed |= setAndRecord(ED.EncounteredNonLocalSideEffect,
3009 ED.EncounteredNonLocalSideEffect |
3012 if (ED.IsReachedFromAlignedBarrierOnly)
3013 mergeInPredecessorBarriersAndAssumptions(A, ED, PredED);
3015 ED.clearAssumeInstAndAlignedBarriers();
3078 // traversal. \p CB is the aligned barrier, \p ED is the execution domain when
3080 auto HandleAlignedBarrier = [&](CallBase &CB, ExecutionDomainTy &ED) {
3082 // First, update the barrier ED kept in the separate CEDMap.
3084 Changed |= mergeInPredecessor(A, CallInED, ED);
3086 // Next adjust the ED we use for the traversal.
3087 ED.EncounteredNonLocalSideEffect = false;
3088 ED.IsReachedFromAlignedBarrierOnly = true;
3090 ED.clearAssumeInstAndAlignedBarriers();
3091 ED.addAlignedBarrier(A, CB);
3093 Changed |= mergeInPredecessor(A, CallOutED, ED);
3112 ExecutionDomainTy ED;
3115 Changed |= handleCallees(A, ED);
3127 mergeInPredecessor(A, ED, BEDMap[PredBB], InitialEdgeOnly);
3131 // Now we traverse the block, accumulate effects in ED and attach
3144 ED.addAssumeInst(A, *AI);
3153 if (!ED.EncounteredNonLocalSideEffect) {
3155 if (ED.IsReachedFromAlignedBarrierOnly)
3193 HandleAlignedBarrier(*CB, ED);
3201 if (!ED.EncounteredNonLocalSideEffect &&
3203 ED.EncounteredNonLocalSideEffect = true;
3205 ED.IsReachedFromAlignedBarrierOnly = false;
3212 // call in ED for potential use by the callee.
3214 Changed |= mergeInPredecessor(A, CallInED, ED);
3225 ED.IsReachedFromAlignedBarrierOnly =
3227 AlignedBarrierLastInBlock = ED.IsReachedFromAlignedBarrierOnly;
3229 ED.EncounteredNonLocalSideEffect |=
3232 ED.EncounteredNonLocalSideEffect =
3240 mergeInPredecessorBarriersAndAssumptions(A, ED, CalleeED);
3242 Changed |= mergeInPredecessor(A, CallOutED, ED);
3247 ED.IsReachedFromAlignedBarrierOnly = false;
3251 AlignedBarrierLastInBlock &= ED.IsReachedFromAlignedBarrierOnly;
3252 ED.EncounteredNonLocalSideEffect |= !CB->doesNotAccessMemory();
3254 Changed |= mergeInPredecessor(A, CallOutED, ED);
3285 if (!ED.EncounteredNonLocalSideEffect &&
3287 ED.EncounteredNonLocalSideEffect = true;
3294 Changed |= mergeInPredecessor(A, InterProceduralED, ED);
3299 Changed |= mergeInPredecessor(A, FnED, ED);
3310 ED.IsReachingAlignedBarrierOnly = StoredED.IsReachingAlignedBarrierOnly &
3317 if (ED.IsExecutedByInitialThreadOnly !=
3319 ED.IsReachedFromAlignedBarrierOnly !=
3321 ED.EncounteredNonLocalSideEffect !=
3326 StoredED = std::move(ED);
3578 const auto *ED = A.getAAFor<AAExecutionDomain>(
3580 if (!ED || !ED->isExecutedByInitialThreadOnly(*CB))