@@ -1332,6 +1332,30 @@ bool AArch64LegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
1332
1332
1333
1333
return true ;
1334
1334
}
1335
+ case Intrinsic::aarch64_neon_smax:
1336
+ case Intrinsic::aarch64_neon_smin:
1337
+ case Intrinsic::aarch64_neon_umax:
1338
+ case Intrinsic::aarch64_neon_umin:
1339
+ case Intrinsic::aarch64_neon_fmax:
1340
+ case Intrinsic::aarch64_neon_fmin: {
1341
+ MachineIRBuilder MIB (MI);
1342
+ if (IntrinsicID == Intrinsic::aarch64_neon_smax)
1343
+ MIB.buildSMax (MI.getOperand (0 ), MI.getOperand (2 ), MI.getOperand (3 ));
1344
+ else if (IntrinsicID == Intrinsic::aarch64_neon_smin)
1345
+ MIB.buildSMin (MI.getOperand (0 ), MI.getOperand (2 ), MI.getOperand (3 ));
1346
+ else if (IntrinsicID == Intrinsic::aarch64_neon_umax)
1347
+ MIB.buildUMax (MI.getOperand (0 ), MI.getOperand (2 ), MI.getOperand (3 ));
1348
+ else if (IntrinsicID == Intrinsic::aarch64_neon_umin)
1349
+ MIB.buildUMin (MI.getOperand (0 ), MI.getOperand (2 ), MI.getOperand (3 ));
1350
+ else if (IntrinsicID == Intrinsic::aarch64_neon_fmax)
1351
+ MIB.buildInstr (TargetOpcode::G_FMAXIMUM, {MI.getOperand (0 )},
1352
+ {MI.getOperand (2 ), MI.getOperand (3 )});
1353
+ else if (IntrinsicID == Intrinsic::aarch64_neon_fmin)
1354
+ MIB.buildInstr (TargetOpcode::G_FMINIMUM, {MI.getOperand (0 )},
1355
+ {MI.getOperand (2 ), MI.getOperand (3 )});
1356
+ MI.eraseFromParent ();
1357
+ return true ;
1358
+ }
1335
1359
case Intrinsic::experimental_vector_reverse:
1336
1360
// TODO: Add support for vector_reverse
1337
1361
return false ;
0 commit comments