394 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -force-streaming -verify-machineinstrs < %s | FileCheck %s3 4target triple = "aarch64-linux"5 6; Widening7define void @mop4a_za32_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {8; CHECK-LABEL: mop4a_za32_s8:9; CHECK: // %bb.0:10; CHECK-NEXT: mov z24.d, z2.d11; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z112; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z113; CHECK-NEXT: smop4a za0.s, { z0.b, z1.b }, z24.b14; CHECK-NEXT: ret15 call void @llvm.aarch64.sme.smop4a.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)16 ret void17}18 19define void @mop4s_za32_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {20; CHECK-LABEL: mop4s_za32_s8:21; CHECK: // %bb.0:22; CHECK-NEXT: mov z24.d, z2.d23; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z124; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z125; CHECK-NEXT: smop4s za0.s, { z0.b, z1.b }, z24.b26; CHECK-NEXT: ret27 call void @llvm.aarch64.sme.smop4s.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)28 ret void29}30 31define void @mop4a_za32_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {32; CHECK-LABEL: mop4a_za32_u8:33; CHECK: // %bb.0:34; CHECK-NEXT: mov z24.d, z2.d35; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z136; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z137; CHECK-NEXT: umop4a za0.s, { z0.b, z1.b }, z24.b38; CHECK-NEXT: ret39 call void @llvm.aarch64.sme.umop4a.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)40 ret void41}42 43define void @mop4s_za32_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {44; CHECK-LABEL: mop4s_za32_u8:45; CHECK: // %bb.0:46; CHECK-NEXT: mov z24.d, z2.d47; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z148; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z149; CHECK-NEXT: umop4s za0.s, { z0.b, z1.b }, z24.b50; CHECK-NEXT: ret51 call void @llvm.aarch64.sme.umop4s.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)52 ret void53}54 55define void @mop4a_za32_s8_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {56; CHECK-LABEL: mop4a_za32_s8_u8:57; CHECK: // %bb.0:58; CHECK-NEXT: mov z24.d, z2.d59; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z160; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z161; CHECK-NEXT: sumop4a za0.s, { z0.b, z1.b }, z24.b62; CHECK-NEXT: ret63 call void @llvm.aarch64.sme.sumop4a.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)64 ret void65}66 67define void @mop4s_za32_s8_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {68; CHECK-LABEL: mop4s_za32_s8_u8:69; CHECK: // %bb.0:70; CHECK-NEXT: mov z24.d, z2.d71; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z172; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z173; CHECK-NEXT: sumop4s za0.s, { z0.b, z1.b }, z24.b74; CHECK-NEXT: ret75 call void @llvm.aarch64.sme.sumop4s.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)76 ret void77}78 79define void @mop4a_za32_u8_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {80; CHECK-LABEL: mop4a_za32_u8_s8:81; CHECK: // %bb.0:82; CHECK-NEXT: mov z24.d, z2.d83; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z184; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z185; CHECK-NEXT: usmop4a za0.s, { z0.b, z1.b }, z24.b86; CHECK-NEXT: ret87 call void @llvm.aarch64.sme.usmop4a.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)88 ret void89}90 91define void @mop4s_za32_u8_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm) #0 {92; CHECK-LABEL: mop4s_za32_u8_s8:93; CHECK: // %bb.0:94; CHECK-NEXT: mov z24.d, z2.d95; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z196; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z197; CHECK-NEXT: usmop4s za0.s, { z0.b, z1.b }, z24.b98; CHECK-NEXT: ret99 call void @llvm.aarch64.sme.usmop4s.wide.2x1.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm)100 ret void101}102 103 104define void @mop4a_za32_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {105; CHECK-LABEL: mop4a_za32_s16:106; CHECK: // %bb.0:107; CHECK-NEXT: mov z24.d, z2.d108; 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: smop4a za0.s, { z0.h, z1.h }, z24.h111; CHECK-NEXT: ret112 call void @llvm.aarch64.sme.smop4a.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)113 ret void114}115 116define void @mop4s_za32_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {117; CHECK-LABEL: mop4s_za32_s16:118; CHECK: // %bb.0:119; CHECK-NEXT: mov z24.d, z2.d120; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1121; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1122; CHECK-NEXT: smop4s za0.s, { z0.h, z1.h }, z24.h123; CHECK-NEXT: ret124 call void @llvm.aarch64.sme.smop4s.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)125 ret void126}127 128define void @mop4a_za32_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {129; CHECK-LABEL: mop4a_za32_u16:130; CHECK: // %bb.0:131; CHECK-NEXT: mov z24.d, z2.d132; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1133; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1134; CHECK-NEXT: umop4a za0.s, { z0.h, z1.h }, z24.h135; CHECK-NEXT: ret136 call void @llvm.aarch64.sme.umop4a.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)137 ret void138}139 140define void @mop4s_za32_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {141; CHECK-LABEL: mop4s_za32_u16:142; CHECK: // %bb.0:143; CHECK-NEXT: mov z24.d, z2.d144; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1145; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1146; CHECK-NEXT: umop4s za0.s, { z0.h, z1.h }, z24.h147; CHECK-NEXT: ret148 call void @llvm.aarch64.sme.umop4s.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)149 ret void150}151 152define void @mop4a_za32_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm) #0 {153; CHECK-LABEL: mop4a_za32_f16:154; CHECK: // %bb.0:155; CHECK-NEXT: mov z24.d, z2.d156; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1157; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1158; CHECK-NEXT: fmop4a za0.s, { z0.h, z1.h }, z24.h159; CHECK-NEXT: ret160 call void @llvm.aarch64.sme.mop4a.wide.2x1.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm)161 ret void162}163 164define void @mop4s_za32_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm) #0 {165; CHECK-LABEL: mop4s_za32_f16:166; CHECK: // %bb.0:167; CHECK-NEXT: mov z24.d, z2.d168; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1169; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1170; CHECK-NEXT: fmop4s za0.s, { z0.h, z1.h }, z24.h171; CHECK-NEXT: ret172 call void @llvm.aarch64.sme.mop4s.wide.2x1.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm)173 ret void174}175 176define void @mop4a_za32_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm) #0 {177; CHECK-LABEL: mop4a_za32_bf16:178; CHECK: // %bb.0:179; CHECK-NEXT: mov z24.d, z2.d180; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1181; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1182; CHECK-NEXT: bfmop4a za0.s, { z0.h, z1.h }, z24.h183; CHECK-NEXT: ret184 call void @llvm.aarch64.sme.mop4a.wide.2x1.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm)185 ret void186}187 188define void @mop4s_za32_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm) #0 {189; CHECK-LABEL: mop4s_za32_bf16:190; CHECK: // %bb.0:191; CHECK-NEXT: mov z24.d, z2.d192; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1193; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1194; CHECK-NEXT: bfmop4s za0.s, { z0.h, z1.h }, z24.h195; CHECK-NEXT: ret196 call void @llvm.aarch64.sme.mop4s.wide.2x1.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm)197 ret void198}199 200define void @mop4a_za64_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {201; CHECK-LABEL: mop4a_za64_s16:202; CHECK: // %bb.0:203; CHECK-NEXT: mov z24.d, z2.d204; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1205; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1206; CHECK-NEXT: smop4a za0.d, { z0.h, z1.h }, z24.h207; CHECK-NEXT: ret208 call void @llvm.aarch64.sme.smop4a.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)209 ret void210}211 212define void @mop4s_za64_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {213; CHECK-LABEL: mop4s_za64_s16:214; CHECK: // %bb.0:215; CHECK-NEXT: mov z24.d, z2.d216; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1217; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1218; CHECK-NEXT: smop4s za0.d, { z0.h, z1.h }, z24.h219; CHECK-NEXT: ret220 call void @llvm.aarch64.sme.smop4s.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)221 ret void222}223 224define void @mop4a_za64_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {225; CHECK-LABEL: mop4a_za64_u16:226; CHECK: // %bb.0:227; CHECK-NEXT: mov z24.d, z2.d228; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1229; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1230; CHECK-NEXT: umop4a za0.d, { z0.h, z1.h }, z24.h231; CHECK-NEXT: ret232 call void @llvm.aarch64.sme.umop4a.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)233 ret void234}235 236define void @mop4s_za64_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {237; CHECK-LABEL: mop4s_za64_u16:238; CHECK: // %bb.0:239; CHECK-NEXT: mov z24.d, z2.d240; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1241; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1242; CHECK-NEXT: umop4s za0.d, { z0.h, z1.h }, z24.h243; CHECK-NEXT: ret244 call void @llvm.aarch64.sme.umop4s.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)245 ret void246}247 248define void @mop4a_za64_s16_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {249; CHECK-LABEL: mop4a_za64_s16_u16:250; CHECK: // %bb.0:251; CHECK-NEXT: mov z24.d, z2.d252; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1253; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1254; CHECK-NEXT: sumop4a za0.d, { z0.h, z1.h }, z24.h255; CHECK-NEXT: ret256 call void @llvm.aarch64.sme.sumop4a.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)257 ret void258}259 260define void @mop4s_za64_s16_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {261; CHECK-LABEL: mop4s_za64_s16_u16:262; CHECK: // %bb.0:263; CHECK-NEXT: mov z24.d, z2.d264; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1265; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1266; CHECK-NEXT: sumop4s za0.d, { z0.h, z1.h }, z24.h267; CHECK-NEXT: ret268 call void @llvm.aarch64.sme.sumop4s.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)269 ret void270}271 272define void @mop4a_za64_u16_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {273; CHECK-LABEL: mop4a_za64_u16_s16:274; CHECK: // %bb.0:275; CHECK-NEXT: mov z24.d, z2.d276; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1277; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1278; CHECK-NEXT: usmop4a za0.d, { z0.h, z1.h }, z24.h279; CHECK-NEXT: ret280 call void @llvm.aarch64.sme.usmop4a.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)281 ret void282}283 284define void @mop4s_za64_u16_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm) #0 {285; CHECK-LABEL: mop4s_za64_u16_s16:286; CHECK: // %bb.0:287; CHECK-NEXT: mov z24.d, z2.d288; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1289; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1290; CHECK-NEXT: usmop4s za0.d, { z0.h, z1.h }, z24.h291; CHECK-NEXT: ret292 call void @llvm.aarch64.sme.usmop4s.za64.wide.2x1.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm)293 ret void294}295 296; Non-widening297define void @mop4a_za16_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm) #0 {298; CHECK-LABEL: mop4a_za16_f16:299; CHECK: // %bb.0:300; CHECK-NEXT: mov z24.d, z2.d301; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1302; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1303; CHECK-NEXT: fmop4a za0.h, { z0.h, z1.h }, z24.h304; CHECK-NEXT: ret305 call void @llvm.aarch64.sme.mop4a.2x1.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm)306 ret void307}308 309define void @mop4s_za16_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm) #0 {310; CHECK-LABEL: mop4s_za16_f16:311; CHECK: // %bb.0:312; CHECK-NEXT: mov z24.d, z2.d313; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1314; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1315; CHECK-NEXT: fmop4s za0.h, { z0.h, z1.h }, z24.h316; CHECK-NEXT: ret317 call void @llvm.aarch64.sme.mop4s.2x1.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm)318 ret void319}320 321define void @mop4a_za32_f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm) #0 {322; CHECK-LABEL: mop4a_za32_f32:323; CHECK: // %bb.0:324; CHECK-NEXT: mov z24.d, z2.d325; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1326; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1327; CHECK-NEXT: fmop4a za0.s, { z0.s, z1.s }, z24.s328; CHECK-NEXT: ret329 call void @llvm.aarch64.sme.mop4a.2x1.nxv4f32(i32 0, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm)330 ret void331}332 333define void @mop4s_za32_f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm) #0 {334; CHECK-LABEL: mop4s_za32_f32:335; CHECK: // %bb.0:336; CHECK-NEXT: mov z24.d, z2.d337; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1338; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1339; CHECK-NEXT: fmop4s za0.s, { z0.s, z1.s }, z24.s340; CHECK-NEXT: ret341 call void @llvm.aarch64.sme.mop4s.2x1.nxv4f32(i32 0, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm)342 ret void343}344 345define void @mop4a_za64_f64(<vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm) #0 {346; CHECK-LABEL: mop4a_za64_f64:347; CHECK: // %bb.0:348; CHECK-NEXT: mov z24.d, z2.d349; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1350; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1351; CHECK-NEXT: fmop4a za0.d, { z0.d, z1.d }, z24.d352; CHECK-NEXT: ret353 call void @llvm.aarch64.sme.mop4a.2x1.nxv2f64(i32 0, <vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm)354 ret void355}356 357define void @mop4s_za64_f64(<vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm) #0 {358; CHECK-LABEL: mop4s_za64_f64:359; CHECK: // %bb.0:360; CHECK-NEXT: mov z24.d, z2.d361; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1362; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1363; CHECK-NEXT: fmop4s za0.d, { z0.d, z1.d }, z24.d364; CHECK-NEXT: ret365 call void @llvm.aarch64.sme.mop4s.2x1.nxv2f64(i32 0, <vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm)366 ret void367}368 369define void @mop4a_za16_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm) #0 {370; CHECK-LABEL: mop4a_za16_bf16:371; CHECK: // %bb.0:372; CHECK-NEXT: mov z24.d, z2.d373; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1374; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1375; CHECK-NEXT: bfmop4a za0.h, { z0.h, z1.h }, z24.h376; CHECK-NEXT: ret377 call void @llvm.aarch64.sme.mop4a.2x1.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm)378 ret void379}380 381define void @mop4s_za16_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm) #0 {382; CHECK-LABEL: mop4s_za16_bf16:383; CHECK: // %bb.0:384; CHECK-NEXT: mov z24.d, z2.d385; CHECK-NEXT: // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1386; CHECK-NEXT: // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1387; CHECK-NEXT: bfmop4s za0.h, { z0.h, z1.h }, z24.h388; CHECK-NEXT: ret389 call void @llvm.aarch64.sme.mop4s.2x1.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm)390 ret void391}392 393attributes #0 = {nounwind "target-features" = "+sme-i16i64,+sme-f64f64,+sme-b16b16,+sme2p1,+bf16,+sme-f16f16,+sme-mop4" }394