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