[llvm] [AMDGPU][GISel] Fold 'min(min(x,y),z)' and 'max(max(x,y),z)' into min3 and max3 (PR #200410)
Petar Avramovic via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 4 04:50:00 PDT 2026
================
@@ -481,6 +491,75 @@ bool AMDGPURegBankCombinerImpl::combineD16Load(MachineInstr &MI) const {
return false;
}
+void AMDGPURegBankCombinerImpl::applyMinMaxToMinMax3(
+ MachineInstr &MI, MinMaxToMinMax3MatchInfo &MatchInfo) const {
+ B.buildInstr(MatchInfo.Opc, {MI.getOperand(0)},
+ {MatchInfo.Val0, MatchInfo.Val1, MatchInfo.Val2}, MI.getFlags());
+ MI.eraseFromParent();
+ return;
+}
+
+bool AMDGPURegBankCombinerImpl::matchMinMaxToMinMax3(
+ MachineInstr &MI, MinMaxToMinMax3MatchInfo &MatchInfo) const {
+ Register dst = MI.getOperand(0).getReg();
+ Register src1 = MI.getOperand(1).getReg();
+ Register src2 = MI.getOperand(2).getReg();
+ // if the register is SGPR, don't optimize it.
+ if (!(isVgprRegBank(dst) && isVgprRegBank(src1) && isVgprRegBank(src2))) {
+ return false;
+ }
+
+ LLT t = MRI.getType(dst);
+ bool IsSupportedTy = t == LLT::scalar(32) ||
+ (t == LLT::scalar(16) && STI.hasMin3Max3_16()) ||
+ (t.isVector() && t.getScalarSizeInBits() == 32);
----------------
petar-avramovic wrote:
unsure what this meant to do, true for v2s32 v4s32, also unused?
https://github.com/llvm/llvm-project/pull/200410
More information about the llvm-commits
mailing list