LLVM  13.0.0git
Macros | Functions | Variables
IndirectBrExpandPass.cpp File Reference
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/Sequence.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/DomTreeUpdater.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Dominators.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/InitializePasses.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_BEGIN (IndirectBrExpandPass, DEBUG_TYPE, "Expand indirectbr instructions", false, false) INITIALIZE_PASS_END(IndirectBrExpandPass
 

Variables

 DEBUG_TYPE
 
Expand indirectbr instructions
 
Expand indirectbr false
 

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 50 of file IndirectBrExpandPass.cpp.

Function Documentation

◆ INITIALIZE_PASS_BEGIN()

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

Variable Documentation

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 78 of file IndirectBrExpandPass.cpp.

◆ false

Expand indirectbr false

Definition at line 79 of file IndirectBrExpandPass.cpp.

◆ instructions

Expand indirectbr instructions

Definition at line 79 of file IndirectBrExpandPass.cpp.