mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[llvm-c] Expose IRReader interface
Original patch by Chris Wailes llvm-svn: 194137
This commit is contained in:
parent
7e2a601991
commit
23866d3902
40
include/llvm-c/IRReader.h
Normal file
40
include/llvm-c/IRReader.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*===-- llvm-c/IRReader.h - IR Reader C Interface -----------------*- C -*-===*\
|
||||
|* *|
|
||||
|* The LLVM Compiler Infrastructure *|
|
||||
|* *|
|
||||
|* This file is distributed under the University of Illinois Open Source *|
|
||||
|* License. See LICENSE.TXT for details. *|
|
||||
|* *|
|
||||
|*===----------------------------------------------------------------------===*|
|
||||
|* *|
|
||||
|* This file defines the C interface to the IR Reader. *|
|
||||
|* *|
|
||||
\*===----------------------------------------------------------------------===*/
|
||||
|
||||
#ifndef LLVM_C_IRREADER_H
|
||||
#define LLVM_C_IRREADER_H
|
||||
|
||||
#include "llvm-c/Core.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Read LLVM IR from a memory buffer and convert it into an in-memory Module
|
||||
* object. Returns 0 on success.
|
||||
* Optionally returns a human-readable description of any errors that
|
||||
* occured during parsing IR. OutMessage must be disposed with
|
||||
* LLVMDisposeMessage.
|
||||
*
|
||||
* @see llvm::ParseIR()
|
||||
*/
|
||||
LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
|
||||
LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
||||
char **OutMessage);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -11,10 +11,15 @@
|
||||
#include "llvm/ADT/OwningPtr.h"
|
||||
#include "llvm/Assembly/Parser.h"
|
||||
#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/SourceMgr.h"
|
||||
#include "llvm/Support/system_error.h"
|
||||
#include "llvm/Support/Timer.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm-c/Core.h"
|
||||
#include "llvm-c/IRReader.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
@ -87,3 +92,30 @@ Module *llvm::ParseIRFile(const std::string &Filename, SMDiagnostic &Err,
|
||||
|
||||
return ParseIR(File.take(), Err, Context);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// C API.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
|
||||
LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
|
||||
char **OutMessage) {
|
||||
SMDiagnostic Diag;
|
||||
|
||||
*OutM = wrap(ParseIR(unwrap(MemBuf), Diag, *unwrap(ContextRef)));
|
||||
|
||||
if(!*OutM) {
|
||||
if (OutMessage) {
|
||||
std::string buf;
|
||||
raw_string_ostream os(buf);
|
||||
|
||||
Diag.print(NULL, os, false);
|
||||
os.flush();
|
||||
|
||||
*OutMessage = strdup(buf.c_str());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user