Skip to content

Commit 7221bc7

Browse files
authored
AMDGPU: Make v2f16 minimum/maximum legal for gfx950 (#117738)
1 parent f5e92eb commit 7221bc7

File tree

6 files changed

+1850
-1782
lines changed

6 files changed

+1850
-1782
lines changed

llvm/lib/Target/AMDGPU/SIISelLowering.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,9 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
859859
// FIXME: For nnan fmaximum, emit the fmaximum3 instead of fmaxnum
860860
if (Subtarget->hasMinimum3Maximum3F32())
861861
setOperationAction({ISD::FMAXIMUM, ISD::FMINIMUM}, MVT::f32, Legal);
862+
863+
if (Subtarget->hasMinimum3Maximum3PKF16())
864+
setOperationAction({ISD::FMAXIMUM, ISD::FMINIMUM}, MVT::v2f16, Legal);
862865
}
863866

864867
setOperationAction(ISD::INTRINSIC_WO_CHAIN,

llvm/lib/Target/AMDGPU/VOP3PInstructions.td

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,17 @@ multiclass MadFmaMixPats<SDPatternOperator fma_like,
255255
>;
256256
}
257257

258+
class MinimumMaximumByMinimum3Maximum3VOP3P<SDPatternOperator node,
259+
Instruction inst> : GCNPat<
260+
(v2f16 (node (VOP3PMods v2f16:$src0, i32:$src0_mods), (VOP3PMods v2f16:$src1, i32:$src1_mods))),
261+
(inst $src0_mods, $src0, $src1_mods, $src1, $src1_mods, $src1)
262+
>;
263+
264+
let SubtargetPredicate = HasMinimum3Maximum3PKF16 in {
265+
def : MinimumMaximumByMinimum3Maximum3VOP3P<fminimum, V_PK_MINIMUM3_F16>;
266+
def : MinimumMaximumByMinimum3Maximum3VOP3P<fmaximum, V_PK_MAXIMUM3_F16>;
267+
}
268+
258269
let SubtargetPredicate = HasMadMixInsts, OtherPredicates = [NoFP32Denormals] in {
259270

260271
// These are VOP3a-like opcodes which accept no omod.

0 commit comments

Comments
 (0)