aboutsummaryrefslogtreecommitdiff
path: root/libclc
diff options
context:
space:
mode:
authorJakub Chlanda <jakub@codeplay.com>2023-10-03 14:28:01 +0200
committerGitHub <noreply@github.com>2023-10-03 14:28:01 +0200
commit5ec9faf007cc2589682cd28a10aa5a351f6aebda (patch)
tree26c6562b3b8f8383df80e7467fc20775b20360c5 /libclc
parentc0f8748d448be69748fee73014a60ada22b41b0d (diff)
downloadllvm-5ec9faf007cc2589682cd28a10aa5a351f6aebda.zip
llvm-5ec9faf007cc2589682cd28a10aa5a351f6aebda.tar.gz
llvm-5ec9faf007cc2589682cd28a10aa5a351f6aebda.tar.bz2
[LIBCLC] Teach prepare-builtins how to handle text based IR (#66993)
Diffstat (limited to 'libclc')
-rw-r--r--libclc/utils/prepare-builtins.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/libclc/utils/prepare-builtins.cpp b/libclc/utils/prepare-builtins.cpp
index 550b597..ebdbc68 100644
--- a/libclc/utils/prepare-builtins.cpp
+++ b/libclc/utils/prepare-builtins.cpp
@@ -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;
}
-