//===- llvm/User.h - User class definition ----------------------*- 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 class defines the interface that one who uses a Value must implement. // Each instance of the Value class keeps track of what User's have handles // to it. // // * Instructions are the largest class of Users. // * Constants may be users of other constants (think arrays and stuff) // //===----------------------------------------------------------------------===// #ifndef LLVM_IR_USER_H #define LLVM_IR_USER_H #include "llvm/ADT/iterator.h" #include "llvm/ADT/iterator_range.h" #include "llvm/IR/Use.h" #include "llvm/IR/Value.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" #include <cassert> #include <cstddef> #include <cstdint> #include <iterator> namespace llvm { template <typename T> class ArrayRef; template <typename T> class MutableArrayRef; /// Compile-time customization of User operands. /// /// Customizes operand-related allocators and accessors. template <class> struct OperandTraits; class User : public Value { … }; // Either Use objects, or a Use pointer can be prepended to User. static_assert …; static_assert …; template<> struct simplify_type<User::op_iterator> { … }; template<> struct simplify_type<User::const_op_iterator> { … }; } // end namespace llvm #endif // LLVM_IR_USER_H