Skip to content

Commit

Permalink
[LIBCLC] Teach prepare-builtins how to handle text based IR (#66993)
Browse files Browse the repository at this point in the history
  • Loading branch information
jchlanda committed Oct 3, 2023
1 parent c0f8748 commit 5ec9faf
Showing 1 changed file with 22 additions and 15 deletions.
37 changes: 22 additions & 15 deletions libclc/utils/prepare-builtins.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,37 @@
#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("-"));

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.
Expand All @@ -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();
}
}

Expand Down Expand Up @@ -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;
}

0 comments on commit 5ec9faf

Please sign in to comment.