1c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien//===- BitReader_3_0.h - Internal BitcodeReader 3.0 impl --------*- C++ -*-===// 2c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// 3c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// The LLVM Compiler Infrastructure 4c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// 5c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// This file is distributed under the University of Illinois Open Source 6c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// License. See LICENSE.TXT for details. 7c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// 8c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien//===----------------------------------------------------------------------===// 9c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// 10c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// This header defines the BitcodeReader class. 11c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien// 12c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien//===----------------------------------------------------------------------===// 13c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 14c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien#ifndef BITREADER_3_0_H 15c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien#define BITREADER_3_0_H 16c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 17c2074caf075818abb6d3689ad924ca09f4a5ba1fTim Murray#include "llvm/ADT/DenseMap.h" 18c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien#include "llvm/Bitcode/BitstreamReader.h" 19c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien#include "llvm/Bitcode/LLVMBitCodes.h" 20c2074caf075818abb6d3689ad924ca09f4a5ba1fTim Murray#include "llvm/IR/Attributes.h" 211bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines#include "llvm/IR/DiagnosticInfo.h" 22c2074caf075818abb6d3689ad924ca09f4a5ba1fTim Murray#include "llvm/IR/GVMaterializer.h" 23c2074caf075818abb6d3689ad924ca09f4a5ba1fTim Murray#include "llvm/IR/OperandTraits.h" 24c2074caf075818abb6d3689ad924ca09f4a5ba1fTim Murray#include "llvm/IR/Type.h" 25c2074caf075818abb6d3689ad924ca09f4a5ba1fTim Murray#include "llvm/IR/ValueHandle.h" 26579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines#include "llvm/Support/ErrorOr.h" 27c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien#include <string> 28c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 29c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chiennamespace llvm { 30c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien class LLVMContext; 31579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines class MemoryBuffer; 32579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines class MemoryBufferRef; 33c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien class Module; 34c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien} // End llvm namespace 35c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 36c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chiennamespace llvm_3_0 { 37c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 381bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hinesusing llvm::DiagnosticHandlerFunction; 391bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hinesusing llvm::LLVMContext; 401bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hinesusing llvm::MemoryBuffer; 411bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hinesusing llvm::MemoryBufferRef; 421bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines 43579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines 441bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines /// Read the header of the specified bitcode buffer and prepare for lazy 451bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines /// deserialization of function bodies. If successful, this moves Buffer. On 461bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines /// error, this *does not* move Buffer. 471bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines llvm::ErrorOr<llvm::Module *> 481bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines getLazyBitcodeModule(std::unique_ptr<MemoryBuffer> &&Buffer, 491bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines LLVMContext &Context, 508a019dd0040bedf5078e4d18e06a244a675b80e8Chih-Hung Hsieh const DiagnosticHandlerFunction &DiagnosticHandler = nullptr); 51c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 52579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines /// Read the header of the specified bitcode buffer and extract just the 53579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines /// triple information. If successful, this returns a string. On error, this 54579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines /// returns "". 551bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines std::string 561bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines getBitcodeTargetTriple(MemoryBufferRef Buffer, LLVMContext &Context, 571bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines DiagnosticHandlerFunction DiagnosticHandler = nullptr); 58c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 591bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines /// Read the specified bitcode file, returning the module. 601bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines llvm::ErrorOr<llvm::Module *> 611bd9f627fa0affb457507e86b0b6684c695fe726Stephen Hines parseBitcodeFile(MemoryBufferRef Buffer, LLVMContext &Context, 628a019dd0040bedf5078e4d18e06a244a675b80e8Chih-Hung Hsieh const DiagnosticHandlerFunction &DiagnosticHandler = nullptr); 63c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien} // End llvm_3_0 namespace 64c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien 65c7d67a701663191bcdab2416c11b69fae16d49fbLogan Chien#endif 66