|
LLVM 23.0.0git
|
This file defines the WebAssembly-specific support for the FastISel class. More...
#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"#include "Utils/WasmAddressSpaces.h"#include "Utils/WebAssemblyTypeUtilities.h"#include "WebAssemblyMachineFunctionInfo.h"#include "WebAssemblySubtarget.h"#include "WebAssemblyUtilities.h"#include "llvm/Analysis/BranchProbabilityInfo.h"#include "llvm/CodeGen/FastISel.h"#include "llvm/CodeGen/FunctionLoweringInfo.h"#include "llvm/CodeGen/MachineConstantPool.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineInstrBuilder.h"#include "llvm/CodeGen/MachineModuleInfo.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/DerivedTypes.h"#include "llvm/IR/Function.h"#include "llvm/IR/GetElementPtrTypeIterator.h"#include "llvm/IR/GlobalVariable.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Operator.h"#include "WebAssemblyGenFastISel.inc"Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "wasm-fastisel" |
Functions | |
| static unsigned | getSExtLoadOpcode (unsigned Opc, bool A64) |
| static unsigned | getZExtLoadOpcodeFromAnd (MachineInstr *MI, MachineRegisterInfo &MRI, const LoadInst *LI, bool A64) |
| static unsigned | getFoldedLoadOpcode (MachineInstr *MI, MachineRegisterInfo &MRI, const LoadInst *LI, bool A64) |
| static unsigned | matchFoldableShift (MachineInstr *MI, const LoadInst *LI, MachineRegisterInfo &MRI, bool A64, MachineInstr *&UserMI) |
| Matches a sign-extension pattern (shl + shr_s) to fold it into a signed load. | |
This file defines the WebAssembly-specific support for the FastISel class.
Some of the target-specific code is generated by tablegen in the file WebAssemblyGenFastISel.inc, which is #included here.
TODO: kill flags
Definition in file WebAssemblyFastISel.cpp.
| #define DEBUG_TYPE "wasm-fastisel" |
Definition at line 42 of file WebAssemblyFastISel.cpp.
|
static |
Definition at line 1355 of file WebAssemblyFastISel.cpp.
References getSExtLoadOpcode(), getZExtLoadOpcodeFromAnd(), and MI.
Definition at line 1287 of file WebAssemblyFastISel.cpp.
References Opc.
Referenced by getFoldedLoadOpcode().
|
static |
Definition at line 1312 of file WebAssemblyFastISel.cpp.
References DefMI, llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), I, llvm::maskTrailingOnes(), MI, and Reg.
Referenced by getFoldedLoadOpcode().
|
static |
Matches a sign-extension pattern (shl + shr_s) to fold it into a signed load.
FastISel assumes that 'sext' from i8 or i16 will first be lowered to a 32-bit zero-extending load (i32.load8_u / i32.load16_u) followed by 32-bit shifts, even when extending to i64. Therefore, this function only matches 32-bit shifts (SHL_I32 / SHR_S_I32) and specifically checks if both shift amounts are identical, compile-time constants that match the exact extension size (32 - LoadBitWidth).
Definition at line 1380 of file WebAssemblyFastISel.cpp.
References llvm::Type::getIntegerBitWidth(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::Value::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), llvm::Type::isIntegerTy(), MI, Opc, and llvm::MachineRegisterInfo::use_instr_nodbg_begin().