Path: blob/main/contrib/llvm-project/llvm/lib/Bitcode/Reader/ValueList.h
35291 views
//===-- Bitcode/Reader/ValueList.h - Number values --------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This class gives values and types Unique ID's.9//10//===----------------------------------------------------------------------===//1112#ifndef LLVM_LIB_BITCODE_READER_VALUELIST_H13#define LLVM_LIB_BITCODE_READER_VALUELIST_H1415#include "llvm/IR/ValueHandle.h"16#include "llvm/Support/Error.h"17#include <cassert>18#include <utility>19#include <vector>2021namespace llvm {2223class Error;24class Type;25class Value;2627class BitcodeReaderValueList {28/// Maps Value ID to pair of Value* and Type ID.29std::vector<std::pair<WeakTrackingVH, unsigned>> ValuePtrs;3031/// Maximum number of valid references. Forward references exceeding the32/// maximum must be invalid.33unsigned RefsUpperBound;3435using MaterializeValueFnTy =36std::function<Expected<Value *>(unsigned, BasicBlock *)>;37MaterializeValueFnTy MaterializeValueFn;3839public:40BitcodeReaderValueList(size_t RefsUpperBound,41MaterializeValueFnTy MaterializeValueFn)42: RefsUpperBound(std::min((size_t)std::numeric_limits<unsigned>::max(),43RefsUpperBound)),44MaterializeValueFn(MaterializeValueFn) {}4546// vector compatibility methods47unsigned size() const { return ValuePtrs.size(); }48void resize(unsigned N) {49ValuePtrs.resize(N);50}51void push_back(Value *V, unsigned TypeID) {52ValuePtrs.emplace_back(V, TypeID);53}5455void clear() {56ValuePtrs.clear();57}5859Value *operator[](unsigned i) const {60assert(i < ValuePtrs.size());61return ValuePtrs[i].first;62}6364unsigned getTypeID(unsigned ValNo) const {65assert(ValNo < ValuePtrs.size());66return ValuePtrs[ValNo].second;67}6869Value *back() const { return ValuePtrs.back().first; }70void pop_back() {71ValuePtrs.pop_back();72}73bool empty() const { return ValuePtrs.empty(); }7475void shrinkTo(unsigned N) {76assert(N <= size() && "Invalid shrinkTo request!");77ValuePtrs.resize(N);78}7980void replaceValueWithoutRAUW(unsigned ValNo, Value *NewV) {81assert(ValNo < ValuePtrs.size());82ValuePtrs[ValNo].first = NewV;83}8485Value *getValueFwdRef(unsigned Idx, Type *Ty, unsigned TyID,86BasicBlock *ConstExprInsertBB);8788Error assignValue(unsigned Idx, Value *V, unsigned TypeID);89};9091} // end namespace llvm9293#endif // LLVM_LIB_BITCODE_READER_VALUELIST_H949596