brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.6 KiB · b09baa6 Raw
630 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme -force-streaming < %s | FileCheck %s4 5;6; ST2B7;8 9define void @st2b_i8(<vscale x 16 x i8> %v0, <vscale x 16 x i8> %v1, <vscale x 16 x i1> %pred, ptr %addr) {10; CHECK-LABEL: st2b_i8:11; CHECK:       // %bb.0:12; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z113; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z114; CHECK-NEXT:    st2b { z0.b, z1.b }, p0, [x0]15; CHECK-NEXT:    ret16  call void @llvm.aarch64.sve.st2.nxv16i8(<vscale x 16 x i8> %v0,17                                          <vscale x 16 x i8> %v1,18                                          <vscale x 16 x i1> %pred,19                                          ptr %addr)20  ret void21}22 23;24; ST2H25;26 27define void @st2h_i16(<vscale x 8 x i16> %v0, <vscale x 8 x i16> %v1, <vscale x 8 x i1> %pred, ptr %addr) {28; CHECK-LABEL: st2h_i16:29; CHECK:       // %bb.0:30; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z131; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z132; CHECK-NEXT:    st2h { z0.h, z1.h }, p0, [x0]33; CHECK-NEXT:    ret34  call void @llvm.aarch64.sve.st2.nxv8i16(<vscale x 8 x i16> %v0,35                                          <vscale x 8 x i16> %v1,36                                          <vscale x 8 x i1> %pred,37                                          ptr %addr)38  ret void39}40 41define void @st2h_f16(<vscale x 8 x half> %v0, <vscale x 8 x half> %v1, <vscale x 8 x i1> %pred, ptr %addr) {42; CHECK-LABEL: st2h_f16:43; CHECK:       // %bb.0:44; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z145; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z146; CHECK-NEXT:    st2h { z0.h, z1.h }, p0, [x0]47; CHECK-NEXT:    ret48  call void @llvm.aarch64.sve.st2.nxv8f16(<vscale x 8 x half> %v0,49                                          <vscale x 8 x half> %v1,50                                          <vscale x 8 x i1> %pred,51                                          ptr %addr)52  ret void53}54 55define void @st2h_bf16(<vscale x 8 x bfloat> %v0, <vscale x 8 x bfloat> %v1, <vscale x 8 x i1> %pred, ptr %addr) #0 {56; CHECK-LABEL: st2h_bf16:57; CHECK:       // %bb.0:58; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z159; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z160; CHECK-NEXT:    st2h { z0.h, z1.h }, p0, [x0]61; CHECK-NEXT:    ret62  call void @llvm.aarch64.sve.st2.nxv8bf16(<vscale x 8 x bfloat> %v0,63                                          <vscale x 8 x bfloat> %v1,64                                          <vscale x 8 x i1> %pred,65                                          ptr %addr)66  ret void67}68 69;70; ST2W71;72 73define void @st2w_i32(<vscale x 4 x i32> %v0, <vscale x 4 x i32> %v1, <vscale x 4 x i1> %pred, ptr %addr) {74; CHECK-LABEL: st2w_i32:75; CHECK:       // %bb.0:76; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z177; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z178; CHECK-NEXT:    st2w { z0.s, z1.s }, p0, [x0]79; CHECK-NEXT:    ret80  call void @llvm.aarch64.sve.st2.nxv4i32(<vscale x 4 x i32> %v0,81                                          <vscale x 4 x i32> %v1,82                                          <vscale x 4 x i1> %pred,83                                          ptr %addr)84  ret void85}86 87define void @st2w_f32(<vscale x 4 x float> %v0, <vscale x 4 x float> %v1, <vscale x 4 x i1> %pred, ptr %addr) {88; CHECK-LABEL: st2w_f32:89; CHECK:       // %bb.0:90; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z191; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z192; CHECK-NEXT:    st2w { z0.s, z1.s }, p0, [x0]93; CHECK-NEXT:    ret94  call void @llvm.aarch64.sve.st2.nxv4f32(<vscale x 4 x float> %v0,95                                          <vscale x 4 x float> %v1,96                                          <vscale x 4 x i1> %pred,97                                          ptr %addr)98  ret void99}100 101;102; ST2D103;104 105define void @st2d_i64(<vscale x 2 x i64> %v0, <vscale x 2 x i64> %v1, <vscale x 2 x i1> %pred, ptr %addr) {106; CHECK-LABEL: st2d_i64:107; CHECK:       // %bb.0:108; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1109; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1110; CHECK-NEXT:    st2d { z0.d, z1.d }, p0, [x0]111; CHECK-NEXT:    ret112  call void @llvm.aarch64.sve.st2.nxv2i64(<vscale x 2 x i64> %v0,113                                          <vscale x 2 x i64> %v1,114                                          <vscale x 2 x i1> %pred,115                                          ptr %addr)116  ret void117}118 119define void @st2d_f64(<vscale x 2 x double> %v0, <vscale x 2 x double> %v1, <vscale x 2 x i1> %pred, ptr %addr) {120; CHECK-LABEL: st2d_f64:121; CHECK:       // %bb.0:122; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1123; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1124; CHECK-NEXT:    st2d { z0.d, z1.d }, p0, [x0]125; CHECK-NEXT:    ret126  call void @llvm.aarch64.sve.st2.nxv2f64(<vscale x 2 x double> %v0,127                                          <vscale x 2 x double> %v1,128                                          <vscale x 2 x i1> %pred,129                                          ptr %addr)130  ret void131}132 133define void @st2d_ptr(<vscale x 2 x ptr> %v0, <vscale x 2 x ptr> %v1, <vscale x 2 x i1> %pred, ptr %addr) {134; CHECK-LABEL: st2d_ptr:135; CHECK:       // %bb.0:136; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1137; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1138; CHECK-NEXT:    st2d { z0.d, z1.d }, p0, [x0]139; CHECK-NEXT:    ret140  call void @llvm.aarch64.sve.st2.nxv2p0(<vscale x 2 x ptr> %v0,141                                           <vscale x 2 x ptr> %v1,142                                           <vscale x 2 x i1> %pred,143                                           ptr %addr)144  ret void145}146 147;148; ST3B149;150 151define void @st3b_i8(<vscale x 16 x i8> %v0, <vscale x 16 x i8> %v1, <vscale x 16 x i8> %v2, <vscale x 16 x i1> %pred, ptr %addr) {152; CHECK-LABEL: st3b_i8:153; CHECK:       // %bb.0:154; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2155; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2156; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2157; CHECK-NEXT:    st3b { z0.b - z2.b }, p0, [x0]158; CHECK-NEXT:    ret159  call void @llvm.aarch64.sve.st3.nxv16i8(<vscale x 16 x i8> %v0,160                                          <vscale x 16 x i8> %v1,161                                          <vscale x 16 x i8> %v2,162                                          <vscale x 16 x i1> %pred,163                                          ptr %addr)164  ret void165}166 167;168; ST3H169;170 171define void @st3h_i16(<vscale x 8 x i16> %v0, <vscale x 8 x i16> %v1, <vscale x 8 x i16> %v2, <vscale x 8 x i1> %pred, ptr %addr) {172; CHECK-LABEL: st3h_i16:173; CHECK:       // %bb.0:174; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2175; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2176; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2177; CHECK-NEXT:    st3h { z0.h - z2.h }, p0, [x0]178; CHECK-NEXT:    ret179  call void @llvm.aarch64.sve.st3.nxv8i16(<vscale x 8 x i16> %v0,180                                          <vscale x 8 x i16> %v1,181                                          <vscale x 8 x i16> %v2,182                                          <vscale x 8 x i1> %pred,183                                          ptr %addr)184  ret void185}186 187define void @st3h_f16(<vscale x 8 x half> %v0, <vscale x 8 x half> %v1, <vscale x 8 x half> %v2, <vscale x 8 x i1> %pred, ptr %addr) {188; CHECK-LABEL: st3h_f16:189; CHECK:       // %bb.0:190; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2191; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2192; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2193; CHECK-NEXT:    st3h { z0.h - z2.h }, p0, [x0]194; CHECK-NEXT:    ret195  call void @llvm.aarch64.sve.st3.nxv8f16(<vscale x 8 x half> %v0,196                                          <vscale x 8 x half> %v1,197                                          <vscale x 8 x half> %v2,198                                          <vscale x 8 x i1> %pred,199                                          ptr %addr)200  ret void201}202 203define void @st3h_bf16(<vscale x 8 x bfloat> %v0, <vscale x 8 x bfloat> %v1, <vscale x 8 x bfloat> %v2, <vscale x 8 x i1> %pred, ptr %addr) #0 {204; CHECK-LABEL: st3h_bf16:205; CHECK:       // %bb.0:206; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2207; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2208; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2209; CHECK-NEXT:    st3h { z0.h - z2.h }, p0, [x0]210; CHECK-NEXT:    ret211  call void @llvm.aarch64.sve.st3.nxv8bf16(<vscale x 8 x bfloat> %v0,212                                          <vscale x 8 x bfloat> %v1,213                                          <vscale x 8 x bfloat> %v2,214                                          <vscale x 8 x i1> %pred,215                                          ptr %addr)216  ret void217}218 219;220; ST3W221;222 223define void @st3w_i32(<vscale x 4 x i32> %v0, <vscale x 4 x i32> %v1, <vscale x 4 x i32> %v2, <vscale x 4 x i1> %pred, ptr %addr) {224; CHECK-LABEL: st3w_i32:225; CHECK:       // %bb.0:226; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2227; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2228; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2229; CHECK-NEXT:    st3w { z0.s - z2.s }, p0, [x0]230; CHECK-NEXT:    ret231  call void @llvm.aarch64.sve.st3.nxv4i32(<vscale x 4 x i32> %v0,232                                          <vscale x 4 x i32> %v1,233                                          <vscale x 4 x i32> %v2,234                                          <vscale x 4 x i1> %pred,235                                          ptr %addr)236  ret void237}238 239define void @st3w_f32(<vscale x 4 x float> %v0, <vscale x 4 x float> %v1, <vscale x 4 x float> %v2, <vscale x 4 x i1> %pred, ptr %addr) {240; CHECK-LABEL: st3w_f32:241; CHECK:       // %bb.0:242; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2243; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2244; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2245; CHECK-NEXT:    st3w { z0.s - z2.s }, p0, [x0]246; CHECK-NEXT:    ret247  call void @llvm.aarch64.sve.st3.nxv4f32(<vscale x 4 x float> %v0,248                                          <vscale x 4 x float> %v1,249                                          <vscale x 4 x float> %v2,250                                          <vscale x 4 x i1> %pred,251                                          ptr %addr)252  ret void253}254 255;256; ST3D257;258 259define void @st3d_i64(<vscale x 2 x i64> %v0, <vscale x 2 x i64> %v1, <vscale x 2 x i64> %v2, <vscale x 2 x i1> %pred, ptr %addr) {260; CHECK-LABEL: st3d_i64:261; CHECK:       // %bb.0:262; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2263; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2264; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2265; CHECK-NEXT:    st3d { z0.d - z2.d }, p0, [x0]266; CHECK-NEXT:    ret267  call void @llvm.aarch64.sve.st3.nxv2i64(<vscale x 2 x i64> %v0,268                                          <vscale x 2 x i64> %v1,269                                          <vscale x 2 x i64> %v2,270                                          <vscale x 2 x i1> %pred,271                                          ptr %addr)272  ret void273}274 275define void @st3d_f64(<vscale x 2 x double> %v0, <vscale x 2 x double> %v1, <vscale x 2 x double> %v2, <vscale x 2 x i1> %pred, ptr %addr) {276; CHECK-LABEL: st3d_f64:277; CHECK:       // %bb.0:278; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2279; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2280; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2281; CHECK-NEXT:    st3d { z0.d - z2.d }, p0, [x0]282; CHECK-NEXT:    ret283  call void @llvm.aarch64.sve.st3.nxv2f64(<vscale x 2 x double> %v0,284                                          <vscale x 2 x double> %v1,285                                          <vscale x 2 x double> %v2,286                                          <vscale x 2 x i1> %pred,287                                          ptr %addr)288  ret void289}290 291define void @st3d_ptr(<vscale x 2 x ptr> %v0, <vscale x 2 x ptr> %v1, <vscale x 2 x ptr> %v2, <vscale x 2 x i1> %pred, ptr %addr) {292; CHECK-LABEL: st3d_ptr:293; CHECK:       // %bb.0:294; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2 def $z0_z1_z2295; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2 def $z0_z1_z2296; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2 def $z0_z1_z2297; CHECK-NEXT:    st3d { z0.d - z2.d }, p0, [x0]298; CHECK-NEXT:    ret299  call void @llvm.aarch64.sve.st3.nxv2p0(<vscale x 2 x ptr> %v0,300                                           <vscale x 2 x ptr> %v1,301                                           <vscale x 2 x ptr> %v2,302                                           <vscale x 2 x i1> %pred,303                                           ptr %addr)304  ret void305}306 307;308; ST4B309;310 311define void @st4b_i8(<vscale x 16 x i8> %v0, <vscale x 16 x i8> %v1, <vscale x 16 x i8> %v2, <vscale x 16 x i8> %v3, <vscale x 16 x i1> %pred, ptr %addr) {312; CHECK-LABEL: st4b_i8:313; CHECK:       // %bb.0:314; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3315; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3316; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3317; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3318; CHECK-NEXT:    st4b { z0.b - z3.b }, p0, [x0]319; CHECK-NEXT:    ret320  call void @llvm.aarch64.sve.st4.nxv16i8(<vscale x 16 x i8> %v0,321                                          <vscale x 16 x i8> %v1,322                                          <vscale x 16 x i8> %v2,323                                          <vscale x 16 x i8> %v3,324                                          <vscale x 16 x i1> %pred,325                                          ptr %addr)326  ret void327}328 329;330; ST4H331;332 333define void @st4h_i16(<vscale x 8 x i16> %v0, <vscale x 8 x i16> %v1, <vscale x 8 x i16> %v2, <vscale x 8 x i16> %v3, <vscale x 8 x i1> %pred, ptr %addr) {334; CHECK-LABEL: st4h_i16:335; CHECK:       // %bb.0:336; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3337; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3338; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3339; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3340; CHECK-NEXT:    st4h { z0.h - z3.h }, p0, [x0]341; CHECK-NEXT:    ret342  call void @llvm.aarch64.sve.st4.nxv8i16(<vscale x 8 x i16> %v0,343                                          <vscale x 8 x i16> %v1,344                                          <vscale x 8 x i16> %v2,345                                          <vscale x 8 x i16> %v3,346                                          <vscale x 8 x i1> %pred,347                                          ptr %addr)348  ret void349}350 351define void @st4h_f16(<vscale x 8 x half> %v0, <vscale x 8 x half> %v1, <vscale x 8 x half> %v2, <vscale x 8 x half> %v3, <vscale x 8 x i1> %pred, ptr %addr) {352; CHECK-LABEL: st4h_f16:353; CHECK:       // %bb.0:354; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3355; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3356; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3357; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3358; CHECK-NEXT:    st4h { z0.h - z3.h }, p0, [x0]359; CHECK-NEXT:    ret360  call void @llvm.aarch64.sve.st4.nxv8f16(<vscale x 8 x half> %v0,361                                          <vscale x 8 x half> %v1,362                                          <vscale x 8 x half> %v2,363                                          <vscale x 8 x half> %v3,364                                          <vscale x 8 x i1> %pred,365                                          ptr %addr)366  ret void367}368 369define void @st4h_bf16(<vscale x 8 x bfloat> %v0, <vscale x 8 x bfloat> %v1, <vscale x 8 x bfloat> %v2, <vscale x 8 x bfloat> %v3, <vscale x 8 x i1> %pred, ptr %addr) #0 {370; CHECK-LABEL: st4h_bf16:371; CHECK:       // %bb.0:372; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3373; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3374; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3375; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3376; CHECK-NEXT:    st4h { z0.h - z3.h }, p0, [x0]377; CHECK-NEXT:    ret378  call void @llvm.aarch64.sve.st4.nxv8bf16(<vscale x 8 x bfloat> %v0,379                                          <vscale x 8 x bfloat> %v1,380                                          <vscale x 8 x bfloat> %v2,381                                          <vscale x 8 x bfloat> %v3,382                                          <vscale x 8 x i1> %pred,383                                          ptr %addr)384  ret void385}386 387;388; ST4W389;390 391define void @st4w_i32(<vscale x 4 x i32> %v0, <vscale x 4 x i32> %v1, <vscale x 4 x i32> %v2, <vscale x 4 x i32> %v3, <vscale x 4 x i1> %pred, ptr %addr) {392; CHECK-LABEL: st4w_i32:393; CHECK:       // %bb.0:394; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3395; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3396; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3397; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3398; CHECK-NEXT:    st4w { z0.s - z3.s }, p0, [x0]399; CHECK-NEXT:    ret400  call void @llvm.aarch64.sve.st4.nxv4i32(<vscale x 4 x i32> %v0,401                                          <vscale x 4 x i32> %v1,402                                          <vscale x 4 x i32> %v2,403                                          <vscale x 4 x i32> %v3,404                                          <vscale x 4 x i1> %pred,405                                          ptr %addr)406  ret void407}408 409define void @st4w_f32(<vscale x 4 x float> %v0, <vscale x 4 x float> %v1, <vscale x 4 x float> %v2, <vscale x 4 x float> %v3, <vscale x 4 x i1> %pred, ptr %addr) {410; CHECK-LABEL: st4w_f32:411; CHECK:       // %bb.0:412; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3413; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3414; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3415; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3416; CHECK-NEXT:    st4w { z0.s - z3.s }, p0, [x0]417; CHECK-NEXT:    ret418  call void @llvm.aarch64.sve.st4.nxv4f32(<vscale x 4 x float> %v0,419                                          <vscale x 4 x float> %v1,420                                          <vscale x 4 x float> %v2,421                                          <vscale x 4 x float> %v3,422                                          <vscale x 4 x i1> %pred,423                                          ptr %addr)424  ret void425}426 427;428; ST4D429;430 431define void @st4d_i64(<vscale x 2 x i64> %v0, <vscale x 2 x i64> %v1, <vscale x 2 x i64> %v2, <vscale x 2 x i64> %v3, <vscale x 2 x i1> %pred, ptr %addr) {432; CHECK-LABEL: st4d_i64:433; CHECK:       // %bb.0:434; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3435; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3436; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3437; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3438; CHECK-NEXT:    st4d { z0.d - z3.d }, p0, [x0]439; CHECK-NEXT:    ret440  call void @llvm.aarch64.sve.st4.nxv2i64(<vscale x 2 x i64> %v0,441                                          <vscale x 2 x i64> %v1,442                                          <vscale x 2 x i64> %v2,443                                          <vscale x 2 x i64> %v3,444                                          <vscale x 2 x i1> %pred,445                                          ptr %addr)446  ret void447}448 449define void @st4d_f64(<vscale x 2 x double> %v0, <vscale x 2 x double> %v1, <vscale x 2 x double> %v2, <vscale x 2 x double> %v3, <vscale x 2 x i1> %pred, ptr %addr) {450; CHECK-LABEL: st4d_f64:451; CHECK:       // %bb.0:452; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3453; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3454; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3455; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3456; CHECK-NEXT:    st4d { z0.d - z3.d }, p0, [x0]457; CHECK-NEXT:    ret458  call void @llvm.aarch64.sve.st4.nxv2f64(<vscale x 2 x double> %v0,459                                          <vscale x 2 x double> %v1,460                                          <vscale x 2 x double> %v2,461                                          <vscale x 2 x double> %v3,462                                          <vscale x 2 x i1> %pred,463                                          ptr %addr)464  ret void465}466 467define void @st4d_ptr(<vscale x 2 x ptr> %v0, <vscale x 2 x ptr> %v1, <vscale x 2 x ptr> %v2, <vscale x 2 x ptr> %v3, <vscale x 2 x i1> %pred, ptr %addr) {468; CHECK-LABEL: st4d_ptr:469; CHECK:       // %bb.0:470; CHECK-NEXT:    // kill: def $z3 killed $z3 killed $z0_z1_z2_z3 def $z0_z1_z2_z3471; CHECK-NEXT:    // kill: def $z2 killed $z2 killed $z0_z1_z2_z3 def $z0_z1_z2_z3472; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1_z2_z3 def $z0_z1_z2_z3473; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1_z2_z3 def $z0_z1_z2_z3474; CHECK-NEXT:    st4d { z0.d - z3.d }, p0, [x0]475; CHECK-NEXT:    ret476  call void @llvm.aarch64.sve.st4.nxv2p0(<vscale x 2 x ptr> %v0,477                                           <vscale x 2 x ptr> %v1,478                                           <vscale x 2 x ptr> %v2,479                                           <vscale x 2 x ptr> %v3,480                                           <vscale x 2 x i1> %pred,481                                           ptr %addr)482  ret void483}484;485; STNT1B486;487 488define void @stnt1b_i8(<vscale x 16 x i8> %data, <vscale x 16 x i1> %pred, ptr %addr) {489; CHECK-LABEL: stnt1b_i8:490; CHECK:       // %bb.0:491; CHECK-NEXT:    stnt1b { z0.b }, p0, [x0]492; CHECK-NEXT:    ret493  call void @llvm.aarch64.sve.stnt1.nxv16i8(<vscale x 16 x i8> %data,494                                            <vscale x 16 x i1> %pred,495                                            ptr %addr)496  ret void497}498 499;500; STNT1H501;502 503define void @stnt1h_i16(<vscale x 8 x i16> %data, <vscale x 8 x i1> %pred, ptr %addr) {504; CHECK-LABEL: stnt1h_i16:505; CHECK:       // %bb.0:506; CHECK-NEXT:    stnt1h { z0.h }, p0, [x0]507; CHECK-NEXT:    ret508  call void @llvm.aarch64.sve.stnt1.nxv8i16(<vscale x 8 x i16> %data,509                                            <vscale x 8 x i1> %pred,510                                            ptr %addr)511  ret void512}513 514define void @stnt1h_f16(<vscale x 8 x half> %data, <vscale x 8 x i1> %pred, ptr %addr) {515; CHECK-LABEL: stnt1h_f16:516; CHECK:       // %bb.0:517; CHECK-NEXT:    stnt1h { z0.h }, p0, [x0]518; CHECK-NEXT:    ret519  call void @llvm.aarch64.sve.stnt1.nxv8f16(<vscale x 8 x half> %data,520                                            <vscale x 8 x i1> %pred,521                                            ptr %addr)522  ret void523}524 525define void @stnt1h_bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %pred, ptr %addr) #0 {526; CHECK-LABEL: stnt1h_bf16:527; CHECK:       // %bb.0:528; CHECK-NEXT:    stnt1h { z0.h }, p0, [x0]529; CHECK-NEXT:    ret530  call void @llvm.aarch64.sve.stnt1.nxv8bf16(<vscale x 8 x bfloat> %data,531                                             <vscale x 8 x i1> %pred,532                                             ptr %addr)533  ret void534}535 536;537; STNT1W538;539 540define void @stnt1w_i32(<vscale x 4 x i32> %data, <vscale x 4 x i1> %pred, ptr %addr) {541; CHECK-LABEL: stnt1w_i32:542; CHECK:       // %bb.0:543; CHECK-NEXT:    stnt1w { z0.s }, p0, [x0]544; CHECK-NEXT:    ret545  call void @llvm.aarch64.sve.stnt1.nxv4i32(<vscale x 4 x i32> %data,546                                            <vscale x 4 x i1> %pred,547                                            ptr %addr)548  ret void549}550 551define void @stnt1w_f32(<vscale x 4 x float> %data, <vscale x 4 x i1> %pred, ptr %addr) {552; CHECK-LABEL: stnt1w_f32:553; CHECK:       // %bb.0:554; CHECK-NEXT:    stnt1w { z0.s }, p0, [x0]555; CHECK-NEXT:    ret556  call void @llvm.aarch64.sve.stnt1.nxv4f32(<vscale x 4 x float> %data,557                                            <vscale x 4 x i1> %pred,558                                            ptr %addr)559  ret void560}561 562;563; STNT1D564;565 566define void @stnt1d_i64(<vscale x 2 x i64> %data, <vscale x 2 x i1> %pred, ptr %addr) {567; CHECK-LABEL: stnt1d_i64:568; CHECK:       // %bb.0:569; CHECK-NEXT:    stnt1d { z0.d }, p0, [x0]570; CHECK-NEXT:    ret571  call void @llvm.aarch64.sve.stnt1.nxv2i64(<vscale x 2 x i64> %data,572                                            <vscale x 2 x i1> %pred,573                                            ptr %addr)574  ret void575}576 577define void @stnt1d_f64(<vscale x 2 x double> %data, <vscale x 2 x i1> %pred, ptr %addr) {578; CHECK-LABEL: stnt1d_f64:579; CHECK:       // %bb.0:580; CHECK-NEXT:    stnt1d { z0.d }, p0, [x0]581; CHECK-NEXT:    ret582  call void @llvm.aarch64.sve.stnt1.nxv2f64(<vscale x 2 x double> %data,583                                            <vscale x 2 x i1> %pred,584                                            ptr %addr)585  ret void586}587 588 589declare void @llvm.aarch64.sve.st2.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, ptr)590declare void @llvm.aarch64.sve.st2.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, ptr)591declare void @llvm.aarch64.sve.st2.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, ptr)592declare void @llvm.aarch64.sve.st2.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, ptr)593declare void @llvm.aarch64.sve.st2.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, ptr)594declare void @llvm.aarch64.sve.st2.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x i1>, ptr)595declare void @llvm.aarch64.sve.st2.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, ptr)596declare void @llvm.aarch64.sve.st2.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, ptr)597declare void @llvm.aarch64.sve.st2.nxv2p0(<vscale x 2 x ptr>, <vscale x 2 x ptr>, <vscale x 2 x i1>, ptr nocapture)598 599declare void @llvm.aarch64.sve.st3.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, ptr)600declare void @llvm.aarch64.sve.st3.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, ptr)601declare void @llvm.aarch64.sve.st3.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, ptr)602declare void @llvm.aarch64.sve.st3.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, ptr)603declare void @llvm.aarch64.sve.st3.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, ptr)604declare void @llvm.aarch64.sve.st3.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x i1>, ptr)605declare void @llvm.aarch64.sve.st3.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, ptr)606declare void @llvm.aarch64.sve.st3.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, ptr)607declare void @llvm.aarch64.sve.st3.nxv2p0(<vscale x 2 x ptr>, <vscale x 2 x ptr>, <vscale x 2 x ptr>, <vscale x 2 x i1>, ptr nocapture)608 609declare void @llvm.aarch64.sve.st4.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, ptr)610declare void @llvm.aarch64.sve.st4.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, ptr)611declare void @llvm.aarch64.sve.st4.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, ptr)612declare void @llvm.aarch64.sve.st4.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, ptr)613declare void @llvm.aarch64.sve.st4.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, ptr)614declare void @llvm.aarch64.sve.st4.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x i1>, ptr)615declare void @llvm.aarch64.sve.st4.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, ptr)616declare void @llvm.aarch64.sve.st4.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, ptr)617declare void @llvm.aarch64.sve.st4.nxv2p0(<vscale x 2 x ptr>, <vscale x 2 x ptr>, <vscale x 2 x ptr>, <vscale x 2 x ptr>, <vscale x 2 x i1>, ptr nocapture)618 619declare void @llvm.aarch64.sve.stnt1.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i1>, ptr)620declare void @llvm.aarch64.sve.stnt1.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i1>, ptr)621declare void @llvm.aarch64.sve.stnt1.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, ptr)622declare void @llvm.aarch64.sve.stnt1.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, ptr)623declare void @llvm.aarch64.sve.stnt1.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, ptr)624declare void @llvm.aarch64.sve.stnt1.nxv8bf16(<vscale x 8 x bfloat>, <vscale x 8 x i1>, ptr)625declare void @llvm.aarch64.sve.stnt1.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, ptr)626declare void @llvm.aarch64.sve.stnt1.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, ptr)627 628; +bf16 is required for the bfloat version.629attributes #0 = { "target-features"="+bf16" }630