[llvm] [AMDGPU] Adjust amdgpu fmax/fmin legalization (PR #202917)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 05:06:41 PDT 2026
================
@@ -10322,6 +10324,121 @@ void SIInstrInfo::fixImplicitOperands(MachineInstr &MI) const {
}
}
+// fcanonicalize is selected as a self-max (SelectCanonicalizeAsMax), i.e.
+// V_MAX_F{16,32} src, src, so only these max opcodes can define a canonicalize.
+static bool isFPSelfMaxCanonicalizeOpc(unsigned Opc) {
+ switch (Opc) {
+ case AMDGPU::V_MAX_F16_e32:
+ case AMDGPU::V_MAX_F16_e64:
+ case AMDGPU::V_MAX_F16_t16_e32:
+ case AMDGPU::V_MAX_F16_t16_e64:
+ case AMDGPU::V_MAX_F16_fake16_e32:
+ case AMDGPU::V_MAX_F16_fake16_e64:
+ case AMDGPU::V_MAX_F32_e32:
+ case AMDGPU::V_MAX_F32_e64:
+ return true;
+ default:
+ return false;
+ }
+}
+
+// VALU FP min/max (f16/f32). On FeatureIEEEMinimumMaximumInsts targets these
+// print as v_{min,max}_num_f*, which canonicalize their inputs internally.
+static bool isFPMinMaxNumOpc(unsigned Opc) {
+ switch (Opc) {
+ case AMDGPU::V_MIN_F16_e32:
+ case AMDGPU::V_MIN_F16_e64:
+ case AMDGPU::V_MIN_F16_t16_e32:
+ case AMDGPU::V_MIN_F16_t16_e64:
+ case AMDGPU::V_MIN_F16_fake16_e32:
+ case AMDGPU::V_MIN_F16_fake16_e64:
+ case AMDGPU::V_MIN_F32_e32:
+ case AMDGPU::V_MIN_F32_e64:
+ return true;
+ default:
+ return isFPSelfMaxCanonicalizeOpc(Opc);
+ }
+}
+
+static bool isFPCanonicalizeSrcModifier(unsigned Mod) {
+ return !(Mod & ~(SISrcMods::NEG | SISrcMods::ABS));
+}
+
+/// On FeatureIEEEMinimumMaximumInsts targets a VALU FP min/max is printed as
+/// v_{min,max}_num_f*, which already canonicalizes its inputs, so feeding it an
+/// explicitly canonicalized operand is redundant.
----------------
arsenm wrote:
Shouldn't be discussing printing, this isn't a printing question
https://github.com/llvm/llvm-project/pull/202917
More information about the llvm-commits
mailing list