Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(736)

Unified Diff: lib/IRReader/IRReader.cpp

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/IR/NaClAtomicIntrinsics.cpp ('k') | lib/IRReader/LLVMBuild.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/IRReader/IRReader.cpp
diff --git a/lib/IRReader/IRReader.cpp b/lib/IRReader/IRReader.cpp
index 7bc6f076d62ddef0bdbd4a4d42456d7e6bc2d4b7..fe62715317cd87fc12430177788872529fde0755 100644
--- a/lib/IRReader/IRReader.cpp
+++ b/lib/IRReader/IRReader.cpp
@@ -11,6 +11,7 @@
#include "llvm-c/Core.h"
#include "llvm-c/IRReader.h"
#include "llvm/AsmParser/Parser.h"
+#include "llvm/Bitcode/NaCl/NaClReaderWriter.h"
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
@@ -92,6 +93,77 @@ std::unique_ptr<Module> llvm::parseIRFile(StringRef Filename, SMDiagnostic &Err,
return parseIR(FileOrErr.get()->getMemBufferRef(), Err, Context);
}
+// @LOCALMOD-BEGIN
+static NaClFileFormat NaClDoAutodetectFileFormat(
+ NaClFileFormat Format, const char unsigned *StartBuffer,
+ const char unsigned *EndBuffer) {
+ if (Format != AutodetectFileFormat)
+ return Format;
+ if (isNaClBitcode(StartBuffer, EndBuffer))
+ return PNaClFormat;
+ return LLVMFormat;
+}
+
+std::unique_ptr<Module> llvm::NaClParseIR(MemoryBufferRef Buffer,
+ NaClFileFormat Format,
+ SMDiagnostic &Err,
+ raw_ostream *Verbose,
+ LLVMContext &Context) {
+ NamedRegionTimer T(TimeIRParsingName, TimeIRParsingGroupName,
+ TimePassesIsEnabled);
+ Format = NaClDoAutodetectFileFormat(
+ Format, (const unsigned char *)Buffer.getBufferStart(),
+ (const unsigned char *)Buffer.getBufferEnd());
+ if ((Format == PNaClFormat) &&
+ isNaClBitcode((const unsigned char *)Buffer.getBufferStart(),
+ (const unsigned char *)Buffer.getBufferEnd())) {
+ ErrorOr<Module *> ModuleOrErr =
+ NaClParseBitcodeFile(Buffer, Context, Verbose);
+ if (std::error_code EC = ModuleOrErr.getError()) {
+ Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error,
+ EC.message());
+ return nullptr;
+ }
+ return std::unique_ptr<Module>(ModuleOrErr.get());
+ } else if (Format == LLVMFormat) {
+ 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,
+ EC.message());
+ return nullptr;
+ }
+ return std::unique_ptr<Module>(ModuleOrErr.get());
+ }
+
+ return parseAssembly(Buffer, Err, Context);
+ } else {
+ Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error,
+ "Did not specify correct format for file");
+ return nullptr;
+ }
+}
+
+std::unique_ptr<Module> llvm::NaClParseIRFile(StringRef Filename,
+ NaClFileFormat Format,
+ SMDiagnostic &Err,
+ raw_ostream *Verbose,
+ LLVMContext &Context) {
+ ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr =
+ MemoryBuffer::getFileOrSTDIN(Filename);
+ if (std::error_code EC = FileOrErr.getError()) {
+ Err = SMDiagnostic(Filename, SourceMgr::DK_Error,
+ "Could not open input file: " + EC.message());
+ return nullptr;
+ }
+
+ return NaClParseIR(FileOrErr.get()->getMemBufferRef(), Format, Err, Verbose,
+ Context);
+}
+
+// @LOCALMOD-END
+
//===----------------------------------------------------------------------===//
// C API.
//===----------------------------------------------------------------------===//
« no previous file with comments | « lib/IR/NaClAtomicIntrinsics.cpp ('k') | lib/IRReader/LLVMBuild.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698