diff options
author | Jakub Chlanda <jakub@codeplay.com> | 2023-10-03 14:28:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-03 14:28:01 +0200 |
commit | 5ec9faf007cc2589682cd28a10aa5a351f6aebda (patch) | |
tree | 26c6562b3b8f8383df80e7467fc20775b20360c5 /libclc | |
parent | c0f8748d448be69748fee73014a60ada22b41b0d (diff) | |
download | llvm-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.cpp | 37 |
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; } - |