Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <llvm/Pass.h>
- #include <llvm/PassManager.h>
- #include <llvm/IR/BasicBlock.h>
- #include <llvm/IR/Constants.h>
- #include <llvm/IR/DerivedTypes.h>
- #include <llvm/IR/Function.h>
- #include <llvm/IR/GlobalVariable.h>
- #include <llvm/IR/IRPrintingPasses.h>
- #include <llvm/IR/Instructions.h>
- #include <llvm/IR/LLVMContext.h>
- #include <llvm/IR/Module.h>
- #include <llvm/IR/Verifier.h>
- #include <llvm/Support/FormattedStream.h>
- #include <vector>
- using namespace llvm;
- Module *makeLLVMModule();
- int main(int argc, char **argv) {
- Module *Mod = makeLLVMModule();
- PassManager PM;
- PM.add(createVerifierPass());
- PM.add(createPrintModulePass(outs()));
- PM.run(*Mod);
- return 0;
- }
- Module *makeLLVMModule() {
- // Module Construction
- Module *mod = new Module("test.ll", getGlobalContext());
- mod->setDataLayout("e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128");
- mod->setTargetTriple("i386-pc-linux-gnu");
- // Type Definitions
- std::vector<Type *> FuncTy_0_args;
- FuncTy_0_args.push_back(IntegerType::get(mod->getContext(), 32));
- FuncTy_0_args.push_back(IntegerType::get(mod->getContext(), 32));
- FunctionType *FuncTy_0 = FunctionType::get(
- /*Result=*/IntegerType::get(mod->getContext(), 32),
- /*Params=*/FuncTy_0_args,
- /*isVarArg=*/false);
- // Function Declaration
- Function *func_sum = mod->getFunction("sum");
- if (!func_sum) {
- func_sum = Function::Create(
- /*Type=*/FuncTy_0,
- /*Linkage=*/GlobalValue::ExternalLinkage,
- /*Name=*/"sum", mod);
- func_sum->setCallingConv(CallingConv::C);
- }
- // Function Definition
- {
- Function::arg_iterator args = func_sum->arg_begin();
- Value *int32_x = args++;
- int32_x->setName("x");
- Value *int32_y = args++;
- int32_y->setName("y");
- BasicBlock *label_entry =
- BasicBlock::Create(mod->getContext(), "entry", func_sum, 0);
- // Block entry (label_entry)
- BinaryOperator *int32_add = BinaryOperator::Create(
- Instruction::Add, int32_x, int32_y, "add", label_entry);
- ReturnInst::Create(mod->getContext(), int32_add, label_entry);
- }
- return mod;
- }
Advertisement
Add Comment
Please, Sign In to add comment