//===-- LLJITWithOptimizingIRTransform.cpp -- LLJIT with IR optimization --===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // In this example we will use an IR transform to optimize a module as it // passes through LLJIT's IRTransformLayer. // //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/Orc/LLJIT.h" #include "llvm/IR/LegacyPassManager.h" #include "llvm/Pass.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Scalar.h" #include "../ExampleModules.h" usingnamespacellvm; usingnamespacellvm::orc; ExitOnError ExitOnErr; // Example IR module. // // This IR contains a recursive definition of the factorial function: // // fac(n) | n == 0 = 1 // | otherwise = n * fac(n - 1) // // It also contains an entry function which calls the factorial function with // an input value of 5. // // We expect the IR optimization transform that we build below to transform // this into a non-recursive factorial function and an entry function that // returns a constant value of 5!, or 120. const llvm::StringRef MainMod = …; // A function object that creates a simple pass pipeline to apply to each // module as it passes through the IRTransformLayer. class MyOptimizationTransform { … }; int main(int argc, char *argv[]) { … }