Skip to content

Commit d5ca2e4

Browse files
authored
[AMDGPU] Improve MIR pattern for FMinFMaxLegacy combine. NFC. (#90968)
1 parent 78a28b3 commit d5ca2e4

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

llvm/lib/Target/AMDGPU/AMDGPUCombine.td

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ def fmin_fmax_legacy_matchdata : GIDefMatchData<"FMinFMaxLegacyInfo">;
1515
let Predicates = [HasFminFmaxLegacy] in
1616
def fcmp_select_to_fmin_fmax_legacy : GICombineRule<
1717
(defs root:$select, fmin_fmax_legacy_matchdata:$matchinfo),
18-
(match (wip_match_opcode G_SELECT):$select,
19-
[{ return matchFMinFMaxLegacy(*${select}, ${matchinfo}); }]),
18+
(match (G_FCMP $cond, $pred, $lhs, $rhs):$fcmp,
19+
(G_SELECT f32:$dst, $cond, $true, $false):$select,
20+
[{ return matchFMinFMaxLegacy(*${select}, *${fcmp}, ${matchinfo}); }]),
2021
(apply [{ applySelectFCmpToFMinToFMaxLegacy(*${select}, ${matchinfo}); }])>;
2122

2223

llvm/lib/Target/AMDGPU/AMDGPUPostLegalizerCombiner.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ class AMDGPUPostLegalizerCombinerImpl : public Combiner {
7070
};
7171

7272
// TODO: Make sure fmin_legacy/fmax_legacy don't canonicalize
73-
bool matchFMinFMaxLegacy(MachineInstr &MI, FMinFMaxLegacyInfo &Info) const;
73+
bool matchFMinFMaxLegacy(MachineInstr &MI, MachineInstr &FCmp,
74+
FMinFMaxLegacyInfo &Info) const;
7475
void applySelectFCmpToFMinToFMaxLegacy(MachineInstr &MI,
7576
const FMinFMaxLegacyInfo &Info) const;
7677

@@ -158,17 +159,14 @@ bool AMDGPUPostLegalizerCombinerImpl::tryCombineAll(MachineInstr &MI) const {
158159
}
159160

160161
bool AMDGPUPostLegalizerCombinerImpl::matchFMinFMaxLegacy(
161-
MachineInstr &MI, FMinFMaxLegacyInfo &Info) const {
162-
// FIXME: Type predicate on pattern
163-
if (MRI.getType(MI.getOperand(0).getReg()) != LLT::scalar(32))
164-
return false;
165-
166-
Register Cond = MI.getOperand(1).getReg();
167-
if (!MRI.hasOneNonDBGUse(Cond) ||
168-
!mi_match(Cond, MRI,
169-
m_GFCmp(m_Pred(Info.Pred), m_Reg(Info.LHS), m_Reg(Info.RHS))))
162+
MachineInstr &MI, MachineInstr &FCmp, FMinFMaxLegacyInfo &Info) const {
163+
if (!MRI.hasOneNonDBGUse(FCmp.getOperand(0).getReg()))
170164
return false;
171165

166+
Info.Pred =
167+
static_cast<CmpInst::Predicate>(FCmp.getOperand(1).getPredicate());
168+
Info.LHS = FCmp.getOperand(2).getReg();
169+
Info.RHS = FCmp.getOperand(3).getReg();
172170
Register True = MI.getOperand(2).getReg();
173171
Register False = MI.getOperand(3).getReg();
174172

0 commit comments

Comments
 (0)