diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/AsmParser/Parser.cpp | 23 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitReader.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.h | 2 | ||||
-rw-r--r-- | llvm/lib/IR/Module.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/IRReader/IRReader.cpp | 19 | ||||
-rw-r--r-- | llvm/lib/LTO/LTOModule.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/Object/IRObjectFile.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 6 |
9 files changed, 40 insertions, 49 deletions
diff --git a/llvm/lib/AsmParser/Parser.cpp b/llvm/lib/AsmParser/Parser.cpp index d2384bd978d..08159075ff6 100644 --- a/llvm/lib/AsmParser/Parser.cpp +++ b/llvm/lib/AsmParser/Parser.cpp @@ -21,22 +21,21 @@ #include <system_error> using namespace llvm; -bool llvm::parseAssemblyInto(std::unique_ptr<MemoryBuffer> F, Module &M, - SMDiagnostic &Err) { +bool llvm::parseAssemblyInto(MemoryBufferRef F, Module &M, SMDiagnostic &Err) { SourceMgr SM; - StringRef Buf = F->getBuffer(); - SM.AddNewSourceBuffer(std::move(F), SMLoc()); + std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(F, false); + SM.AddNewSourceBuffer(std::move(Buf), SMLoc()); - return LLParser(Buf, SM, Err, &M).Run(); + return LLParser(F.getBuffer(), SM, Err, &M).Run(); } -std::unique_ptr<Module> llvm::parseAssembly(std::unique_ptr<MemoryBuffer> F, +std::unique_ptr<Module> llvm::parseAssembly(MemoryBufferRef F, SMDiagnostic &Err, LLVMContext &Context) { std::unique_ptr<Module> M = - make_unique<Module>(F->getBufferIdentifier(), Context); + make_unique<Module>(F.getBufferIdentifier(), Context); - if (parseAssemblyInto(std::move(F), *M, Err)) + if (parseAssemblyInto(F, *M, Err)) return nullptr; return std::move(M); @@ -53,14 +52,12 @@ std::unique_ptr<Module> llvm::parseAssemblyFile(StringRef Filename, return nullptr; } - return parseAssembly(std::move(FileOrErr.get()), Err, Context); + return parseAssembly(FileOrErr.get()->getMemBufferRef(), Err, Context); } std::unique_ptr<Module> llvm::parseAssemblyString(StringRef AsmString, SMDiagnostic &Err, LLVMContext &Context) { - std::unique_ptr<MemoryBuffer> F( - MemoryBuffer::getMemBuffer(AsmString, "<string>")); - - return parseAssembly(std::move(F), Err, Context); + MemoryBufferRef F(AsmString, "<string>"); + return parseAssembly(F, Err, Context); } diff --git a/llvm/lib/Bitcode/Reader/BitReader.cpp b/llvm/lib/Bitcode/Reader/BitReader.cpp index b5886c16fa4..e21d29ac374 100644 --- a/llvm/lib/Bitcode/Reader/BitReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitReader.cpp @@ -31,7 +31,7 @@ LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, LLVMModuleRef *OutModule, char **OutMessage) { ErrorOr<Module *> ModuleOrErr = - parseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef)); + parseBitcodeFile(unwrap(MemBuf)->getMemBufferRef(), *unwrap(ContextRef)); if (std::error_code EC = ModuleOrErr.getError()) { if (OutMessage) *OutMessage = strdup(EC.message().c_str()); diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index e5dfa723b04..8dc0aa32315 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3564,15 +3564,17 @@ Module *llvm::getStreamedBitcodeModule(const std::string &name, return M; } -ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer, +ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBufferRef Buffer, LLVMContext &Context) { + std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(Buffer, false); ErrorOr<Module *> ModuleOrErr = - getLazyBitcodeModuleImpl(Buffer, Context, true); + getLazyBitcodeModuleImpl(Buf.get(), Context, true); if (!ModuleOrErr) return ModuleOrErr; + Buf.release(); // The BitcodeReader owns it now. Module *M = ModuleOrErr.get(); // Read in the entire module, and destroy the BitcodeReader. - if (std::error_code EC = M->materializeAllPermanently(true)) { + if (std::error_code EC = M->materializeAllPermanently()) { delete M; return EC; } @@ -3583,12 +3585,11 @@ ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer, return M; } -std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer, +std::string llvm::getBitcodeTargetTriple(MemoryBufferRef Buffer, LLVMContext &Context) { - BitcodeReader *R = new BitcodeReader(Buffer, Context); + std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(Buffer, false); + auto R = llvm::make_unique<BitcodeReader>(Buf.get(), Context); ErrorOr<std::string> Triple = R->parseTriple(); - R->releaseBuffer(); - delete R; if (Triple.getError()) return ""; return Triple.get(); diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.h b/llvm/lib/Bitcode/Reader/BitcodeReader.h index 6d4e0a2dfe9..c9525661ec1 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.h +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.h @@ -221,7 +221,7 @@ public: void FreeState(); - void releaseBuffer() override; + void releaseBuffer(); bool isMaterializable(const GlobalValue *GV) const override; bool isDematerializable(const GlobalValue *GV) const override; diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp index f1b1f9a2acc..98e4706019c 100644 --- a/llvm/lib/IR/Module.cpp +++ b/llvm/lib/IR/Module.cpp @@ -413,13 +413,10 @@ std::error_code Module::materializeAll() { return Materializer->MaterializeModule(this); } -std::error_code Module::materializeAllPermanently(bool ReleaseBuffer) { +std::error_code Module::materializeAllPermanently() { if (std::error_code EC = materializeAll()) return EC; - if (ReleaseBuffer) - Materializer->releaseBuffer(); - Materializer.reset(); return std::error_code(); } diff --git a/llvm/lib/IRReader/IRReader.cpp b/llvm/lib/IRReader/IRReader.cpp index 259b41af24f..5c3124821a7 100644 --- a/llvm/lib/IRReader/IRReader.cpp +++ b/llvm/lib/IRReader/IRReader.cpp @@ -46,7 +46,7 @@ getLazyIRModule(std::unique_ptr<MemoryBuffer> Buffer, SMDiagnostic &Err, return std::unique_ptr<Module>(ModuleOrErr.get()); } - return parseAssembly(std::move(Buffer), Err, Context); + return parseAssembly(Buffer->getMemBufferRef(), Err, Context); } std::unique_ptr<Module> llvm::getLazyIRFileModule(StringRef Filename, @@ -63,24 +63,22 @@ std::unique_ptr<Module> llvm::getLazyIRFileModule(StringRef Filename, return getLazyIRModule(std::move(FileOrErr.get()), Err, Context); } -std::unique_ptr<Module> llvm::parseIR(MemoryBuffer *Buffer, SMDiagnostic &Err, +std::unique_ptr<Module> llvm::parseIR(MemoryBufferRef Buffer, SMDiagnostic &Err, LLVMContext &Context) { NamedRegionTimer T(TimeIRParsingName, TimeIRParsingGroupName, TimePassesIsEnabled); - if (isBitcode((const unsigned char *)Buffer->getBufferStart(), - (const unsigned char *)Buffer->getBufferEnd())) { + if (isBitcode((const unsigned char *)Buffer.getBufferStart(), + (const unsigned char *)Buffer.getBufferEnd())) { ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(Buffer, Context); if (std::error_code EC = ModuleOrErr.getError()) { - Err = SMDiagnostic(Buffer->getBufferIdentifier(), SourceMgr::DK_Error, + Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, EC.message()); return nullptr; } return std::unique_ptr<Module>(ModuleOrErr.get()); } - return parseAssembly(std::unique_ptr<MemoryBuffer>(MemoryBuffer::getMemBuffer( - Buffer->getBuffer(), Buffer->getBufferIdentifier())), - Err, Context); + return parseAssembly(Buffer, Err, Context); } std::unique_ptr<Module> llvm::parseIRFile(StringRef Filename, SMDiagnostic &Err, @@ -93,7 +91,7 @@ std::unique_ptr<Module> llvm::parseIRFile(StringRef Filename, SMDiagnostic &Err, return nullptr; } - return parseIR(FileOrErr.get().get(), Err, Context); + return parseIR(FileOrErr.get()->getMemBufferRef(), Err, Context); } //===----------------------------------------------------------------------===// @@ -106,7 +104,8 @@ LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, SMDiagnostic Diag; std::unique_ptr<MemoryBuffer> MB(unwrap(MemBuf)); - *OutM = wrap(parseIR(MB.get(), Diag, *unwrap(ContextRef)).release()); + *OutM = + wrap(parseIR(MB->getMemBufferRef(), Diag, *unwrap(ContextRef)).release()); if(!*OutM) { if (OutMessage) { diff --git a/llvm/lib/LTO/LTOModule.cpp b/llvm/lib/LTO/LTOModule.cpp index f9d270d3207..76b5e197a62 100644 --- a/llvm/lib/LTO/LTOModule.cpp +++ b/llvm/lib/LTO/LTOModule.cpp @@ -65,7 +65,8 @@ bool LTOModule::isBitcodeFile(const char *path) { bool LTOModule::isBitcodeForTarget(MemoryBuffer *buffer, StringRef triplePrefix) { - std::string Triple = getBitcodeTargetTriple(buffer, getGlobalContext()); + std::string Triple = + getBitcodeTargetTriple(buffer->getMemBufferRef(), getGlobalContext()); return StringRef(Triple).startswith(triplePrefix); } @@ -112,14 +113,7 @@ LTOModule *LTOModule::createFromBuffer(const void *mem, size_t length, LTOModule *LTOModule::makeLTOModule(MemoryBufferRef Buffer, TargetOptions options, std::string &errMsg) { - StringRef Data = Buffer.getBuffer(); - StringRef FileName = Buffer.getBufferIdentifier(); - std::unique_ptr<MemoryBuffer> MemBuf( - makeBuffer(Data.begin(), Data.size(), FileName)); - if (!MemBuf) - return nullptr; - - ErrorOr<Module *> MOrErr = parseBitcodeFile(MemBuf.get(), getGlobalContext()); + ErrorOr<Module *> MOrErr = parseBitcodeFile(Buffer, getGlobalContext()); if (std::error_code EC = MOrErr.getError()) { errMsg = EC.message(); return nullptr; diff --git a/llvm/lib/Object/IRObjectFile.cpp b/llvm/lib/Object/IRObjectFile.cpp index 2ef359c7f00..964c7ed691d 100644 --- a/llvm/lib/Object/IRObjectFile.cpp +++ b/llvm/lib/Object/IRObjectFile.cpp @@ -268,10 +268,7 @@ ErrorOr<IRObjectFile *> llvm::object::IRObjectFile::createIRObjectFile(MemoryBufferRef Object, LLVMContext &Context) { - StringRef Data = Object.getBuffer(); - StringRef FileName = Object.getBufferIdentifier(); - std::unique_ptr<MemoryBuffer> Buff( - MemoryBuffer::getMemBuffer(Data, FileName, false)); + std::unique_ptr<MemoryBuffer> Buff(MemoryBuffer::getMemBuffer(Object, false)); ErrorOr<Module *> MOrErr = getLazyBitcodeModule(Buff.get(), Context); if (std::error_code EC = MOrErr.getError()) diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index 27edce67361..9bb6b42466b 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -103,6 +103,12 @@ MemoryBuffer *MemoryBuffer::getMemBuffer(StringRef InputData, MemoryBufferMem(InputData, RequiresNullTerminator); } +std::unique_ptr<MemoryBuffer> +MemoryBuffer::getMemBuffer(MemoryBufferRef Ref, bool RequiresNullTerminator) { + return std::unique_ptr<MemoryBuffer>(getMemBuffer( + Ref.getBuffer(), Ref.getBufferIdentifier(), RequiresNullTerminator)); +} + /// getMemBufferCopy - Open the specified memory range as a MemoryBuffer, /// copying the contents and taking ownership of it. This has no requirements /// on EndPtr[0]. |