brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · 0bf6b12 Raw
281 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-LE3; RUN: llc -mtriple=aarch64_be-linux-gnu -mattr=+sve,+bf16 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-BE4 5; ST1B6 7define void @st1_nxv16i8(ptr %addr, i64 %off, <vscale x 16 x i8> %val) {8; CHECK-LABEL: st1_nxv16i8:9; CHECK:       // %bb.0:10; CHECK-NEXT:    ptrue p0.b11; CHECK-NEXT:    st1b { z0.b }, p0, [x0, x1]12; CHECK-NEXT:    ret13  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off14  store <vscale x 16 x i8> %val, ptr %ptr15  ret void16}17 18define void @st1_nxv16i8_bitcast_from_i16(ptr %addr, i64 %off, <vscale x 8 x i16> %val) {19; CHECK-LE-LABEL: st1_nxv16i8_bitcast_from_i16:20; CHECK-LE:       // %bb.0:21; CHECK-LE-NEXT:    ptrue p0.b22; CHECK-LE-NEXT:    st1b { z0.b }, p0, [x0, x1]23; CHECK-LE-NEXT:    ret24;25; CHECK-BE-LABEL: st1_nxv16i8_bitcast_from_i16:26; CHECK-BE:       // %bb.0:27; CHECK-BE-NEXT:    ptrue p0.h28; CHECK-BE-NEXT:    add x8, x0, x129; CHECK-BE-NEXT:    st1h { z0.h }, p0, [x8]30; CHECK-BE-NEXT:    ret31  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off32  store <vscale x 8 x i16> %val, ptr %ptr33  ret void34}35 36define void @st1_nxv16i8_bitcast_from_i32(ptr %addr, i64 %off, <vscale x 4 x i32> %val) {37; CHECK-LE-LABEL: st1_nxv16i8_bitcast_from_i32:38; CHECK-LE:       // %bb.0:39; CHECK-LE-NEXT:    ptrue p0.b40; CHECK-LE-NEXT:    st1b { z0.b }, p0, [x0, x1]41; CHECK-LE-NEXT:    ret42;43; CHECK-BE-LABEL: st1_nxv16i8_bitcast_from_i32:44; CHECK-BE:       // %bb.0:45; CHECK-BE-NEXT:    ptrue p0.s46; CHECK-BE-NEXT:    add x8, x0, x147; CHECK-BE-NEXT:    st1w { z0.s }, p0, [x8]48; CHECK-BE-NEXT:    ret49  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off50  store <vscale x 4 x i32> %val, ptr %ptr51  ret void52}53 54define void @st1_nxv16i8_bitcast_from_i64(ptr %addr, i64 %off, <vscale x 2 x i64> %val) {55; CHECK-LE-LABEL: st1_nxv16i8_bitcast_from_i64:56; CHECK-LE:       // %bb.0:57; CHECK-LE-NEXT:    ptrue p0.b58; CHECK-LE-NEXT:    st1b { z0.b }, p0, [x0, x1]59; CHECK-LE-NEXT:    ret60;61; CHECK-BE-LABEL: st1_nxv16i8_bitcast_from_i64:62; CHECK-BE:       // %bb.0:63; CHECK-BE-NEXT:    ptrue p0.d64; CHECK-BE-NEXT:    add x8, x0, x165; CHECK-BE-NEXT:    st1d { z0.d }, p0, [x8]66; CHECK-BE-NEXT:    ret67  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off68  store <vscale x 2 x i64> %val, ptr %ptr69  ret void70}71 72define void @st1_nxv8i16_trunc8(ptr %addr, i64 %off, <vscale x 8 x i16> %val) {73; CHECK-LABEL: st1_nxv8i16_trunc8:74; CHECK:       // %bb.0:75; CHECK-NEXT:    ptrue p0.h76; CHECK-NEXT:    st1b { z0.h }, p0, [x0, x1]77; CHECK-NEXT:    ret78  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off79  %trunc = trunc <vscale x 8 x i16> %val to <vscale x 8 x i8>80  store <vscale x 8 x i8> %trunc, ptr %ptr81  ret void82}83 84define void @st1_nxv4i32_trunc8(ptr %addr, i64 %off, <vscale x 4 x i32> %val) {85; CHECK-LABEL: st1_nxv4i32_trunc8:86; CHECK:       // %bb.0:87; CHECK-NEXT:    ptrue p0.s88; CHECK-NEXT:    st1b { z0.s }, p0, [x0, x1]89; CHECK-NEXT:    ret90  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off91  %trunc = trunc <vscale x 4 x i32> %val to <vscale x 4 x i8>92  store <vscale x 4 x i8> %trunc, ptr %ptr93  ret void94}95 96define void @st1_nxv2i64_trunc8(ptr %addr, i64 %off, <vscale x 2 x i64> %val) {97; CHECK-LABEL: st1_nxv2i64_trunc8:98; CHECK:       // %bb.0:99; CHECK-NEXT:    ptrue p0.d100; CHECK-NEXT:    st1b { z0.d }, p0, [x0, x1]101; CHECK-NEXT:    ret102  %ptr = getelementptr inbounds i8, ptr %addr, i64 %off103  %trunc = trunc <vscale x 2 x i64> %val to <vscale x 2 x i8>104  store <vscale x 2 x i8> %trunc, ptr %ptr105  ret void106}107 108; ST1H109 110define void @st1_nxv8i16(ptr %addr, i64 %off, <vscale x 8 x i16> %val) {111; CHECK-LABEL: st1_nxv8i16:112; CHECK:       // %bb.0:113; CHECK-NEXT:    ptrue p0.h114; CHECK-NEXT:    st1h { z0.h }, p0, [x0, x1, lsl #1]115; CHECK-NEXT:    ret116  %ptr = getelementptr inbounds i16, ptr %addr, i64 %off117  store <vscale x 8 x i16> %val, ptr %ptr118  ret void119}120 121define void @st1_nxv4i32_trunc16(ptr %addr, i64 %off, <vscale x 4 x i32> %val) {122; CHECK-LABEL: st1_nxv4i32_trunc16:123; CHECK:       // %bb.0:124; CHECK-NEXT:    ptrue p0.s125; CHECK-NEXT:    st1h { z0.s }, p0, [x0, x1, lsl #1]126; CHECK-NEXT:    ret127  %ptr = getelementptr inbounds i16, ptr %addr, i64 %off128  %trunc = trunc <vscale x 4 x i32> %val to <vscale x 4 x i16>129  store <vscale x 4 x i16> %trunc, ptr %ptr130  ret void131}132 133define void @st1_nxv2i64_trunc16(ptr %addr, i64 %off, <vscale x 2 x i64> %val) {134; CHECK-LABEL: st1_nxv2i64_trunc16:135; CHECK:       // %bb.0:136; CHECK-NEXT:    ptrue p0.d137; CHECK-NEXT:    st1h { z0.d }, p0, [x0, x1, lsl #1]138; CHECK-NEXT:    ret139  %ptr = getelementptr inbounds i16, ptr %addr, i64 %off140  %trunc = trunc <vscale x 2 x i64> %val to <vscale x 2 x i16>141  store <vscale x 2 x i16> %trunc, ptr %ptr142  ret void143}144 145define void @st1_nxv8f16(ptr %addr, i64 %off, <vscale x 8 x half> %val) {146; CHECK-LABEL: st1_nxv8f16:147; CHECK:       // %bb.0:148; CHECK-NEXT:    ptrue p0.h149; CHECK-NEXT:    st1h { z0.h }, p0, [x0, x1, lsl #1]150; CHECK-NEXT:    ret151  %ptr = getelementptr inbounds half, ptr %addr, i64 %off152  store <vscale x 8 x half> %val, ptr %ptr153  ret void154}155 156define void @st1_nxv8bf16(ptr %addr, i64 %off, <vscale x 8 x bfloat> %val) {157; CHECK-LABEL: st1_nxv8bf16:158; CHECK:       // %bb.0:159; CHECK-NEXT:    ptrue p0.h160; CHECK-NEXT:    st1h { z0.h }, p0, [x0, x1, lsl #1]161; CHECK-NEXT:    ret162  %ptr = getelementptr inbounds bfloat, ptr %addr, i64 %off163  store <vscale x 8 x bfloat> %val, ptr %ptr164  ret void165}166 167define void @st1_nxv4f16(ptr %addr, i64 %off, <vscale x 4 x half> %val) {168; CHECK-LABEL: st1_nxv4f16:169; CHECK:       // %bb.0:170; CHECK-NEXT:    ptrue p0.s171; CHECK-NEXT:    st1h { z0.s }, p0, [x0, x1, lsl #1]172; CHECK-NEXT:    ret173  %ptr = getelementptr inbounds half, ptr %addr, i64 %off174  store <vscale x 4 x half> %val, ptr %ptr175  ret void176}177 178define void @st1_nxv4bf16(ptr %addr, i64 %off, <vscale x 4 x bfloat> %val) {179; CHECK-LABEL: st1_nxv4bf16:180; CHECK:       // %bb.0:181; CHECK-NEXT:    ptrue p0.s182; CHECK-NEXT:    st1h { z0.s }, p0, [x0, x1, lsl #1]183; CHECK-NEXT:    ret184  %ptr = getelementptr inbounds bfloat, ptr %addr, i64 %off185  store <vscale x 4 x bfloat> %val, ptr %ptr186  ret void187}188 189define void @st1_nxv2f16(ptr %addr, i64 %off, <vscale x 2 x half> %val) {190; CHECK-LABEL: st1_nxv2f16:191; CHECK:       // %bb.0:192; CHECK-NEXT:    ptrue p0.d193; CHECK-NEXT:    st1h { z0.d }, p0, [x0, x1, lsl #1]194; CHECK-NEXT:    ret195  %ptr = getelementptr inbounds half, ptr %addr, i64 %off196  store <vscale x 2 x half> %val, ptr %ptr197  ret void198}199 200define void @st1_nxv2bf16(ptr %addr, i64 %off, <vscale x 2 x bfloat> %val) {201; CHECK-LABEL: st1_nxv2bf16:202; CHECK:       // %bb.0:203; CHECK-NEXT:    ptrue p0.d204; CHECK-NEXT:    st1h { z0.d }, p0, [x0, x1, lsl #1]205; CHECK-NEXT:    ret206  %ptr = getelementptr inbounds bfloat, ptr %addr, i64 %off207  store <vscale x 2 x bfloat> %val, ptr %ptr208  ret void209}210 211; ST1W212 213define void @st1_nxv4i32(ptr %addr, i64 %off, <vscale x 4 x i32> %val) {214; CHECK-LABEL: st1_nxv4i32:215; CHECK:       // %bb.0:216; CHECK-NEXT:    ptrue p0.s217; CHECK-NEXT:    st1w { z0.s }, p0, [x0, x1, lsl #2]218; CHECK-NEXT:    ret219  %ptr = getelementptr inbounds i32, ptr %addr, i64 %off220  store <vscale x 4 x i32> %val, ptr %ptr221  ret void222}223 224define void @st1_nxv2i64_trunc32(ptr %addr, i64 %off, <vscale x 2 x i64> %val) {225; CHECK-LABEL: st1_nxv2i64_trunc32:226; CHECK:       // %bb.0:227; CHECK-NEXT:    ptrue p0.d228; CHECK-NEXT:    st1w { z0.d }, p0, [x0, x1, lsl #2]229; CHECK-NEXT:    ret230  %ptr = getelementptr inbounds i32, ptr %addr, i64 %off231  %trunc = trunc <vscale x 2 x i64> %val to <vscale x 2 x i32>232  store <vscale x 2 x i32> %trunc, ptr %ptr233  ret void234}235 236define void @st1_nxv4f32(ptr %addr, i64 %off, <vscale x 4 x float> %val) {237; CHECK-LABEL: st1_nxv4f32:238; CHECK:       // %bb.0:239; CHECK-NEXT:    ptrue p0.s240; CHECK-NEXT:    st1w { z0.s }, p0, [x0, x1, lsl #2]241; CHECK-NEXT:    ret242  %ptr = getelementptr inbounds float, ptr %addr, i64 %off243  store <vscale x 4 x float> %val, ptr %ptr244  ret void245}246 247define void @st1_nxv2f32(ptr %addr, i64 %off, <vscale x 2 x float> %val) {248; CHECK-LABEL: st1_nxv2f32:249; CHECK:       // %bb.0:250; CHECK-NEXT:    ptrue p0.d251; CHECK-NEXT:    st1w { z0.d }, p0, [x0, x1, lsl #2]252; CHECK-NEXT:    ret253  %ptr = getelementptr inbounds float, ptr %addr, i64 %off254  store <vscale x 2 x float> %val, ptr %ptr255  ret void256}257 258; ST1D259 260define void @st1_nxv2i64(ptr %addr, i64 %off, <vscale x 2 x i64> %val) {261; CHECK-LABEL: st1_nxv2i64:262; CHECK:       // %bb.0:263; CHECK-NEXT:    ptrue p0.d264; CHECK-NEXT:    st1d { z0.d }, p0, [x0, x1, lsl #3]265; CHECK-NEXT:    ret266  %ptr = getelementptr inbounds i64, ptr %addr, i64 %off267  store <vscale x 2 x i64> %val, ptr %ptr268  ret void269}270 271define void @st1_nxv2f64(ptr %addr, i64 %off, <vscale x 2 x double> %val) {272; CHECK-LABEL: st1_nxv2f64:273; CHECK:       // %bb.0:274; CHECK-NEXT:    ptrue p0.d275; CHECK-NEXT:    st1d { z0.d }, p0, [x0, x1, lsl #3]276; CHECK-NEXT:    ret277  %ptr = getelementptr inbounds double, ptr %addr, i64 %off278  store <vscale x 2 x double> %val, ptr %ptr279  ret void280}281