[LIBCLC] Teach prepare-builtins how to handle text based IR (#66993)

This commit is contained in:
Jakub Chlanda 2023-10-03 14:28:01 +02:00 committed by GitHub
parent c0f8748d44
commit 5ec9faf007
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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;
}