brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · e4eda2e Raw
295 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible  < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8define void @bitcast_v4i8(ptr %a, ptr %b) {9; CHECK-LABEL: bitcast_v4i8:10; CHECK:       // %bb.0:11; CHECK-NEXT:    ptrue p0.h, vl412; CHECK-NEXT:    ld1b { z0.h }, p0/z, [x0]13; CHECK-NEXT:    st1b { z0.h }, p0, [x1]14; CHECK-NEXT:    ret15;16; NONEON-NOSVE-LABEL: bitcast_v4i8:17; NONEON-NOSVE:       // %bb.0:18; NONEON-NOSVE-NEXT:    ldrb w8, [x0]19; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #1]20; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #2]21; NONEON-NOSVE-NEXT:    ldrb w11, [x0, #3]22; NONEON-NOSVE-NEXT:    strb w11, [x1, #3]23; NONEON-NOSVE-NEXT:    strb w10, [x1, #2]24; NONEON-NOSVE-NEXT:    strb w9, [x1, #1]25; NONEON-NOSVE-NEXT:    strb w8, [x1]26; NONEON-NOSVE-NEXT:    ret27  %load = load volatile <4 x i8>, ptr %a28  %cast = bitcast <4 x i8> %load to <4 x i8>29  store volatile <4 x i8> %cast, ptr %b30  ret void31}32 33define void @bitcast_v8i8(ptr %a, ptr %b) {34; CHECK-LABEL: bitcast_v8i8:35; CHECK:       // %bb.0:36; CHECK-NEXT:    ldr d0, [x0]37; CHECK-NEXT:    str d0, [x1]38; CHECK-NEXT:    ret39;40; NONEON-NOSVE-LABEL: bitcast_v8i8:41; NONEON-NOSVE:       // %bb.0:42; NONEON-NOSVE-NEXT:    ldr d0, [x0]43; NONEON-NOSVE-NEXT:    str d0, [x1]44; NONEON-NOSVE-NEXT:    ret45  %load = load volatile <8 x i8>, ptr %a46  %cast = bitcast <8 x i8> %load to <8 x i8>47  store volatile <8 x i8> %cast, ptr %b48  ret void49}50 51define void @bitcast_v16i8(ptr %a, ptr %b) {52; CHECK-LABEL: bitcast_v16i8:53; CHECK:       // %bb.0:54; CHECK-NEXT:    ldr q0, [x0]55; CHECK-NEXT:    str q0, [x1]56; CHECK-NEXT:    ret57;58; NONEON-NOSVE-LABEL: bitcast_v16i8:59; NONEON-NOSVE:       // %bb.0:60; NONEON-NOSVE-NEXT:    ldr q0, [x0]61; NONEON-NOSVE-NEXT:    str q0, [x1]62; NONEON-NOSVE-NEXT:    ret63  %load = load volatile <16 x i8>, ptr %a64  %cast = bitcast <16 x i8> %load to <16 x i8>65  store volatile <16 x i8> %cast, ptr %b66  ret void67}68 69define void @bitcast_v32i8(ptr %a, ptr %b) {70; CHECK-LABEL: bitcast_v32i8:71; CHECK:       // %bb.0:72; CHECK-NEXT:    ldr q0, [x0]73; CHECK-NEXT:    ldr q1, [x0, #16]74; CHECK-NEXT:    str q1, [x1, #16]75; CHECK-NEXT:    str q0, [x1]76; CHECK-NEXT:    ret77;78; NONEON-NOSVE-LABEL: bitcast_v32i8:79; NONEON-NOSVE:       // %bb.0:80; NONEON-NOSVE-NEXT:    ldr q0, [x0]81; NONEON-NOSVE-NEXT:    ldr q1, [x0, #16]82; NONEON-NOSVE-NEXT:    str q1, [x1, #16]83; NONEON-NOSVE-NEXT:    str q0, [x1]84; NONEON-NOSVE-NEXT:    ret85  %load = load volatile <32 x i8>, ptr %a86  %cast = bitcast <32 x i8> %load to <32 x i8>87  store volatile <32 x i8> %cast, ptr %b88  ret void89}90 91define void @bitcast_v2i16(ptr %a, ptr %b) {92; CHECK-LABEL: bitcast_v2i16:93; CHECK:       // %bb.0:94; CHECK-NEXT:    ptrue p0.s, vl295; CHECK-NEXT:    ld1h { z0.s }, p0/z, [x0]96; CHECK-NEXT:    mov z1.s, z0.s[1]97; CHECK-NEXT:    zip1 z0.h, z0.h, z1.h98; CHECK-NEXT:    str s0, [x1]99; CHECK-NEXT:    ret100;101; NONEON-NOSVE-LABEL: bitcast_v2i16:102; NONEON-NOSVE:       // %bb.0:103; NONEON-NOSVE-NEXT:    sub sp, sp, #16104; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 16105; NONEON-NOSVE-NEXT:    ldrh w8, [x0]106; NONEON-NOSVE-NEXT:    ldrh w9, [x0, #2]107; NONEON-NOSVE-NEXT:    strh w9, [sp, #2]108; NONEON-NOSVE-NEXT:    strh w8, [sp]109; NONEON-NOSVE-NEXT:    ldr d0, [sp]110; NONEON-NOSVE-NEXT:    str d0, [sp, #8]111; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]112; NONEON-NOSVE-NEXT:    str w8, [x1]113; NONEON-NOSVE-NEXT:    add sp, sp, #16114; NONEON-NOSVE-NEXT:    ret115  %load = load volatile <2 x i16>, ptr %a116  %cast = bitcast <2 x i16> %load to <2 x half>117  store volatile <2 x half> %cast, ptr %b118  ret void119}120 121define void @bitcast_v4i16(ptr %a, ptr %b) {122; CHECK-LABEL: bitcast_v4i16:123; CHECK:       // %bb.0:124; CHECK-NEXT:    ldr d0, [x0]125; CHECK-NEXT:    str d0, [x1]126; CHECK-NEXT:    ret127;128; NONEON-NOSVE-LABEL: bitcast_v4i16:129; NONEON-NOSVE:       // %bb.0:130; NONEON-NOSVE-NEXT:    ldr d0, [x0]131; NONEON-NOSVE-NEXT:    str d0, [x1]132; NONEON-NOSVE-NEXT:    ret133  %load = load volatile <4 x i16>, ptr %a134  %cast = bitcast <4 x i16> %load to <4 x half>135  store volatile <4 x half> %cast, ptr %b136  ret void137}138 139define void @bitcast_v8i16(ptr %a, ptr %b) {140; CHECK-LABEL: bitcast_v8i16:141; CHECK:       // %bb.0:142; CHECK-NEXT:    ldr q0, [x0]143; CHECK-NEXT:    str q0, [x1]144; CHECK-NEXT:    ret145;146; NONEON-NOSVE-LABEL: bitcast_v8i16:147; NONEON-NOSVE:       // %bb.0:148; NONEON-NOSVE-NEXT:    ldr q0, [x0]149; NONEON-NOSVE-NEXT:    str q0, [x1]150; NONEON-NOSVE-NEXT:    ret151  %load = load volatile <8 x i16>, ptr %a152  %cast = bitcast <8 x i16> %load to <8 x half>153  store volatile <8 x half> %cast, ptr %b154  ret void155}156 157define void @bitcast_v16i16(ptr %a, ptr %b) {158; CHECK-LABEL: bitcast_v16i16:159; CHECK:       // %bb.0:160; CHECK-NEXT:    ldr q0, [x0]161; CHECK-NEXT:    ldr q1, [x0, #16]162; CHECK-NEXT:    str q1, [x1, #16]163; CHECK-NEXT:    str q0, [x1]164; CHECK-NEXT:    ret165;166; NONEON-NOSVE-LABEL: bitcast_v16i16:167; NONEON-NOSVE:       // %bb.0:168; NONEON-NOSVE-NEXT:    ldr q0, [x0]169; NONEON-NOSVE-NEXT:    ldr q1, [x0, #16]170; NONEON-NOSVE-NEXT:    str q1, [x1, #16]171; NONEON-NOSVE-NEXT:    str q0, [x1]172; NONEON-NOSVE-NEXT:    ret173  %load = load volatile <16 x i16>, ptr %a174  %cast = bitcast <16 x i16> %load to <16 x half>175  store volatile <16 x half> %cast, ptr %b176  ret void177}178 179define void @bitcast_v2i32(ptr %a, ptr %b) {180; CHECK-LABEL: bitcast_v2i32:181; CHECK:       // %bb.0:182; CHECK-NEXT:    ldr d0, [x0]183; CHECK-NEXT:    str d0, [x1]184; CHECK-NEXT:    ret185;186; NONEON-NOSVE-LABEL: bitcast_v2i32:187; NONEON-NOSVE:       // %bb.0:188; NONEON-NOSVE-NEXT:    ldr d0, [x0]189; NONEON-NOSVE-NEXT:    str d0, [x1]190; NONEON-NOSVE-NEXT:    ret191  %load = load volatile <2 x i32>, ptr %a192  %cast = bitcast <2 x i32> %load to <2 x float>193  store volatile <2 x float> %cast, ptr %b194  ret void195}196 197define void @bitcast_v4i32(ptr %a, ptr %b) {198; CHECK-LABEL: bitcast_v4i32:199; CHECK:       // %bb.0:200; CHECK-NEXT:    ldr q0, [x0]201; CHECK-NEXT:    str q0, [x1]202; CHECK-NEXT:    ret203;204; NONEON-NOSVE-LABEL: bitcast_v4i32:205; NONEON-NOSVE:       // %bb.0:206; NONEON-NOSVE-NEXT:    ldr q0, [x0]207; NONEON-NOSVE-NEXT:    str q0, [x1]208; NONEON-NOSVE-NEXT:    ret209  %load = load volatile <4 x i32>, ptr %a210  %cast = bitcast <4 x i32> %load to <4 x float>211  store volatile <4 x float> %cast, ptr %b212  ret void213}214 215define void @bitcast_v8i32(ptr %a, ptr %b) {216; CHECK-LABEL: bitcast_v8i32:217; CHECK:       // %bb.0:218; CHECK-NEXT:    ldr q0, [x0]219; CHECK-NEXT:    ldr q1, [x0, #16]220; CHECK-NEXT:    str q1, [x1, #16]221; CHECK-NEXT:    str q0, [x1]222; CHECK-NEXT:    ret223;224; NONEON-NOSVE-LABEL: bitcast_v8i32:225; NONEON-NOSVE:       // %bb.0:226; NONEON-NOSVE-NEXT:    ldr q0, [x0]227; NONEON-NOSVE-NEXT:    ldr q1, [x0, #16]228; NONEON-NOSVE-NEXT:    str q1, [x1, #16]229; NONEON-NOSVE-NEXT:    str q0, [x1]230; NONEON-NOSVE-NEXT:    ret231  %load = load volatile <8 x i32>, ptr %a232  %cast = bitcast <8 x i32> %load to <8 x float>233  store volatile <8 x float> %cast, ptr %b234  ret void235}236 237define void @bitcast_v1i64(ptr %a, ptr %b) {238; CHECK-LABEL: bitcast_v1i64:239; CHECK:       // %bb.0:240; CHECK-NEXT:    ldr d0, [x0]241; CHECK-NEXT:    str d0, [x1]242; CHECK-NEXT:    ret243;244; NONEON-NOSVE-LABEL: bitcast_v1i64:245; NONEON-NOSVE:       // %bb.0:246; NONEON-NOSVE-NEXT:    ldr d0, [x0]247; NONEON-NOSVE-NEXT:    str d0, [x1]248; NONEON-NOSVE-NEXT:    ret249  %load = load volatile <1 x i64>, ptr %a250  %cast = bitcast <1 x i64> %load to <1 x double>251  store volatile <1 x double> %cast, ptr %b252  ret void253}254 255define void @bitcast_v2i64(ptr %a, ptr %b) {256; CHECK-LABEL: bitcast_v2i64:257; CHECK:       // %bb.0:258; CHECK-NEXT:    ldr q0, [x0]259; CHECK-NEXT:    str q0, [x1]260; CHECK-NEXT:    ret261;262; NONEON-NOSVE-LABEL: bitcast_v2i64:263; NONEON-NOSVE:       // %bb.0:264; NONEON-NOSVE-NEXT:    ldr q0, [x0]265; NONEON-NOSVE-NEXT:    str q0, [x1]266; NONEON-NOSVE-NEXT:    ret267  %load = load volatile <2 x i64>, ptr %a268  %cast = bitcast <2 x i64> %load to <2 x double>269  store volatile <2 x double> %cast, ptr %b270  ret void271}272 273define void @bitcast_v4i64(ptr %a, ptr %b) {274; CHECK-LABEL: bitcast_v4i64:275; CHECK:       // %bb.0:276; CHECK-NEXT:    ldr q0, [x0]277; CHECK-NEXT:    ldr q1, [x0, #16]278; CHECK-NEXT:    str q1, [x1, #16]279; CHECK-NEXT:    str q0, [x1]280; CHECK-NEXT:    ret281;282; NONEON-NOSVE-LABEL: bitcast_v4i64:283; NONEON-NOSVE:       // %bb.0:284; NONEON-NOSVE-NEXT:    ldr q0, [x0]285; NONEON-NOSVE-NEXT:    ldr q1, [x0, #16]286; NONEON-NOSVE-NEXT:    str q1, [x1, #16]287; NONEON-NOSVE-NEXT:    str q0, [x1]288; NONEON-NOSVE-NEXT:    ret289  %load = load volatile <4 x i64>, ptr %a290  %cast = bitcast <4 x i64> %load to <4 x double>291  store volatile <4 x double> %cast, ptr %b292  ret void293}294 295