xref: /llvm-project/llvm/lib/Analysis/DomConditionCache.cpp (revision 3bc0ff28a4349f5b2836413fd2cc786997f388be)
1d77067d0SNikita Popov //===- DomConditionCache.cpp ----------------------------------------------===//
2d77067d0SNikita Popov //
3d77067d0SNikita Popov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4d77067d0SNikita Popov // See https://llvm.org/LICENSE.txt for license information.
5d77067d0SNikita Popov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d77067d0SNikita Popov //
7d77067d0SNikita Popov //===----------------------------------------------------------------------===//
8d77067d0SNikita Popov 
9d77067d0SNikita Popov #include "llvm/Analysis/DomConditionCache.h"
10*3bc0ff28SNoah Goldstein #include "llvm/Analysis/ValueTracking.h"
11d77067d0SNikita Popov using namespace llvm;
12d77067d0SNikita Popov 
findAffectedValues(Value * Cond,SmallVectorImpl<Value * > & Affected)13d77067d0SNikita Popov static void findAffectedValues(Value *Cond,
14d77067d0SNikita Popov                                SmallVectorImpl<Value *> &Affected) {
15*3bc0ff28SNoah Goldstein   auto InsertAffected = [&Affected](Value *V) { Affected.push_back(V); };
16*3bc0ff28SNoah Goldstein   findValuesAffectedByCondition(Cond, /*IsAssume=*/false, InsertAffected);
177c0d52caSNikita Popov }
18d77067d0SNikita Popov 
registerBranch(BranchInst * BI)19d77067d0SNikita Popov void DomConditionCache::registerBranch(BranchInst *BI) {
20d77067d0SNikita Popov   assert(BI->isConditional() && "Must be conditional branch");
21d77067d0SNikita Popov   SmallVector<Value *, 16> Affected;
22d77067d0SNikita Popov   findAffectedValues(BI->getCondition(), Affected);
23d77067d0SNikita Popov   for (Value *V : Affected) {
24d77067d0SNikita Popov     auto &AV = AffectedValues[V];
25d77067d0SNikita Popov     if (!is_contained(AV, BI))
26d77067d0SNikita Popov       AV.push_back(BI);
27d77067d0SNikita Popov   }
28d77067d0SNikita Popov }
29