LLVM 20.0.0git
Macros | Functions | Variables
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/Analysis/DomTreeUpdater.h"
#include "llvm/CodeGen/IndirectBrExpand.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>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "indirectbr-expand"
 

Functions

static bool runImpl (Function &F, const TargetLowering *TLI, DomTreeUpdater *DTU)
 
 INITIALIZE_PASS_BEGIN (IndirectBrExpandLegacyPass, DEBUG_TYPE, "Expand indirectbr instructions", false, false) INITIALIZE_PASS_END(IndirectBrExpandLegacyPass
 

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

Function Documentation

◆ INITIALIZE_PASS_BEGIN()

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

◆ runImpl()

bool runImpl ( Function F,
const TargetLowering TLI,
DomTreeUpdater DTU 
)
static

Variable Documentation

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 95 of file IndirectBrExpandPass.cpp.

◆ false

Expand indirectbr false

Definition at line 96 of file IndirectBrExpandPass.cpp.

◆ instructions

Expand indirectbr instructions

Definition at line 96 of file IndirectBrExpandPass.cpp.