249 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64 -O0 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s3---4name: combine_unmerge_from_unmerge_of_concat_tree5alignment: 46tracksRegLiveness: true7body: |8 bb.1:9 liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x010 ; CHECK-LABEL: name: combine_unmerge_from_unmerge_of_concat_tree11 ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x012 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x014 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x115 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x216 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $d017 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $d118 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $d219 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $d320 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $d421 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $d522 ; CHECK-NEXT: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)23 ; CHECK-NEXT: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)24 ; CHECK-NEXT: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))25 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))26 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))27 ; CHECK-NEXT: RET_ReallyLR28 %0:_(s64) = COPY $x029 %1:_(s64) = COPY $x130 %2:_(p0) = COPY $x231 %3:_(s64) = COPY $d032 %4:_(s64) = COPY $d133 %5:_(s64) = COPY $d234 %6:_(s64) = COPY $d335 %7:_(s64) = COPY $d436 %8:_(s64) = COPY $d537 %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)38 %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)39 %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)40 %v4s64_val2:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val2:_(<2 x s64>), %v2s64_val:_(<2 x s64>)41 %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF42 %concat1:_(<8 x s64>) = G_CONCAT_VECTORS %v4s64_val1:_(<4 x s64>), %v4s64_val2:_(<4 x s64>)43 %bigconcat:_(<24 x s64>) = G_CONCAT_VECTORS %concat1:_(<8 x s64>), %v8s64_undef:_(<8 x s64>), %v8s64_undef:_(<8 x s64>)44 45 %unmerge1:_(<6 x s64>), %deaddef1:_(<6 x s64>), %deaddef2:_(<6 x s64>), %deaddef3:_(<6 x s64>) = G_UNMERGE_VALUES %bigconcat:_(<24 x s64>)46 %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>) = G_UNMERGE_VALUES %unmerge1:_(<6 x s64>)47 48 G_STORE %val1:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))49 G_STORE %val2:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))50 G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))51 RET_ReallyLR52 53...54 55---56name: combine_unmerge_from_unmerge_of_concat_tree_high_bits57alignment: 458tracksRegLiveness: true59body: |60 bb.1:61 liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x062 ; CHECK-LABEL: name: combine_unmerge_from_unmerge_of_concat_tree_high_bits63 ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x064 ; CHECK-NEXT: {{ $}}65 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x066 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x167 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x268 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $d069 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $d170 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $d271 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $d372 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $d473 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $d574 ; CHECK-NEXT: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)75 ; CHECK-NEXT: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)76 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))77 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))78 ; CHECK-NEXT: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))79 ; CHECK-NEXT: RET_ReallyLR80 %0:_(s64) = COPY $x081 %1:_(s64) = COPY $x182 %2:_(p0) = COPY $x283 %3:_(s64) = COPY $d084 %4:_(s64) = COPY $d185 %5:_(s64) = COPY $d286 %6:_(s64) = COPY $d387 %7:_(s64) = COPY $d488 %8:_(s64) = COPY $d589 %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)90 %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)91 %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)92 %v4s64_val2:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val2:_(<2 x s64>), %v2s64_val:_(<2 x s64>)93 %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF94 %concat1:_(<8 x s64>) = G_CONCAT_VECTORS %v4s64_val1:_(<4 x s64>), %v4s64_val2:_(<4 x s64>)95 %bigconcat:_(<24 x s64>) = G_CONCAT_VECTORS %v8s64_undef:_(<8 x s64>), %v8s64_undef:_(<8 x s64>), %concat1:_(<8 x s64>)96 97 %deaddef1:_(<6 x s64>), %deaddef2:_(<6 x s64>), %deaddef3:_(<6 x s64>), %unmerge1:_(<6 x s64>) = G_UNMERGE_VALUES %bigconcat:_(<24 x s64>)98 %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>) = G_UNMERGE_VALUES %unmerge1:_(<6 x s64>)99 100 G_STORE %val1:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))101 G_STORE %val2:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))102 G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))103 RET_ReallyLR104 105...106---107name: combine_unmerge_from_insert_into_low108alignment: 4109tracksRegLiveness: true110body: |111 bb.1:112 liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0113 ; CHECK-LABEL: name: combine_unmerge_from_insert_into_low114 ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0117 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1118 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2119 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0120 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1121 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2122 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3123 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4124 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5125 ; CHECK-NEXT: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)126 ; CHECK-NEXT: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)127 ; CHECK-NEXT: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))128 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))129 ; CHECK-NEXT: RET_ReallyLR130 %0:_(s64) = COPY $x0131 %1:_(s64) = COPY $x1132 %2:_(p0) = COPY $x2133 %3:_(s64) = COPY $d0134 %4:_(s64) = COPY $d1135 %5:_(s64) = COPY $d2136 %6:_(s64) = COPY $d3137 %7:_(s64) = COPY $d4138 %8:_(s64) = COPY $d5139 %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)140 %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)141 %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)142 %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF143 %insert:_(<8 x s64>) = G_INSERT %v8s64_undef:_(<8 x s64>), %v4s64_val1:_(<4 x s64>), 0144 %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>), %val4:_(<2 x s64>) = G_UNMERGE_VALUES %insert:_(<8 x s64>)145 146 ; val1 should be <%5, %6>147 G_STORE %val1:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))148 ; val2 should be <%6, %8>149 G_STORE %val2:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))150 RET_ReallyLR151 152...153---154name: combine_unmerge_from_insert_into_high155alignment: 4156tracksRegLiveness: true157body: |158 bb.1:159 liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0160 ; CHECK-LABEL: name: combine_unmerge_from_insert_into_high161 ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0162 ; CHECK-NEXT: {{ $}}163 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0164 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1165 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2166 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0167 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1168 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2169 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3170 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4171 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5172 ; CHECK-NEXT: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)173 ; CHECK-NEXT: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)174 ; CHECK-NEXT: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))175 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))176 ; CHECK-NEXT: RET_ReallyLR177 %0:_(s64) = COPY $x0178 %1:_(s64) = COPY $x1179 %2:_(p0) = COPY $x2180 %3:_(s64) = COPY $d0181 %4:_(s64) = COPY $d1182 %5:_(s64) = COPY $d2183 %6:_(s64) = COPY $d3184 %7:_(s64) = COPY $d4185 %8:_(s64) = COPY $d5186 %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)187 %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)188 %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)189 %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF190 %insert:_(<8 x s64>) = G_INSERT %v8s64_undef:_(<8 x s64>), %v4s64_val1:_(<4 x s64>), 256191 %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>), %val4:_(<2 x s64>) = G_UNMERGE_VALUES %insert:_(<8 x s64>)192 193 ; val3 should be <%5, %6>194 G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))195 ; val4 should be <%6, %8>196 G_STORE %val4:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))197 RET_ReallyLR198 199...200---201name: combine_unmerge_from_insert_look_into_container202alignment: 4203tracksRegLiveness: true204body: |205 bb.1:206 liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0207 ; CHECK-LABEL: name: combine_unmerge_from_insert_look_into_container208 ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0209 ; CHECK-NEXT: {{ $}}210 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0211 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1212 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2213 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0214 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1215 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2216 ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3217 ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4218 ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5219 ; CHECK-NEXT: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)220 ; CHECK-NEXT: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)221 ; CHECK-NEXT: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))222 ; CHECK-NEXT: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))223 ; CHECK-NEXT: RET_ReallyLR224 %0:_(s64) = COPY $x0225 %1:_(s64) = COPY $x1226 %2:_(p0) = COPY $x2227 %3:_(s64) = COPY $d0228 %4:_(s64) = COPY $d1229 %5:_(s64) = COPY $d2230 %6:_(s64) = COPY $d3231 %7:_(s64) = COPY $d4232 %8:_(s64) = COPY $d5233 %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)234 %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)235 %v4s64_undef:_(<4 x s64>) = G_IMPLICIT_DEF236 %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)237 %v8s64_val1:_(<8 x s64>) = G_CONCAT_VECTORS %v4s64_undef:_(<4 x s64>), %v4s64_val1:_(<4 x s64>)238 %insert:_(<8 x s64>) = G_INSERT %v8s64_val1:_(<8 x s64>), %v4s64_undef:_(<4 x s64>), 0239 ; The values we're interested in are in bits 256-512 of the insert container.240 %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>), %val4:_(<2 x s64>) = G_UNMERGE_VALUES %insert:_(<8 x s64>)241 242 ; val3 should be <%5, %6>243 G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))244 ; val4 should be <%6, %8>245 G_STORE %val4:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))246 RET_ReallyLR247 248...249