@@ -3221,6 +3221,8 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
3221
3221
case TargetOpcode::G_FMAXNUM_IEEE:
3222
3222
case TargetOpcode::G_FMINIMUM:
3223
3223
case TargetOpcode::G_FMAXIMUM:
3224
+ case TargetOpcode::G_FMINIMUMNUM:
3225
+ case TargetOpcode::G_FMAXIMUMNUM:
3224
3226
case TargetOpcode::G_FDIV:
3225
3227
case TargetOpcode::G_FREM:
3226
3228
case TargetOpcode::G_FCEIL:
@@ -4591,6 +4593,8 @@ LegalizerHelper::lower(MachineInstr &MI, unsigned TypeIdx, LLT LowerHintTy) {
4591
4593
return lowerFCopySign (MI);
4592
4594
case G_FMINNUM:
4593
4595
case G_FMAXNUM:
4596
+ case G_FMINIMUMNUM:
4597
+ case G_FMAXIMUMNUM:
4594
4598
return lowerFMinNumMaxNum (MI);
4595
4599
case G_MERGE_VALUES:
4596
4600
return lowerMergeValues (MI);
@@ -5379,6 +5383,8 @@ LegalizerHelper::fewerElementsVector(MachineInstr &MI, unsigned TypeIdx,
5379
5383
case G_FMAXNUM_IEEE:
5380
5384
case G_FMINIMUM:
5381
5385
case G_FMAXIMUM:
5386
+ case G_FMINIMUMNUM:
5387
+ case G_FMAXIMUMNUM:
5382
5388
case G_FSHL:
5383
5389
case G_FSHR:
5384
5390
case G_ROTL:
@@ -6090,6 +6096,8 @@ LegalizerHelper::moreElementsVector(MachineInstr &MI, unsigned TypeIdx,
6090
6096
case TargetOpcode::G_FMAXNUM_IEEE:
6091
6097
case TargetOpcode::G_FMINIMUM:
6092
6098
case TargetOpcode::G_FMAXIMUM:
6099
+ case TargetOpcode::G_FMINIMUMNUM:
6100
+ case TargetOpcode::G_FMAXIMUMNUM:
6093
6101
case TargetOpcode::G_STRICT_FADD:
6094
6102
case TargetOpcode::G_STRICT_FSUB:
6095
6103
case TargetOpcode::G_STRICT_FMUL:
@@ -8139,8 +8147,27 @@ LegalizerHelper::lowerFCopySign(MachineInstr &MI) {
8139
8147
8140
8148
LegalizerHelper::LegalizeResult
8141
8149
LegalizerHelper::lowerFMinNumMaxNum (MachineInstr &MI) {
8142
- unsigned NewOp = MI.getOpcode () == TargetOpcode::G_FMINNUM ?
8143
- TargetOpcode::G_FMINNUM_IEEE : TargetOpcode::G_FMAXNUM_IEEE;
8150
+ // FIXME: fminnum/fmaxnum and fminimumnum/fmaximumnum should not have
8151
+ // identical handling. fminimumnum/fmaximumnum also need a path that do not
8152
+ // depend on fminnum/fmaxnum.
8153
+
8154
+ unsigned NewOp;
8155
+ switch (MI.getOpcode ()) {
8156
+ case TargetOpcode::G_FMINNUM:
8157
+ NewOp = TargetOpcode::G_FMINNUM_IEEE;
8158
+ break ;
8159
+ case TargetOpcode::G_FMINIMUMNUM:
8160
+ NewOp = TargetOpcode::G_FMINNUM;
8161
+ break ;
8162
+ case TargetOpcode::G_FMAXNUM:
8163
+ NewOp = TargetOpcode::G_FMAXNUM_IEEE;
8164
+ break ;
8165
+ case TargetOpcode::G_FMAXIMUMNUM:
8166
+ NewOp = TargetOpcode::G_FMAXNUM;
8167
+ break ;
8168
+ default :
8169
+ llvm_unreachable (" unexpected min/max opcode" );
8170
+ }
8144
8171
8145
8172
auto [Dst, Src0, Src1] = MI.getFirst3Regs ();
8146
8173
LLT Ty = MRI.getType (Dst);
0 commit comments