//===- llvm/Analysis/IVDescriptors.h - IndVar Descriptors -------*- 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 "describes" induction and recurrence variables. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_IVDESCRIPTORS_H #define LLVM_ANALYSIS_IVDESCRIPTORS_H #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/ValueHandle.h" namespace llvm { class AssumptionCache; class DemandedBits; class DominatorTree; class Loop; class PredicatedScalarEvolution; class ScalarEvolution; class SCEV; class StoreInst; /// These are the kinds of recurrences that we support. enum class RecurKind { … }; /// The RecurrenceDescriptor is used to identify recurrences variables in a /// loop. Reduction is a special case of recurrence that has uses of the /// recurrence variable outside the loop. The method isReductionPHI identifies /// reductions that are basic recurrences. /// /// Basic recurrences are defined as the summation, product, OR, AND, XOR, min, /// or max of a set of terms. For example: for(i=0; i<n; i++) { total += /// array[i]; } is a summation of array elements. Basic recurrences are a /// special case of chains of recurrences (CR). See ScalarEvolution for CR /// references. /// This struct holds information about recurrence variables. class RecurrenceDescriptor { … }; /// A struct for saving information about induction variables. class InductionDescriptor { … }; } // end namespace llvm #endif // LLVM_ANALYSIS_IVDESCRIPTORS_H