brintos

brintos / llvm-project-archived public Read only

0
0
Text · 33.6 KiB · f5aa4c6 Raw
1323 lines · plain
1; RUN: llc -mtriple aarch64_be < %s -aarch64-enable-ldst-opt=false -O1 -o - | FileCheck %s2; RUN: llc -mtriple aarch64_be < %s -aarch64-enable-ldst-opt=false -O0 -fast-isel=true -o - | FileCheck %s3 4; CHECK-LABEL: test_i64_f64:5define void @test_i64_f64(ptr %p, ptr %q) {6; CHECK: ldr7; CHECK: str8    %1 = load double, ptr %p9    %2 = fadd double %1, %110    %3 = bitcast double %2 to i6411    %4 = add i64 %3, %312    store i64 %4, ptr %q13    ret void14}15 16; CHECK-LABEL: test_i64_v1i64:17define void @test_i64_v1i64(ptr %p, ptr %q) {18; CHECK: ldr19; CHECK: str20    %1 = load <1 x i64>, ptr %p21    %2 = add <1 x i64> %1, %122    %3 = bitcast <1 x i64> %2 to i6423    %4 = add i64 %3, %324    store i64 %4, ptr %q25    ret void26}27 28; CHECK-LABEL: test_i64_v2f32:29define void @test_i64_v2f32(ptr %p, ptr %q) {30; CHECK: ld1 { v{{[0-9]+}}.2s }31; CHECK: rev64 v{{[0-9]+}}.2s32; CHECK: str33    %1 = load <2 x float>, ptr %p34    %2 = fadd <2 x float> %1, %135    %3 = bitcast <2 x float> %2 to i6436    %4 = add i64 %3, %337    store i64 %4, ptr %q38    ret void39}40 41; CHECK-LABEL: test_i64_v2i32:42define void @test_i64_v2i32(ptr %p, ptr %q) {43; CHECK: ld1 { v{{[0-9]+}}.2s }44; CHECK: rev64 v{{[0-9]+}}.2s45; CHECK: str46    %1 = load <2 x i32>, ptr %p47    %2 = add <2 x i32> %1, %148    %3 = bitcast <2 x i32> %2 to i6449    %4 = add i64 %3, %350    store i64 %4, ptr %q51    ret void52}53 54; CHECK-LABEL: test_i64_v4f16:55define void @test_i64_v4f16(ptr %p, ptr %q) {56; CHECK: ld1 { v{{[0-9]+}}.4h }57; CHECK-NOT: rev58; CHECK: fadd59; CHECK: rev64 v{{[0-9]+}}.4h60; CHECK: str61    %1 = load <4 x half>, ptr %p62    %2 = fadd <4 x half> %1, %163    %3 = bitcast <4 x half> %2 to i6464    %4 = add i64 %3, %365    store i64 %4, ptr %q66    ret void67}68 69; CHECK-LABEL: test_i64_v4i16:70define void @test_i64_v4i16(ptr %p, ptr %q) {71; CHECK: ld1 { v{{[0-9]+}}.4h }72; CHECK: rev64 v{{[0-9]+}}.4h73; CHECK: str74    %1 = load <4 x i16>, ptr %p75    %2 = add <4 x i16> %1, %176    %3 = bitcast <4 x i16> %2 to i6477    %4 = add i64 %3, %378    store i64 %4, ptr %q79    ret void80}81 82; CHECK-LABEL: test_i64_v8i8:83define void @test_i64_v8i8(ptr %p, ptr %q) {84; CHECK: ld1 { v{{[0-9]+}}.8b }85; CHECK: rev64 v{{[0-9]+}}.8b86; CHECK: str87    %1 = load <8 x i8>, ptr %p88    %2 = add <8 x i8> %1, %189    %3 = bitcast <8 x i8> %2 to i6490    %4 = add i64 %3, %391    store i64 %4, ptr %q92    ret void93}94 95; CHECK-LABEL: test_f64_i64:96define void @test_f64_i64(ptr %p, ptr %q) {97; CHECK: ldr98; CHECK: str99    %1 = load i64, ptr %p100    %2 = add i64 %1, %1101    %3 = bitcast i64 %2 to double102    %4 = fadd double %3, %3103    store double %4, ptr %q104    ret void105}106 107; CHECK-LABEL: test_f64_v1i64:108define void @test_f64_v1i64(ptr %p, ptr %q) {109; CHECK: ldr110; CHECK: str111    %1 = load <1 x i64>, ptr %p112    %2 = add <1 x i64> %1, %1113    %3 = bitcast <1 x i64> %2 to double114    %4 = fadd double %3, %3115    store double %4, ptr %q116    ret void117}118 119; CHECK-LABEL: test_f64_v2f32:120define void @test_f64_v2f32(ptr %p, ptr %q) {121; CHECK: ld1 { v{{[0-9]+}}.2s }122; CHECK: rev64 v{{[0-9]+}}.2s123; CHECK: str124    %1 = load <2 x float>, ptr %p125    %2 = fadd <2 x float> %1, %1126    %3 = bitcast <2 x float> %2 to double127    %4 = fadd double %3, %3128    store double %4, ptr %q129    ret void130}131 132; CHECK-LABEL: test_f64_v2i32:133define void @test_f64_v2i32(ptr %p, ptr %q) {134; CHECK: ld1 { v{{[0-9]+}}.2s }135; CHECK: rev64 v{{[0-9]+}}.2s136; CHECK: str137    %1 = load <2 x i32>, ptr %p138    %2 = add <2 x i32> %1, %1139    %3 = bitcast <2 x i32> %2 to double140    %4 = fadd double %3, %3141    store double %4, ptr %q142    ret void143}144 145; CHECK-LABEL: test_f64_v4i16:146define void @test_f64_v4i16(ptr %p, ptr %q) {147; CHECK: ld1 { v{{[0-9]+}}.4h }148; CHECK: rev64 v{{[0-9]+}}.4h149; CHECK: str150    %1 = load <4 x i16>, ptr %p151    %2 = add <4 x i16> %1, %1152    %3 = bitcast <4 x i16> %2 to double153    %4 = fadd double %3, %3154    store double %4, ptr %q155    ret void156}157 158; CHECK-LABEL: test_f64_v4f16:159define void @test_f64_v4f16(ptr %p, ptr %q) {160; CHECK: ld1 { v{{[0-9]+}}.4h }161; CHECK-NOT: rev162; CHECK: fadd163; CHECK: rev64 v{{[0-9]+}}.4h164; CHECK: fadd165; CHECK: str166    %1 = load <4 x half>, ptr %p167    %2 = fadd <4 x half> %1, %1168    %3 = bitcast <4 x half> %2 to double169    %4 = fadd double %3, %3170    store double %4, ptr %q171    ret void172}173 174; CHECK-LABEL: test_f64_v8i8:175define void @test_f64_v8i8(ptr %p, ptr %q) {176; CHECK: ld1 { v{{[0-9]+}}.8b }177; CHECK: rev64 v{{[0-9]+}}.8b178; CHECK: str179    %1 = load <8 x i8>, ptr %p180    %2 = add <8 x i8> %1, %1181    %3 = bitcast <8 x i8> %2 to double182    %4 = fadd double %3, %3183    store double %4, ptr %q184    ret void185}186 187; CHECK-LABEL: test_v1i64_i64:188define void @test_v1i64_i64(ptr %p, ptr %q) {189; CHECK: ldr190; CHECK: str191    %1 = load i64, ptr %p192    %2 = add i64 %1, %1193    %3 = bitcast i64 %2 to <1 x i64>194    %4 = add <1 x i64> %3, %3195    store <1 x i64> %4, ptr %q196    ret void197}198 199; CHECK-LABEL: test_v1i64_f64:200define void @test_v1i64_f64(ptr %p, ptr %q) {201; CHECK: ldr202; CHECK: str203    %1 = load double, ptr %p204    %2 = fadd double %1, %1205    %3 = bitcast double %2 to <1 x i64>206    %4 = add <1 x i64> %3, %3207    store <1 x i64> %4, ptr %q208    ret void209}210 211; CHECK-LABEL: test_v1i64_v2f32:212define void @test_v1i64_v2f32(ptr %p, ptr %q) {213; CHECK: ld1 { v{{[0-9]+}}.2s }214; CHECK: rev64 v{{[0-9]+}}.2s215; CHECK: str216    %1 = load <2 x float>, ptr %p217    %2 = fadd <2 x float> %1, %1218    %3 = bitcast <2 x float> %2 to <1 x i64>219    %4 = add <1 x i64> %3, %3220    store <1 x i64> %4, ptr %q221    ret void222}223 224; CHECK-LABEL: test_v1i64_v2i32:225define void @test_v1i64_v2i32(ptr %p, ptr %q) {226; CHECK: ld1 { v{{[0-9]+}}.2s }227; CHECK: rev64 v{{[0-9]+}}.2s228; CHECK: str229    %1 = load <2 x i32>, ptr %p230    %2 = add <2 x i32> %1, %1231    %3 = bitcast <2 x i32> %2 to <1 x i64>232    %4 = add <1 x i64> %3, %3233    store <1 x i64> %4, ptr %q234    ret void235}236 237; CHECK-LABEL: test_v1i64_v4f16:238define void @test_v1i64_v4f16(ptr %p, ptr %q) {239; CHECK: ld1 { v{{[0-9]+}}.4h }240; CHECK-NOT: rev241; CHECK: fadd242; CHECK: rev64 v{{[0-9]+}}.4h243; CHECK: str244    %1 = load <4 x half>, ptr %p245    %2 = fadd <4 x half> %1, %1246    %3 = bitcast <4 x half> %2 to <1 x i64>247    %4 = add <1 x i64> %3, %3248    store <1 x i64> %4, ptr %q249    ret void250}251 252; CHECK-LABEL: test_v1i64_v4i16:253define void @test_v1i64_v4i16(ptr %p, ptr %q) {254; CHECK: ld1 { v{{[0-9]+}}.4h }255; CHECK: rev64 v{{[0-9]+}}.4h256; CHECK: str257    %1 = load <4 x i16>, ptr %p258    %2 = add <4 x i16> %1, %1259    %3 = bitcast <4 x i16> %2 to <1 x i64>260    %4 = add <1 x i64> %3, %3261    store <1 x i64> %4, ptr %q262    ret void263}264 265; CHECK-LABEL: test_v1i64_v8i8:266define void @test_v1i64_v8i8(ptr %p, ptr %q) {267; CHECK: ld1 { v{{[0-9]+}}.8b }268; CHECK: rev64 v{{[0-9]+}}.8b269; CHECK: str270    %1 = load <8 x i8>, ptr %p271    %2 = add <8 x i8> %1, %1272    %3 = bitcast <8 x i8> %2 to <1 x i64>273    %4 = add <1 x i64> %3, %3274    store <1 x i64> %4, ptr %q275    ret void276}277 278; CHECK-LABEL: test_v2f32_i64:279define void @test_v2f32_i64(ptr %p, ptr %q) {280; CHECK: ldr281; CHECK: rev64 v{{[0-9]+}}.2s282; CHECK: st1 { v{{[0-9]+}}.2s }283    %1 = load i64, ptr %p284    %2 = add i64 %1, %1285    %3 = bitcast i64 %2 to <2 x float>286    %4 = fadd <2 x float> %3, %3287    store <2 x float> %4, ptr %q288    ret void289}290 291; CHECK-LABEL: test_v2f32_f64:292define void @test_v2f32_f64(ptr %p, ptr %q) {293; CHECK: ldr294; CHECK: rev64 v{{[0-9]+}}.2s295; CHECK: st1 { v{{[0-9]+}}.2s }296    %1 = load double, ptr %p297    %2 = fadd double %1, %1298    %3 = bitcast double %2 to <2 x float>299    %4 = fadd <2 x float> %3, %3300    store <2 x float> %4, ptr %q301    ret void302}303 304; CHECK-LABEL: test_v2f32_v1i64:305define void @test_v2f32_v1i64(ptr %p, ptr %q) {306; CHECK: ldr307; CHECK: rev64 v{{[0-9]+}}.2s308; CHECK: st1 { v{{[0-9]+}}.2s }309    %1 = load <1 x i64>, ptr %p310    %2 = add <1 x i64> %1, %1311    %3 = bitcast <1 x i64> %2 to <2 x float>312    %4 = fadd <2 x float> %3, %3313    store <2 x float> %4, ptr %q314    ret void315}316 317; CHECK-LABEL: test_v2f32_v2i32:318define void @test_v2f32_v2i32(ptr %p, ptr %q) {319; CHECK: ld1 { v{{[0-9]+}}.2s }320; CHECK: st1 { v{{[0-9]+}}.2s }321    %1 = load <2 x i32>, ptr %p322    %2 = add <2 x i32> %1, %1323    %3 = bitcast <2 x i32> %2 to <2 x float>324    %4 = fadd <2 x float> %3, %3325    store <2 x float> %4, ptr %q326    ret void327}328 329; CHECK-LABEL: test_v2f32_v4i16:330define void @test_v2f32_v4i16(ptr %p, ptr %q) {331; CHECK: ld1 { v{{[0-9]+}}.4h }332; CHECK: rev32 v{{[0-9]+}}.4h333; CHECK: st1 { v{{[0-9]+}}.2s }334    %1 = load <4 x i16>, ptr %p335    %2 = add <4 x i16> %1, %1336    %3 = bitcast <4 x i16> %2 to <2 x float>337    %4 = fadd <2 x float> %3, %3338    store <2 x float> %4, ptr %q339    ret void340}341 342; CHECK-LABEL: test_v2f32_v4f16:343define void @test_v2f32_v4f16(ptr %p, ptr %q) {344; CHECK: ld1 { v{{[0-9]+}}.4h }345; CHECK-NOT: rev346; CHECK: fadd347; CHECK: rev32 v{{[0-9]+}}.4h348; CHECK: st1 { v{{[0-9]+}}.2s }349    %1 = load <4 x half>, ptr %p350    %2 = fadd <4 x half> %1, %1351    %3 = bitcast <4 x half> %2 to <2 x float>352    %4 = fadd <2 x float> %3, %3353    store <2 x float> %4, ptr %q354    ret void355}356 357; CHECK-LABEL: test_v2f32_v8i8:358define void @test_v2f32_v8i8(ptr %p, ptr %q) {359; CHECK: ld1 { v{{[0-9]+}}.8b }360; CHECK: rev32 v{{[0-9]+}}.8b361; CHECK: st1 { v{{[0-9]+}}.2s }362    %1 = load <8 x i8>, ptr %p363    %2 = add <8 x i8> %1, %1364    %3 = bitcast <8 x i8> %2 to <2 x float>365    %4 = fadd <2 x float> %3, %3366    store <2 x float> %4, ptr %q367    ret void368}369 370; CHECK-LABEL: test_v2i32_i64:371define void @test_v2i32_i64(ptr %p, ptr %q) {372; CHECK: ldr373; CHECK: rev64 v{{[0-9]+}}.2s374; CHECK: st1 { v{{[0-9]+}}.2s }375    %1 = load i64, ptr %p376    %2 = add i64 %1, %1377    %3 = bitcast i64 %2 to <2 x i32>378    %4 = add <2 x i32> %3, %3379    store <2 x i32> %4, ptr %q380    ret void381}382 383; CHECK-LABEL: test_v2i32_f64:384define void @test_v2i32_f64(ptr %p, ptr %q) {385; CHECK: ldr386; CHECK: rev64 v{{[0-9]+}}.2s387; CHECK: st1 { v{{[0-9]+}}.2s }388    %1 = load double, ptr %p389    %2 = fadd double %1, %1390    %3 = bitcast double %2 to <2 x i32>391    %4 = add <2 x i32> %3, %3392    store <2 x i32> %4, ptr %q393    ret void394}395 396; CHECK-LABEL: test_v2i32_v1i64:397define void @test_v2i32_v1i64(ptr %p, ptr %q) {398; CHECK: ldr399; CHECK: rev64 v{{[0-9]+}}.2s400; CHECK: st1 { v{{[0-9]+}}.2s }401    %1 = load <1 x i64>, ptr %p402    %2 = add <1 x i64> %1, %1403    %3 = bitcast <1 x i64> %2 to <2 x i32>404    %4 = add <2 x i32> %3, %3405    store <2 x i32> %4, ptr %q406    ret void407}408 409; CHECK-LABEL: test_v2i32_v2f32:410define void @test_v2i32_v2f32(ptr %p, ptr %q) {411; CHECK: ld1 { v{{[0-9]+}}.2s }412; CHECK: st1 { v{{[0-9]+}}.2s }413    %1 = load <2 x float>, ptr %p414    %2 = fadd <2 x float> %1, %1415    %3 = bitcast <2 x float> %2 to <2 x i32>416    %4 = add <2 x i32> %3, %3417    store <2 x i32> %4, ptr %q418    ret void419}420 421; CHECK-LABEL: test_v2i32_v4i16:422define void @test_v2i32_v4i16(ptr %p, ptr %q) {423; CHECK: ld1 { v{{[0-9]+}}.4h }424; CHECK: rev32 v{{[0-9]+}}.4h425; CHECK: st1 { v{{[0-9]+}}.2s }426    %1 = load <4 x i16>, ptr %p427    %2 = add <4 x i16> %1, %1428    %3 = bitcast <4 x i16> %2 to <2 x i32>429    %4 = add <2 x i32> %3, %3430    store <2 x i32> %4, ptr %q431    ret void432}433 434; CHECK-LABEL: test_v2i32_v8i8:435define void @test_v2i32_v8i8(ptr %p, ptr %q) {436; CHECK: ld1 { v{{[0-9]+}}.8b }437; CHECK: rev32 v{{[0-9]+}}.8b438; CHECK: st1 { v{{[0-9]+}}.2s }439    %1 = load <8 x i8>, ptr %p440    %2 = add <8 x i8> %1, %1441    %3 = bitcast <8 x i8> %2 to <2 x i32>442    %4 = add <2 x i32> %3, %3443    store <2 x i32> %4, ptr %q444    ret void445}446 447; CHECK-LABEL: test_v4i16_i64:448define void @test_v4i16_i64(ptr %p, ptr %q) {449; CHECK: ldr450; CHECK: rev64 v{{[0-9]+}}.4h451; CHECK: st1 { v{{[0-9]+}}.4h }452    %1 = load i64, ptr %p453    %2 = add i64 %1, %1454    %3 = bitcast i64 %2 to <4 x i16>455    %4 = add <4 x i16> %3, %3456    store <4 x i16> %4, ptr %q457    ret void458}459 460; CHECK-LABEL: test_v4i16_f64:461define void @test_v4i16_f64(ptr %p, ptr %q) {462; CHECK: ldr463; CHECK: rev64 v{{[0-9]+}}.4h464; CHECK: st1 { v{{[0-9]+}}.4h }465    %1 = load double, ptr %p466    %2 = fadd double %1, %1467    %3 = bitcast double %2 to <4 x i16>468    %4 = add <4 x i16> %3, %3469    store <4 x i16> %4, ptr %q470    ret void471}472 473; CHECK-LABEL: test_v4i16_v1i64:474define void @test_v4i16_v1i64(ptr %p, ptr %q) {475; CHECK: ldr476; CHECK: rev64 v{{[0-9]+}}.4h477; CHECK: st1 { v{{[0-9]+}}.4h }478    %1 = load <1 x i64>, ptr %p479    %2 = add <1 x i64> %1, %1480    %3 = bitcast <1 x i64> %2 to <4 x i16>481    %4 = add <4 x i16> %3, %3482    store <4 x i16> %4, ptr %q483    ret void484}485 486; CHECK-LABEL: test_v4i16_v2f32:487define void @test_v4i16_v2f32(ptr %p, ptr %q) {488; CHECK: ld1 { v{{[0-9]+}}.2s }489; CHECK: rev32 v{{[0-9]+}}.4h490; CHECK: st1 { v{{[0-9]+}}.4h }491    %1 = load <2 x float>, ptr %p492    %2 = fadd <2 x float> %1, %1493    %3 = bitcast <2 x float> %2 to <4 x i16>494    %4 = add <4 x i16> %3, %3495    store <4 x i16> %4, ptr %q496    ret void497}498 499; CHECK-LABEL: test_v4i16_v2i32:500define void @test_v4i16_v2i32(ptr %p, ptr %q) {501; CHECK: ld1 { v{{[0-9]+}}.2s }502; CHECK: rev32 v{{[0-9]+}}.4h503; CHECK: st1 { v{{[0-9]+}}.4h }504    %1 = load <2 x i32>, ptr %p505    %2 = add <2 x i32> %1, %1506    %3 = bitcast <2 x i32> %2 to <4 x i16>507    %4 = add <4 x i16> %3, %3508    store <4 x i16> %4, ptr %q509    ret void510}511 512; CHECK-LABEL: test_v4i16_v4f16:513define void @test_v4i16_v4f16(ptr %p, ptr %q) {514; CHECK: ld1 { v{{[0-9]+}}.4h }515; CHECK-NOT: rev516; CHECK: st1 { v{{[0-9]+}}.4h }517    %1 = load <4 x half>, ptr %p518    %2 = fadd <4 x half> %1, %1519    %3 = bitcast <4 x half> %2 to <4 x i16>520    %4 = add <4 x i16> %3, %3521    store <4 x i16> %4, ptr %q522    ret void523}524 525; CHECK-LABEL: test_v4i16_v8i8:526define void @test_v4i16_v8i8(ptr %p, ptr %q) {527; CHECK: ld1 { v{{[0-9]+}}.8b }528; CHECK: rev16 v{{[0-9]+}}.8b529; CHECK: st1 { v{{[0-9]+}}.4h }530    %1 = load <8 x i8>, ptr %p531    %2 = add <8 x i8> %1, %1532    %3 = bitcast <8 x i8> %2 to <4 x i16>533    %4 = add <4 x i16> %3, %3534    store <4 x i16> %4, ptr %q535    ret void536}537 538; CHECK-LABEL: test_v4f16_i64:539define void @test_v4f16_i64(ptr %p, ptr %q) {540; CHECK: ldr541; CHECK: rev64 v{{[0-9]+}}.4h542; CHECK: fadd543; CHECK-NOT: rev544; CHECK: st1 { v{{[0-9]+}}.4h }545    %1 = load i64, ptr %p546    %2 = add i64 %1, %1547    %3 = bitcast i64 %2 to <4 x half>548    %4 = fadd <4 x half> %3, %3549    store <4 x half> %4, ptr %q550    ret void551}552 553; CHECK-LABEL: test_v4f16_f64:554define void @test_v4f16_f64(ptr %p, ptr %q) {555; CHECK: ldr556; CHECK: rev64 v{{[0-9]+}}.4h557; CHECK: fadd558; CHECK-NOT: rev559; CHECK: st1 { v{{[0-9]+}}.4h }560    %1 = load double, ptr %p561    %2 = fadd double %1, %1562    %3 = bitcast double %2 to <4 x half>563    %4 = fadd <4 x half> %3, %3564    store <4 x half> %4, ptr %q565    ret void566}567 568; CHECK-LABEL: test_v4f16_v1i64:569define void @test_v4f16_v1i64(ptr %p, ptr %q) {570; CHECK: ldr571; CHECK: rev64 v{{[0-9]+}}.4h572; CHECK: fadd573; CHECK-NOT: rev574; CHECK: st1 { v{{[0-9]+}}.4h }575    %1 = load <1 x i64>, ptr %p576    %2 = add <1 x i64> %1, %1577    %3 = bitcast <1 x i64> %2 to <4 x half>578    %4 = fadd <4 x half> %3, %3579    store <4 x half> %4, ptr %q580    ret void581}582 583; CHECK-LABEL: test_v4f16_v2f32:584define void @test_v4f16_v2f32(ptr %p, ptr %q) {585; CHECK: ld1 { v{{[0-9]+}}.2s }586; CHECK: rev32 v{{[0-9]+}}.4h587; CHECK: fadd588; CHECK-NOT: rev589; CHECK: st1 { v{{[0-9]+}}.4h }590    %1 = load <2 x float>, ptr %p591    %2 = fadd <2 x float> %1, %1592    %3 = bitcast <2 x float> %2 to <4 x half>593    %4 = fadd <4 x half> %3, %3594    store <4 x half> %4, ptr %q595    ret void596}597 598; CHECK-LABEL: test_v4f16_v2i32:599define void @test_v4f16_v2i32(ptr %p, ptr %q) {600; CHECK: ld1 { v{{[0-9]+}}.2s }601; CHECK: rev32 v{{[0-9]+}}.4h602; CHECK: fadd603; CHECK-NOT: rev604; CHECK: st1 { v{{[0-9]+}}.4h }605    %1 = load <2 x i32>, ptr %p606    %2 = add <2 x i32> %1, %1607    %3 = bitcast <2 x i32> %2 to <4 x half>608    %4 = fadd <4 x half> %3, %3609    store <4 x half> %4, ptr %q610    ret void611}612 613; CHECK-LABEL: test_v4f16_v4i16:614define void @test_v4f16_v4i16(ptr %p, ptr %q) {615; CHECK: ld1 { v{{[0-9]+}}.4h }616; CHECK-NOT: rev617; CHECK: st1 { v{{[0-9]+}}.4h }618    %1 = load <4 x i16>, ptr %p619    %2 = add <4 x i16> %1, %1620    %3 = bitcast <4 x i16> %2 to <4 x half>621    %4 = fadd <4 x half> %3, %3622    store <4 x half> %4, ptr %q623    ret void624}625 626; CHECK-LABEL: test_v4f16_v8i8:627define void @test_v4f16_v8i8(ptr %p, ptr %q) {628; CHECK: ld1 { v{{[0-9]+}}.8b }629; CHECK: rev16 v{{[0-9]+}}.8b630; CHECK: fadd631; CHECK-NOT: rev632; CHECK: st1 { v{{[0-9]+}}.4h }633    %1 = load <8 x i8>, ptr %p634    %2 = add <8 x i8> %1, %1635    %3 = bitcast <8 x i8> %2 to <4 x half>636    %4 = fadd <4 x half> %3, %3637    store <4 x half> %4, ptr %q638    ret void639}640 641; CHECK-LABEL: test_v8i8_i64:642define void @test_v8i8_i64(ptr %p, ptr %q) {643; CHECK: ldr644; CHECK: rev64 v{{[0-9]+}}.8b645; CHECK: st1 { v{{[0-9]+}}.8b }646    %1 = load i64, ptr %p647    %2 = add i64 %1, %1648    %3 = bitcast i64 %2 to <8 x i8>649    %4 = add <8 x i8> %3, %3650    store <8 x i8> %4, ptr %q651    ret void652}653 654; CHECK-LABEL: test_v8i8_f64:655define void @test_v8i8_f64(ptr %p, ptr %q) {656; CHECK: ldr657; CHECK: rev64 v{{[0-9]+}}.8b658; CHECK: st1 { v{{[0-9]+}}.8b }659    %1 = load double, ptr %p660    %2 = fadd double %1, %1661    %3 = bitcast double %2 to <8 x i8>662    %4 = add <8 x i8> %3, %3663    store <8 x i8> %4, ptr %q664    ret void665}666 667; CHECK-LABEL: test_v8i8_v1i64:668define void @test_v8i8_v1i64(ptr %p, ptr %q) {669; CHECK: ldr670; CHECK: rev64 v{{[0-9]+}}.8b671; CHECK: st1 { v{{[0-9]+}}.8b }672    %1 = load <1 x i64>, ptr %p673    %2 = add <1 x i64> %1, %1674    %3 = bitcast <1 x i64> %2 to <8 x i8>675    %4 = add <8 x i8> %3, %3676    store <8 x i8> %4, ptr %q677    ret void678}679 680; CHECK-LABEL: test_v8i8_v2f32:681define void @test_v8i8_v2f32(ptr %p, ptr %q) {682; CHECK: ld1 { v{{[0-9]+}}.2s }683; CHECK: rev32 v{{[0-9]+}}.8b684; CHECK: st1 { v{{[0-9]+}}.8b }685    %1 = load <2 x float>, ptr %p686    %2 = fadd <2 x float> %1, %1687    %3 = bitcast <2 x float> %2 to <8 x i8>688    %4 = add <8 x i8> %3, %3689    store <8 x i8> %4, ptr %q690    ret void691}692 693; CHECK-LABEL: test_v8i8_v2i32:694define void @test_v8i8_v2i32(ptr %p, ptr %q) {695; CHECK: ld1 { v{{[0-9]+}}.2s }696; CHECK: rev32 v{{[0-9]+}}.8b697; CHECK: st1 { v{{[0-9]+}}.8b }698    %1 = load <2 x i32>, ptr %p699    %2 = add <2 x i32> %1, %1700    %3 = bitcast <2 x i32> %2 to <8 x i8>701    %4 = add <8 x i8> %3, %3702    store <8 x i8> %4, ptr %q703    ret void704}705 706; CHECK-LABEL: test_v8i8_v4i16:707define void @test_v8i8_v4i16(ptr %p, ptr %q) {708; CHECK: ld1 { v{{[0-9]+}}.4h }709; CHECK: rev16 v{{[0-9]+}}.8b710; CHECK: st1 { v{{[0-9]+}}.8b }711    %1 = load <4 x i16>, ptr %p712    %2 = add <4 x i16> %1, %1713    %3 = bitcast <4 x i16> %2 to <8 x i8>714    %4 = add <8 x i8> %3, %3715    store <8 x i8> %4, ptr %q716    ret void717}718 719; CHECK-LABEL: test_f128_v2f64:720define void @test_f128_v2f64(ptr %p, ptr %q) {721; CHECK: ld1 { v{{[0-9]+}}.2d }722; CHECK: ext723; CHECK: str724    %1 = load <2 x double>, ptr %p725    %2 = fadd <2 x double> %1, %1726    %3 = bitcast <2 x double> %2 to fp128727    %4 = fadd fp128 %3, %3728    store fp128 %4, ptr %q729    ret void730}731 732; CHECK-LABEL: test_f128_v2i64:733define void @test_f128_v2i64(ptr %p, ptr %q) {734; CHECK: ld1 { v{{[0-9]+}}.2d }735; CHECK: ext736; CHECK: str737    %1 = load <2 x i64>, ptr %p738    %2 = add <2 x i64> %1, %1739    %3 = bitcast <2 x i64> %2 to fp128740    %4 = fadd fp128 %3, %3741    store fp128 %4, ptr %q742    ret void743}744 745; CHECK-LABEL: test_f128_v4f32:746define void @test_f128_v4f32(ptr %p, ptr %q) {747; CHECK: ld1 { v{{[0-9]+}}.4s }748; CHECK-NOT: rev749; CHECK: fadd750; CHECK: rev64 v{{[0-9]+}}.4s751; CHECK: ext752; CHECK: str q753    %1 = load <4 x float>, ptr %p754    %2 = fadd <4 x float> %1, %1755    %3 = bitcast <4 x float> %2 to fp128756    %4 = fadd fp128 %3, %3757    store fp128 %4, ptr %q758    ret void759}760 761; CHECK-LABEL: test_f128_v4i32:762define void @test_f128_v4i32(ptr %p, ptr %q) {763; CHECK: ld1 { v{{[0-9]+}}.4s }764; CHECK: rev64 v{{[0-9]+}}.4s765; CHECK: ext766; CHECK: str767    %1 = load <4 x i32>, ptr %p768    %2 = add <4 x i32> %1, %1769    %3 = bitcast <4 x i32> %2 to fp128770    %4 = fadd fp128 %3, %3771    store fp128 %4, ptr %q772    ret void773}774 775; CHECK-LABEL: test_f128_v8i16:776define void @test_f128_v8i16(ptr %p, ptr %q) {777; CHECK: ld1 { v{{[0-9]+}}.8h }778; CHECK: rev64 v{{[0-9]+}}.8h779; CHECK: ext780; CHECK: str781    %1 = load <8 x i16>, ptr %p782    %2 = add <8 x i16> %1, %1783    %3 = bitcast <8 x i16> %2 to fp128784    %4 = fadd fp128 %3, %3785    store fp128 %4, ptr %q786    ret void787}788 789; CHECK-LABEL: test_f128_v16i8:790define void @test_f128_v16i8(ptr %p, ptr %q) {791; CHECK: ld1 { v{{[0-9]+}}.16b }792; CHECK: ext793; CHECK: str q794    %1 = load <16 x i8>, ptr %p795    %2 = add <16 x i8> %1, %1796    %3 = bitcast <16 x i8> %2 to fp128797    %4 = fadd fp128 %3, %3798    store fp128 %4, ptr %q799    ret void800}801 802; CHECK-LABEL: test_v2f64_f128:803define void @test_v2f64_f128(ptr %p, ptr %q) {804; CHECK: ldr805; CHECK: ext806; CHECK: st1 { v{{[0-9]+}}.2d }807    %1 = load fp128, ptr %p808    %2 = fadd fp128 %1, %1809    %3 = bitcast fp128 %2 to <2 x double>810    %4 = fadd <2 x double> %3, %3811    store <2 x double> %4, ptr %q812    ret void813}814 815; CHECK-LABEL: test_v2f64_v2i64:816define void @test_v2f64_v2i64(ptr %p, ptr %q) {817; CHECK: ld1 { v{{[0-9]+}}.2d }818; CHECK: st1 { v{{[0-9]+}}.2d }819    %1 = load <2 x i64>, ptr %p820    %2 = add <2 x i64> %1, %1821    %3 = bitcast <2 x i64> %2 to <2 x double>822    %4 = fadd <2 x double> %3, %3823    store <2 x double> %4, ptr %q824    ret void825}826 827; CHECK-LABEL: test_v2f64_v4f32:828define void @test_v2f64_v4f32(ptr %p, ptr %q) {829; CHECK: ld1 { v{{[0-9]+}}.4s }830; CHECK-NOT: rev831; CHECK: fadd832; CHECK: rev64 v{{[0-9]+}}.4s833; CHECK: st1 { v{{[0-9]+}}.2d }834    %1 = load <4 x float>, ptr %p835    %2 = fadd <4 x float> %1, %1836    %3 = bitcast <4 x float> %2 to <2 x double>837    %4 = fadd <2 x double> %3, %3838    store <2 x double> %4, ptr %q839    ret void840}841 842; CHECK-LABEL: test_v2f64_v4i32:843define void @test_v2f64_v4i32(ptr %p, ptr %q) {844; CHECK: ld1 { v{{[0-9]+}}.4s }845; CHECK: rev64 v{{[0-9]+}}.4s846; CHECK: st1 { v{{[0-9]+}}.2d }847    %1 = load <4 x i32>, ptr %p848    %2 = add <4 x i32> %1, %1849    %3 = bitcast <4 x i32> %2 to <2 x double>850    %4 = fadd <2 x double> %3, %3851    store <2 x double> %4, ptr %q852    ret void853}854 855; CHECK-LABEL: test_v2f64_v8i16:856define void @test_v2f64_v8i16(ptr %p, ptr %q) {857; CHECK: ld1 { v{{[0-9]+}}.8h }858; CHECK: rev64 v{{[0-9]+}}.8h859; CHECK: st1 { v{{[0-9]+}}.2d }860    %1 = load <8 x i16>, ptr %p861    %2 = add <8 x i16> %1, %1862    %3 = bitcast <8 x i16> %2 to <2 x double>863    %4 = fadd <2 x double> %3, %3864    store <2 x double> %4, ptr %q865    ret void866}867 868; CHECK-LABEL: test_v2f64_v16i8:869define void @test_v2f64_v16i8(ptr %p, ptr %q) {870; CHECK: ld1 { v{{[0-9]+}}.16b }871; CHECK: rev64 v{{[0-9]+}}.16b872; CHECK: st1 { v{{[0-9]+}}.2d }873    %1 = load <16 x i8>, ptr %p874    %2 = add <16 x i8> %1, %1875    %3 = bitcast <16 x i8> %2 to <2 x double>876    %4 = fadd <2 x double> %3, %3877    store <2 x double> %4, ptr %q878    ret void879}880 881; CHECK-LABEL: test_v2i64_f128:882define void @test_v2i64_f128(ptr %p, ptr %q) {883; CHECK: ldr884; CHECK: ext885; CHECK: st1 { v{{[0-9]+}}.2d }886    %1 = load fp128, ptr %p887    %2 = fadd fp128 %1, %1888    %3 = bitcast fp128 %2 to <2 x i64>889    %4 = add <2 x i64> %3, %3890    store <2 x i64> %4, ptr %q891    ret void892}893 894; CHECK-LABEL: test_v2i64_v2f64:895define void @test_v2i64_v2f64(ptr %p, ptr %q) {896; CHECK: ld1 { v{{[0-9]+}}.2d }897; CHECK: st1 { v{{[0-9]+}}.2d }898    %1 = load <2 x double>, ptr %p899    %2 = fadd <2 x double> %1, %1900    %3 = bitcast <2 x double> %2 to <2 x i64>901    %4 = add <2 x i64> %3, %3902    store <2 x i64> %4, ptr %q903    ret void904}905 906; CHECK-LABEL: test_v2i64_v4f32:907define void @test_v2i64_v4f32(ptr %p, ptr %q) {908; CHECK: ld1 { v{{[0-9]+}}.4s }909; CHECK-NOT: rev910; CHECK: fadd911; CHECK: rev64 v{{[0-9]+}}.4s912; CHECK: add913; CHECK: st1 { v{{[0-9]+}}.2d }914    %1 = load <4 x float>, ptr %p915    %2 = fadd <4 x float> %1, %1916    %3 = bitcast <4 x float> %2 to <2 x i64>917    %4 = add <2 x i64> %3, %3918    store <2 x i64> %4, ptr %q919    ret void920}921 922; CHECK-LABEL: test_v2i64_v4i32:923define void @test_v2i64_v4i32(ptr %p, ptr %q) {924; CHECK: ld1 { v{{[0-9]+}}.4s }925; CHECK: rev64 v{{[0-9]+}}.4s926; CHECK: st1 { v{{[0-9]+}}.2d }927    %1 = load <4 x i32>, ptr %p928    %2 = add <4 x i32> %1, %1929    %3 = bitcast <4 x i32> %2 to <2 x i64>930    %4 = add <2 x i64> %3, %3931    store <2 x i64> %4, ptr %q932    ret void933}934 935; CHECK-LABEL: test_v2i64_v8i16:936define void @test_v2i64_v8i16(ptr %p, ptr %q) {937; CHECK: ld1 { v{{[0-9]+}}.8h }938; CHECK: rev64 v{{[0-9]+}}.8h939; CHECK: st1 { v{{[0-9]+}}.2d }940    %1 = load <8 x i16>, ptr %p941    %2 = add <8 x i16> %1, %1942    %3 = bitcast <8 x i16> %2 to <2 x i64>943    %4 = add <2 x i64> %3, %3944    store <2 x i64> %4, ptr %q945    ret void946}947 948; CHECK-LABEL: test_v2i64_v16i8:949define void @test_v2i64_v16i8(ptr %p, ptr %q) {950; CHECK: ld1 { v{{[0-9]+}}.16b }951; CHECK: rev64 v{{[0-9]+}}.16b952; CHECK: st1 { v{{[0-9]+}}.2d }953    %1 = load <16 x i8>, ptr %p954    %2 = add <16 x i8> %1, %1955    %3 = bitcast <16 x i8> %2 to <2 x i64>956    %4 = add <2 x i64> %3, %3957    store <2 x i64> %4, ptr %q958    ret void959}960 961; CHECK-LABEL: test_v4f32_f128:962define void @test_v4f32_f128(ptr %p, ptr %q) {963; CHECK: ldr q964; CHECK: rev64 v{{[0-9]+}}.4s965; CHECK: ext966; CHECK-NOT: rev967; CHECK: st1 { v{{[0-9]+}}.4s }968    %1 = load fp128, ptr %p969    %2 = fadd fp128 %1, %1970    %3 = bitcast fp128 %2 to <4 x float>971    %4 = fadd <4 x float> %3, %3972    store <4 x float> %4, ptr %q973    ret void974}975 976; CHECK-LABEL: test_v4f32_v2f64:977define void @test_v4f32_v2f64(ptr %p, ptr %q) {978; CHECK: ld1 { v{{[0-9]+}}.2d }979; CHECK: rev64 v{{[0-9]+}}.4s980; CHECK-NOT: rev981; CHECK: st1 { v{{[0-9]+}}.4s }982    %1 = load <2 x double>, ptr %p983    %2 = fadd <2 x double> %1, %1984    %3 = bitcast <2 x double> %2 to <4 x float>985    %4 = fadd <4 x float> %3, %3986    store <4 x float> %4, ptr %q987    ret void988}989 990; CHECK-LABEL: test_v4f32_v2i64:991define void @test_v4f32_v2i64(ptr %p, ptr %q) {992; CHECK: ld1 { v{{[0-9]+}}.2d }993; CHECK: rev64 v{{[0-9]+}}.4s994; CHECK: fadd995; CHECK-NOT: rev996; CHECK: st1 { v{{[0-9]+}}.4s }997    %1 = load <2 x i64>, ptr %p998    %2 = add <2 x i64> %1, %1999    %3 = bitcast <2 x i64> %2 to <4 x float>1000    %4 = fadd <4 x float> %3, %31001    store <4 x float> %4, ptr %q1002    ret void1003}1004 1005; CHECK-LABEL: test_v4f32_v4i32:1006define void @test_v4f32_v4i32(ptr %p, ptr %q) {1007; CHECK: ld1 { v{{[0-9]+}}.4s }1008; CHECK-NOT: rev1009; CHECK: st1 { v{{[0-9]+}}.4s }1010    %1 = load <4 x i32>, ptr %p1011    %2 = add <4 x i32> %1, %11012    %3 = bitcast <4 x i32> %2 to <4 x float>1013    %4 = fadd <4 x float> %3, %31014    store <4 x float> %4, ptr %q1015    ret void1016}1017 1018; CHECK-LABEL: test_v4f32_v8i16:1019define void @test_v4f32_v8i16(ptr %p, ptr %q) {1020; CHECK: ld1 { v{{[0-9]+}}.8h }1021; CHECK: rev32 v{{[0-9]+}}.8h1022; CHECK-NOT: rev1023; CHECK: st1 { v{{[0-9]+}}.4s }1024    %1 = load <8 x i16>, ptr %p1025    %2 = add <8 x i16> %1, %11026    %3 = bitcast <8 x i16> %2 to <4 x float>1027    %4 = fadd <4 x float> %3, %31028    store <4 x float> %4, ptr %q1029    ret void1030}1031 1032; CHECK-LABEL: test_v4f32_v16i8:1033define void @test_v4f32_v16i8(ptr %p, ptr %q) {1034; CHECK: ld1 { v{{[0-9]+}}.16b }1035; CHECK: rev32 v{{[0-9]+}}.16b1036; CHECK-NOT: rev1037; CHECK: st1 { v{{[0-9]+}}.4s }1038    %1 = load <16 x i8>, ptr %p1039    %2 = add <16 x i8> %1, %11040    %3 = bitcast <16 x i8> %2 to <4 x float>1041    %4 = fadd <4 x float> %3, %31042    store <4 x float> %4, ptr %q1043    ret void1044}1045 1046; CHECK-LABEL: test_v4i32_f128:1047define void @test_v4i32_f128(ptr %p, ptr %q) {1048; CHECK: ldr1049; CHECK: rev64 v{{[0-9]+}}.4s1050; CHECK: ext1051; CHECK: st1 { v{{[0-9]+}}.4s }1052    %1 = load fp128, ptr %p1053    %2 = fadd fp128 %1, %11054    %3 = bitcast fp128 %2 to <4 x i32>1055    %4 = add <4 x i32> %3, %31056    store <4 x i32> %4, ptr %q1057    ret void1058}1059 1060; CHECK-LABEL: test_v4i32_v2f64:1061define void @test_v4i32_v2f64(ptr %p, ptr %q) {1062; CHECK: ld1 { v{{[0-9]+}}.2d }1063; CHECK: rev64 v{{[0-9]+}}.4s1064; CHECK: st1 { v{{[0-9]+}}.4s }1065    %1 = load <2 x double>, ptr %p1066    %2 = fadd <2 x double> %1, %11067    %3 = bitcast <2 x double> %2 to <4 x i32>1068    %4 = add <4 x i32> %3, %31069    store <4 x i32> %4, ptr %q1070    ret void1071}1072 1073; CHECK-LABEL: test_v4i32_v2i64:1074define void @test_v4i32_v2i64(ptr %p, ptr %q) {1075; CHECK: ld1 { v{{[0-9]+}}.2d }1076; CHECK: rev64 v{{[0-9]+}}.4s1077; CHECK: st1 { v{{[0-9]+}}.4s }1078    %1 = load <2 x i64>, ptr %p1079    %2 = add <2 x i64> %1, %11080    %3 = bitcast <2 x i64> %2 to <4 x i32>1081    %4 = add <4 x i32> %3, %31082    store <4 x i32> %4, ptr %q1083    ret void1084}1085 1086; CHECK-LABEL: test_v4i32_v4f32:1087define void @test_v4i32_v4f32(ptr %p, ptr %q) {1088; CHECK: ld1 { v{{[0-9]+}}.4s }1089; CHECK-NOT: rev1090; CHECK: st1 { v{{[0-9]+}}.4s }1091    %1 = load <4 x float>, ptr %p1092    %2 = fadd <4 x float> %1, %11093    %3 = bitcast <4 x float> %2 to <4 x i32>1094    %4 = add <4 x i32> %3, %31095    store <4 x i32> %4, ptr %q1096    ret void1097}1098 1099; CHECK-LABEL: test_v4i32_v8i16:1100define void @test_v4i32_v8i16(ptr %p, ptr %q) {1101; CHECK: ld1 { v{{[0-9]+}}.8h }1102; CHECK: rev32 v{{[0-9]+}}.8h1103; CHECK: st1 { v{{[0-9]+}}.4s }1104    %1 = load <8 x i16>, ptr %p1105    %2 = add <8 x i16> %1, %11106    %3 = bitcast <8 x i16> %2 to <4 x i32>1107    %4 = add <4 x i32> %3, %31108    store <4 x i32> %4, ptr %q1109    ret void1110}1111 1112; CHECK-LABEL: test_v4i32_v16i8:1113define void @test_v4i32_v16i8(ptr %p, ptr %q) {1114; CHECK: ld1 { v{{[0-9]+}}.16b }1115; CHECK: rev32 v{{[0-9]+}}.16b1116; CHECK: st1 { v{{[0-9]+}}.4s }1117    %1 = load <16 x i8>, ptr %p1118    %2 = add <16 x i8> %1, %11119    %3 = bitcast <16 x i8> %2 to <4 x i32>1120    %4 = add <4 x i32> %3, %31121    store <4 x i32> %4, ptr %q1122    ret void1123}1124 1125; CHECK-LABEL: test_v8i16_f128:1126define void @test_v8i16_f128(ptr %p, ptr %q) {1127; CHECK: ldr1128; CHECK: rev64 v{{[0-9]+}}.8h1129; CHECK: ext1130; CHECK: st1 { v{{[0-9]+}}.8h }1131    %1 = load fp128, ptr %p1132    %2 = fadd fp128 %1, %11133    %3 = bitcast fp128 %2 to <8 x i16>1134    %4 = add <8 x i16> %3, %31135    store <8 x i16> %4, ptr %q1136    ret void1137}1138 1139; CHECK-LABEL: test_v8i16_v2f64:1140define void @test_v8i16_v2f64(ptr %p, ptr %q) {1141; CHECK: ld1 { v{{[0-9]+}}.2d }1142; CHECK: rev64 v{{[0-9]+}}.8h1143; CHECK: st1 { v{{[0-9]+}}.8h }1144    %1 = load <2 x double>, ptr %p1145    %2 = fadd <2 x double> %1, %11146    %3 = bitcast <2 x double> %2 to <8 x i16>1147    %4 = add <8 x i16> %3, %31148    store <8 x i16> %4, ptr %q1149    ret void1150}1151 1152; CHECK-LABEL: test_v8i16_v2i64:1153define void @test_v8i16_v2i64(ptr %p, ptr %q) {1154; CHECK: ld1 { v{{[0-9]+}}.2d }1155; CHECK: rev64 v{{[0-9]+}}.8h1156; CHECK: st1 { v{{[0-9]+}}.8h }1157    %1 = load <2 x i64>, ptr %p1158    %2 = add <2 x i64> %1, %11159    %3 = bitcast <2 x i64> %2 to <8 x i16>1160    %4 = add <8 x i16> %3, %31161    store <8 x i16> %4, ptr %q1162    ret void1163}1164 1165; CHECK-LABEL: test_v8i16_v4f32:1166define void @test_v8i16_v4f32(ptr %p, ptr %q) {1167; CHECK: ld1 { v{{[0-9]+}}.4s }1168; CHECK: rev32 v{{[0-9]+}}.8h1169; CHECK-NOT: rev1170; CHECK: st1 { v{{[0-9]+}}.8h }1171    %1 = load <4 x float>, ptr %p1172    %2 = fadd <4 x float> %1, %11173    %3 = bitcast <4 x float> %2 to <8 x i16>1174    %4 = add <8 x i16> %3, %31175    store <8 x i16> %4, ptr %q1176    ret void1177}1178 1179; CHECK-LABEL: test_v8i16_v4i32:1180define void @test_v8i16_v4i32(ptr %p, ptr %q) {1181; CHECK: ld1 { v{{[0-9]+}}.4s }1182; CHECK: rev32 v{{[0-9]+}}.8h1183; CHECK: st1 { v{{[0-9]+}}.8h }1184    %1 = load <4 x i32>, ptr %p1185    %2 = add <4 x i32> %1, %11186    %3 = bitcast <4 x i32> %2 to <8 x i16>1187    %4 = add <8 x i16> %3, %31188    store <8 x i16> %4, ptr %q1189    ret void1190}1191 1192; CHECK-LABEL: test_v8i16_v8f16:1193define void @test_v8i16_v8f16(ptr %p, ptr %q) {1194; CHECK: ld1 { v{{[0-9]+}}.8h }1195; CHECK-NOT: rev1196; CHECK: st1 { v{{[0-9]+}}.8h }1197    %1 = load <8 x half>, ptr %p1198    %2 = fadd <8 x half> %1, %11199    %3 = bitcast <8 x half> %2 to <8 x i16>1200    %4 = add <8 x i16> %3, %31201    store <8 x i16> %4, ptr %q1202    ret void1203}1204 1205; CHECK-LABEL: test_v8i16_v16i8:1206define void @test_v8i16_v16i8(ptr %p, ptr %q) {1207; CHECK: ld1 { v{{[0-9]+}}.16b }1208; CHECK: rev16 v{{[0-9]+}}.16b1209; CHECK: st1 { v{{[0-9]+}}.8h }1210    %1 = load <16 x i8>, ptr %p1211    %2 = add <16 x i8> %1, %11212    %3 = bitcast <16 x i8> %2 to <8 x i16>1213    %4 = add <8 x i16> %3, %31214    store <8 x i16> %4, ptr %q1215    ret void1216}1217 1218; CHECK-LABEL: test_v16i8_f128:1219define void @test_v16i8_f128(ptr %p, ptr %q) {1220; CHECK: ldr q1221; CHECK: rev64 v{{[0-9]+}}.16b1222; CHECK: ext1223; CHECK: st1 { v{{[0-9]+}}.16b }1224    %1 = load fp128, ptr %p1225    %2 = fadd fp128 %1, %11226    %3 = bitcast fp128 %2 to <16 x i8>1227    %4 = add <16 x i8> %3, %31228    store <16 x i8> %4, ptr %q1229    ret void1230}1231 1232; CHECK-LABEL: test_v16i8_v2f64:1233define void @test_v16i8_v2f64(ptr %p, ptr %q) {1234; CHECK: ld1 { v{{[0-9]+}}.2d }1235; CHECK: rev64 v{{[0-9]+}}.16b1236; CHECK: st1 { v{{[0-9]+}}.16b }1237    %1 = load <2 x double>, ptr %p1238    %2 = fadd <2 x double> %1, %11239    %3 = bitcast <2 x double> %2 to <16 x i8>1240    %4 = add <16 x i8> %3, %31241    store <16 x i8> %4, ptr %q1242    ret void1243}1244 1245; CHECK-LABEL: test_v16i8_v2i64:1246define void @test_v16i8_v2i64(ptr %p, ptr %q) {1247; CHECK: ld1 { v{{[0-9]+}}.2d }1248; CHECK: rev64 v{{[0-9]+}}.16b1249; CHECK: st1 { v{{[0-9]+}}.16b }1250    %1 = load <2 x i64>, ptr %p1251    %2 = add <2 x i64> %1, %11252    %3 = bitcast <2 x i64> %2 to <16 x i8>1253    %4 = add <16 x i8> %3, %31254    store <16 x i8> %4, ptr %q1255    ret void1256}1257 1258; CHECK-LABEL: test_v16i8_v4f32:1259define void @test_v16i8_v4f32(ptr %p, ptr %q) {1260; CHECK: ld1 { v{{[0-9]+}}.4s }1261; CHECK: rev32 v{{[0-9]+}}.16b1262; CHECK-NOT: rev1263; CHECK: st1 { v{{[0-9]+}}.16b }1264    %1 = load <4 x float>, ptr %p1265    %2 = fadd <4 x float> %1, %11266    %3 = bitcast <4 x float> %2 to <16 x i8>1267    %4 = add <16 x i8> %3, %31268    store <16 x i8> %4, ptr %q1269    ret void1270}1271 1272; CHECK-LABEL: test_v16i8_v4i32:1273define void @test_v16i8_v4i32(ptr %p, ptr %q) {1274; CHECK: ld1 { v{{[0-9]+}}.4s }1275; CHECK: rev32 v{{[0-9]+}}.16b1276; CHECK: st1 { v{{[0-9]+}}.16b }1277    %1 = load <4 x i32>, ptr %p1278    %2 = add <4 x i32> %1, %11279    %3 = bitcast <4 x i32> %2 to <16 x i8>1280    %4 = add <16 x i8> %3, %31281    store <16 x i8> %4, ptr %q1282    ret void1283}1284 1285; CHECK-LABEL: test_v16i8_v8f16:1286define void @test_v16i8_v8f16(ptr %p, ptr %q) {1287; CHECK: ld1 { v{{[0-9]+}}.8h }1288; CHECK: rev16 v{{[0-9]+}}.16b1289; CHECK-NOT: rev1290; CHECK: st1 { v{{[0-9]+}}.16b }1291    %1 = load <8 x half>, ptr %p1292    %2 = fadd <8 x half> %1, %11293    %3 = bitcast <8 x half> %2 to <16 x i8>1294    %4 = add <16 x i8> %3, %31295    store <16 x i8> %4, ptr %q1296    ret void1297}1298 1299; CHECK-LABEL: test_v16i8_v8i16:1300define void @test_v16i8_v8i16(ptr %p, ptr %q) {1301; CHECK: ld1 { v{{[0-9]+}}.8h }1302; CHECK: rev16 v{{[0-9]+}}.16b1303; CHECK: st1 { v{{[0-9]+}}.16b }1304    %1 = load <8 x i16>, ptr %p1305    %2 = add <8 x i16> %1, %11306    %3 = bitcast <8 x i16> %2 to <16 x i8>1307    %4 = add <16 x i8> %3, %31308    store <16 x i8> %4, ptr %q1309    ret void1310}1311 1312; CHECK-LABEL: test_v4f16_struct:1313%struct.struct1 = type { half, half, half, half }1314define %struct.struct1 @test_v4f16_struct(ptr %ret) {1315entry:1316; CHECK: ld1 { {{v[0-9]+}}.4h }1317; CHECK-NOT: rev1318  %0 = load <4 x half>, ptr %ret, align 21319  %1 = extractelement <4 x half> %0, i32 01320  %.fca.0.insert = insertvalue %struct.struct1 undef, half %1, 01321  ret %struct.struct1 %.fca.0.insert1322}1323