1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -o - -mtriple=aarch64 -run-pass=aarch64-prelegalizer-combiner %s | FileCheck %s 3--- 4name: test_combine_consecutive 5body: | 6 bb.1: 7 liveins: $w0, $w1 8 9 ; CHECK-LABEL: name: test_combine_consecutive 10 ; CHECK: liveins: $w0, $w1 11 ; CHECK-NEXT: {{ $}} 12 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 13 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 14 ; 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 $w0 17 %1:_(s32) = COPY $w1 18 %2:_(<2 x s32>) = G_IMPLICIT_DEF 19 %7:_(s64) = G_CONSTANT i64 0 20 %8:_(s64) = G_CONSTANT i64 1 21 %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 %4 24... 25--- 26name: test_combine_diff_order 27body: | 28 bb.1: 29 liveins: $w0, $w1 30 31 ; CHECK-LABEL: name: test_combine_diff_order 32 ; CHECK: liveins: $w0, $w1 33 ; CHECK-NEXT: {{ $}} 34 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 35 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 36 ; 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 $w0 39 %1:_(s32) = COPY $w1 40 %2:_(<2 x s32>) = G_IMPLICIT_DEF 41 %7:_(s64) = G_CONSTANT i64 1 42 %8:_(s64) = G_CONSTANT i64 0 43 %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 %4 46... 47--- 48name: test_combine_insert_vec_build_vec_idx_1 49body: | 50 bb.1: 51 liveins: $w0, $w1, $w2, $w3 52 53 ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_idx_1 54 ; CHECK: liveins: $w0, $w1, $w2, $w3 55 ; CHECK-NEXT: {{ $}} 56 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 57 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w2 58 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w3 59 ; 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 $w0 62 %1:_(s32) = COPY $w1 63 %6:_(s32) = COPY $w2 64 %7:_(s32) = COPY $w3 65 %2:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %6, %7 66 %3:_(s64) = G_CONSTANT i64 1 67 %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64) 68 $q0 = COPY %4 69... 70--- 71name: test_combine_insert_vec_build_vec_idx_oob 72body: | 73 bb.1: 74 liveins: $w0, $w1, $w2, $w3 75 76 ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_idx_oob 77 ; CHECK: liveins: $w0, $w1, $w2, $w3 78 ; CHECK-NEXT: {{ $}} 79 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF 80 ; CHECK-NEXT: $q0 = COPY [[DEF]](<4 x s32>) 81 %0:_(s32) = COPY $w0 82 %1:_(s32) = COPY $w1 83 %6:_(s32) = COPY $w2 84 %7:_(s32) = COPY $w3 85 %2:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %6, %7 86 %3:_(s64) = G_CONSTANT i64 4 87 %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %0(s32), %3(s64) 88 $q0 = COPY %4 89... 90--- 91name: test_combine_insert_vec_build_vec_variable 92body: | 93 bb.1: 94 liveins: $x0, $w1, $w2, $w3 95 96 ; CHECK-LABEL: name: test_combine_insert_vec_build_vec_variable 97 ; CHECK: liveins: $x0, $w1, $w2, $w3 98 ; CHECK-NEXT: {{ $}} 99 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 100 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 101 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2 102 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $w3 103 ; 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 $x0 107 %1:_(s32) = COPY $w1 108 %6:_(s32) = COPY $w2 109 %7:_(s32) = COPY $w3 110 %2:_(<4 x s32>) = G_BUILD_VECTOR %1, %1, %6, %7 111 %3:_(s64) = COPY %0 112 %4:_(<4 x s32>) = G_INSERT_VECTOR_ELT %2, %1(s32), %3(s64) 113 $q0 = COPY %4 114... 115--- 116name: test_combine_multiple_same_idx_1 117body: | 118 bb.1: 119 liveins: $w0, $w1 120 121 ; CHECK-LABEL: name: test_combine_multiple_same_idx_1 122 ; CHECK: liveins: $w0, $w1 123 ; CHECK-NEXT: {{ $}} 124 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 125 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 126 ; 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 $w0 129 %1:_(s32) = COPY $w1 130 %2:_(<2 x s32>) = G_IMPLICIT_DEF 131 %7:_(s64) = G_CONSTANT i64 0 132 %8:_(s64) = G_CONSTANT i64 1 133 %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 %5 137... 138--- 139name: test_combine_multiple_same_idx_2 140body: | 141 bb.1: 142 liveins: $w0, $w1 143 144 ; CHECK-LABEL: name: test_combine_multiple_same_idx_2 145 ; CHECK: liveins: $w0, $w1 146 ; CHECK-NEXT: {{ $}} 147 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w1 148 ; 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 $w0 151 %1:_(s32) = COPY $w1 152 %2:_(<2 x s32>) = G_IMPLICIT_DEF 153 %7:_(s64) = G_CONSTANT i64 0 154 %8:_(s64) = G_CONSTANT i64 1 155 %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 %5 159... 160--- 161name: test_combine_missing_idx 162body: | 163 bb.1: 164 liveins: $w0, $w1 165 166 ; CHECK-LABEL: name: test_combine_missing_idx 167 ; CHECK: liveins: $w0, $w1 168 ; CHECK-NEXT: {{ $}} 169 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 170 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 171 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF 172 ; 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 $w0 175 %1:_(s32) = COPY $w1 176 %2:_(<4 x s32>) = G_IMPLICIT_DEF 177 %7:_(s64) = G_CONSTANT i64 0 178 %8:_(s64) = G_CONSTANT i64 2 179 %9:_(s64) = G_CONSTANT i64 3 180 %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 %12 184... 185--- 186name: test_combine_negative_idx 187body: | 188 bb.1: 189 liveins: $x0 190 ; CHECK-LABEL: name: test_combine_negative_idx 191 ; CHECK: liveins: $x0 192 ; CHECK-NEXT: {{ $}} 193 ; CHECK-NEXT: RET_ReallyLR 194 %3:_(s8) = G_CONSTANT i8 127 195 %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 -128 197 %5:_(s64) = G_CONSTANT i64 -1 198 %0:_(p0) = COPY $x0 199 %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_ReallyLR 202 203... 204--- 205name: test_idx_undef 206body: | 207 bb.1: 208 liveins: $x0 209 ; CHECK-LABEL: name: test_idx_undef 210 ; CHECK: liveins: $x0 211 ; CHECK-NEXT: {{ $}} 212 ; CHECK-NEXT: RET_ReallyLR 213 %3:_(s8) = G_CONSTANT i8 127 214 %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 -128 216 %5:_(s64) = G_IMPLICIT_DEF 217 %0:_(p0) = COPY $x0 218 %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_ReallyLR 221 222... 223--- 224name: test_elt_undef 225body: | 226 bb.1: 227 liveins: $x0 228 ; CHECK-LABEL: name: test_elt_undef 229 ; CHECK: liveins: $x0 230 ; CHECK-NEXT: {{ $}} 231 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127 232 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF 233 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 234 ; 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_ReallyLR 237 %3:_(s8) = G_CONSTANT i8 127 238 %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_DEF 240 %5:_(s64) = G_CONSTANT i64 3 241 %0:_(p0) = COPY $x0 242 %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_ReallyLR 245 246... 247--- 248name: test_elt_undef_with_freeze 249body: | 250 bb.1: 251 liveins: $x0 252 ; CHECK-LABEL: name: test_elt_undef_with_freeze 253 ; CHECK: liveins: $x0 254 ; CHECK-NEXT: {{ $}} 255 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127 256 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF 257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 258 ; 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_ReallyLR 261 %3:_(s8) = G_CONSTANT i8 127 262 %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_DEF 264 %5:_(s64) = G_CONSTANT i64 3 265 %0:_(p0) = COPY $x0 266 %9:_(<32 x s8>) = G_FREEZE %2 267 %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_ReallyLR 270 271... 272--- 273name: test_insert_extract 274body: | 275 bb.1: 276 liveins: $x0 277 ; CHECK-LABEL: name: test_insert_extract 278 ; CHECK: liveins: $x0 279 ; CHECK-NEXT: {{ $}} 280 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 127 281 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 282 ; 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) 283 ; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s8>), [[COPY]](p0) :: (store (<32 x s8>)) 284 ; CHECK-NEXT: RET_ReallyLR 285 %3:_(s8) = G_CONSTANT i8 127 286 %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 3 288 %4:_(s8) = G_EXTRACT_VECTOR_ELT %2, %5 289 %0:_(p0) = COPY $x0 290 %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_ReallyLR 293 294... 295--- 296name: test_idx_oob 297body: | 298 bb.1: 299 liveins: $x0 300 ; CHECK-LABEL: name: test_idx_oob 301 ; CHECK: liveins: $x0 302 ; CHECK-NEXT: {{ $}} 303 ; CHECK-NEXT: RET_ReallyLR 304 %3:_(s8) = G_CONSTANT i8 127 305 %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 -128 307 %5:_(s64) = G_CONSTANT i64 1024 308 %0:_(p0) = COPY $x0 309 %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_ReallyLR 312 313... 314