LLVM
8.0.1
|
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"
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 MachineInstr * | findStartOfTree (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< bool > | WasmDisableExplicitLocals ("wasm-disable-explicit-locals", cl::Hidden, cl::desc("WebAssembly: output implicit locals in" " instruction output for test purposes only."), cl::init(false)) |
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.
#define DEBUG_TYPE "wasm-explicit-locals" |
Definition at line 32 of file WebAssemblyExplicitLocals.cpp.
|
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.
|
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().
|
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().
|
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().
|
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().
|
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 | ( | WebAssemblyExplicitLocals | , |
DEBUG_TYPE | , | ||
"Convert registers to WebAssembly locals" | , | ||
false | , | ||
false | |||
) |
Definition at line 65 of file WebAssemblyExplicitLocals.cpp.
|
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().