//===- llvm/Analysis/IVUsers.h - Induction Variable Users -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements bookkeeping for "interesting" users of expressions // computed from induction variables. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_IVUSERS_H #define LLVM_ANALYSIS_IVUSERS_H #include "llvm/Analysis/LoopAnalysisManager.h" #include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/ScalarEvolutionNormalization.h" #include "llvm/IR/Instruction.h" #include "llvm/IR/ValueHandle.h" namespace llvm { class AssumptionCache; class DominatorTree; class ScalarEvolution; class SCEV; class IVUsers; /// IVStrideUse - Keep track of one use of a strided induction variable. /// The Expr member keeps track of the expression, User is the actual user /// instruction of the operand, and 'OperandValToReplace' is the operand of /// the User that is the use. class IVStrideUse final : public CallbackVH, public ilist_node<IVStrideUse> { … }; class IVUsers { … }; Pass *createIVUsersPass(); class IVUsersWrapperPass : public LoopPass { … }; /// Analysis pass that exposes the \c IVUsers for a loop. class IVUsersAnalysis : public AnalysisInfoMixin<IVUsersAnalysis> { … }; } #endif