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