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 Popovstatic 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 Popovvoid 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