LLVM  8.0.1
Macros | Functions
IndirectBrExpandPass.cpp File Reference

Implements an expansion pass to turn indirectbr instructions in the IR into switch instructions. More...

#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/Sequence.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
Include dependency graph for IndirectBrExpandPass.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "indirectbr-expand"
 

Functions

 INITIALIZE_PASS (IndirectBrExpandPass, DEBUG_TYPE, "Expand indirectbr instructions", false, false) FunctionPass *llvm
 

Detailed Description

Implements an expansion pass to turn indirectbr instructions in the IR into switch instructions.

This works by enumerating the basic blocks in a dense range of integers, replacing each blockaddr constant with the corresponding integer constant, and then building a switch that maps from the integers to the actual blocks. All of the indirectbr instructions in the function are redirected to this common switch.

While this is generically useful if a target is unable to codegen indirectbr natively, it is primarily useful when there is some desire to get the builtin non-jump-table lowering of a switch even when the input source contained an explicit indirect branch construct.

Note that it doesn't make any sense to enable this pass unless a target also disables jump-table lowering of switches. Doing that is likely to pessimize the code.

Definition in file IndirectBrExpandPass.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "indirectbr-expand"

Definition at line 48 of file IndirectBrExpandPass.cpp.

Function Documentation

◆ INITIALIZE_PASS()

INITIALIZE_PASS ( IndirectBrExpandPass  ,
DEBUG_TYPE  ,
"Expand indirectbr instructions ,
false  ,
false   
)