A basic block consists of a list of instructions. For example, an instruction can be a simple statement performing tasks based on some simple arithmetic instruction. We will see how the LLVM API can be used to emit arithmetic instructions.
For example, if we want to multiply first argument a with integer value 16
, we will create a constant integer value 16
with the following API:
Value *constant = Builder.getInt32(16);
We already have a from the function argument list:
Value *Arg1 = fooFunc->arg_begin();
LLVM provides a rich list of API's to create binary operations. You can go through the include/llvm/IR/IRBuild.h
file for more details on the APIs.
Value *createArith(IRBuilder<> &Builder, Value *L, Value *R) { return Builder.CreateMul(L, R, "multmp"); }