# Example—defining a simple function

This example defines a function that adds 2 double-precision, floating-point numbers.

    """
    This file demonstrates a trivial function "fpadd" returning the sum of
    two floating-point numbers.
    """

    from llvmlite import ir

    # Create some useful types
    double = ir.DoubleType()
    fnty = ir.FunctionType(double, (double, double))

    # Create an empty module...
    module = ir.Module(name=__file__)
    # and declare a function named "fpadd" inside it
    func = ir.Function(module, fnty, name="fpadd")

    # Now implement the function
    block = func.append_basic_block(name="entry")
    builder = ir.IRBuilder(block)
    a, b = func.args
    result = builder.fadd(a, b, name="res")
    builder.ret(result)

    # Print the module IR
    print(module)

The generated LLVM intermediate representation is printed at the end:

    ; ModuleID = "examples/ir_fpadd.py"
    target triple = "unknown-unknown-unknown"
    target datalayout = ""

    define double @"fpadd"(double %".1", double %".2")
    {
    entry:
      %"res" = fadd double %".1", %".2"
      ret double %"res"
    }

To learn how to compile and execute this function, see LLVM binding layer—llvmlite.binding.