Skip to content

Commit 13d73b2

Browse files
committed
Use setsSCCifResultIsNonZero
Signed-off-by: John Lu <John.Lu@amd.com>
1 parent 88fdd67 commit 13d73b2

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10587,23 +10587,11 @@ bool SIInstrInfo::optimizeCompareInstr(MachineInstr &CmpInstr, Register SrcReg,
1058710587
return false;
1058810588

1058910589
bool CanOptimize = false;
10590-
MachineOperand *SccDef =
10591-
Def->findRegisterDefOperand(AMDGPU::SCC, /*TRI=*/nullptr);
1059210590

1059310591
// For S_OP that set SCC = DST!=0, do the transformation
1059410592
//
1059510593
// s_cmp_lg_* (S_OP ...), 0 => (S_OP ...)
10596-
if (SccDef && Def->getOpcode() != AMDGPU::S_ADD_I32 &&
10597-
Def->getOpcode() != AMDGPU::S_ADD_U32 &&
10598-
Def->getOpcode() != AMDGPU::S_ADDC_U32 &&
10599-
Def->getOpcode() != AMDGPU::S_SUB_I32 &&
10600-
Def->getOpcode() != AMDGPU::S_SUB_U32 &&
10601-
Def->getOpcode() != AMDGPU::S_SUBB_U32 &&
10602-
Def->getOpcode() != AMDGPU::S_MIN_I32 &&
10603-
Def->getOpcode() != AMDGPU::S_MIN_U32 &&
10604-
Def->getOpcode() != AMDGPU::S_MAX_I32 &&
10605-
Def->getOpcode() != AMDGPU::S_MAX_U32 &&
10606-
Def->getOpcode() != AMDGPU::S_ADDK_I32)
10594+
if (setsSCCifResultIsNonZero(*Def))
1060710595
CanOptimize = true;
1060810596

1060910597
// s_cmp_lg_* is redundant because the SCC input value for S_CSELECT* has
@@ -10631,7 +10619,8 @@ bool SIInstrInfo::optimizeCompareInstr(MachineInstr &CmpInstr, Register SrcReg,
1063110619
return false;
1063210620
}
1063310621

10634-
if (SccDef)
10622+
if (MachineOperand *SccDef =
10623+
Def->findRegisterDefOperand(AMDGPU::SCC, /*TRI=*/nullptr))
1063510624
SccDef->setIsDead(false);
1063610625

1063710626
CmpInstr.eraseFromParent();

llvm/lib/Target/AMDGPU/SIInstrInfo.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,30 @@ class SIInstrInfo final : public AMDGPUGenInstrInfo {
709709
}
710710
}
711711

712+
static bool setsSCCifResultIsNonZero(const MachineInstr &MI) {
713+
if (!MI.findRegisterDefOperand(AMDGPU::SCC, /*TRI=*/nullptr))
714+
return false;
715+
// Compares have no result
716+
if (MI.isCompare())
717+
return false;
718+
switch (MI.getOpcode()) {
719+
default:
720+
return true;
721+
case AMDGPU::S_ADD_I32:
722+
case AMDGPU::S_ADD_U32:
723+
case AMDGPU::S_ADDC_U32:
724+
case AMDGPU::S_SUB_I32:
725+
case AMDGPU::S_SUB_U32:
726+
case AMDGPU::S_SUBB_U32:
727+
case AMDGPU::S_MIN_I32:
728+
case AMDGPU::S_MIN_U32:
729+
case AMDGPU::S_MAX_I32:
730+
case AMDGPU::S_MAX_U32:
731+
case AMDGPU::S_ADDK_I32:
732+
return false;
733+
}
734+
}
735+
712736
static bool isEXP(const MachineInstr &MI) {
713737
return MI.getDesc().TSFlags & SIInstrFlags::EXP;
714738
}

0 commit comments

Comments
 (0)