Skip to content

Commit 29d91cf

Browse files
committed
Eliminate G_TRUNC to S1 SGPR
1 parent 0c48285 commit 29d91cf

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPURegBankLegalize.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class AMDGPURegBankLegalizeCombiner {
126126
bool tryEliminateReadAnyLane(MachineInstr &Copy);
127127
void tryCombineCopy(MachineInstr &MI);
128128
void tryCombineS1AnyExt(MachineInstr &MI);
129+
void tryCombineTrunc(MachineInstr &MI);
129130
};
130131

131132
bool AMDGPURegBankLegalizeCombiner::isLaneMask(Register Reg) {
@@ -345,6 +346,25 @@ void AMDGPURegBankLegalizeCombiner::tryCombineS1AnyExt(MachineInstr &MI) {
345346
llvm_unreachable("missing anyext + trunc combine");
346347
}
347348

349+
void AMDGPURegBankLegalizeCombiner::tryCombineTrunc(MachineInstr &MI) {
350+
if (MI.getOpcode() != AMDGPU::G_TRUNC)
351+
return;
352+
353+
Register Dst = MI.getOperand(0).getReg();
354+
Register Src = MI.getOperand(1).getReg();
355+
auto *SrcDefMI = MRI.getVRegDef(Src);
356+
if (MRI.getType(Dst) != LLT::scalar(1) || !MRI.use_empty(Dst))
357+
return;
358+
359+
if (SrcDefMI && (SrcDefMI->getOpcode() == AMDGPU::G_UADDO ||
360+
SrcDefMI->getOpcode() == AMDGPU::G_USUBO ||
361+
SrcDefMI->getOpcode() == AMDGPU::G_UADDE ||
362+
SrcDefMI->getOpcode() == AMDGPU::G_USUBE)) {
363+
MI.eraseFromParent();
364+
return;
365+
}
366+
}
367+
348368
// Search through MRI for virtual registers with sgpr register bank and S1 LLT.
349369
[[maybe_unused]] static Register getAnySgprS1(const MachineRegisterInfo &MRI) {
350370
const LLT S1 = LLT::scalar(1);
@@ -475,6 +495,10 @@ bool AMDGPURegBankLegalize::runOnMachineFunction(MachineFunction &MF) {
475495
Combiner.tryCombineCopy(MI);
476496
continue;
477497
}
498+
if (MI.getOpcode() == AMDGPU::G_TRUNC) {
499+
Combiner.tryCombineTrunc(MI);
500+
continue;
501+
}
478502
if (MI.getOpcode() == AMDGPU::G_ANYEXT) {
479503
Combiner.tryCombineS1AnyExt(MI);
480504
continue;

0 commit comments

Comments
 (0)