1273 lines · plain
1; RUN: llc -mtriple aarch64_be < %s -aarch64-enable-ldst-opt=false -o - | FileCheck %s2; RUN: llc -mtriple aarch64_be < %s -aarch64-enable-ldst-opt=false -fast-isel=true -O0 -o - | FileCheck %s3 4; Note, we split the functions in to multiple BBs below to isolate the call5; instruction we want to test, from fast-isel failing to select instructions6; after it.7 8; CHECK-LABEL: test_i64_f64:9declare i64 @test_i64_f64_helper(double %p)10define void @test_i64_f64(ptr %p, ptr %q) {11; CHECK-NOT: rev12 %1 = load double, ptr %p13 %2 = fadd double %1, %114 %3 = call i64 @test_i64_f64_helper(double %2)15 br label %return_bb16return_bb:17 %4 = add i64 %3, %318 store i64 %4, ptr %q19 ret void20}21 22; CHECK-LABEL: test_i64_v1i64:23declare i64 @test_i64_v1i64_helper(<1 x i64> %p)24define void @test_i64_v1i64(ptr %p, ptr %q) {25; CHECK-NOT: rev26 %1 = load <1 x i64>, ptr %p27 %2 = add <1 x i64> %1, %128 %3 = call i64 @test_i64_v1i64_helper(<1 x i64> %2)29 br label %return_bb30return_bb:31 %4 = add i64 %3, %332 store i64 %4, ptr %q33 ret void34}35 36; CHECK-LABEL: test_i64_v2f32:37declare i64 @test_i64_v2f32_helper(<2 x float> %p)38define void @test_i64_v2f32(ptr %p, ptr %q) {39; CHECK: rev64 v{{[0-9]+}}.2s40 %1 = load <2 x float>, ptr %p41 %2 = fadd <2 x float> %1, %142 %3 = call i64 @test_i64_v2f32_helper(<2 x float> %2)43 br label %return_bb44return_bb:45 %4 = add i64 %3, %346 store i64 %4, ptr %q47 ret void48}49 50; CHECK-LABEL: test_i64_v2i32:51declare i64 @test_i64_v2i32_helper(<2 x i32> %p)52define void @test_i64_v2i32(ptr %p, ptr %q) {53; CHECK: rev64 v{{[0-9]+}}.2s54 %1 = load <2 x i32>, ptr %p55 %2 = add <2 x i32> %1, %156 %3 = call i64 @test_i64_v2i32_helper(<2 x i32> %2)57 br label %return_bb58return_bb:59 %4 = add i64 %3, %360 store i64 %4, ptr %q61 ret void62}63 64; CHECK-LABEL: test_i64_v4i16:65declare i64 @test_i64_v4i16_helper(<4 x i16> %p)66define void @test_i64_v4i16(ptr %p, ptr %q) {67; CHECK: rev64 v{{[0-9]+}}.4h68 %1 = load <4 x i16>, ptr %p69 %2 = add <4 x i16> %1, %170 %3 = call i64 @test_i64_v4i16_helper(<4 x i16> %2)71 br label %return_bb72return_bb:73 %4 = add i64 %3, %374 store i64 %4, ptr %q75 ret void76}77 78; CHECK-LABEL: test_i64_v8i8:79declare i64 @test_i64_v8i8_helper(<8 x i8> %p)80define void @test_i64_v8i8(ptr %p, ptr %q) {81; CHECK: rev64 v{{[0-9]+}}.8b82 %1 = load <8 x i8>, ptr %p83 %2 = add <8 x i8> %1, %184 %3 = call i64 @test_i64_v8i8_helper(<8 x i8> %2)85 br label %return_bb86return_bb:87 %4 = add i64 %3, %388 store i64 %4, ptr %q89 ret void90}91 92; CHECK-LABEL: test_f64_i64:93declare double @test_f64_i64_helper(i64 %p)94define void @test_f64_i64(ptr %p, ptr %q) {95; CHECK-NOT: rev96 %1 = load i64, ptr %p97 %2 = add i64 %1, %198 %3 = call double @test_f64_i64_helper(i64 %2)99 br label %return_bb100return_bb:101 %4 = fadd double %3, %3102 store double %4, ptr %q103 ret void104}105 106; CHECK-LABEL: test_f64_v1i64:107declare double @test_f64_v1i64_helper(<1 x i64> %p)108define void @test_f64_v1i64(ptr %p, ptr %q) {109; CHECK-NOT: rev110 %1 = load <1 x i64>, ptr %p111 %2 = add <1 x i64> %1, %1112 %3 = call double @test_f64_v1i64_helper(<1 x i64> %2)113 br label %return_bb114return_bb:115 %4 = fadd double %3, %3116 store double %4, ptr %q117 ret void118}119 120; CHECK-LABEL: test_f64_v2f32:121declare double @test_f64_v2f32_helper(<2 x float> %p)122define void @test_f64_v2f32(ptr %p, ptr %q) {123; CHECK: rev64 v{{[0-9]+}}.2s124 %1 = load <2 x float>, ptr %p125 %2 = fadd <2 x float> %1, %1126 %3 = call double @test_f64_v2f32_helper(<2 x float> %2)127 br label %return_bb128return_bb:129 %4 = fadd double %3, %3130 store double %4, ptr %q131 ret void132}133 134; CHECK-LABEL: test_f64_v2i32:135declare double @test_f64_v2i32_helper(<2 x i32> %p)136define void @test_f64_v2i32(ptr %p, ptr %q) {137; CHECK: rev64 v{{[0-9]+}}.2s138 %1 = load <2 x i32>, ptr %p139 %2 = add <2 x i32> %1, %1140 %3 = call double @test_f64_v2i32_helper(<2 x i32> %2)141 br label %return_bb142return_bb:143 %4 = fadd double %3, %3144 store double %4, ptr %q145 ret void146}147 148; CHECK-LABEL: test_f64_v4i16:149declare double @test_f64_v4i16_helper(<4 x i16> %p)150define void @test_f64_v4i16(ptr %p, ptr %q) {151; CHECK: rev64 v{{[0-9]+}}.4h152 %1 = load <4 x i16>, ptr %p153 %2 = add <4 x i16> %1, %1154 %3 = call double @test_f64_v4i16_helper(<4 x i16> %2)155 br label %return_bb156return_bb:157 %4 = fadd double %3, %3158 store double %4, ptr %q159 ret void160}161 162; CHECK-LABEL: test_f64_v8i8:163declare double @test_f64_v8i8_helper(<8 x i8> %p)164define void @test_f64_v8i8(ptr %p, ptr %q) {165; CHECK: rev64 v{{[0-9]+}}.8b166 %1 = load <8 x i8>, ptr %p167 %2 = add <8 x i8> %1, %1168 %3 = call double @test_f64_v8i8_helper(<8 x i8> %2)169 br label %return_bb170return_bb:171 %4 = fadd double %3, %3172 store double %4, ptr %q173 ret void174}175 176; CHECK-LABEL: test_v1i64_i64:177declare <1 x i64> @test_v1i64_i64_helper(i64 %p)178define void @test_v1i64_i64(ptr %p, ptr %q) {179; CHECK-NOT: rev180 %1 = load i64, ptr %p181 %2 = add i64 %1, %1182 %3 = call <1 x i64> @test_v1i64_i64_helper(i64 %2)183 br label %return_bb184return_bb:185 %4 = add <1 x i64> %3, %3186 store <1 x i64> %4, ptr %q187 ret void188}189 190; CHECK-LABEL: test_v1i64_f64:191declare <1 x i64> @test_v1i64_f64_helper(double %p)192define void @test_v1i64_f64(ptr %p, ptr %q) {193; CHECK-NOT: rev194 %1 = load double, ptr %p195 %2 = fadd double %1, %1196 %3 = call <1 x i64> @test_v1i64_f64_helper(double %2)197 br label %return_bb198return_bb:199 %4 = add <1 x i64> %3, %3200 store <1 x i64> %4, ptr %q201 ret void202}203 204; CHECK-LABEL: test_v1i64_v2f32:205declare <1 x i64> @test_v1i64_v2f32_helper(<2 x float> %p)206define void @test_v1i64_v2f32(ptr %p, ptr %q) {207; CHECK: rev64 v{{[0-9]+}}.2s208 %1 = load <2 x float>, ptr %p209 %2 = fadd <2 x float> %1, %1210 %3 = call <1 x i64> @test_v1i64_v2f32_helper(<2 x float> %2)211 br label %return_bb212return_bb:213 %4 = add <1 x i64> %3, %3214 store <1 x i64> %4, ptr %q215 ret void216}217 218; CHECK-LABEL: test_v1i64_v2i32:219declare <1 x i64> @test_v1i64_v2i32_helper(<2 x i32> %p)220define void @test_v1i64_v2i32(ptr %p, ptr %q) {221; CHECK: rev64 v{{[0-9]+}}.2s222 %1 = load <2 x i32>, ptr %p223 %2 = add <2 x i32> %1, %1224 %3 = call <1 x i64> @test_v1i64_v2i32_helper(<2 x i32> %2)225 br label %return_bb226return_bb:227 %4 = add <1 x i64> %3, %3228 store <1 x i64> %4, ptr %q229 ret void230}231 232; CHECK-LABEL: test_v1i64_v4i16:233declare <1 x i64> @test_v1i64_v4i16_helper(<4 x i16> %p)234define void @test_v1i64_v4i16(ptr %p, ptr %q) {235; CHECK: rev64 v{{[0-9]+}}.4h236 %1 = load <4 x i16>, ptr %p237 %2 = add <4 x i16> %1, %1238 %3 = call <1 x i64> @test_v1i64_v4i16_helper(<4 x i16> %2)239 br label %return_bb240return_bb:241 %4 = add <1 x i64> %3, %3242 store <1 x i64> %4, ptr %q243 ret void244}245 246; CHECK-LABEL: test_v1i64_v8i8:247declare <1 x i64> @test_v1i64_v8i8_helper(<8 x i8> %p)248define void @test_v1i64_v8i8(ptr %p, ptr %q) {249; CHECK: rev64 v{{[0-9]+}}.8b250 %1 = load <8 x i8>, ptr %p251 %2 = add <8 x i8> %1, %1252 %3 = call <1 x i64> @test_v1i64_v8i8_helper(<8 x i8> %2)253 br label %return_bb254return_bb:255 %4 = add <1 x i64> %3, %3256 store <1 x i64> %4, ptr %q257 ret void258}259 260; CHECK-LABEL: test_v2f32_i64:261declare <2 x float> @test_v2f32_i64_helper(i64 %p)262define void @test_v2f32_i64(ptr %p, ptr %q) {263; CHECK: rev64 v{{[0-9]+}}.2s264 %1 = load i64, ptr %p265 %2 = add i64 %1, %1266 %3 = call <2 x float> @test_v2f32_i64_helper(i64 %2)267 br label %return_bb268return_bb:269 %4 = fadd <2 x float> %3, %3270 store <2 x float> %4, ptr %q271 ret void272}273 274; CHECK-LABEL: test_v2f32_f64:275declare <2 x float> @test_v2f32_f64_helper(double %p)276define void @test_v2f32_f64(ptr %p, ptr %q) {277; CHECK: rev64 v{{[0-9]+}}.2s278 %1 = load double, ptr %p279 %2 = fadd double %1, %1280 %3 = call <2 x float> @test_v2f32_f64_helper(double %2)281 br label %return_bb282return_bb:283 %4 = fadd <2 x float> %3, %3284 store <2 x float> %4, ptr %q285 ret void286}287 288; CHECK-LABEL: test_v2f32_v1i64:289declare <2 x float> @test_v2f32_v1i64_helper(<1 x i64> %p)290define void @test_v2f32_v1i64(ptr %p, ptr %q) {291; CHECK: rev64 v{{[0-9]+}}.2s292 %1 = load <1 x i64>, ptr %p293 %2 = add <1 x i64> %1, %1294 %3 = call <2 x float> @test_v2f32_v1i64_helper(<1 x i64> %2)295 br label %return_bb296return_bb:297 %4 = fadd <2 x float> %3, %3298 store <2 x float> %4, ptr %q299 ret void300}301 302; CHECK-LABEL: test_v2f32_v2i32:303declare <2 x float> @test_v2f32_v2i32_helper(<2 x i32> %p)304define void @test_v2f32_v2i32(ptr %p, ptr %q) {305; CHECK: rev64 v{{[0-9]+}}.2s306; CHECK: rev64 v{{[0-9]+}}.2s307 %1 = load <2 x i32>, ptr %p308 %2 = add <2 x i32> %1, %1309 %3 = call <2 x float> @test_v2f32_v2i32_helper(<2 x i32> %2)310 br label %return_bb311return_bb:312 %4 = fadd <2 x float> %3, %3313 store <2 x float> %4, ptr %q314 ret void315}316 317; CHECK-LABEL: test_v2f32_v4i16:318declare <2 x float> @test_v2f32_v4i16_helper(<4 x i16> %p)319define void @test_v2f32_v4i16(ptr %p, ptr %q) {320; CHECK: rev64 v{{[0-9]+}}.4h321; CHECK: rev64 v{{[0-9]+}}.2s322 %1 = load <4 x i16>, ptr %p323 %2 = add <4 x i16> %1, %1324 %3 = call <2 x float> @test_v2f32_v4i16_helper(<4 x i16> %2)325 br label %return_bb326return_bb:327 %4 = fadd <2 x float> %3, %3328 store <2 x float> %4, ptr %q329 ret void330}331 332; CHECK-LABEL: test_v2f32_v8i8:333declare <2 x float> @test_v2f32_v8i8_helper(<8 x i8> %p)334define void @test_v2f32_v8i8(ptr %p, ptr %q) {335; CHECK: rev64 v{{[0-9]+}}.8b336; CHECK: rev64 v{{[0-9]+}}.2s337 %1 = load <8 x i8>, ptr %p338 %2 = add <8 x i8> %1, %1339 %3 = call <2 x float> @test_v2f32_v8i8_helper(<8 x i8> %2)340 br label %return_bb341return_bb:342 %4 = fadd <2 x float> %3, %3343 store <2 x float> %4, ptr %q344 ret void345}346 347; CHECK-LABEL: test_v2i32_i64:348declare <2 x i32> @test_v2i32_i64_helper(i64 %p)349define void @test_v2i32_i64(ptr %p, ptr %q) {350; CHECK: rev64 v{{[0-9]+}}.2s351 %1 = load i64, ptr %p352 %2 = add i64 %1, %1353 %3 = call <2 x i32> @test_v2i32_i64_helper(i64 %2)354 br label %return_bb355return_bb:356 %4 = add <2 x i32> %3, %3357 store <2 x i32> %4, ptr %q358 ret void359}360 361; CHECK-LABEL: test_v2i32_f64:362declare <2 x i32> @test_v2i32_f64_helper(double %p)363define void @test_v2i32_f64(ptr %p, ptr %q) {364; CHECK: rev64 v{{[0-9]+}}.2s365 %1 = load double, ptr %p366 %2 = fadd double %1, %1367 %3 = call <2 x i32> @test_v2i32_f64_helper(double %2)368 br label %return_bb369return_bb:370 %4 = add <2 x i32> %3, %3371 store <2 x i32> %4, ptr %q372 ret void373}374 375; CHECK-LABEL: test_v2i32_v1i64:376declare <2 x i32> @test_v2i32_v1i64_helper(<1 x i64> %p)377define void @test_v2i32_v1i64(ptr %p, ptr %q) {378; CHECK: rev64 v{{[0-9]+}}.2s379 %1 = load <1 x i64>, ptr %p380 %2 = add <1 x i64> %1, %1381 %3 = call <2 x i32> @test_v2i32_v1i64_helper(<1 x i64> %2)382 br label %return_bb383return_bb:384 %4 = add <2 x i32> %3, %3385 store <2 x i32> %4, ptr %q386 ret void387}388 389; CHECK-LABEL: test_v2i32_v2f32:390declare <2 x i32> @test_v2i32_v2f32_helper(<2 x float> %p)391define void @test_v2i32_v2f32(ptr %p, ptr %q) {392; CHECK: rev64 v{{[0-9]+}}.2s393; CHECK: rev64 v{{[0-9]+}}.2s394 %1 = load <2 x float>, ptr %p395 %2 = fadd <2 x float> %1, %1396 %3 = call <2 x i32> @test_v2i32_v2f32_helper(<2 x float> %2)397 br label %return_bb398return_bb:399 %4 = add <2 x i32> %3, %3400 store <2 x i32> %4, ptr %q401 ret void402}403 404; CHECK-LABEL: test_v2i32_v4i16:405declare <2 x i32> @test_v2i32_v4i16_helper(<4 x i16> %p)406define void @test_v2i32_v4i16(ptr %p, ptr %q) {407; CHECK: rev64 v{{[0-9]+}}.4h408; CHECK: rev64 v{{[0-9]+}}.2s409 %1 = load <4 x i16>, ptr %p410 %2 = add <4 x i16> %1, %1411 %3 = call <2 x i32> @test_v2i32_v4i16_helper(<4 x i16> %2)412 br label %return_bb413return_bb:414 %4 = add <2 x i32> %3, %3415 store <2 x i32> %4, ptr %q416 ret void417}418 419; CHECK-LABEL: test_v2i32_v8i8:420declare <2 x i32> @test_v2i32_v8i8_helper(<8 x i8> %p)421define void @test_v2i32_v8i8(ptr %p, ptr %q) {422; CHECK: rev64 v{{[0-9]+}}.8b423; CHECK: rev64 v{{[0-9]+}}.2s424 %1 = load <8 x i8>, ptr %p425 %2 = add <8 x i8> %1, %1426 %3 = call <2 x i32> @test_v2i32_v8i8_helper(<8 x i8> %2)427 br label %return_bb428return_bb:429 %4 = add <2 x i32> %3, %3430 store <2 x i32> %4, ptr %q431 ret void432}433 434; CHECK-LABEL: test_v4i16_i64:435declare <4 x i16> @test_v4i16_i64_helper(i64 %p)436define void @test_v4i16_i64(ptr %p, ptr %q) {437; CHECK: rev64 v{{[0-9]+}}.4h438 %1 = load i64, ptr %p439 %2 = add i64 %1, %1440 %3 = call <4 x i16> @test_v4i16_i64_helper(i64 %2)441 br label %return_bb442return_bb:443 %4 = add <4 x i16> %3, %3444 store <4 x i16> %4, ptr %q445 ret void446}447 448; CHECK-LABEL: test_v4i16_f64:449declare <4 x i16> @test_v4i16_f64_helper(double %p)450define void @test_v4i16_f64(ptr %p, ptr %q) {451; CHECK: rev64 v{{[0-9]+}}.4h452 %1 = load double, ptr %p453 %2 = fadd double %1, %1454 %3 = call <4 x i16> @test_v4i16_f64_helper(double %2)455 br label %return_bb456return_bb:457 %4 = add <4 x i16> %3, %3458 store <4 x i16> %4, ptr %q459 ret void460}461 462; CHECK-LABEL: test_v4i16_v1i64:463declare <4 x i16> @test_v4i16_v1i64_helper(<1 x i64> %p)464define void @test_v4i16_v1i64(ptr %p, ptr %q) {465; CHECK: rev64 v{{[0-9]+}}.4h466 %1 = load <1 x i64>, ptr %p467 %2 = add <1 x i64> %1, %1468 %3 = call <4 x i16> @test_v4i16_v1i64_helper(<1 x i64> %2)469 br label %return_bb470return_bb:471 %4 = add <4 x i16> %3, %3472 store <4 x i16> %4, ptr %q473 ret void474}475 476; CHECK-LABEL: test_v4i16_v2f32:477declare <4 x i16> @test_v4i16_v2f32_helper(<2 x float> %p)478define void @test_v4i16_v2f32(ptr %p, ptr %q) {479; CHECK: rev64 v{{[0-9]+}}.2s480; CHECK: rev64 v{{[0-9]+}}.4h481 %1 = load <2 x float>, ptr %p482 %2 = fadd <2 x float> %1, %1483 %3 = call <4 x i16> @test_v4i16_v2f32_helper(<2 x float> %2)484 br label %return_bb485return_bb:486 %4 = add <4 x i16> %3, %3487 store <4 x i16> %4, ptr %q488 ret void489}490 491; CHECK-LABEL: test_v4i16_v2i32:492declare <4 x i16> @test_v4i16_v2i32_helper(<2 x i32> %p)493define void @test_v4i16_v2i32(ptr %p, ptr %q) {494; CHECK: rev64 v{{[0-9]+}}.2s495; CHECK: rev64 v{{[0-9]+}}.4h496 %1 = load <2 x i32>, ptr %p497 %2 = add <2 x i32> %1, %1498 %3 = call <4 x i16> @test_v4i16_v2i32_helper(<2 x i32> %2)499 br label %return_bb500return_bb:501 %4 = add <4 x i16> %3, %3502 store <4 x i16> %4, ptr %q503 ret void504}505 506; CHECK-LABEL: test_v4i16_v8i8:507declare <4 x i16> @test_v4i16_v8i8_helper(<8 x i8> %p)508define void @test_v4i16_v8i8(ptr %p, ptr %q) {509; CHECK: rev64 v{{[0-9]+}}.8b510; CHECK: rev64 v{{[0-9]+}}.4h511 %1 = load <8 x i8>, ptr %p512 %2 = add <8 x i8> %1, %1513 %3 = call <4 x i16> @test_v4i16_v8i8_helper(<8 x i8> %2)514 br label %return_bb515return_bb:516 %4 = add <4 x i16> %3, %3517 store <4 x i16> %4, ptr %q518 ret void519}520 521; CHECK-LABEL: test_v8i8_i64:522declare <8 x i8> @test_v8i8_i64_helper(i64 %p)523define void @test_v8i8_i64(ptr %p, ptr %q) {524; CHECK: rev64 v{{[0-9]+}}.8b525 %1 = load i64, ptr %p526 %2 = add i64 %1, %1527 %3 = call <8 x i8> @test_v8i8_i64_helper(i64 %2)528 br label %return_bb529return_bb:530 %4 = add <8 x i8> %3, %3531 store <8 x i8> %4, ptr %q532 ret void533}534 535; CHECK-LABEL: test_v8i8_f64:536declare <8 x i8> @test_v8i8_f64_helper(double %p)537define void @test_v8i8_f64(ptr %p, ptr %q) {538; CHECK: rev64 v{{[0-9]+}}.8b539 %1 = load double, ptr %p540 %2 = fadd double %1, %1541 %3 = call <8 x i8> @test_v8i8_f64_helper(double %2)542 br label %return_bb543return_bb:544 %4 = add <8 x i8> %3, %3545 store <8 x i8> %4, ptr %q546 ret void547}548 549; CHECK-LABEL: test_v8i8_v1i64:550declare <8 x i8> @test_v8i8_v1i64_helper(<1 x i64> %p)551define void @test_v8i8_v1i64(ptr %p, ptr %q) {552; CHECK: rev64 v{{[0-9]+}}.8b553 %1 = load <1 x i64>, ptr %p554 %2 = add <1 x i64> %1, %1555 %3 = call <8 x i8> @test_v8i8_v1i64_helper(<1 x i64> %2)556 br label %return_bb557return_bb:558 %4 = add <8 x i8> %3, %3559 store <8 x i8> %4, ptr %q560 ret void561}562 563; CHECK-LABEL: test_v8i8_v2f32:564declare <8 x i8> @test_v8i8_v2f32_helper(<2 x float> %p)565define void @test_v8i8_v2f32(ptr %p, ptr %q) {566; CHECK: rev64 v{{[0-9]+}}.2s567; CHECK: rev64 v{{[0-9]+}}.8b568 %1 = load <2 x float>, ptr %p569 %2 = fadd <2 x float> %1, %1570 %3 = call <8 x i8> @test_v8i8_v2f32_helper(<2 x float> %2)571 br label %return_bb572return_bb:573 %4 = add <8 x i8> %3, %3574 store <8 x i8> %4, ptr %q575 ret void576}577 578; CHECK-LABEL: test_v8i8_v2i32:579declare <8 x i8> @test_v8i8_v2i32_helper(<2 x i32> %p)580define void @test_v8i8_v2i32(ptr %p, ptr %q) {581; CHECK: rev64 v{{[0-9]+}}.2s582; CHECK: rev64 v{{[0-9]+}}.8b583 %1 = load <2 x i32>, ptr %p584 %2 = add <2 x i32> %1, %1585 %3 = call <8 x i8> @test_v8i8_v2i32_helper(<2 x i32> %2)586 br label %return_bb587return_bb:588 %4 = add <8 x i8> %3, %3589 store <8 x i8> %4, ptr %q590 ret void591}592 593; CHECK-LABEL: test_v8i8_v4i16:594declare <8 x i8> @test_v8i8_v4i16_helper(<4 x i16> %p)595define void @test_v8i8_v4i16(ptr %p, ptr %q) {596; CHECK: rev64 v{{[0-9]+}}.4h597; CHECK: rev64 v{{[0-9]+}}.8b598 %1 = load <4 x i16>, ptr %p599 %2 = add <4 x i16> %1, %1600 %3 = call <8 x i8> @test_v8i8_v4i16_helper(<4 x i16> %2)601 br label %return_bb602return_bb:603 %4 = add <8 x i8> %3, %3604 store <8 x i8> %4, ptr %q605 ret void606}607 608; CHECK-LABEL: test_f128_v2f64:609declare fp128 @test_f128_v2f64_helper(<2 x double> %p)610define void @test_f128_v2f64(ptr %p, ptr %q) {611; CHECK: ext612 %1 = load <2 x double>, ptr %p613 %2 = fadd <2 x double> %1, %1614 %3 = call fp128 @test_f128_v2f64_helper(<2 x double> %2)615 br label %return_bb616return_bb:617 %4 = fadd fp128 %3, %3618 store fp128 %4, ptr %q619 ret void620}621 622; CHECK-LABEL: test_f128_v2i64:623declare fp128 @test_f128_v2i64_helper(<2 x i64> %p)624define void @test_f128_v2i64(ptr %p, ptr %q) {625; CHECK: ext626 %1 = load <2 x i64>, ptr %p627 %2 = add <2 x i64> %1, %1628 %3 = call fp128 @test_f128_v2i64_helper(<2 x i64> %2)629 br label %return_bb630return_bb:631 %4 = fadd fp128 %3, %3632 store fp128 %4, ptr %q633 ret void634}635 636; CHECK-LABEL: test_f128_v4f32:637declare fp128 @test_f128_v4f32_helper(<4 x float> %p)638define void @test_f128_v4f32(ptr %p, ptr %q) {639; CHECK: rev64 v{{[0-9]+}}.4s640; CHECK: ext641 %1 = load <4 x float>, ptr %p642 %2 = fadd <4 x float> %1, %1643 %3 = call fp128 @test_f128_v4f32_helper(<4 x float> %2)644 br label %return_bb645return_bb:646 %4 = fadd fp128 %3, %3647 store fp128 %4, ptr %q648 ret void649}650 651; CHECK-LABEL: test_f128_v4i32:652declare fp128 @test_f128_v4i32_helper(<4 x i32> %p)653define void @test_f128_v4i32(ptr %p, ptr %q) {654; CHECK: rev64 v{{[0-9]+}}.4s655; CHECK: ext656 %1 = load <4 x i32>, ptr %p657 %2 = add <4 x i32> %1, %1658 %3 = call fp128 @test_f128_v4i32_helper(<4 x i32> %2)659 br label %return_bb660return_bb:661 %4 = fadd fp128 %3, %3662 store fp128 %4, ptr %q663 ret void664}665 666; CHECK-LABEL: test_f128_v8i16:667declare fp128 @test_f128_v8i16_helper(<8 x i16> %p)668define void @test_f128_v8i16(ptr %p, ptr %q) {669; CHECK: rev64 v{{[0-9]+}}.8h670; CHECK: ext671 %1 = load <8 x i16>, ptr %p672 %2 = add <8 x i16> %1, %1673 %3 = call fp128 @test_f128_v8i16_helper(<8 x i16> %2)674 br label %return_bb675return_bb:676 %4 = fadd fp128 %3, %3677 store fp128 %4, ptr %q678 ret void679}680 681; CHECK-LABEL: test_f128_v16i8:682declare fp128 @test_f128_v16i8_helper(<16 x i8> %p)683define void @test_f128_v16i8(ptr %p, ptr %q) {684; CHECK: rev64 v{{[0-9]+}}.16b685; CHECK: ext686 %1 = load <16 x i8>, ptr %p687 %2 = add <16 x i8> %1, %1688 %3 = call fp128 @test_f128_v16i8_helper(<16 x i8> %2)689 br label %return_bb690return_bb:691 %4 = fadd fp128 %3, %3692 store fp128 %4, ptr %q693 ret void694}695 696; CHECK-LABEL: test_v2f64_f128:697declare <2 x double> @test_v2f64_f128_helper(fp128 %p)698define void @test_v2f64_f128(ptr %p, ptr %q) {699; CHECK: ext700 %1 = load fp128, ptr %p701 %2 = fadd fp128 %1, %1702 %3 = call <2 x double> @test_v2f64_f128_helper(fp128 %2)703 br label %return_bb704return_bb:705 %4 = fadd <2 x double> %3, %3706 store <2 x double> %4, ptr %q707 ret void708}709 710; CHECK-LABEL: test_v2f64_v2i64:711declare <2 x double> @test_v2f64_v2i64_helper(<2 x i64> %p)712define void @test_v2f64_v2i64(ptr %p, ptr %q) {713; CHECK: ext714; CHECK: ext715 %1 = load <2 x i64>, ptr %p716 %2 = add <2 x i64> %1, %1717 %3 = call <2 x double> @test_v2f64_v2i64_helper(<2 x i64> %2)718 br label %return_bb719return_bb:720 %4 = fadd <2 x double> %3, %3721 store <2 x double> %4, ptr %q722 ret void723}724 725; CHECK-LABEL: test_v2f64_v4f32:726declare <2 x double> @test_v2f64_v4f32_helper(<4 x float> %p)727define void @test_v2f64_v4f32(ptr %p, ptr %q) {728; CHECK: rev64 v{{[0-9]+}}.4s729; CHECK: ext730; CHECK: ext731 %1 = load <4 x float>, ptr %p732 %2 = fadd <4 x float> %1, %1733 %3 = call <2 x double> @test_v2f64_v4f32_helper(<4 x float> %2)734 br label %return_bb735return_bb:736 %4 = fadd <2 x double> %3, %3737 store <2 x double> %4, ptr %q738 ret void739}740 741; CHECK-LABEL: test_v2f64_v4i32:742declare <2 x double> @test_v2f64_v4i32_helper(<4 x i32> %p)743define void @test_v2f64_v4i32(ptr %p, ptr %q) {744; CHECK: rev64 v{{[0-9]+}}.4s745; CHECK: ext746; CHECK: ext747 %1 = load <4 x i32>, ptr %p748 %2 = add <4 x i32> %1, %1749 %3 = call <2 x double> @test_v2f64_v4i32_helper(<4 x i32> %2)750 br label %return_bb751return_bb:752 %4 = fadd <2 x double> %3, %3753 store <2 x double> %4, ptr %q754 ret void755}756 757; CHECK-LABEL: test_v2f64_v8i16:758declare <2 x double> @test_v2f64_v8i16_helper(<8 x i16> %p)759define void @test_v2f64_v8i16(ptr %p, ptr %q) {760; CHECK: rev64 v{{[0-9]+}}.8h761; CHECK: ext762; CHECK: ext763 %1 = load <8 x i16>, ptr %p764 %2 = add <8 x i16> %1, %1765 %3 = call <2 x double> @test_v2f64_v8i16_helper(<8 x i16> %2)766 br label %return_bb767return_bb:768 %4 = fadd <2 x double> %3, %3769 store <2 x double> %4, ptr %q770 ret void771}772 773; CHECK-LABEL: test_v2f64_v16i8:774declare <2 x double> @test_v2f64_v16i8_helper(<16 x i8> %p)775define void @test_v2f64_v16i8(ptr %p, ptr %q) {776; CHECK: rev64 v{{[0-9]+}}.16b777; CHECK: ext778; CHECK: ext779 %1 = load <16 x i8>, ptr %p780 %2 = add <16 x i8> %1, %1781 %3 = call <2 x double> @test_v2f64_v16i8_helper(<16 x i8> %2)782 br label %return_bb783return_bb:784 %4 = fadd <2 x double> %3, %3785 store <2 x double> %4, ptr %q786 ret void787}788 789; CHECK-LABEL: test_v2i64_f128:790declare <2 x i64> @test_v2i64_f128_helper(fp128 %p)791define void @test_v2i64_f128(ptr %p, ptr %q) {792; CHECK: ext793 %1 = load fp128, ptr %p794 %2 = fadd fp128 %1, %1795 %3 = call <2 x i64> @test_v2i64_f128_helper(fp128 %2)796 br label %return_bb797return_bb:798 %4 = add <2 x i64> %3, %3799 store <2 x i64> %4, ptr %q800 ret void801}802 803; CHECK-LABEL: test_v2i64_v2f64:804declare <2 x i64> @test_v2i64_v2f64_helper(<2 x double> %p)805define void @test_v2i64_v2f64(ptr %p, ptr %q) {806; CHECK: ext807; CHECK: ext808 %1 = load <2 x double>, ptr %p809 %2 = fadd <2 x double> %1, %1810 %3 = call <2 x i64> @test_v2i64_v2f64_helper(<2 x double> %2)811 br label %return_bb812return_bb:813 %4 = add <2 x i64> %3, %3814 store <2 x i64> %4, ptr %q815 ret void816}817 818; CHECK-LABEL: test_v2i64_v4f32:819declare <2 x i64> @test_v2i64_v4f32_helper(<4 x float> %p)820define void @test_v2i64_v4f32(ptr %p, ptr %q) {821; CHECK: rev64 v{{[0-9]+}}.4s822; CHECK: ext823; CHECK: ext824 %1 = load <4 x float>, ptr %p825 %2 = fadd <4 x float> %1, %1826 %3 = call <2 x i64> @test_v2i64_v4f32_helper(<4 x float> %2)827 br label %return_bb828return_bb:829 %4 = add <2 x i64> %3, %3830 store <2 x i64> %4, ptr %q831 ret void832}833 834; CHECK-LABEL: test_v2i64_v4i32:835declare <2 x i64> @test_v2i64_v4i32_helper(<4 x i32> %p)836define void @test_v2i64_v4i32(ptr %p, ptr %q) {837; CHECK: rev64 v{{[0-9]+}}.4s838; CHECK: ext839; CHECK: ext840 %1 = load <4 x i32>, ptr %p841 %2 = add <4 x i32> %1, %1842 %3 = call <2 x i64> @test_v2i64_v4i32_helper(<4 x i32> %2)843 br label %return_bb844return_bb:845 %4 = add <2 x i64> %3, %3846 store <2 x i64> %4, ptr %q847 ret void848}849 850; CHECK-LABEL: test_v2i64_v8i16:851declare <2 x i64> @test_v2i64_v8i16_helper(<8 x i16> %p)852define void @test_v2i64_v8i16(ptr %p, ptr %q) {853; CHECK: rev64 v{{[0-9]+}}.8h854; CHECK: ext855; CHECK: ext856 %1 = load <8 x i16>, ptr %p857 %2 = add <8 x i16> %1, %1858 %3 = call <2 x i64> @test_v2i64_v8i16_helper(<8 x i16> %2)859 br label %return_bb860return_bb:861 %4 = add <2 x i64> %3, %3862 store <2 x i64> %4, ptr %q863 ret void864}865 866; CHECK-LABEL: test_v2i64_v16i8:867declare <2 x i64> @test_v2i64_v16i8_helper(<16 x i8> %p)868define void @test_v2i64_v16i8(ptr %p, ptr %q) {869; CHECK: rev64 v{{[0-9]+}}.16b870; CHECK: ext871; CHECK: ext872 %1 = load <16 x i8>, ptr %p873 %2 = add <16 x i8> %1, %1874 %3 = call <2 x i64> @test_v2i64_v16i8_helper(<16 x i8> %2)875 br label %return_bb876return_bb:877 %4 = add <2 x i64> %3, %3878 store <2 x i64> %4, ptr %q879 ret void880}881 882; CHECK-LABEL: test_v4f32_f128:883declare <4 x float> @test_v4f32_f128_helper(fp128 %p)884define void @test_v4f32_f128(ptr %p, ptr %q) {885; CHECK: rev64 v{{[0-9]+}}.4s886; CHECK: ext887 %1 = load fp128, ptr %p888 %2 = fadd fp128 %1, %1889 %3 = call <4 x float> @test_v4f32_f128_helper(fp128 %2)890 br label %return_bb891return_bb:892 %4 = fadd <4 x float> %3, %3893 store <4 x float> %4, ptr %q894 ret void895}896 897; CHECK-LABEL: test_v4f32_v2f64:898declare <4 x float> @test_v4f32_v2f64_helper(<2 x double> %p)899define void @test_v4f32_v2f64(ptr %p, ptr %q) {900; CHECK: ext901; CHECK: rev64 v{{[0-9]+}}.4s902; CHECK: ext903 %1 = load <2 x double>, ptr %p904 %2 = fadd <2 x double> %1, %1905 %3 = call <4 x float> @test_v4f32_v2f64_helper(<2 x double> %2)906 br label %return_bb907return_bb:908 %4 = fadd <4 x float> %3, %3909 store <4 x float> %4, ptr %q910 ret void911}912 913; CHECK-LABEL: test_v4f32_v2i64:914declare <4 x float> @test_v4f32_v2i64_helper(<2 x i64> %p)915define void @test_v4f32_v2i64(ptr %p, ptr %q) {916; CHECK: ext917; CHECK: rev64 v{{[0-9]+}}.4s918; CHECK: ext919 %1 = load <2 x i64>, ptr %p920 %2 = add <2 x i64> %1, %1921 %3 = call <4 x float> @test_v4f32_v2i64_helper(<2 x i64> %2)922 br label %return_bb923return_bb:924 %4 = fadd <4 x float> %3, %3925 store <4 x float> %4, ptr %q926 ret void927}928 929; CHECK-LABEL: test_v4f32_v4i32:930declare <4 x float> @test_v4f32_v4i32_helper(<4 x i32> %p)931define void @test_v4f32_v4i32(ptr %p, ptr %q) {932; CHECK: rev64 v{{[0-9]+}}.4s933; CHECK: ext934; CHECK: rev64 v{{[0-9]+}}.4s935; CHECK: ext936 %1 = load <4 x i32>, ptr %p937 %2 = add <4 x i32> %1, %1938 %3 = call <4 x float> @test_v4f32_v4i32_helper(<4 x i32> %2)939 br label %return_bb940return_bb:941 %4 = fadd <4 x float> %3, %3942 store <4 x float> %4, ptr %q943 ret void944}945 946; CHECK-LABEL: test_v4f32_v8i16:947declare <4 x float> @test_v4f32_v8i16_helper(<8 x i16> %p)948define void @test_v4f32_v8i16(ptr %p, ptr %q) {949; CHECK: rev64 v{{[0-9]+}}.8h950; CHECK: ext951; CHECK: rev64 v{{[0-9]+}}.4s952; CHECK: ext953 %1 = load <8 x i16>, ptr %p954 %2 = add <8 x i16> %1, %1955 %3 = call <4 x float> @test_v4f32_v8i16_helper(<8 x i16> %2)956 br label %return_bb957return_bb:958 %4 = fadd <4 x float> %3, %3959 store <4 x float> %4, ptr %q960 ret void961}962 963; CHECK-LABEL: test_v4f32_v16i8:964declare <4 x float> @test_v4f32_v16i8_helper(<16 x i8> %p)965define void @test_v4f32_v16i8(ptr %p, ptr %q) {966; CHECK: rev64 v{{[0-9]+}}.16b967; CHECK: ext968; CHECK: rev64 v{{[0-9]+}}.4s969; CHECK: ext970 %1 = load <16 x i8>, ptr %p971 %2 = add <16 x i8> %1, %1972 %3 = call <4 x float> @test_v4f32_v16i8_helper(<16 x i8> %2)973 br label %return_bb974return_bb:975 %4 = fadd <4 x float> %3, %3976 store <4 x float> %4, ptr %q977 ret void978}979 980; CHECK-LABEL: test_v4i32_f128:981declare <4 x i32> @test_v4i32_f128_helper(fp128 %p)982define void @test_v4i32_f128(ptr %p, ptr %q) {983; CHECK: rev64 v{{[0-9]+}}.4s984; CHECK: ext985 %1 = load fp128, ptr %p986 %2 = fadd fp128 %1, %1987 %3 = call <4 x i32> @test_v4i32_f128_helper(fp128 %2)988 br label %return_bb989return_bb:990 %4 = add <4 x i32> %3, %3991 store <4 x i32> %4, ptr %q992 ret void993}994 995; CHECK-LABEL: test_v4i32_v2f64:996declare <4 x i32> @test_v4i32_v2f64_helper(<2 x double> %p)997define void @test_v4i32_v2f64(ptr %p, ptr %q) {998; CHECK: ext999; CHECK: rev64 v{{[0-9]+}}.4s1000; CHECK: ext1001 %1 = load <2 x double>, ptr %p1002 %2 = fadd <2 x double> %1, %11003 %3 = call <4 x i32> @test_v4i32_v2f64_helper(<2 x double> %2)1004 br label %return_bb1005return_bb:1006 %4 = add <4 x i32> %3, %31007 store <4 x i32> %4, ptr %q1008 ret void1009}1010 1011; CHECK-LABEL: test_v4i32_v2i64:1012declare <4 x i32> @test_v4i32_v2i64_helper(<2 x i64> %p)1013define void @test_v4i32_v2i64(ptr %p, ptr %q) {1014; CHECK: ext1015; CHECK: rev64 v{{[0-9]+}}.4s1016; CHECK: ext1017 %1 = load <2 x i64>, ptr %p1018 %2 = add <2 x i64> %1, %11019 %3 = call <4 x i32> @test_v4i32_v2i64_helper(<2 x i64> %2)1020 br label %return_bb1021return_bb:1022 %4 = add <4 x i32> %3, %31023 store <4 x i32> %4, ptr %q1024 ret void1025}1026 1027; CHECK-LABEL: test_v4i32_v4f32:1028declare <4 x i32> @test_v4i32_v4f32_helper(<4 x float> %p)1029define void @test_v4i32_v4f32(ptr %p, ptr %q) {1030; CHECK: rev64 v{{[0-9]+}}.4s1031; CHECK: ext1032; CHECK: rev64 v{{[0-9]+}}.4s1033; CHECK: ext1034 %1 = load <4 x float>, ptr %p1035 %2 = fadd <4 x float> %1, %11036 %3 = call <4 x i32> @test_v4i32_v4f32_helper(<4 x float> %2)1037 br label %return_bb1038return_bb:1039 %4 = add <4 x i32> %3, %31040 store <4 x i32> %4, ptr %q1041 ret void1042}1043 1044; CHECK-LABEL: test_v4i32_v8i16:1045declare <4 x i32> @test_v4i32_v8i16_helper(<8 x i16> %p)1046define void @test_v4i32_v8i16(ptr %p, ptr %q) {1047; CHECK: rev64 v{{[0-9]+}}.8h1048; CHECK: ext1049; CHECK: rev64 v{{[0-9]+}}.4s1050; CHECK: ext1051 %1 = load <8 x i16>, ptr %p1052 %2 = add <8 x i16> %1, %11053 %3 = call <4 x i32> @test_v4i32_v8i16_helper(<8 x i16> %2)1054 br label %return_bb1055return_bb:1056 %4 = add <4 x i32> %3, %31057 store <4 x i32> %4, ptr %q1058 ret void1059}1060 1061; CHECK-LABEL: test_v4i32_v16i8:1062declare <4 x i32> @test_v4i32_v16i8_helper(<16 x i8> %p)1063define void @test_v4i32_v16i8(ptr %p, ptr %q) {1064; CHECK: rev64 v{{[0-9]+}}.16b1065; CHECK: ext1066; CHECK: rev64 v{{[0-9]+}}.4s1067; CHECK: ext1068 %1 = load <16 x i8>, ptr %p1069 %2 = add <16 x i8> %1, %11070 %3 = call <4 x i32> @test_v4i32_v16i8_helper(<16 x i8> %2)1071 br label %return_bb1072return_bb:1073 %4 = add <4 x i32> %3, %31074 store <4 x i32> %4, ptr %q1075 ret void1076}1077 1078; CHECK-LABEL: test_v8i16_f128:1079declare <8 x i16> @test_v8i16_f128_helper(fp128 %p)1080define void @test_v8i16_f128(ptr %p, ptr %q) {1081; CHECK: rev64 v{{[0-9]+}}.8h1082; CHECK: ext1083 %1 = load fp128, ptr %p1084 %2 = fadd fp128 %1, %11085 %3 = call <8 x i16> @test_v8i16_f128_helper(fp128 %2)1086 br label %return_bb1087return_bb:1088 %4 = add <8 x i16> %3, %31089 store <8 x i16> %4, ptr %q1090 ret void1091}1092 1093; CHECK-LABEL: test_v8i16_v2f64:1094declare <8 x i16> @test_v8i16_v2f64_helper(<2 x double> %p)1095define void @test_v8i16_v2f64(ptr %p, ptr %q) {1096; CHECK: ext1097; CHECK: rev64 v{{[0-9]+}}.8h1098; CHECK: ext1099 %1 = load <2 x double>, ptr %p1100 %2 = fadd <2 x double> %1, %11101 %3 = call <8 x i16> @test_v8i16_v2f64_helper(<2 x double> %2)1102 br label %return_bb1103return_bb:1104 %4 = add <8 x i16> %3, %31105 store <8 x i16> %4, ptr %q1106 ret void1107}1108 1109; CHECK-LABEL: test_v8i16_v2i64:1110declare <8 x i16> @test_v8i16_v2i64_helper(<2 x i64> %p)1111define void @test_v8i16_v2i64(ptr %p, ptr %q) {1112; CHECK: ext1113; CHECK: rev64 v{{[0-9]+}}.8h1114; CHECK: ext1115 %1 = load <2 x i64>, ptr %p1116 %2 = add <2 x i64> %1, %11117 %3 = call <8 x i16> @test_v8i16_v2i64_helper(<2 x i64> %2)1118 br label %return_bb1119return_bb:1120 %4 = add <8 x i16> %3, %31121 store <8 x i16> %4, ptr %q1122 ret void1123}1124 1125; CHECK-LABEL: test_v8i16_v4f32:1126declare <8 x i16> @test_v8i16_v4f32_helper(<4 x float> %p)1127define void @test_v8i16_v4f32(ptr %p, ptr %q) {1128; CHECK: rev64 v{{[0-9]+}}.4s1129; CHECK: ext1130; CHECK: rev64 v{{[0-9]+}}.8h1131; CHECK: ext1132 %1 = load <4 x float>, ptr %p1133 %2 = fadd <4 x float> %1, %11134 %3 = call <8 x i16> @test_v8i16_v4f32_helper(<4 x float> %2)1135 br label %return_bb1136return_bb:1137 %4 = add <8 x i16> %3, %31138 store <8 x i16> %4, ptr %q1139 ret void1140}1141 1142; CHECK-LABEL: test_v8i16_v4i32:1143declare <8 x i16> @test_v8i16_v4i32_helper(<4 x i32> %p)1144define void @test_v8i16_v4i32(ptr %p, ptr %q) {1145; CHECK: rev64 v{{[0-9]+}}.4s1146; CHECK: ext1147; CHECK: rev64 v{{[0-9]+}}.8h1148; CHECK: ext1149 %1 = load <4 x i32>, ptr %p1150 %2 = add <4 x i32> %1, %11151 %3 = call <8 x i16> @test_v8i16_v4i32_helper(<4 x i32> %2)1152 br label %return_bb1153return_bb:1154 %4 = add <8 x i16> %3, %31155 store <8 x i16> %4, ptr %q1156 ret void1157}1158 1159; CHECK-LABEL: test_v8i16_v16i8:1160declare <8 x i16> @test_v8i16_v16i8_helper(<16 x i8> %p)1161define void @test_v8i16_v16i8(ptr %p, ptr %q) {1162; CHECK: rev64 v{{[0-9]+}}.16b1163; CHECK: ext1164; CHECK: rev64 v{{[0-9]+}}.8h1165; CHECK: ext1166 %1 = load <16 x i8>, ptr %p1167 %2 = add <16 x i8> %1, %11168 %3 = call <8 x i16> @test_v8i16_v16i8_helper(<16 x i8> %2)1169 br label %return_bb1170return_bb:1171 %4 = add <8 x i16> %3, %31172 store <8 x i16> %4, ptr %q1173 ret void1174}1175 1176; CHECK-LABEL: test_v16i8_f128:1177declare <16 x i8> @test_v16i8_f128_helper(fp128 %p)1178define void @test_v16i8_f128(ptr %p, ptr %q) {1179; CHECK: rev64 v{{[0-9]+}}.16b1180; CHECK: ext1181 %1 = load fp128, ptr %p1182 %2 = fadd fp128 %1, %11183 %3 = call <16 x i8> @test_v16i8_f128_helper(fp128 %2)1184 br label %return_bb1185return_bb:1186 %4 = add <16 x i8> %3, %31187 store <16 x i8> %4, ptr %q1188 ret void1189}1190 1191; CHECK-LABEL: test_v16i8_v2f64:1192declare <16 x i8> @test_v16i8_v2f64_helper(<2 x double> %p)1193define void @test_v16i8_v2f64(ptr %p, ptr %q) {1194; CHECK: ext1195; CHECK: rev64 v{{[0-9]+}}.16b1196; CHECK: ext1197 %1 = load <2 x double>, ptr %p1198 %2 = fadd <2 x double> %1, %11199 %3 = call <16 x i8> @test_v16i8_v2f64_helper(<2 x double> %2)1200 br label %return_bb1201return_bb:1202 %4 = add <16 x i8> %3, %31203 store <16 x i8> %4, ptr %q1204 ret void1205}1206 1207; CHECK-LABEL: test_v16i8_v2i64:1208declare <16 x i8> @test_v16i8_v2i64_helper(<2 x i64> %p)1209define void @test_v16i8_v2i64(ptr %p, ptr %q) {1210; CHECK: ext1211; CHECK: rev64 v{{[0-9]+}}.16b1212; CHECK: ext1213 %1 = load <2 x i64>, ptr %p1214 %2 = add <2 x i64> %1, %11215 %3 = call <16 x i8> @test_v16i8_v2i64_helper(<2 x i64> %2)1216 br label %return_bb1217return_bb:1218 %4 = add <16 x i8> %3, %31219 store <16 x i8> %4, ptr %q1220 ret void1221}1222 1223; CHECK-LABEL: test_v16i8_v4f32:1224declare <16 x i8> @test_v16i8_v4f32_helper(<4 x float> %p)1225define void @test_v16i8_v4f32(ptr %p, ptr %q) {1226; CHECK: rev64 v{{[0-9]+}}.4s1227; CHECK: ext1228; CHECK: rev64 v{{[0-9]+}}.16b1229; CHECK: ext1230 %1 = load <4 x float>, ptr %p1231 %2 = fadd <4 x float> %1, %11232 %3 = call <16 x i8> @test_v16i8_v4f32_helper(<4 x float> %2)1233 br label %return_bb1234return_bb:1235 %4 = add <16 x i8> %3, %31236 store <16 x i8> %4, ptr %q1237 ret void1238}1239 1240; CHECK-LABEL: test_v16i8_v4i32:1241declare <16 x i8> @test_v16i8_v4i32_helper(<4 x i32> %p)1242define void @test_v16i8_v4i32(ptr %p, ptr %q) {1243; CHECK: rev64 v{{[0-9]+}}.4s1244; CHECK: ext1245; CHECK: rev64 v{{[0-9]+}}.16b1246; CHECK: ext1247 %1 = load <4 x i32>, ptr %p1248 %2 = add <4 x i32> %1, %11249 %3 = call <16 x i8> @test_v16i8_v4i32_helper(<4 x i32> %2)1250 br label %return_bb1251return_bb:1252 %4 = add <16 x i8> %3, %31253 store <16 x i8> %4, ptr %q1254 ret void1255}1256 1257; CHECK-LABEL: test_v16i8_v8i16:1258declare <16 x i8> @test_v16i8_v8i16_helper(<8 x i16> %p)1259define void @test_v16i8_v8i16(ptr %p, ptr %q) {1260; CHECK: rev64 v{{[0-9]+}}.8h1261; CHECK: ext1262; CHECK: rev64 v{{[0-9]+}}.16b1263; CHECK: ext1264 %1 = load <8 x i16>, ptr %p1265 %2 = add <8 x i16> %1, %11266 %3 = call <16 x i8> @test_v16i8_v8i16_helper(<8 x i16> %2)1267 br label %return_bb1268return_bb:1269 %4 = add <16 x i8> %3, %31270 store <16 x i8> %4, ptr %q1271 ret void1272}1273