OLD | NEW |
1 //===---- IRReader.cpp - Reader for LLVM IR files -------------------------===// | 1 //===---- IRReader.cpp - Reader for LLVM IR files -------------------------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 | 9 |
10 #include "llvm/IRReader/IRReader.h" | 10 #include "llvm/IRReader/IRReader.h" |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 static NaClFileFormat NaClDoAutodetectFileFormat( | 97 static NaClFileFormat NaClDoAutodetectFileFormat( |
98 NaClFileFormat Format, const char unsigned *StartBuffer, | 98 NaClFileFormat Format, const char unsigned *StartBuffer, |
99 const char unsigned *EndBuffer) { | 99 const char unsigned *EndBuffer) { |
100 if (Format != AutodetectFileFormat) | 100 if (Format != AutodetectFileFormat) |
101 return Format; | 101 return Format; |
102 if (isNaClBitcode(StartBuffer, EndBuffer)) | 102 if (isNaClBitcode(StartBuffer, EndBuffer)) |
103 return PNaClFormat; | 103 return PNaClFormat; |
104 return LLVMFormat; | 104 return LLVMFormat; |
105 } | 105 } |
106 | 106 |
107 std::unique_ptr<Module> llvm::NaClParseIR(MemoryBufferRef Buffer, | 107 std::unique_ptr<Module> |
108 NaClFileFormat Format, | 108 llvm::NaClParseIR(MemoryBufferRef Buffer, NaClFileFormat Format, |
109 SMDiagnostic &Err, | 109 SMDiagnostic &Err, LLVMContext &Context, |
110 raw_ostream *Verbose, | 110 DiagnosticHandlerFunction DiagnosticHandler) { |
111 LLVMContext &Context) { | |
112 NamedRegionTimer T(TimeIRParsingName, TimeIRParsingGroupName, | 111 NamedRegionTimer T(TimeIRParsingName, TimeIRParsingGroupName, |
113 TimePassesIsEnabled); | 112 TimePassesIsEnabled); |
114 Format = NaClDoAutodetectFileFormat( | 113 Format = NaClDoAutodetectFileFormat( |
115 Format, (const unsigned char *)Buffer.getBufferStart(), | 114 Format, (const unsigned char *)Buffer.getBufferStart(), |
116 (const unsigned char *)Buffer.getBufferEnd()); | 115 (const unsigned char *)Buffer.getBufferEnd()); |
117 if ((Format == PNaClFormat) && | 116 if ((Format == PNaClFormat) && |
118 isNaClBitcode((const unsigned char *)Buffer.getBufferStart(), | 117 isNaClBitcode((const unsigned char *)Buffer.getBufferStart(), |
119 (const unsigned char *)Buffer.getBufferEnd())) { | 118 (const unsigned char *)Buffer.getBufferEnd())) { |
120 ErrorOr<Module *> ModuleOrErr = | 119 ErrorOr<Module *> ModuleOrErr = |
121 NaClParseBitcodeFile(Buffer, Context, Verbose); | 120 NaClParseBitcodeFile(Buffer, Context, DiagnosticHandler); |
122 if (std::error_code EC = ModuleOrErr.getError()) { | 121 if (std::error_code EC = ModuleOrErr.getError()) { |
123 Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, | 122 Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, |
124 EC.message()); | 123 EC.message()); |
125 return nullptr; | 124 return nullptr; |
126 } | 125 } |
127 return std::unique_ptr<Module>(ModuleOrErr.get()); | 126 return std::unique_ptr<Module>(ModuleOrErr.get()); |
128 } else if (Format == LLVMFormat) { | 127 } else if (Format == LLVMFormat) { |
129 if (isBitcode((const unsigned char *)Buffer.getBufferStart(), | 128 if (isBitcode((const unsigned char *)Buffer.getBufferStart(), |
130 (const unsigned char *)Buffer.getBufferEnd())) { | 129 (const unsigned char *)Buffer.getBufferEnd())) { |
131 ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(Buffer, Context); | 130 ErrorOr<Module *> ModuleOrErr = |
| 131 parseBitcodeFile(Buffer, Context, DiagnosticHandler); |
132 if (std::error_code EC = ModuleOrErr.getError()) { | 132 if (std::error_code EC = ModuleOrErr.getError()) { |
133 Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, | 133 Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, |
134 EC.message()); | 134 EC.message()); |
135 return nullptr; | 135 return nullptr; |
136 } | 136 } |
137 return std::unique_ptr<Module>(ModuleOrErr.get()); | 137 return std::unique_ptr<Module>(ModuleOrErr.get()); |
138 } | 138 } |
139 | 139 |
140 return parseAssembly(Buffer, Err, Context); | 140 return parseAssembly(Buffer, Err, Context); |
141 } else { | 141 } else { |
142 Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, | 142 Err = SMDiagnostic(Buffer.getBufferIdentifier(), SourceMgr::DK_Error, |
143 "Did not specify correct format for file"); | 143 "Did not specify correct format for file"); |
144 return nullptr; | 144 return nullptr; |
145 } | 145 } |
146 } | 146 } |
147 | 147 |
148 std::unique_ptr<Module> llvm::NaClParseIRFile(StringRef Filename, | 148 std::unique_ptr<Module> |
149 NaClFileFormat Format, | 149 llvm::NaClParseIRFile(StringRef Filename, NaClFileFormat Format, |
150 SMDiagnostic &Err, | 150 SMDiagnostic &Err, LLVMContext &Context, |
151 raw_ostream *Verbose, | 151 DiagnosticHandlerFunction DiagnosticHandler) { |
152 LLVMContext &Context) { | |
153 ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr = | 152 ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrErr = |
154 MemoryBuffer::getFileOrSTDIN(Filename); | 153 MemoryBuffer::getFileOrSTDIN(Filename); |
155 if (std::error_code EC = FileOrErr.getError()) { | 154 if (std::error_code EC = FileOrErr.getError()) { |
156 Err = SMDiagnostic(Filename, SourceMgr::DK_Error, | 155 Err = SMDiagnostic(Filename, SourceMgr::DK_Error, |
157 "Could not open input file: " + EC.message()); | 156 "Could not open input file: " + EC.message()); |
158 return nullptr; | 157 return nullptr; |
159 } | 158 } |
160 | 159 |
161 return NaClParseIR(FileOrErr.get()->getMemBufferRef(), Format, Err, Verbose, | 160 return NaClParseIR(FileOrErr.get()->getMemBufferRef(), Format, Err, Context, |
162 Context); | 161 DiagnosticHandler); |
163 } | 162 } |
164 | 163 |
165 // @LOCALMOD-END | 164 // @LOCALMOD-END |
166 | 165 |
167 //===----------------------------------------------------------------------===// | 166 //===----------------------------------------------------------------------===// |
168 // C API. | 167 // C API. |
169 //===----------------------------------------------------------------------===// | 168 //===----------------------------------------------------------------------===// |
170 | 169 |
171 LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, | 170 LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, |
172 LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, | 171 LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, |
(...skipping 12 matching lines...) Expand all Loading... |
185 Diag.print(nullptr, os, false); | 184 Diag.print(nullptr, os, false); |
186 os.flush(); | 185 os.flush(); |
187 | 186 |
188 *OutMessage = strdup(buf.c_str()); | 187 *OutMessage = strdup(buf.c_str()); |
189 } | 188 } |
190 return 1; | 189 return 1; |
191 } | 190 } |
192 | 191 |
193 return 0; | 192 return 0; |
194 } | 193 } |
OLD | NEW |