//===-- Bitcode/Reader/ValueList.h - Number values --------------*- 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 gives values and types Unique ID's. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_BITCODE_READER_VALUELIST_H #define LLVM_LIB_BITCODE_READER_VALUELIST_H #include "llvm/IR/ValueHandle.h" #include "llvm/Support/Error.h" #include #include #include namespace llvm { class Error; class Type; class Value; class BitcodeReaderValueList { /// Maps Value ID to pair of Value* and Type ID. std::vector> ValuePtrs; /// Maximum number of valid references. Forward references exceeding the /// maximum must be invalid. unsigned RefsUpperBound; using MaterializeValueFnTy = std::function(unsigned, BasicBlock *)>; MaterializeValueFnTy MaterializeValueFn; public: BitcodeReaderValueList(size_t RefsUpperBound, MaterializeValueFnTy MaterializeValueFn) : RefsUpperBound(std::min((size_t)std::numeric_limits::max(), RefsUpperBound)), MaterializeValueFn(MaterializeValueFn) {} // vector compatibility methods unsigned size() const { return ValuePtrs.size(); } void resize(unsigned N) { ValuePtrs.resize(N); } void push_back(Value *V, unsigned TypeID) { ValuePtrs.emplace_back(V, TypeID); } void clear() { ValuePtrs.clear(); } Value *operator[](unsigned i) const { assert(i < ValuePtrs.size()); return ValuePtrs[i].first; } unsigned getTypeID(unsigned ValNo) const { assert(ValNo < ValuePtrs.size()); return ValuePtrs[ValNo].second; } Value *back() const { return ValuePtrs.back().first; } void pop_back() { ValuePtrs.pop_back(); } bool empty() const { return ValuePtrs.empty(); } void shrinkTo(unsigned N) { assert(N <= size() && "Invalid shrinkTo request!"); ValuePtrs.resize(N); } void replaceValueWithoutRAUW(unsigned ValNo, Value *NewV) { assert(ValNo < ValuePtrs.size()); ValuePtrs[ValNo].first = NewV; } Value *getValueFwdRef(unsigned Idx, Type *Ty, unsigned TyID, BasicBlock *ConstExprInsertBB); Error assignValue(unsigned Idx, Value *V, unsigned TypeID); }; } // end namespace llvm #endif // LLVM_LIB_BITCODE_READER_VALUELIST_H