LLVM  8.0.1
Macros | Functions | Variables
WebAssemblyExplicitLocals.cpp File Reference

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

#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
#include "WebAssembly.h"
#include "WebAssemblyMachineFunctionInfo.h"
#include "WebAssemblySubtarget.h"
#include "WebAssemblyUtilities.h"
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
Include dependency graph for WebAssemblyExplicitLocals.cpp:

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 unsigned getLocalId (DenseMap< unsigned, unsigned > &Reg2Local, 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. More...
 
static unsigned getDropOpcode (const TargetRegisterClass *RC)
 Get the appropriate drop opcode for the given register class. More...
 
static unsigned getGetLocalOpcode (const TargetRegisterClass *RC)
 Get the appropriate local.get opcode for the given register class. More...
 
static unsigned getSetLocalOpcode (const TargetRegisterClass *RC)
 Get the appropriate local.set opcode for the given register class. More...
 
static unsigned getTeeLocalOpcode (const TargetRegisterClass *RC)
 Get the appropriate local.tee opcode for the given register class. More...
 
static MVT typeForRegClass (const TargetRegisterClass *RC)
 Get the type associated with the given register class. More...
 
static MachineInstrfindStartOfTree (MachineOperand &MO, MachineRegisterInfo &MRI, WebAssemblyFunctionInfo &MFI)
 Given a MachineOperand of a stackified vreg, return the instruction at the start of the expression tree. More...
 

Variables

static cl::opt< boolWasmDisableExplicitLocals ("wasm-disable-explicit-locals", cl::Hidden, cl::desc("WebAssembly: output implicit locals in" " instruction output for test purposes only."), cl::init(false))
 

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

◆ findStartOfTree()

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

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

Definition at line 169 of file WebAssemblyExplicitLocals.cpp.

References llvm::MachineInstrBuilder::addReg(), assert(), llvm::MachineFunction::begin(), llvm::BuildMI(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::dbgs(), llvm::tgtok::Def, E, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::explicit_uses(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::MachineInstr::getDebugLoc(), llvm::MachineInstr::getDesc(), getDropOpcode(), getGetLocalOpcode(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), getLocalId(), llvm::MachineFunction::getName(), llvm::MCInstrDesc::getNumDefs(), llvm::MachineRegisterInfo::getNumVirtRegs(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getOperandNo(), llvm::WebAssemblyFunctionInfo::getParams(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), getSetLocalOpcode(), llvm::MachineFunction::getSubtarget(), getTeeLocalOpcode(), llvm::MachineRegisterInfo::getVRegDef(), I, llvm::TargetRegisterInfo::index2VirtReg(), llvm::ISD::INLINEASM, llvm::WebAssembly::isArgument(), llvm::WebAssembly::isCopy(), llvm::MachineInstr::isDebugInstr(), llvm::MachineInstr::isLabel(), llvm::WebAssembly::isTee(), llvm::WebAssemblyFunctionInfo::isVRegStackified(), LLVM_DEBUG, MI, MRI, Reg, llvm::MachineRegisterInfo::replaceRegWith(), llvm::reverse(), llvm::MachineOperand::setIsDead(), llvm::MachineOperand::setIsKill(), llvm::WebAssemblyFunctionInfo::setLocal(), llvm::WebAssemblyFunctionInfo::setNumLocals(), llvm::MachineOperand::setReg(), llvm::WebAssemblyFunctionInfo::stackifyVReg(), TII, typeForRegClass(), llvm::MachineInstr::untieRegOperand(), llvm::MachineRegisterInfo::use_empty(), llvm::TargetRegisterInfo::virtReg2Index(), and WasmDisableExplicitLocals.

◆ getDropOpcode()

static unsigned getDropOpcode ( const TargetRegisterClass RC)
static

Get the appropriate drop opcode for the given register class.

Definition at line 83 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

Referenced by findStartOfTree().

◆ getGetLocalOpcode()

static unsigned getGetLocalOpcode ( const TargetRegisterClass RC)
static

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

Definition at line 100 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

Referenced by findStartOfTree().

◆ getLocalId()

static unsigned getLocalId ( DenseMap< unsigned, unsigned > &  Reg2Local,
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 74 of file WebAssemblyExplicitLocals.cpp.

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

Referenced by findStartOfTree().

◆ getSetLocalOpcode()

static unsigned getSetLocalOpcode ( const TargetRegisterClass RC)
static

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

Definition at line 117 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

Referenced by findStartOfTree().

◆ getTeeLocalOpcode()

static unsigned getTeeLocalOpcode ( const TargetRegisterClass RC)
static

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

Definition at line 134 of file WebAssemblyExplicitLocals.cpp.

References llvm_unreachable.

Referenced by findStartOfTree().

◆ INITIALIZE_PASS()

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

Definition at line 65 of file WebAssemblyExplicitLocals.cpp.

◆ typeForRegClass()

static MVT typeForRegClass ( const TargetRegisterClass RC)
static

Get the type associated with the given register class.

Definition at line 151 of file WebAssemblyExplicitLocals.cpp.

References llvm::MVT::ExceptRef, llvm::MVT::f32, llvm::MVT::f64, llvm::MVT::i32, llvm::MVT::i64, llvm_unreachable, and llvm::MVT::v16i8.

Referenced by findStartOfTree().

Variable Documentation

◆ WasmDisableExplicitLocals

cl::opt<bool> WasmDisableExplicitLocals("wasm-disable-explicit-locals", cl::Hidden, cl::desc("WebAssembly: output implicit locals in" " instruction output for test purposes only."), cl::init(false))
static

Referenced by findStartOfTree().