@@ -1012,60 +1012,21 @@ entry:
10121012define arm_aapcs_vfpcc <2 x i64 > @stest_f16i64 (<2 x half > %x ) {
10131013; CHECK-LABEL: stest_f16i64:
10141014; CHECK: @ %bb.0: @ %entry
1015- ; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10 , lr}
1016- ; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10 , lr}
1015+ ; CHECK-NEXT: .save {r4, r5, r7 , lr}
1016+ ; CHECK-NEXT: push {r4, r5, r7 , lr}
10171017; CHECK-NEXT: .vsave {d8, d9}
10181018; CHECK-NEXT: vpush {d8, d9}
10191019; CHECK-NEXT: vmov.u16 r0, q0[1]
10201020; CHECK-NEXT: vmov q4, q0
10211021; CHECK-NEXT: bl __fixhfti
1022- ; CHECK-NEXT: subs.w r7, r0, #-1
1023- ; CHECK-NEXT: mvn r9, #-2147483648
1024- ; CHECK-NEXT: sbcs.w r7, r1, r9
1025- ; CHECK-NEXT: mov.w r10, #-2147483648
1026- ; CHECK-NEXT: sbcs r7, r2, #0
1027- ; CHECK-NEXT: sbcs r7, r3, #0
1028- ; CHECK-NEXT: cset r7, lt
1029- ; CHECK-NEXT: cmp r7, #0
1030- ; CHECK-NEXT: csel r3, r3, r7, ne
1031- ; CHECK-NEXT: csel r2, r2, r7, ne
1032- ; CHECK-NEXT: mov.w r7, #-1
1033- ; CHECK-NEXT: csel r1, r1, r9, ne
1034- ; CHECK-NEXT: csel r4, r0, r7, ne
1035- ; CHECK-NEXT: rsbs r0, r4, #0
1036- ; CHECK-NEXT: sbcs.w r0, r10, r1
1037- ; CHECK-NEXT: sbcs.w r0, r7, r2
1038- ; CHECK-NEXT: sbcs.w r0, r7, r3
1039- ; CHECK-NEXT: cset r5, lt
1022+ ; CHECK-NEXT: mov r4, r0
10401023; CHECK-NEXT: vmov.u16 r0, q4[0]
1041- ; CHECK-NEXT: cmp r5, #0
1042- ; CHECK-NEXT: csel r8, r1, r10, ne
1024+ ; CHECK-NEXT: mov r5, r1
10431025; CHECK-NEXT: bl __fixhfti
1044- ; CHECK-NEXT: subs.w r6, r0, #-1
1045- ; CHECK-NEXT: sbcs.w r6, r1, r9
1046- ; CHECK-NEXT: sbcs r6, r2, #0
1047- ; CHECK-NEXT: sbcs r6, r3, #0
1048- ; CHECK-NEXT: cset r6, lt
1049- ; CHECK-NEXT: cmp r6, #0
1050- ; CHECK-NEXT: csel r0, r0, r7, ne
1051- ; CHECK-NEXT: csel r1, r1, r9, ne
1052- ; CHECK-NEXT: csel r3, r3, r6, ne
1053- ; CHECK-NEXT: csel r2, r2, r6, ne
1054- ; CHECK-NEXT: rsbs r6, r0, #0
1055- ; CHECK-NEXT: sbcs.w r6, r10, r1
1056- ; CHECK-NEXT: sbcs.w r2, r7, r2
1057- ; CHECK-NEXT: sbcs.w r2, r7, r3
1058- ; CHECK-NEXT: cset r2, lt
1059- ; CHECK-NEXT: cmp r2, #0
1060- ; CHECK-NEXT: csel r1, r1, r10, ne
1061- ; CHECK-NEXT: cmp r5, #0
1062- ; CHECK-NEXT: csel r3, r4, r5, ne
1063- ; CHECK-NEXT: cmp r2, #0
1064- ; CHECK-NEXT: csel r0, r0, r2, ne
1065- ; CHECK-NEXT: vmov q0[2], q0[0], r0, r3
1066- ; CHECK-NEXT: vmov q0[3], q0[1], r1, r8
1026+ ; CHECK-NEXT: vmov q0[2], q0[0], r0, r4
1027+ ; CHECK-NEXT: vmov q0[3], q0[1], r1, r5
10671028; CHECK-NEXT: vpop {d8, d9}
1068- ; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10 , pc}
1029+ ; CHECK-NEXT: pop {r4, r5, r7 , pc}
10691030entry:
10701031 %conv = fptosi <2 x half > %x to <2 x i128 >
10711032 %0 = icmp slt <2 x i128 > %conv , <i128 9223372036854775807 , i128 9223372036854775807 >
@@ -1105,58 +1066,39 @@ entry:
11051066define arm_aapcs_vfpcc <2 x i64 > @ustest_f16i64 (<2 x half > %x ) {
11061067; CHECK-LABEL: ustest_f16i64:
11071068; CHECK: @ %bb.0: @ %entry
1108- ; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, lr}
1109- ; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, lr}
1110- ; CHECK-NEXT: .pad #4
1111- ; CHECK-NEXT: sub sp, #4
1069+ ; CHECK-NEXT: .save {r4, r5, r6, r7, r8, lr}
1070+ ; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, lr}
11121071; CHECK-NEXT: .vsave {d8, d9}
11131072; CHECK-NEXT: vpush {d8, d9}
11141073; CHECK-NEXT: vmov.u16 r0, q0[1]
11151074; CHECK-NEXT: vmov q4, q0
11161075; CHECK-NEXT: bl __fixhfti
1117- ; CHECK-NEXT: subs r5, r2, #1
1118- ; CHECK-NEXT: mov.w r8, #1
1119- ; CHECK-NEXT: sbcs r5, r3, #0
1120- ; CHECK-NEXT: mov.w r7, #0
1121- ; CHECK-NEXT: cset r5, lt
1122- ; CHECK-NEXT: cmp r5, #0
1123- ; CHECK-NEXT: csel r0, r0, r5, ne
1124- ; CHECK-NEXT: csel r3, r3, r5, ne
1125- ; CHECK-NEXT: csel r2, r2, r8, ne
1126- ; CHECK-NEXT: csel r4, r1, r5, ne
1076+ ; CHECK-NEXT: mov r4, r1
11271077; CHECK-NEXT: rsbs r1, r0, #0
1128- ; CHECK-NEXT: sbcs.w r1, r7, r4
1129- ; CHECK-NEXT: sbcs.w r1, r7, r2
1130- ; CHECK-NEXT: sbcs.w r1, r7, r3
1078+ ; CHECK-NEXT: mov.w r5, #0
1079+ ; CHECK-NEXT: sbcs.w r1, r5, r4
1080+ ; CHECK-NEXT: sbcs.w r1, r5, r2
1081+ ; CHECK-NEXT: sbcs.w r1, r5, r3
11311082; CHECK-NEXT: cset r6, lt
11321083; CHECK-NEXT: cmp r6, #0
1133- ; CHECK-NEXT: csel r9 , r0, r6, ne
1084+ ; CHECK-NEXT: csel r8 , r0, r6, ne
11341085; CHECK-NEXT: vmov.u16 r0, q4[0]
11351086; CHECK-NEXT: bl __fixhfti
1136- ; CHECK-NEXT: subs r5, r2, #1
1137- ; CHECK-NEXT: sbcs r5, r3, #0
1138- ; CHECK-NEXT: cset r5, lt
1139- ; CHECK-NEXT: cmp r5, #0
1140- ; CHECK-NEXT: csel r0, r0, r5, ne
1141- ; CHECK-NEXT: csel r2, r2, r8, ne
1142- ; CHECK-NEXT: csel r3, r3, r5, ne
1143- ; CHECK-NEXT: csel r1, r1, r5, ne
1144- ; CHECK-NEXT: rsbs r5, r0, #0
1145- ; CHECK-NEXT: sbcs.w r5, r7, r1
1146- ; CHECK-NEXT: sbcs.w r2, r7, r2
1147- ; CHECK-NEXT: sbcs.w r2, r7, r3
1087+ ; CHECK-NEXT: rsbs r7, r0, #0
1088+ ; CHECK-NEXT: sbcs.w r7, r5, r1
1089+ ; CHECK-NEXT: sbcs.w r2, r5, r2
1090+ ; CHECK-NEXT: sbcs.w r2, r5, r3
11481091; CHECK-NEXT: cset r2, lt
11491092; CHECK-NEXT: cmp r2, #0
11501093; CHECK-NEXT: csel r0, r0, r2, ne
11511094; CHECK-NEXT: cmp r6, #0
11521095; CHECK-NEXT: csel r3, r4, r6, ne
11531096; CHECK-NEXT: cmp r2, #0
11541097; CHECK-NEXT: csel r1, r1, r2, ne
1155- ; CHECK-NEXT: vmov q0[2], q0[0], r0, r9
1098+ ; CHECK-NEXT: vmov q0[2], q0[0], r0, r8
11561099; CHECK-NEXT: vmov q0[3], q0[1], r1, r3
11571100; CHECK-NEXT: vpop {d8, d9}
1158- ; CHECK-NEXT: add sp, #4
1159- ; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, pc}
1101+ ; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, pc}
11601102entry:
11611103 %conv = fptosi <2 x half > %x to <2 x i128 >
11621104 %0 = icmp slt <2 x i128 > %conv , <i128 18446744073709551616 , i128 18446744073709551616 >
@@ -2119,60 +2061,21 @@ entry:
21192061define arm_aapcs_vfpcc <2 x i64 > @stest_f16i64_mm (<2 x half > %x ) {
21202062; CHECK-LABEL: stest_f16i64_mm:
21212063; CHECK: @ %bb.0: @ %entry
2122- ; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10 , lr}
2123- ; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10 , lr}
2064+ ; CHECK-NEXT: .save {r4, r5, r7 , lr}
2065+ ; CHECK-NEXT: push {r4, r5, r7 , lr}
21242066; CHECK-NEXT: .vsave {d8, d9}
21252067; CHECK-NEXT: vpush {d8, d9}
21262068; CHECK-NEXT: vmov.u16 r0, q0[1]
21272069; CHECK-NEXT: vmov q4, q0
21282070; CHECK-NEXT: bl __fixhfti
2129- ; CHECK-NEXT: subs.w r7, r0, #-1
2130- ; CHECK-NEXT: mvn r9, #-2147483648
2131- ; CHECK-NEXT: sbcs.w r7, r1, r9
2132- ; CHECK-NEXT: mov.w r10, #-2147483648
2133- ; CHECK-NEXT: sbcs r7, r2, #0
2134- ; CHECK-NEXT: sbcs r7, r3, #0
2135- ; CHECK-NEXT: cset r7, lt
2136- ; CHECK-NEXT: cmp r7, #0
2137- ; CHECK-NEXT: csel r3, r3, r7, ne
2138- ; CHECK-NEXT: csel r2, r2, r7, ne
2139- ; CHECK-NEXT: mov.w r7, #-1
2140- ; CHECK-NEXT: csel r1, r1, r9, ne
2141- ; CHECK-NEXT: csel r4, r0, r7, ne
2142- ; CHECK-NEXT: rsbs r0, r4, #0
2143- ; CHECK-NEXT: sbcs.w r0, r10, r1
2144- ; CHECK-NEXT: sbcs.w r0, r7, r2
2145- ; CHECK-NEXT: sbcs.w r0, r7, r3
2146- ; CHECK-NEXT: cset r5, lt
2071+ ; CHECK-NEXT: mov r4, r0
21472072; CHECK-NEXT: vmov.u16 r0, q4[0]
2148- ; CHECK-NEXT: cmp r5, #0
2149- ; CHECK-NEXT: csel r8, r1, r10, ne
2073+ ; CHECK-NEXT: mov r5, r1
21502074; CHECK-NEXT: bl __fixhfti
2151- ; CHECK-NEXT: subs.w r6, r0, #-1
2152- ; CHECK-NEXT: sbcs.w r6, r1, r9
2153- ; CHECK-NEXT: sbcs r6, r2, #0
2154- ; CHECK-NEXT: sbcs r6, r3, #0
2155- ; CHECK-NEXT: cset r6, lt
2156- ; CHECK-NEXT: cmp r6, #0
2157- ; CHECK-NEXT: csel r0, r0, r7, ne
2158- ; CHECK-NEXT: csel r1, r1, r9, ne
2159- ; CHECK-NEXT: csel r3, r3, r6, ne
2160- ; CHECK-NEXT: csel r2, r2, r6, ne
2161- ; CHECK-NEXT: rsbs r6, r0, #0
2162- ; CHECK-NEXT: sbcs.w r6, r10, r1
2163- ; CHECK-NEXT: sbcs.w r2, r7, r2
2164- ; CHECK-NEXT: sbcs.w r2, r7, r3
2165- ; CHECK-NEXT: cset r2, lt
2166- ; CHECK-NEXT: cmp r2, #0
2167- ; CHECK-NEXT: csel r1, r1, r10, ne
2168- ; CHECK-NEXT: cmp r5, #0
2169- ; CHECK-NEXT: csel r3, r4, r5, ne
2170- ; CHECK-NEXT: cmp r2, #0
2171- ; CHECK-NEXT: csel r0, r0, r2, ne
2172- ; CHECK-NEXT: vmov q0[2], q0[0], r0, r3
2173- ; CHECK-NEXT: vmov q0[3], q0[1], r1, r8
2075+ ; CHECK-NEXT: vmov q0[2], q0[0], r0, r4
2076+ ; CHECK-NEXT: vmov q0[3], q0[1], r1, r5
21742077; CHECK-NEXT: vpop {d8, d9}
2175- ; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10 , pc}
2078+ ; CHECK-NEXT: pop {r4, r5, r7 , pc}
21762079entry:
21772080 %conv = fptosi <2 x half > %x to <2 x i128 >
21782081 %spec.store.select = call <2 x i128 > @llvm.smin.v2i128 (<2 x i128 > %conv , <2 x i128 > <i128 9223372036854775807 , i128 9223372036854775807 >)
@@ -2209,51 +2112,34 @@ entry:
22092112define arm_aapcs_vfpcc <2 x i64 > @ustest_f16i64_mm (<2 x half > %x ) {
22102113; CHECK-LABEL: ustest_f16i64_mm:
22112114; CHECK: @ %bb.0: @ %entry
2212- ; CHECK-NEXT: .save {r4, r5, r6, r7, lr}
2213- ; CHECK-NEXT: push {r4, r5, r6, r7, lr}
2214- ; CHECK-NEXT: .pad #4
2215- ; CHECK-NEXT: sub sp, #4
2115+ ; CHECK-NEXT: .save {r4, r5, r6, lr}
2116+ ; CHECK-NEXT: push {r4, r5, r6, lr}
22162117; CHECK-NEXT: .vsave {d8, d9}
22172118; CHECK-NEXT: vpush {d8, d9}
22182119; CHECK-NEXT: vmov.u16 r0, q0[1]
22192120; CHECK-NEXT: vmov q4, q0
22202121; CHECK-NEXT: bl __fixhfti
2221- ; CHECK-NEXT: mov r4, r1
2222- ; CHECK-NEXT: subs r1, r2, #1
2223- ; CHECK-NEXT: sbcs r1, r3, #0
2224- ; CHECK-NEXT: cset r6, lt
2225- ; CHECK-NEXT: cmp r6, #0
2226- ; CHECK-NEXT: csel r5, r0, r6, ne
2227- ; CHECK-NEXT: csel r7, r3, r6, ne
2122+ ; CHECK-NEXT: mov r4, r0
22282123; CHECK-NEXT: vmov.u16 r0, q4[0]
2229- ; CHECK-NEXT: cmp r7, #0
2230- ; CHECK-NEXT: it mi
2231- ; CHECK-NEXT: movmi r5, #0
2124+ ; CHECK-NEXT: mov r5, r1
2125+ ; CHECK-NEXT: mov r6, r3
22322126; CHECK-NEXT: bl __fixhfti
2233- ; CHECK-NEXT: subs r2, #1
2234- ; CHECK-NEXT: sbcs r2, r3, #0
2235- ; CHECK-NEXT: cset r2, lt
2236- ; CHECK-NEXT: cmp r2, #0
2237- ; CHECK-NEXT: csel r3, r3, r2, ne
2238- ; CHECK-NEXT: csel r0, r0, r2, ne
2127+ ; CHECK-NEXT: cmp r6, #0
2128+ ; CHECK-NEXT: it mi
2129+ ; CHECK-NEXT: movmi r4, #0
22392130; CHECK-NEXT: cmp r3, #0
22402131; CHECK-NEXT: it mi
22412132; CHECK-NEXT: movmi r0, #0
22422133; CHECK-NEXT: cmp r6, #0
2243- ; CHECK-NEXT: vmov q0[2], q0[0], r0, r5
2244- ; CHECK-NEXT: csel r6, r4, r6, ne
2245- ; CHECK-NEXT: cmp r7, #0
2134+ ; CHECK-NEXT: vmov q0[2], q0[0], r0, r4
22462135; CHECK-NEXT: it mi
2247- ; CHECK-NEXT: movmi r6, #0
2248- ; CHECK-NEXT: cmp r2, #0
2249- ; CHECK-NEXT: csel r1, r1, r2, ne
2136+ ; CHECK-NEXT: movmi r5, #0
22502137; CHECK-NEXT: cmp r3, #0
22512138; CHECK-NEXT: it mi
22522139; CHECK-NEXT: movmi r1, #0
2253- ; CHECK-NEXT: vmov q0[3], q0[1], r1, r6
2140+ ; CHECK-NEXT: vmov q0[3], q0[1], r1, r5
22542141; CHECK-NEXT: vpop {d8, d9}
2255- ; CHECK-NEXT: add sp, #4
2256- ; CHECK-NEXT: pop {r4, r5, r6, r7, pc}
2142+ ; CHECK-NEXT: pop {r4, r5, r6, pc}
22572143entry:
22582144 %conv = fptosi <2 x half > %x to <2 x i128 >
22592145 %spec.store.select = call <2 x i128 > @llvm.smin.v2i128 (<2 x i128 > %conv , <2 x i128 > <i128 18446744073709551616 , i128 18446744073709551616 >)
0 commit comments