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