//===- LiveIntervalUnion.h - Live interval union data struct ---*- 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 // //===----------------------------------------------------------------------===// // // LiveIntervalUnion is a union of live segments across multiple live virtual // registers. This may be used during coalescing to represent a congruence // class, or during register allocation to model liveness of a physical // register. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_LIVEINTERVALUNION_H #define LLVM_CODEGEN_LIVEINTERVALUNION_H #include "llvm/ADT/IntervalMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/CodeGen/LiveInterval.h" #include "llvm/CodeGen/SlotIndexes.h" #include <cassert> #include <limits> namespace llvm { class raw_ostream; class TargetRegisterInfo; #ifndef NDEBUG // forward declaration template <unsigned Element> class SparseBitVector; using LiveVirtRegBitSet = SparseBitVector<128>; #endif /// Union of live intervals that are strong candidates for coalescing into a /// single register (either physical or virtual depending on the context). We /// expect the constituent live intervals to be disjoint, although we may /// eventually make exceptions to handle value-based interference. class LiveIntervalUnion { … }; } // end namespace llvm #endif // LLVM_CODEGEN_LIVEINTERVALUNION_H