@@ -1012,60 +1012,21 @@ entry:
1012
1012
define arm_aapcs_vfpcc <2 x i64 > @stest_f16i64 (<2 x half > %x ) {
1013
1013
; CHECK-LABEL: stest_f16i64:
1014
1014
; 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}
1017
1017
; CHECK-NEXT: .vsave {d8, d9}
1018
1018
; CHECK-NEXT: vpush {d8, d9}
1019
1019
; CHECK-NEXT: vmov.u16 r0, q0[1]
1020
1020
; CHECK-NEXT: vmov q4, q0
1021
1021
; 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
1040
1023
; 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
1043
1025
; 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
1067
1028
; 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}
1069
1030
entry:
1070
1031
%conv = fptosi <2 x half > %x to <2 x i128 >
1071
1032
%0 = icmp slt <2 x i128 > %conv , <i128 9223372036854775807 , i128 9223372036854775807 >
@@ -1105,58 +1066,39 @@ entry:
1105
1066
define arm_aapcs_vfpcc <2 x i64 > @ustest_f16i64 (<2 x half > %x ) {
1106
1067
; CHECK-LABEL: ustest_f16i64:
1107
1068
; 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}
1112
1071
; CHECK-NEXT: .vsave {d8, d9}
1113
1072
; CHECK-NEXT: vpush {d8, d9}
1114
1073
; CHECK-NEXT: vmov.u16 r0, q0[1]
1115
1074
; CHECK-NEXT: vmov q4, q0
1116
1075
; 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
1127
1077
; 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
1131
1082
; CHECK-NEXT: cset r6, lt
1132
1083
; CHECK-NEXT: cmp r6, #0
1133
- ; CHECK-NEXT: csel r9 , r0, r6, ne
1084
+ ; CHECK-NEXT: csel r8 , r0, r6, ne
1134
1085
; CHECK-NEXT: vmov.u16 r0, q4[0]
1135
1086
; 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
1148
1091
; CHECK-NEXT: cset r2, lt
1149
1092
; CHECK-NEXT: cmp r2, #0
1150
1093
; CHECK-NEXT: csel r0, r0, r2, ne
1151
1094
; CHECK-NEXT: cmp r6, #0
1152
1095
; CHECK-NEXT: csel r3, r4, r6, ne
1153
1096
; CHECK-NEXT: cmp r2, #0
1154
1097
; 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
1156
1099
; CHECK-NEXT: vmov q0[3], q0[1], r1, r3
1157
1100
; 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}
1160
1102
entry:
1161
1103
%conv = fptosi <2 x half > %x to <2 x i128 >
1162
1104
%0 = icmp slt <2 x i128 > %conv , <i128 18446744073709551616 , i128 18446744073709551616 >
@@ -2119,60 +2061,21 @@ entry:
2119
2061
define arm_aapcs_vfpcc <2 x i64 > @stest_f16i64_mm (<2 x half > %x ) {
2120
2062
; CHECK-LABEL: stest_f16i64_mm:
2121
2063
; 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}
2124
2066
; CHECK-NEXT: .vsave {d8, d9}
2125
2067
; CHECK-NEXT: vpush {d8, d9}
2126
2068
; CHECK-NEXT: vmov.u16 r0, q0[1]
2127
2069
; CHECK-NEXT: vmov q4, q0
2128
2070
; 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
2147
2072
; 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
2150
2074
; 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
2174
2077
; 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}
2176
2079
entry:
2177
2080
%conv = fptosi <2 x half > %x to <2 x i128 >
2178
2081
%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:
2209
2112
define arm_aapcs_vfpcc <2 x i64 > @ustest_f16i64_mm (<2 x half > %x ) {
2210
2113
; CHECK-LABEL: ustest_f16i64_mm:
2211
2114
; 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}
2216
2117
; CHECK-NEXT: .vsave {d8, d9}
2217
2118
; CHECK-NEXT: vpush {d8, d9}
2218
2119
; CHECK-NEXT: vmov.u16 r0, q0[1]
2219
2120
; CHECK-NEXT: vmov q4, q0
2220
2121
; 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
2228
2123
; 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
2232
2126
; 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
2239
2130
; CHECK-NEXT: cmp r3, #0
2240
2131
; CHECK-NEXT: it mi
2241
2132
; CHECK-NEXT: movmi r0, #0
2242
2133
; 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
2246
2135
; 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
2250
2137
; CHECK-NEXT: cmp r3, #0
2251
2138
; CHECK-NEXT: it mi
2252
2139
; 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
2254
2141
; 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}
2257
2143
entry:
2258
2144
%conv = fptosi <2 x half > %x to <2 x i128 >
2259
2145
%spec.store.select = call <2 x i128 > @llvm.smin.v2i128 (<2 x i128 > %conv , <2 x i128 > <i128 18446744073709551616 , i128 18446744073709551616 >)
0 commit comments