@@ -918,32 +918,24 @@ define <2 x double> @fminnumv264_intrinsic(<2 x double> %x, <2 x double> %y) {
918918; ARMV8: @ %bb.0:
919919; ARMV8-NEXT: mov r12, sp
920920; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]
921- ; ARMV8-NEXT: vmov d18, r0, r1
922- ; ARMV8-NEXT: vmov d19, r2, r3
923- ; ARMV8-NEXT: vcmp.f64 d16, d18
924- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
925- ; ARMV8-NEXT: vcmp.f64 d17, d19
926- ; ARMV8-NEXT: vselgt.f64 d18, d18, d16
927- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
928- ; ARMV8-NEXT: vmov r0, r1, d18
929- ; ARMV8-NEXT: vselgt.f64 d16, d19, d17
921+ ; ARMV8-NEXT: vmov d19, r0, r1
922+ ; ARMV8-NEXT: vmov d18, r2, r3
923+ ; ARMV8-NEXT: vminnm.f64 d19, d19, d16
924+ ; ARMV8-NEXT: vminnm.f64 d16, d18, d17
925+ ; ARMV8-NEXT: vmov r0, r1, d19
930926; ARMV8-NEXT: vmov r2, r3, d16
931927; ARMV8-NEXT: bx lr
932928;
933929; ARMV8M-LABEL: fminnumv264_intrinsic:
934930; ARMV8M: @ %bb.0:
935931; ARMV8M-NEXT: mov r12, sp
936- ; ARMV8M-NEXT: vmov d0, r0, r1
932+ ; ARMV8M-NEXT: vmov d0, r2, r3
937933; ARMV8M-NEXT: vldrw.u32 q1, [r12]
938- ; ARMV8M-NEXT: vmov d1, r2, r3
939- ; ARMV8M-NEXT: vcmp.f64 d2, d0
940- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
941- ; ARMV8M-NEXT: vcmp.f64 d3, d1
942- ; ARMV8M-NEXT: vselgt.f64 d0, d0, d2
943- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
944- ; ARMV8M-NEXT: vmov r0, r1, d0
945- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d3
946- ; ARMV8M-NEXT: vmov r2, r3, d1
934+ ; ARMV8M-NEXT: vmov d1, r0, r1
935+ ; ARMV8M-NEXT: vminnm.f64 d1, d1, d2
936+ ; ARMV8M-NEXT: vminnm.f64 d0, d0, d3
937+ ; ARMV8M-NEXT: vmov r0, r1, d1
938+ ; ARMV8M-NEXT: vmov r2, r3, d0
947939; ARMV8M-NEXT: bx lr
948940 %a = call nnan <2 x double > @llvm.minnum.v2f64 (<2 x double > %x , <2 x double > %y )
949941 ret <2 x double > %a
@@ -970,32 +962,24 @@ define <2 x double> @fminnumv264_nsz_intrinsic(<2 x double> %x, <2 x double> %y)
970962; ARMV8: @ %bb.0:
971963; ARMV8-NEXT: mov r12, sp
972964; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]
973- ; ARMV8-NEXT: vmov d18, r0, r1
974- ; ARMV8-NEXT: vmov d19, r2, r3
975- ; ARMV8-NEXT: vcmp.f64 d16, d18
976- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
977- ; ARMV8-NEXT: vcmp.f64 d17, d19
978- ; ARMV8-NEXT: vselgt.f64 d18, d18, d16
979- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
980- ; ARMV8-NEXT: vmov r0, r1, d18
981- ; ARMV8-NEXT: vselgt.f64 d16, d19, d17
965+ ; ARMV8-NEXT: vmov d19, r0, r1
966+ ; ARMV8-NEXT: vmov d18, r2, r3
967+ ; ARMV8-NEXT: vminnm.f64 d19, d19, d16
968+ ; ARMV8-NEXT: vminnm.f64 d16, d18, d17
969+ ; ARMV8-NEXT: vmov r0, r1, d19
982970; ARMV8-NEXT: vmov r2, r3, d16
983971; ARMV8-NEXT: bx lr
984972;
985973; ARMV8M-LABEL: fminnumv264_nsz_intrinsic:
986974; ARMV8M: @ %bb.0:
987975; ARMV8M-NEXT: mov r12, sp
988- ; ARMV8M-NEXT: vmov d0, r0, r1
976+ ; ARMV8M-NEXT: vmov d0, r2, r3
989977; ARMV8M-NEXT: vldrw.u32 q1, [r12]
990- ; ARMV8M-NEXT: vmov d1, r2, r3
991- ; ARMV8M-NEXT: vcmp.f64 d2, d0
992- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
993- ; ARMV8M-NEXT: vcmp.f64 d3, d1
994- ; ARMV8M-NEXT: vselgt.f64 d0, d0, d2
995- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
996- ; ARMV8M-NEXT: vmov r0, r1, d0
997- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d3
998- ; ARMV8M-NEXT: vmov r2, r3, d1
978+ ; ARMV8M-NEXT: vmov d1, r0, r1
979+ ; ARMV8M-NEXT: vminnm.f64 d1, d1, d2
980+ ; ARMV8M-NEXT: vminnm.f64 d0, d0, d3
981+ ; ARMV8M-NEXT: vmov r0, r1, d1
982+ ; ARMV8M-NEXT: vmov r2, r3, d0
999983; ARMV8M-NEXT: bx lr
1000984 %a = call nnan nsz <2 x double > @llvm.minnum.v2f64 (<2 x double > %x , <2 x double > %y )
1001985 ret <2 x double > %a
@@ -1020,31 +1004,23 @@ define <2 x double> @fminnumv264_non_zero_intrinsic(<2 x double> %x) {
10201004;
10211005; ARMV8-LABEL: fminnumv264_non_zero_intrinsic:
10221006; ARMV8: @ %bb.0:
1023- ; ARMV8-NEXT: vmov d17, r0, r1
10241007; ARMV8-NEXT: vmov.f64 d16, #1.000000e+00
1025- ; ARMV8-NEXT: vcmp.f64 d16, d17
1026- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1027- ; ARMV8-NEXT: vmov d18, r2, r3
1028- ; ARMV8-NEXT: vcmp.f64 d16, d18
1029- ; ARMV8-NEXT: vselgt.f64 d17, d17, d16
1030- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1031- ; ARMV8-NEXT: vmov r0, r1, d17
1032- ; ARMV8-NEXT: vselgt.f64 d16, d18, d16
1008+ ; ARMV8-NEXT: vmov d18, r0, r1
1009+ ; ARMV8-NEXT: vmov d17, r2, r3
1010+ ; ARMV8-NEXT: vminnm.f64 d18, d18, d16
1011+ ; ARMV8-NEXT: vminnm.f64 d16, d17, d16
1012+ ; ARMV8-NEXT: vmov r0, r1, d18
10331013; ARMV8-NEXT: vmov r2, r3, d16
10341014; ARMV8-NEXT: bx lr
10351015;
10361016; ARMV8M-LABEL: fminnumv264_non_zero_intrinsic:
10371017; ARMV8M: @ %bb.0:
1038- ; ARMV8M-NEXT: vmov d1, r0, r1
10391018; ARMV8M-NEXT: vmov.f64 d0, #1.000000e+00
1040- ; ARMV8M-NEXT: vcmp.f64 d0, d1
1041- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1042- ; ARMV8M-NEXT: vmov d2, r2, r3
1043- ; ARMV8M-NEXT: vcmp.f64 d0, d2
1044- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d0
1045- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1046- ; ARMV8M-NEXT: vmov r0, r1, d1
1047- ; ARMV8M-NEXT: vselgt.f64 d0, d2, d0
1019+ ; ARMV8M-NEXT: vmov d2, r0, r1
1020+ ; ARMV8M-NEXT: vmov d1, r2, r3
1021+ ; ARMV8M-NEXT: vminnm.f64 d2, d2, d0
1022+ ; ARMV8M-NEXT: vminnm.f64 d0, d1, d0
1023+ ; ARMV8M-NEXT: vmov r0, r1, d2
10481024; ARMV8M-NEXT: vmov r2, r3, d0
10491025; ARMV8M-NEXT: bx lr
10501026 %a = call nnan <2 x double > @llvm.minnum.v2f64 (<2 x double > %x , <2 x double ><double 1 .0 , double 1 .0 >)
@@ -1070,34 +1046,26 @@ define <2 x double> @fminnumv264_one_zero_intrinsic(<2 x double> %x) {
10701046;
10711047; ARMV8-LABEL: fminnumv264_one_zero_intrinsic:
10721048; ARMV8: @ %bb.0:
1073- ; ARMV8-NEXT: vmov d19, r2, r3
1074- ; ARMV8-NEXT: vcmp.f64 d19, #0
1075- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1076- ; ARMV8-NEXT: vmov d18, r0, r1
10771049; ARMV8-NEXT: vmov.f64 d16, #-1.000000e+00
1078- ; ARMV8-NEXT: vcmp.f64 d16, d18
1050+ ; ARMV8-NEXT: vmov d18, r0, r1
10791051; ARMV8-NEXT: vmov.i32 d17, #0x0
1080- ; ARMV8-NEXT: vmovlt.f64 d17, d19
1081- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1082- ; ARMV8-NEXT: vmov r2, r3, d17
1083- ; ARMV8-NEXT: vselgt.f64 d16, d18, d16
1052+ ; ARMV8-NEXT: vminnm.f64 d16, d18, d16
1053+ ; ARMV8-NEXT: vmov d19, r2, r3
1054+ ; ARMV8-NEXT: vminnm.f64 d17, d19, d17
10841055; ARMV8-NEXT: vmov r0, r1, d16
1056+ ; ARMV8-NEXT: vmov r2, r3, d17
10851057; ARMV8-NEXT: bx lr
10861058;
10871059; ARMV8M-LABEL: fminnumv264_one_zero_intrinsic:
10881060; ARMV8M: @ %bb.0:
1089- ; ARMV8M-NEXT: vmov d3, r2, r3
1061+ ; ARMV8M-NEXT: vmov.f64 d0, #-1.000000e+00
10901062; ARMV8M-NEXT: vldr d1, .LCPI27_0
1091- ; ARMV8M-NEXT: vcmp.f64 d3, #0
1092- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
10931063; ARMV8M-NEXT: vmov d2, r0, r1
1094- ; ARMV8M-NEXT: vmov.f64 d0, #-1.000000e+00
1095- ; ARMV8M-NEXT: vcmp.f64 d0, d2
1096- ; ARMV8M-NEXT: vmovlt.f64 d1, d3
1097- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1098- ; ARMV8M-NEXT: vmov r2, r3, d1
1099- ; ARMV8M-NEXT: vselgt.f64 d0, d2, d0
1064+ ; ARMV8M-NEXT: vmov d3, r2, r3
1065+ ; ARMV8M-NEXT: vminnm.f64 d0, d2, d0
1066+ ; ARMV8M-NEXT: vminnm.f64 d1, d3, d1
11001067; ARMV8M-NEXT: vmov r0, r1, d0
1068+ ; ARMV8M-NEXT: vmov r2, r3, d1
11011069; ARMV8M-NEXT: bx lr
11021070; ARMV8M-NEXT: .p2align 3
11031071; ARMV8M-NEXT: @ %bb.1:
@@ -1129,31 +1097,23 @@ define <2 x double> @fmaxnumv264_intrinsic(<2 x double> %x, <2 x double> %y) {
11291097; ARMV8: @ %bb.0:
11301098; ARMV8-NEXT: mov r12, sp
11311099; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]
1132- ; ARMV8-NEXT: vmov d18, r0, r1
1133- ; ARMV8-NEXT: vcmp.f64 d18, d16
1134- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1135- ; ARMV8-NEXT: vmov d19, r2, r3
1136- ; ARMV8-NEXT: vcmp.f64 d19, d17
1137- ; ARMV8-NEXT: vselgt.f64 d18, d18, d16
1138- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1139- ; ARMV8-NEXT: vmov r0, r1, d18
1140- ; ARMV8-NEXT: vselgt.f64 d16, d19, d17
1100+ ; ARMV8-NEXT: vmov d19, r0, r1
1101+ ; ARMV8-NEXT: vmov d18, r2, r3
1102+ ; ARMV8-NEXT: vmaxnm.f64 d19, d19, d16
1103+ ; ARMV8-NEXT: vmaxnm.f64 d16, d18, d17
1104+ ; ARMV8-NEXT: vmov r0, r1, d19
11411105; ARMV8-NEXT: vmov r2, r3, d16
11421106; ARMV8-NEXT: bx lr
11431107;
11441108; ARMV8M-LABEL: fmaxnumv264_intrinsic:
11451109; ARMV8M: @ %bb.0:
11461110; ARMV8M-NEXT: mov r12, sp
1147- ; ARMV8M-NEXT: vmov d1, r0, r1
1148- ; ARMV8M-NEXT: vldrw.u32 q1, [r12]
11491111; ARMV8M-NEXT: vmov d0, r2, r3
1150- ; ARMV8M-NEXT: vcmp.f64 d1, d2
1151- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1152- ; ARMV8M-NEXT: vcmp.f64 d0, d3
1153- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d2
1154- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1112+ ; ARMV8M-NEXT: vldrw.u32 q1, [r12]
1113+ ; ARMV8M-NEXT: vmov d1, r0, r1
1114+ ; ARMV8M-NEXT: vmaxnm.f64 d1, d1, d2
1115+ ; ARMV8M-NEXT: vmaxnm.f64 d0, d0, d3
11551116; ARMV8M-NEXT: vmov r0, r1, d1
1156- ; ARMV8M-NEXT: vselgt.f64 d0, d0, d3
11571117; ARMV8M-NEXT: vmov r2, r3, d0
11581118; ARMV8M-NEXT: bx lr
11591119 %a = call nnan <2 x double > @llvm.maxnum.v2f64 (<2 x double > %x , <2 x double > %y )
@@ -1181,31 +1141,23 @@ define <2 x double> @fmaxnumv264_nsz_intrinsic(<2 x double> %x, <2 x double> %y)
11811141; ARMV8: @ %bb.0:
11821142; ARMV8-NEXT: mov r12, sp
11831143; ARMV8-NEXT: vld1.64 {d16, d17}, [r12]
1184- ; ARMV8-NEXT: vmov d18, r0, r1
1185- ; ARMV8-NEXT: vcmp.f64 d18, d16
1186- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1187- ; ARMV8-NEXT: vmov d19, r2, r3
1188- ; ARMV8-NEXT: vcmp.f64 d19, d17
1189- ; ARMV8-NEXT: vselgt.f64 d18, d18, d16
1190- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1191- ; ARMV8-NEXT: vmov r0, r1, d18
1192- ; ARMV8-NEXT: vselgt.f64 d16, d19, d17
1144+ ; ARMV8-NEXT: vmov d19, r0, r1
1145+ ; ARMV8-NEXT: vmov d18, r2, r3
1146+ ; ARMV8-NEXT: vmaxnm.f64 d19, d19, d16
1147+ ; ARMV8-NEXT: vmaxnm.f64 d16, d18, d17
1148+ ; ARMV8-NEXT: vmov r0, r1, d19
11931149; ARMV8-NEXT: vmov r2, r3, d16
11941150; ARMV8-NEXT: bx lr
11951151;
11961152; ARMV8M-LABEL: fmaxnumv264_nsz_intrinsic:
11971153; ARMV8M: @ %bb.0:
11981154; ARMV8M-NEXT: mov r12, sp
1199- ; ARMV8M-NEXT: vmov d1, r0, r1
1200- ; ARMV8M-NEXT: vldrw.u32 q1, [r12]
12011155; ARMV8M-NEXT: vmov d0, r2, r3
1202- ; ARMV8M-NEXT: vcmp.f64 d1, d2
1203- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1204- ; ARMV8M-NEXT: vcmp.f64 d0, d3
1205- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d2
1206- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1156+ ; ARMV8M-NEXT: vldrw.u32 q1, [r12]
1157+ ; ARMV8M-NEXT: vmov d1, r0, r1
1158+ ; ARMV8M-NEXT: vmaxnm.f64 d1, d1, d2
1159+ ; ARMV8M-NEXT: vmaxnm.f64 d0, d0, d3
12071160; ARMV8M-NEXT: vmov r0, r1, d1
1208- ; ARMV8M-NEXT: vselgt.f64 d0, d0, d3
12091161; ARMV8M-NEXT: vmov r2, r3, d0
12101162; ARMV8M-NEXT: bx lr
12111163 %a = call nnan nsz <2 x double > @llvm.maxnum.v2f64 (<2 x double > %x , <2 x double > %y )
@@ -1236,18 +1188,14 @@ define <2 x double> @fmaxnumv264_zero_intrinsic(<2 x double> %x) {
12361188;
12371189; ARMV8-LABEL: fmaxnumv264_zero_intrinsic:
12381190; ARMV8: @ %bb.0:
1239- ; ARMV8-NEXT: vmov d18, r0, r1
12401191; ARMV8-NEXT: vldr d16, .LCPI30_0
1241- ; ARMV8-NEXT: vcmp.f64 d18, #0
1242- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1243- ; ARMV8-NEXT: vmov d19, r2, r3
1244- ; ARMV8-NEXT: vcmp.f64 d19, d16
1192+ ; ARMV8-NEXT: vmov d18, r2, r3
12451193; ARMV8-NEXT: vmov.i32 d17, #0x0
1246- ; ARMV8-NEXT: vselgt.f64 d17, d18, d17
1247- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1248- ; ARMV8-NEXT: vmov r0, r1, d17
1249- ; ARMV8-NEXT: vselgt.f64 d16, d19, d16
1194+ ; ARMV8-NEXT: vmov d19, r0, r1
1195+ ; ARMV8-NEXT: vmaxnm.f64 d16, d18, d16
1196+ ; ARMV8-NEXT: vmaxnm.f64 d17, d19, d17
12501197; ARMV8-NEXT: vmov r2, r3, d16
1198+ ; ARMV8-NEXT: vmov r0, r1, d17
12511199; ARMV8-NEXT: bx lr
12521200; ARMV8-NEXT: .p2align 3
12531201; ARMV8-NEXT: @ %bb.1:
@@ -1257,18 +1205,14 @@ define <2 x double> @fmaxnumv264_zero_intrinsic(<2 x double> %x) {
12571205;
12581206; ARMV8M-LABEL: fmaxnumv264_zero_intrinsic:
12591207; ARMV8M: @ %bb.0:
1260- ; ARMV8M-NEXT: vmov d2, r0, r1
12611208; ARMV8M-NEXT: vldr d0, .LCPI30_0
1262- ; ARMV8M-NEXT: vcmp.f64 d2, #0
1263- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1264- ; ARMV8M-NEXT: vmov d3, r2, r3
1265- ; ARMV8M-NEXT: vcmp.f64 d3, d0
1209+ ; ARMV8M-NEXT: vmov d2, r2, r3
12661210; ARMV8M-NEXT: vldr d1, .LCPI30_1
1267- ; ARMV8M-NEXT: vselgt.f64 d1, d2, d1
1268- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1269- ; ARMV8M-NEXT: vmov r0, r1, d1
1270- ; ARMV8M-NEXT: vselgt.f64 d0, d3, d0
1211+ ; ARMV8M-NEXT: vmov d3, r0, r1
1212+ ; ARMV8M-NEXT: vmaxnm.f64 d0, d2, d0
1213+ ; ARMV8M-NEXT: vmaxnm.f64 d1, d3, d1
12711214; ARMV8M-NEXT: vmov r2, r3, d0
1215+ ; ARMV8M-NEXT: vmov r0, r1, d1
12721216; ARMV8M-NEXT: bx lr
12731217; ARMV8M-NEXT: .p2align 3
12741218; ARMV8M-NEXT: @ %bb.1:
@@ -1307,15 +1251,11 @@ define <2 x double> @fmaxnumv264_minus_zero_intrinsic(<2 x double> %x) {
13071251; ARMV8-LABEL: fmaxnumv264_minus_zero_intrinsic:
13081252; ARMV8: @ %bb.0:
13091253; ARMV8-NEXT: vldr d16, .LCPI31_0
1310- ; ARMV8-NEXT: vmov d17, r0, r1
1311- ; ARMV8-NEXT: vmov d18, r2, r3
1312- ; ARMV8-NEXT: vcmp.f64 d17, d16
1313- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1314- ; ARMV8-NEXT: vcmp.f64 d18, d16
1315- ; ARMV8-NEXT: vselgt.f64 d17, d17, d16
1316- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1317- ; ARMV8-NEXT: vmov r0, r1, d17
1318- ; ARMV8-NEXT: vselgt.f64 d16, d18, d16
1254+ ; ARMV8-NEXT: vmov d18, r0, r1
1255+ ; ARMV8-NEXT: vmov d17, r2, r3
1256+ ; ARMV8-NEXT: vmaxnm.f64 d18, d18, d16
1257+ ; ARMV8-NEXT: vmaxnm.f64 d16, d17, d16
1258+ ; ARMV8-NEXT: vmov r0, r1, d18
13191259; ARMV8-NEXT: vmov r2, r3, d16
13201260; ARMV8-NEXT: bx lr
13211261; ARMV8-NEXT: .p2align 3
@@ -1327,15 +1267,11 @@ define <2 x double> @fmaxnumv264_minus_zero_intrinsic(<2 x double> %x) {
13271267; ARMV8M-LABEL: fmaxnumv264_minus_zero_intrinsic:
13281268; ARMV8M: @ %bb.0:
13291269; ARMV8M-NEXT: vldr d0, .LCPI31_0
1330- ; ARMV8M-NEXT: vmov d1, r0, r1
1331- ; ARMV8M-NEXT: vmov d2, r2, r3
1332- ; ARMV8M-NEXT: vcmp.f64 d1, d0
1333- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1334- ; ARMV8M-NEXT: vcmp.f64 d2, d0
1335- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d0
1336- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1337- ; ARMV8M-NEXT: vmov r0, r1, d1
1338- ; ARMV8M-NEXT: vselgt.f64 d0, d2, d0
1270+ ; ARMV8M-NEXT: vmov d2, r0, r1
1271+ ; ARMV8M-NEXT: vmov d1, r2, r3
1272+ ; ARMV8M-NEXT: vmaxnm.f64 d2, d2, d0
1273+ ; ARMV8M-NEXT: vmaxnm.f64 d0, d1, d0
1274+ ; ARMV8M-NEXT: vmov r0, r1, d2
13391275; ARMV8M-NEXT: vmov r2, r3, d0
13401276; ARMV8M-NEXT: bx lr
13411277; ARMV8M-NEXT: .p2align 3
@@ -1367,30 +1303,22 @@ define <2 x double> @fmaxnumv264_non_zero_intrinsic(<2 x double> %x) {
13671303; ARMV8-LABEL: fmaxnumv264_non_zero_intrinsic:
13681304; ARMV8: @ %bb.0:
13691305; ARMV8-NEXT: vmov.f64 d16, #1.000000e+00
1370- ; ARMV8-NEXT: vmov d17, r0, r1
1371- ; ARMV8-NEXT: vcmp.f64 d17, d16
1372- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1373- ; ARMV8-NEXT: vmov d18, r2, r3
1374- ; ARMV8-NEXT: vcmp.f64 d18, d16
1375- ; ARMV8-NEXT: vselgt.f64 d17, d17, d16
1376- ; ARMV8-NEXT: vmrs APSR_nzcv, fpscr
1377- ; ARMV8-NEXT: vmov r0, r1, d17
1378- ; ARMV8-NEXT: vselgt.f64 d16, d18, d16
1306+ ; ARMV8-NEXT: vmov d18, r0, r1
1307+ ; ARMV8-NEXT: vmov d17, r2, r3
1308+ ; ARMV8-NEXT: vmaxnm.f64 d18, d18, d16
1309+ ; ARMV8-NEXT: vmaxnm.f64 d16, d17, d16
1310+ ; ARMV8-NEXT: vmov r0, r1, d18
13791311; ARMV8-NEXT: vmov r2, r3, d16
13801312; ARMV8-NEXT: bx lr
13811313;
13821314; ARMV8M-LABEL: fmaxnumv264_non_zero_intrinsic:
13831315; ARMV8M: @ %bb.0:
13841316; ARMV8M-NEXT: vmov.f64 d0, #1.000000e+00
1385- ; ARMV8M-NEXT: vmov d1, r0, r1
1386- ; ARMV8M-NEXT: vcmp.f64 d1, d0
1387- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1388- ; ARMV8M-NEXT: vmov d2, r2, r3
1389- ; ARMV8M-NEXT: vcmp.f64 d2, d0
1390- ; ARMV8M-NEXT: vselgt.f64 d1, d1, d0
1391- ; ARMV8M-NEXT: vmrs APSR_nzcv, fpscr
1392- ; ARMV8M-NEXT: vmov r0, r1, d1
1393- ; ARMV8M-NEXT: vselgt.f64 d0, d2, d0
1317+ ; ARMV8M-NEXT: vmov d2, r0, r1
1318+ ; ARMV8M-NEXT: vmov d1, r2, r3
1319+ ; ARMV8M-NEXT: vmaxnm.f64 d2, d2, d0
1320+ ; ARMV8M-NEXT: vmaxnm.f64 d0, d1, d0
1321+ ; ARMV8M-NEXT: vmov r0, r1, d2
13941322; ARMV8M-NEXT: vmov r2, r3, d0
13951323; ARMV8M-NEXT: bx lr
13961324 %a = call nnan <2 x double > @llvm.maxnum.v2f64 (<2 x double > %x , <2 x double ><double 1 .0 , double 1 .0 >)
0 commit comments