LLVM 20.0.0git
|
Analysis that tracks defined/used subregister lanes across COPY instructions and instructions that get lowered to a COPY (PHI, REG_SEQUENCE, INSERT_SUBREG, EXTRACT_SUBREG). More...
#include "llvm/CodeGen/DetectDeadLanes.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "detect-dead-lanes" |
Functions | |
static bool | lowersToCopies (const MachineInstr &MI) |
Returns true if MI will get lowered to a series of COPY instructions. | |
static bool | isCrossCopy (const MachineRegisterInfo &MRI, const MachineInstr &MI, const TargetRegisterClass *DstRC, const MachineOperand &MO) |
Analysis that tracks defined/used subregister lanes across COPY instructions and instructions that get lowered to a COPY (PHI, REG_SEQUENCE, INSERT_SUBREG, EXTRACT_SUBREG).
The information is used to detect dead definitions and the usage of (completely) undefined values and mark the operands as such. This pass is necessary because the dead/undef status is not obvious anymore when subregisters are involved.
Example: %0 = some definition %1 = IMPLICIT_DEF %2 = REG_SEQUENCE %0, sub0, %1, sub1 %3 = EXTRACT_SUBREG %2, sub1 = use %3 The %0 definition is dead and %3 contains an undefined value.
Definition in file DetectDeadLanes.cpp.
#define DEBUG_TYPE "detect-dead-lanes" |
Definition at line 39 of file DetectDeadLanes.cpp.
|
static |
Definition at line 67 of file DetectDeadLanes.cpp.
References assert(), llvm::MachineOperand::getOperandNo(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), lowersToCopies(), MI, MRI, SubReg, and TRI.
|
static |
Returns true if MI
will get lowered to a series of COPY instructions.
We call this a COPY-like instruction.
Definition at line 52 of file DetectDeadLanes.cpp.
References MI.
Referenced by isCrossCopy(), and llvm::DeadLaneDetector::transferUsedLanes().