1 //===----- ExampleModules.h - IR modules for LLJIT examples -----*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Example modules for LLJIT examples 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_EXAMPLES_HOWTOUSELLJIT_EXAMPLEMODULES_H 14 #define LLVM_EXAMPLES_HOWTOUSELLJIT_EXAMPLEMODULES_H 15 16 #include "llvm/ADT/StringRef.h" 17 #include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h" 18 #include "llvm/IR/LLVMContext.h" 19 #include "llvm/IR/Module.h" 20 #include "llvm/IRReader/IRReader.h" 21 #include "llvm/Support/CommandLine.h" 22 #include "llvm/Support/Error.h" 23 #include "llvm/Support/SourceMgr.h" 24 25 const llvm::StringRef Add1Example = 26 R"( 27 define i32 @add1(i32 %x) { 28 entry: 29 %r = add nsw i32 %x, 1 30 ret i32 %r 31 } 32 )"; 33 34 inline llvm::Expected<llvm::orc::ThreadSafeModule> 35 parseExampleModule(llvm::StringRef Source, llvm::StringRef Name) { 36 using namespace llvm; 37 using namespace llvm::orc; 38 39 auto Ctx = std::make_unique<LLVMContext>(); 40 SMDiagnostic Err; 41 auto M = parseIR(MemoryBufferRef(Source, Name), Err, *Ctx); 42 43 if (!M) { 44 std::string ErrMsg; 45 { 46 raw_string_ostream ErrStream(ErrMsg); 47 Err.print("", ErrStream); 48 } 49 return make_error<StringError>(std::move(ErrMsg), inconvertibleErrorCode()); 50 } 51 52 return ThreadSafeModule(std::move(M), std::move(Ctx)); 53 } 54 55 #endif // LLVM_EXAMPLES_HOWTOUSELLJIT_EXAMPLEMODULES_H 56