272 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64 -run-pass=legalizer %s -o - | FileCheck %s3 4---5name: test_scalar_sub_big6body: |7 bb.0.entry:8 ; CHECK-LABEL: name: test_scalar_sub_big9 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x010 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x111 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x212 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x313 ; CHECK-NEXT: [[USUBO:%[0-9]+]]:_(s64), [[USUBO1:%[0-9]+]]:_(s32) = G_USUBO [[COPY]], [[COPY2]]14 ; CHECK-NEXT: [[USUBE:%[0-9]+]]:_(s64), [[USUBE1:%[0-9]+]]:_(s32) = G_USUBE [[COPY1]], [[COPY3]], [[USUBO1]]15 ; CHECK-NEXT: $x0 = COPY [[USUBO]](s64)16 ; CHECK-NEXT: $x1 = COPY [[USUBE]](s64)17 %0:_(s64) = COPY $x018 %1:_(s64) = COPY $x119 %2:_(s64) = COPY $x220 %3:_(s64) = COPY $x321 %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)22 %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)23 %6:_(s128) = G_SUB %4, %524 %7:_(s64), %8:_(s64) = G_UNMERGE_VALUES %6(s128)25 $x0 = COPY %7(s64)26 $x1 = COPY %8(s64)27 28...29---30name: test_scalar_sub_big_nonpow231body: |32 bb.0.entry:33 ; CHECK-LABEL: name: test_scalar_sub_big_nonpow234 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x035 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x136 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x237 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x338 ; CHECK-NEXT: [[USUBO:%[0-9]+]]:_(s64), [[USUBO1:%[0-9]+]]:_(s32) = G_USUBO [[COPY]], [[COPY1]]39 ; CHECK-NEXT: [[USUBE:%[0-9]+]]:_(s64), [[USUBE1:%[0-9]+]]:_(s32) = G_USUBE [[COPY1]], [[COPY2]], [[USUBO1]]40 ; CHECK-NEXT: [[USUBE2:%[0-9]+]]:_(s64), [[USUBE3:%[0-9]+]]:_(s32) = G_USUBE [[COPY2]], [[COPY3]], [[USUBE1]]41 ; CHECK-NEXT: $x0 = COPY [[USUBO]](s64)42 ; CHECK-NEXT: $x1 = COPY [[USUBE]](s64)43 ; CHECK-NEXT: $x2 = COPY [[USUBE2]](s64)44 %0:_(s64) = COPY $x045 %1:_(s64) = COPY $x146 %2:_(s64) = COPY $x247 %3:_(s64) = COPY $x348 %4:_(s192) = G_MERGE_VALUES %0(s64), %1(s64), %2(s64)49 %5:_(s192) = G_MERGE_VALUES %1(s64), %2(s64), %3(s64)50 %6:_(s192) = G_SUB %4, %551 %7:_(s64), %8:_(s64), %9:_(s64) = G_UNMERGE_VALUES %6(s192)52 $x0 = COPY %7(s64)53 $x1 = COPY %8(s64)54 $x2 = COPY %9(s64)55 56...57---58name: test_scalar_sub_small59body: |60 bb.0.entry:61 ; CHECK-LABEL: name: test_scalar_sub_small62 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x063 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x164 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)65 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)66 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[TRUNC]], [[TRUNC1]]67 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SUB]](s32)68 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)69 %0:_(s64) = COPY $x070 %1:_(s64) = COPY $x171 %2:_(s8) = G_TRUNC %0(s64)72 %3:_(s8) = G_TRUNC %1(s64)73 %4:_(s8) = G_SUB %2, %374 %5:_(s64) = G_ANYEXT %4(s8)75 $x0 = COPY %5(s64)76 77...78---79name: test_vector_sub_v16s1680body: |81 bb.0.entry:82 ; CHECK-LABEL: name: test_vector_sub_v16s1683 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q084 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q185 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<8 x s16>) = G_SUB [[COPY]], [[COPY]]86 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(<8 x s16>) = G_SUB [[COPY1]], [[COPY1]]87 ; CHECK-NEXT: $q0 = COPY [[SUB]](<8 x s16>)88 ; CHECK-NEXT: $q1 = COPY [[SUB1]](<8 x s16>)89 %1:_(<8 x s16>) = COPY $q090 %2:_(<8 x s16>) = COPY $q191 %0:_(<16 x s16>) = G_CONCAT_VECTORS %1(<8 x s16>), %2(<8 x s16>)92 %3:_(<16 x s16>) = G_SUB %0, %093 %4:_(<8 x s16>), %5:_(<8 x s16>) = G_UNMERGE_VALUES %3(<16 x s16>)94 $q0 = COPY %4(<8 x s16>)95 $q1 = COPY %5(<8 x s16>)96 97...98---99name: test_vector_sub_v32s8100body: |101 bb.0.entry:102 ; CHECK-LABEL: name: test_vector_sub_v32s8103 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0104 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1105 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<16 x s8>) = G_SUB [[COPY]], [[COPY]]106 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(<16 x s8>) = G_SUB [[COPY1]], [[COPY1]]107 ; CHECK-NEXT: $q0 = COPY [[SUB]](<16 x s8>)108 ; CHECK-NEXT: $q1 = COPY [[SUB1]](<16 x s8>)109 %0:_(<16 x s8>) = COPY $q0110 %1:_(<16 x s8>) = COPY $q1111 %2:_(<32 x s8>) = G_CONCAT_VECTORS %0, %1112 %3:_(<32 x s8>) = G_SUB %2, %2113 %7:_(<16 x s8>), %8:_(<16 x s8>) = G_UNMERGE_VALUES %3(<32 x s8>)114 $q0 = COPY %7(<16 x s8>)115 $q1 = COPY %8(<16 x s8>)116 117...118---119name: sub_v2s1120tracksRegLiveness: true121body: |122 bb.1:123 liveins: $d0, $d1, $d2, $d3124 125 ; CHECK-LABEL: name: sub_v2s1126 ; CHECK: liveins: $d0, $d1, $d2, $d3127 ; CHECK-NEXT: {{ $}}128 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0129 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1130 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $d2131 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $d3132 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY]](<2 x s32>), [[COPY1]]133 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY2]](<2 x s32>), [[COPY3]]134 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<2 x s32>) = G_SUB [[ICMP]], [[ICMP1]]135 ; CHECK-NEXT: $d0 = COPY [[SUB]](<2 x s32>)136 ; CHECK-NEXT: RET_ReallyLR implicit $d0137 %0:_(<2 x s32>) = COPY $d0138 %1:_(<2 x s32>) = COPY $d1139 %2:_(<2 x s32>) = COPY $d2140 %3:_(<2 x s32>) = COPY $d3141 %4:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s32>), %1142 %5:_(<2 x s1>) = G_ICMP intpred(eq), %2(<2 x s32>), %3143 %6:_(<2 x s1>) = G_SUB %4, %5144 %7:_(<2 x s32>) = G_ANYEXT %6145 $d0 = COPY %7:_(<2 x s32>)146 RET_ReallyLR implicit $d0147...148---149name: sub_v3s1150tracksRegLiveness: true151body: |152 bb.1:153 liveins: $b0, $b1, $b2154 155 ; CHECK-LABEL: name: sub_v3s1156 ; CHECK: liveins: $b0, $b1, $b2157 ; CHECK-NEXT: {{ $}}158 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $b0159 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s8) = COPY $b1160 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s8) = COPY $b2161 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY]](s8)162 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY1]](s8)163 ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY2]](s8)164 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF165 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[ANYEXT]](s16), [[ANYEXT1]](s16), [[ANYEXT2]](s16), [[DEF]](s16)166 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<4 x s16>) = G_SUB [[BUILD_VECTOR]], [[BUILD_VECTOR]]167 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[SUB]](<4 x s16>)168 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s16)169 ; CHECK-NEXT: $b0 = COPY [[TRUNC]](s8)170 ; CHECK-NEXT: RET_ReallyLR implicit $b0171 %1:_(s8) = COPY $b0172 %2:_(s8) = COPY $b1173 %3:_(s8) = COPY $b2174 %4:_(<3 x s8>) = G_BUILD_VECTOR %1(s8), %2(s8), %3(s8)175 %0:_(<3 x s1>) = G_TRUNC %4(<3 x s8>)176 %5:_(<3 x s1>) = G_SUB %0, %0177 %7:_(<3 x s8>) = G_ANYEXT %5(<3 x s1>)178 %8:_(s8), %9:_(s8), %10:_(s8) = G_UNMERGE_VALUES %7(<3 x s8>)179 $b0 = COPY %8:_(s8)180 RET_ReallyLR implicit $b0181...182---183name: sub_v4s1184tracksRegLiveness: true185body: |186 bb.1:187 liveins: $d0, $d1, $d2, $d3188 189 ; CHECK-LABEL: name: sub_v4s1190 ; CHECK: liveins: $d0, $d1, $d2, $d3191 ; CHECK-NEXT: {{ $}}192 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0193 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1194 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $d2195 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<4 x s16>) = COPY $d3196 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY]](<4 x s16>), [[COPY1]]197 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY2]](<4 x s16>), [[COPY3]]198 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<4 x s16>) = G_SUB [[ICMP]], [[ICMP1]]199 ; CHECK-NEXT: $d0 = COPY [[SUB]](<4 x s16>)200 ; CHECK-NEXT: RET_ReallyLR implicit $d0201 %0:_(<4 x s16>) = COPY $d0202 %1:_(<4 x s16>) = COPY $d1203 %2:_(<4 x s16>) = COPY $d2204 %3:_(<4 x s16>) = COPY $d3205 %4:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s16>), %1206 %5:_(<4 x s1>) = G_ICMP intpred(eq), %2(<4 x s16>), %3207 %6:_(<4 x s1>) = G_SUB %4, %5208 %7:_(<4 x s16>) = G_ANYEXT %6209 $d0 = COPY %7:_(<4 x s16>)210 RET_ReallyLR implicit $d0211...212---213name: sub_v8s1214tracksRegLiveness: true215body: |216 bb.1:217 liveins: $d0, $d1, $d2, $d3218 219 ; CHECK-LABEL: name: sub_v8s1220 ; CHECK: liveins: $d0, $d1, $d2, $d3221 ; CHECK-NEXT: {{ $}}222 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0223 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1224 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<8 x s8>) = COPY $d2225 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<8 x s8>) = COPY $d3226 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY]](<8 x s8>), [[COPY1]]227 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY2]](<8 x s8>), [[COPY3]]228 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<8 x s8>) = G_SUB [[ICMP]], [[ICMP1]]229 ; CHECK-NEXT: $d0 = COPY [[SUB]](<8 x s8>)230 ; CHECK-NEXT: RET_ReallyLR implicit $d0231 %0:_(<8 x s8>) = COPY $d0232 %1:_(<8 x s8>) = COPY $d1233 %2:_(<8 x s8>) = COPY $d2234 %3:_(<8 x s8>) = COPY $d3235 %4:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s8>), %1236 %5:_(<8 x s1>) = G_ICMP intpred(eq), %2(<8 x s8>), %3237 %6:_(<8 x s1>) = G_SUB %4, %5238 %7:_(<8 x s8>) = G_ANYEXT %6239 $d0 = COPY %7:_(<8 x s8>)240 RET_ReallyLR implicit $d0241...242---243name: sub_v16s1244tracksRegLiveness: true245body: |246 bb.1:247 liveins: $q0, $q1, $q2, $q3248 249 ; CHECK-LABEL: name: sub_v16s1250 ; CHECK: liveins: $q0, $q1, $q2, $q3251 ; CHECK-NEXT: {{ $}}252 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0253 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1254 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<16 x s8>) = COPY $q2255 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<16 x s8>) = COPY $q3256 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]]257 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY2]](<16 x s8>), [[COPY3]]258 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<16 x s8>) = G_SUB [[ICMP]], [[ICMP1]]259 ; CHECK-NEXT: $q0 = COPY [[SUB]](<16 x s8>)260 ; CHECK-NEXT: RET_ReallyLR implicit $q0261 %0:_(<16 x s8>) = COPY $q0262 %1:_(<16 x s8>) = COPY $q1263 %2:_(<16 x s8>) = COPY $q2264 %3:_(<16 x s8>) = COPY $q3265 %4:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1266 %5:_(<16 x s1>) = G_ICMP intpred(eq), %2(<16 x s8>), %3267 %6:_(<16 x s1>) = G_SUB %4, %5268 %7:_(<16 x s8>) = G_ANYEXT %6269 $q0 = COPY %7:_(<16 x s8>)270 RET_ReallyLR implicit $q0271...272