LLVM 22.0.0git
WebAssemblyExplicitLocals.cpp File Reference

This file converts any remaining registers into WebAssembly locals. More...

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "wasm-explicit-locals"

Functions

 INITIALIZE_PASS (WebAssemblyExplicitLocals, DEBUG_TYPE, "Convert registers to WebAssembly locals", false, false) FunctionPass *llvm
static void checkFrameBase (WebAssemblyFunctionInfo &MFI, unsigned Local, unsigned Reg)
static unsigned getLocalId (DenseMap< unsigned, unsigned > &Reg2Local, WebAssemblyFunctionInfo &MFI, unsigned &CurLocal, unsigned Reg)
 Return a local id number for the given register, assigning it a new one if it doesn't yet have one.
static unsigned getDropOpcode (const TargetRegisterClass *RC)
 Get the appropriate drop opcode for the given register class.
static unsigned getLocalGetOpcode (const TargetRegisterClass *RC)
 Get the appropriate local.get opcode for the given register class.
static unsigned getLocalSetOpcode (const TargetRegisterClass *RC)
 Get the appropriate local.set opcode for the given register class.
static unsigned getLocalTeeOpcode (const TargetRegisterClass *RC)
 Get the appropriate local.tee opcode for the given register class.
static MVT typeForRegClass (const TargetRegisterClass *RC)
 Get the type associated with the given register class.
static MachineInstrfindStartOfTree (MachineOperand &MO, MachineRegisterInfo &MRI, const WebAssemblyFunctionInfo &MFI)
 Given a MachineOperand of a stackified vreg, return the instruction at the start of the expression tree.
static void removeFakeUses (MachineFunction &MF)

Detailed Description

This file converts any remaining registers into WebAssembly locals.

After register stackification and register coloring, convert non-stackified registers into locals, inserting explicit local.get and local.set instructions.

Definition in file WebAssemblyExplicitLocals.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "wasm-explicit-locals"

Definition at line 32 of file WebAssemblyExplicitLocals.cpp.

Function Documentation

◆ checkFrameBase()

◆ findStartOfTree()

MachineInstr * findStartOfTree ( MachineOperand & MO,
MachineRegisterInfo & MRI,
const WebAssemblyFunctionInfo & MFI )
static

Given a MachineOperand of a stackified vreg, return the instruction at the start of the expression tree.

Definition at line 194 of file WebAssemblyExplicitLocals.cpp.

References assert(), findStartOfTree(), llvm::MachineOperand::getReg(), llvm::WebAssemblyFunctionInfo::isVRegStackified(), MRI, and Reg.

Referenced by findStartOfTree().

◆ getDropOpcode()

unsigned getDropOpcode ( const TargetRegisterClass * RC)
static

Get the appropriate drop opcode for the given register class.

Definition at line 88 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

◆ getLocalGetOpcode()

unsigned getLocalGetOpcode ( const TargetRegisterClass * RC)
static

Get the appropriate local.get opcode for the given register class.

Definition at line 109 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

◆ getLocalId()

unsigned getLocalId ( DenseMap< unsigned, unsigned > & Reg2Local,
WebAssemblyFunctionInfo & MFI,
unsigned & CurLocal,
unsigned Reg )
static

Return a local id number for the given register, assigning it a new one if it doesn't yet have one.

Definition at line 76 of file WebAssemblyExplicitLocals.cpp.

References checkFrameBase(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), P, and Reg.

◆ getLocalSetOpcode()

unsigned getLocalSetOpcode ( const TargetRegisterClass * RC)
static

Get the appropriate local.set opcode for the given register class.

Definition at line 130 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

◆ getLocalTeeOpcode()

unsigned getLocalTeeOpcode ( const TargetRegisterClass * RC)
static

Get the appropriate local.tee opcode for the given register class.

Definition at line 151 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

◆ INITIALIZE_PASS()

INITIALIZE_PASS ( WebAssemblyExplicitLocals ,
DEBUG_TYPE ,
"Convert registers to WebAssembly locals" ,
false ,
false  )

◆ removeFakeUses()

void removeFakeUses ( MachineFunction & MF)
static

◆ typeForRegClass()

MVT typeForRegClass ( const TargetRegisterClass * RC)
static

Get the type associated with the given register class.

Definition at line 172 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.