LLVM  16.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/Constants.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Target/TargetMachine.h"
#include <optional>
Include dependency graph for IndirectBrExpandPass.cpp:

Go to the source code of this file.


#define DEBUG_TYPE   "indirectbr-expand"


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


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


#define DEBUG_TYPE   "indirectbr-expand"

Definition at line 47 of file IndirectBrExpandPass.cpp.

Function Documentation


INITIALIZE_PASS_BEGIN ( IndirectBrExpandPass  ,
"Expand indirectbr instructions ,
false  ,

Variable Documentation



Definition at line 75 of file IndirectBrExpandPass.cpp.

◆ false

Expand indirectbr false

Definition at line 76 of file IndirectBrExpandPass.cpp.

◆ instructions

Expand indirectbr instructions

Definition at line 76 of file IndirectBrExpandPass.cpp.