314 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - -mtriple=aarch64 -run-pass=aarch64-prelegalizer-combiner %s | FileCheck %s3---4name: test_combine_consecutive5body: |6 bb.1:7 liveins: $w0, $w18 9 ; CHECK-LABEL: name: test_combine_consecutive10 ; CHECK: liveins: $w0, $w111 ; CHECK-NEXT: {{ $}}12 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w013 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w114 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)15 ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)16 %0:_(s32) = COPY $w017 %1:_(s32) = COPY $w118 %2:_(<2 x s32>) = G_IMPLICIT_DEF19 %7:_(s64) = G_CONSTANT i64 020 %8:_(s64) = G_CONSTANT i64 121 %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)22 %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %8(s64)23 $x0 = COPY %424...25---26name: test_combine_diff_order27body: |28 bb.1:29 liveins: $w0, $w130 31 ; CHECK-LABEL: name: test_combine_diff_order32 ; CHECK: liveins: $w0, $w133 ; CHECK-NEXT: {{ $}}34 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w035 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w136 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY]](s32)37 ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)38 %0:_(s32) = COPY $w039 %1:_(s32) = COPY $w140 %2:_(<2 x s32>) = G_IMPLICIT_DEF41 %7:_(s64) = G_CONSTANT i64 142 %8:_(s64) = G_CONSTANT i64 043 %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)44 %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %8(s64)45 $x0 = COPY %446...47---48name: test_combine_insert_vec_build_vec_idx_149body: |50 bb.1:51 liveins: $w0, $w1, $w2, $w352 53 ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_idx_154 ; CHECK: liveins: $w0, $w1, $w2, $w355 ; CHECK-NEXT: {{ $}}56 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w057 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w258 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w359 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)60 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)61 %0:_(s32) = COPY $w062 %1:_(s32) = COPY $w163 %6:_(s32) = COPY $w264 %7:_(s32) = COPY $w365 %2:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %6, %766 %3:_(s64) = G_CONSTANT i64 167 %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)68 $q0 = COPY %469...70---71name: test_combine_insert_vec_build_vec_idx_oob72body: |73 bb.1:74 liveins: $w0, $w1, $w2, $w375 76 ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_idx_oob77 ; CHECK: liveins: $w0, $w1, $w2, $w378 ; CHECK-NEXT: {{ $}}79 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF80 ; CHECK-NEXT: $q0 = COPY [[DEF]](<4 x s32>)81 %0:_(s32) = COPY $w082 %1:_(s32) = COPY $w183 %6:_(s32) = COPY $w284 %7:_(s32) = COPY $w385 %2:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %6, %786 %3:_(s64) = G_CONSTANT i64 487 %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64)88 $q0 = COPY %489...90---91name: test_combine_insert_vec_build_vec_variable92body: |93 bb.1:94 liveins: $x0, $w1, $w2, $w395 96 ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_variable97 ; CHECK: liveins: $x0, $w1, $w2, $w398 ; CHECK-NEXT: {{ $}}99 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0100 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1101 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2102 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $w3103 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)104 ; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s32>) = G_INSERT_VECTOR_ELT [[BUILD_VECTOR]], [[COPY1]](s32), [[COPY]](s64)105 ; CHECK-NEXT: $q0 = COPY [[IVEC]](<4 x s32>)106 %0:_(s64) = COPY $x0107 %1:_(s32) = COPY $w1108 %6:_(s32) = COPY $w2109 %7:_(s32) = COPY $w3110 %2:_(<4 x s32>) = G_BUILD_VECTOR %1, %1, %6, %7111 %3:_(s64) = COPY %0112 %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %1(s32), %3(s64)113 $q0 = COPY %4114...115---116name: test_combine_multiple_same_idx_1117body: |118 bb.1:119 liveins: $w0, $w1120 121 ; CHECK-LABEL: name: test_combine_multiple_same_idx_1122 ; CHECK: liveins: $w0, $w1123 ; CHECK-NEXT: {{ $}}124 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0125 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1126 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)127 ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)128 %0:_(s32) = COPY $w0129 %1:_(s32) = COPY $w1130 %2:_(<2 x s32>) = G_IMPLICIT_DEF131 %7:_(s64) = G_CONSTANT i64 0132 %8:_(s64) = G_CONSTANT i64 1133 %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)134 %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %8(s64)135 %5:_(<2 x s32>) = G_INSERT_VECTOR_ELT %4, %1(s32), %8(s64)136 $x0 = COPY %5137...138---139name: test_combine_multiple_same_idx_2140body: |141 bb.1:142 liveins: $w0, $w1143 144 ; CHECK-LABEL: name: test_combine_multiple_same_idx_2145 ; CHECK: liveins: $w0, $w1146 ; CHECK-NEXT: {{ $}}147 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w1148 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY]](s32)149 ; CHECK-NEXT: $x0 = COPY [[BUILD_VECTOR]](<2 x s32>)150 %0:_(s32) = COPY $w0151 %1:_(s32) = COPY $w1152 %2:_(<2 x s32>) = G_IMPLICIT_DEF153 %7:_(s64) = G_CONSTANT i64 0154 %8:_(s64) = G_CONSTANT i64 1155 %3:_(<2 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)156 %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %3, %1(s32), %7(s64)157 %5:_(<2 x s32>) = G_INSERT_VECTOR_ELT %4, %1(s32), %8(s64)158 $x0 = COPY %5159...160---161name: test_combine_missing_idx162body: |163 bb.1:164 liveins: $w0, $w1165 166 ; CHECK-LABEL: name: test_combine_missing_idx167 ; CHECK: liveins: $w0, $w1168 ; CHECK-NEXT: {{ $}}169 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0170 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1171 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF172 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[DEF]](s32), [[COPY1]](s32), [[COPY]](s32)173 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)174 %0:_(s32) = COPY $w0175 %1:_(s32) = COPY $w1176 %2:_(<4 x s32>) = G_IMPLICIT_DEF177 %7:_(s64) = G_CONSTANT i64 0178 %8:_(s64) = G_CONSTANT i64 2179 %9:_(s64) = G_CONSTANT i64 3180 %10:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %7(s64)181 %11:_(<4 x s32>) = G_INSERT_VECTOR_ELT %10, %1(s32), %8(s64)182 %12:_(<4 x s32>) = G_INSERT_VECTOR_ELT %11, %0(s32), %9(s64)183 $q0 = COPY %12184...185---186name: test_combine_negative_idx187body: |188 bb.1:189 liveins: $x0190 ; CHECK-LABEL: name: test_combine_negative_idx191 ; CHECK: liveins: $x0192 ; CHECK-NEXT: {{ $}}193 ; CHECK-NEXT: RET_ReallyLR194 %3:_(s8) = G_CONSTANT i8 127195 %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)196 %4:_(s8) = G_CONSTANT i8 -128197 %5:_(s64) = G_CONSTANT i64 -1198 %0:_(p0) = COPY $x0199 %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)200 G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))201 RET_ReallyLR202 203...204---205name: test_idx_undef206body: |207 bb.1:208 liveins: $x0209 ; CHECK-LABEL: name: test_idx_undef210 ; CHECK: liveins: $x0211 ; CHECK-NEXT: {{ $}}212 ; CHECK-NEXT: RET_ReallyLR213 %3:_(s8) = G_CONSTANT i8 127214 %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)215 %4:_(s8) = G_CONSTANT i8 -128216 %5:_(s64) = G_IMPLICIT_DEF217 %0:_(p0) = COPY $x0218 %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)219 G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))220 RET_ReallyLR221 222...223---224name: test_elt_undef225body: |226 bb.1:227 liveins: $x0228 ; CHECK-LABEL: name: test_elt_undef229 ; CHECK: liveins: $x0230 ; CHECK-NEXT: {{ $}}231 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127232 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF233 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0234 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[DEF]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)235 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>))236 ; CHECK-NEXT: RET_ReallyLR237 %3:_(s8) = G_CONSTANT i8 127238 %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)239 %4:_(s8) = G_IMPLICIT_DEF240 %5:_(s64) = G_CONSTANT i64 3241 %0:_(p0) = COPY $x0242 %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)243 G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))244 RET_ReallyLR245 246...247---248name: test_elt_undef_with_freeze249body: |250 bb.1:251 liveins: $x0252 ; CHECK-LABEL: name: test_elt_undef_with_freeze253 ; CHECK: liveins: $x0254 ; CHECK-NEXT: {{ $}}255 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127256 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0258 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[DEF]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)259 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>))260 ; CHECK-NEXT: RET_ReallyLR261 %3:_(s8) = G_CONSTANT i8 127262 %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)263 %4:_(s8) = G_IMPLICIT_DEF264 %5:_(s64) = G_CONSTANT i64 3265 %0:_(p0) = COPY $x0266 %9:_(<32 x s8>) = G_FREEZE %2267 %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %9, %4(s8), %5(s64)268 G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))269 RET_ReallyLR270 271...272---273name: test_insert_extract274body: |275 bb.1:276 liveins: $x0277 ; CHECK-LABEL: name: test_insert_extract278 ; CHECK: liveins: $x0279 ; CHECK-NEXT: {{ $}}280 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127281 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s8>) = G_BUILD_VECTOR [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)282 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0283 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>))284 ; CHECK-NEXT: RET_ReallyLR285 %3:_(s8) = G_CONSTANT i8 127286 %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)287 %5:_(s64) = G_CONSTANT i64 3288 %4:_(s8) = G_EXTRACT_VECTOR_ELT %2, %5289 %0:_(p0) = COPY $x0290 %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)291 G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))292 RET_ReallyLR293 294...295---296name: test_idx_oob297body: |298 bb.1:299 liveins: $x0300 ; CHECK-LABEL: name: test_idx_oob301 ; CHECK: liveins: $x0302 ; CHECK-NEXT: {{ $}}303 ; CHECK-NEXT: RET_ReallyLR304 %3:_(s8) = G_CONSTANT i8 127305 %2:_(<32 x s8>) = G_BUILD_VECTOR %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)306 %4:_(s8) = G_CONSTANT i8 -128307 %5:_(s64) = G_CONSTANT i64 1024308 %0:_(p0) = COPY $x0309 %1:_(<32 x s8>) = G_INSERT_VECTOR_ELT %2, %4(s8), %5(s64)310 G_STORE %1(<32 x s8>), %0(p0) :: (store (<32 x s8>))311 RET_ReallyLR312 313...314