xref: /freebsd-src/contrib/llvm-project/llvm/lib/Analysis/DomConditionCache.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
15f757f3fSDimitry Andric //===- DomConditionCache.cpp ----------------------------------------------===//
25f757f3fSDimitry Andric //
35f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65f757f3fSDimitry Andric //
75f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
85f757f3fSDimitry Andric 
95f757f3fSDimitry Andric #include "llvm/Analysis/DomConditionCache.h"
10*0fca6ea1SDimitry Andric #include "llvm/Analysis/ValueTracking.h"
115f757f3fSDimitry Andric using namespace llvm;
125f757f3fSDimitry Andric 
135f757f3fSDimitry Andric static void findAffectedValues(Value *Cond,
145f757f3fSDimitry Andric                                SmallVectorImpl<Value *> &Affected) {
15*0fca6ea1SDimitry Andric   auto InsertAffected = [&Affected](Value *V) { Affected.push_back(V); };
16*0fca6ea1SDimitry Andric   findValuesAffectedByCondition(Cond, /*IsAssume=*/false, InsertAffected);
175f757f3fSDimitry Andric }
185f757f3fSDimitry Andric 
195f757f3fSDimitry Andric void DomConditionCache::registerBranch(BranchInst *BI) {
205f757f3fSDimitry Andric   assert(BI->isConditional() && "Must be conditional branch");
215f757f3fSDimitry Andric   SmallVector<Value *, 16> Affected;
225f757f3fSDimitry Andric   findAffectedValues(BI->getCondition(), Affected);
235f757f3fSDimitry Andric   for (Value *V : Affected) {
245f757f3fSDimitry Andric     auto &AV = AffectedValues[V];
255f757f3fSDimitry Andric     if (!is_contained(AV, BI))
265f757f3fSDimitry Andric       AV.push_back(BI);
275f757f3fSDimitry Andric   }
285f757f3fSDimitry Andric }
29