mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-26 23:21:11 +00:00
[LIBCLC] Teach prepare-builtins how to handle text based IR (#66993)
This commit is contained in:
parent
c0f8748d44
commit
5ec9faf007
@ -5,23 +5,27 @@
|
||||
#include "llvm/Bitcode/ReaderWriter.h"
|
||||
#endif
|
||||
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/GlobalVariable.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/IRReader/IRReader.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
#include "llvm/Support/MemoryBuffer.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Support/ErrorOr.h"
|
||||
#include "llvm/Support/SourceMgr.h"
|
||||
#include "llvm/Support/ToolOutputFile.h"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
#include <system_error>
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
static ExitOnError ExitOnErr;
|
||||
|
||||
static cl::opt<std::string>
|
||||
InputFilename(cl::Positional, cl::desc("<input bitcode>"), cl::init("-"));
|
||||
|
||||
@ -29,6 +33,9 @@ static cl::opt<std::string>
|
||||
OutputFilename("o", cl::desc("Output filename"),
|
||||
cl::value_desc("filename"));
|
||||
|
||||
static cl::opt<bool> TextualOut("S", cl::desc("Emit LLVM textual assembly"),
|
||||
cl::init(false));
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
LLVMContext Context;
|
||||
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
|
||||
@ -45,17 +52,15 @@ int main(int argc, char **argv) {
|
||||
ErrorMessage = ec.message();
|
||||
} else {
|
||||
std::unique_ptr<MemoryBuffer> &BufferPtr = BufferOrErr.get();
|
||||
ErrorOr<std::unique_ptr<Module>> ModuleOrErr =
|
||||
SMDiagnostic Err;
|
||||
std::unique_ptr<llvm::Module> MPtr =
|
||||
#if HAVE_LLVM > 0x0390
|
||||
expectedToErrorOrAndEmitErrors(Context,
|
||||
parseBitcodeFile(BufferPtr.get()->getMemBufferRef(), Context));
|
||||
ExitOnErr(Expected<std::unique_ptr<llvm::Module>>(
|
||||
parseIR(BufferPtr.get()->getMemBufferRef(), Err, Context)));
|
||||
#else
|
||||
parseBitcodeFile(BufferPtr.get()->getMemBufferRef(), Context);
|
||||
parseIR(BufferPtr.get()->getMemBufferRef(), Err, Context);
|
||||
#endif
|
||||
if (std::error_code ec = ModuleOrErr.getError())
|
||||
ErrorMessage = ec.message();
|
||||
|
||||
M = ModuleOrErr.get().release();
|
||||
M = MPtr.release();
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,14 +110,16 @@ int main(int argc, char **argv) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (TextualOut)
|
||||
M->print(Out->os(), nullptr, true);
|
||||
else
|
||||
#if HAVE_LLVM >= 0x0700
|
||||
WriteBitcodeToFile(*M, Out->os());
|
||||
WriteBitcodeToFile(*M, Out->os());
|
||||
#else
|
||||
WriteBitcodeToFile(M, Out->os());
|
||||
WriteBitcodeToFile(M, Out->os());
|
||||
#endif
|
||||
|
||||
// Declare success.
|
||||
Out->keep();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user