LLVM 20.0.0git
|
This file converts any remaining registers into WebAssembly locals. More...
#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
#include "WebAssembly.h"
#include "WebAssemblyDebugValueManager.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 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 MachineInstr * | findStartOfTree (MachineOperand &MO, MachineRegisterInfo &MRI, const WebAssemblyFunctionInfo &MFI) |
Given a MachineOperand of a stackified vreg, return the instruction at the start of the expression tree. | |
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 |
Definition at line 62 of file WebAssemblyExplicitLocals.cpp.
References llvm::dbgs(), llvm::WebAssemblyFunctionInfo::getFrameBaseVreg(), llvm::WebAssemblyFunctionInfo::isFrameBaseVirtual(), LLVM_DEBUG, llvm::WebAssemblyFunctionInfo::setFrameBaseLocal(), and llvm::Register::virtReg2Index().
Referenced by getLocalId().
|
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(), and MRI.
Referenced by findStartOfTree().
|
static |
Get the appropriate drop opcode for the given register class.
Definition at line 88 of file WebAssemblyExplicitLocals.cpp.
References llvm_unreachable.
|
static |
Get the appropriate local.get opcode for the given register class.
Definition at line 109 of file WebAssemblyExplicitLocals.cpp.
References llvm_unreachable.
|
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(), and P.
|
static |
Get the appropriate local.set opcode for the given register class.
Definition at line 130 of file WebAssemblyExplicitLocals.cpp.
References llvm_unreachable.
|
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 | ( | WebAssemblyExplicitLocals | , |
DEBUG_TYPE | , | ||
"Convert registers to WebAssembly locals" | , | ||
false | , | ||
false | |||
) |
Definition at line 55 of file WebAssemblyExplicitLocals.cpp.
|
static |
Get the type associated with the given register class.
Definition at line 172 of file WebAssemblyExplicitLocals.cpp.
References llvm_unreachable.