//===- StackLifetime.h - Alloca Lifetime Analysis --------------*- 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 // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_STACKLIFETIME_H #define LLVM_ANALYSIS_STACKLIFETIME_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringExtras.h" #include "llvm/IR/PassManager.h" #include "llvm/Support/raw_ostream.h" #include <utility> namespace llvm { class AllocaInst; class BasicBlock; class Function; class Instruction; class IntrinsicInst; /// Compute live ranges of allocas. /// Live ranges are represented as sets of "interesting" instructions, which are /// defined as instructions that may start or end an alloca's lifetime. These /// are: /// * lifetime.start and lifetime.end intrinsics /// * first instruction of any basic block /// Interesting instructions are numbered in the depth-first walk of the CFG, /// and in the program order inside each basic block. class StackLifetime { … }; static inline raw_ostream &operator<<(raw_ostream &OS, const BitVector &V) { … } inline raw_ostream &operator<<(raw_ostream &OS, const StackLifetime::LiveRange &R) { … } /// Printer pass for testing. class StackLifetimePrinterPass : public PassInfoMixin<StackLifetimePrinterPass> { … }; } // end namespace llvm #endif // LLVM_ANALYSIS_STACKLIFETIME_H