Book Image

LLVM Cookbook

Book Image

LLVM Cookbook

Overview of this book

Table of Contents (16 chapters)
LLVM Cookbook
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

Implementing the MachineInstrBuilder class


The MachineInstrBuilder class exposes a function called BuildMI(). This function is used to build machine instructions.

How to do it…

Machine instructions are created by using the BuildMI functions, located in the include/llvm/CodeGen/MachineInstrBuilder.h file. The BuildMI functions make it easy to build arbitrary machine instructions.

For example, you can use BuildMI in code snippets for the following purposes:

  1. To create a DestReg = mov 42 (rendered in the x86 assembly as mov DestReg, 42) instruction:

    MachineInstr *MI = BuildMI(X86::MOV32ri, 1, DestReg).addImm(42);
  2. To create the same instruction, but insert it at the end of a basic block:

    MachineBasicBlock &MBB = BuildMI(MBB, X86::MOV32ri, 1, DestReg).addImm(42);
  3. To create the same instruction, but insert it before a specified iterator point:

    MachineBasicBlock::iterator MBBI = 
    BuildMI(MBB, MBBI, X86::MOV32ri, 1, DestReg).addImm(42)
  4. To create a self-looping branch instruction:

    BuildMI(MBB, X86::JNE,...