brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.0 KiB · 4d0d696 Raw
545 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> %zm1, <vscale x 16 x i8> %zm2) #0 {8; CHECK-LABEL: mop4a_za32_s8:9; CHECK:       // %bb.0:10; CHECK-NEXT:    mov z25.d, z3.d11; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z112; CHECK-NEXT:    mov z24.d, z2.d13; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z114; CHECK-NEXT:    smop4a za0.s, { z0.b, z1.b }, { z24.b, z25.b }15; CHECK-NEXT:    ret16  call void @llvm.aarch64.sme.smop4a.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)17  ret void18}19 20define void @mop4s_za32_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {21; CHECK-LABEL: mop4s_za32_s8:22; CHECK:       // %bb.0:23; CHECK-NEXT:    mov z25.d, z3.d24; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z125; CHECK-NEXT:    mov z24.d, z2.d26; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z127; CHECK-NEXT:    smop4s za0.s, { z0.b, z1.b }, { z24.b, z25.b }28; CHECK-NEXT:    ret29  call void @llvm.aarch64.sme.smop4s.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)30  ret void31}32 33define void @mop4a_za32_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {34; CHECK-LABEL: mop4a_za32_u8:35; CHECK:       // %bb.0:36; CHECK-NEXT:    mov z25.d, z3.d37; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z138; CHECK-NEXT:    mov z24.d, z2.d39; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z140; CHECK-NEXT:    umop4a za0.s, { z0.b, z1.b }, { z24.b, z25.b }41; CHECK-NEXT:    ret42  call void @llvm.aarch64.sme.umop4a.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)43  ret void44}45 46define void @mop4s_za32_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {47; CHECK-LABEL: mop4s_za32_u8:48; CHECK:       // %bb.0:49; CHECK-NEXT:    mov z25.d, z3.d50; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z151; CHECK-NEXT:    mov z24.d, z2.d52; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z153; CHECK-NEXT:    umop4s za0.s, { z0.b, z1.b }, { z24.b, z25.b }54; CHECK-NEXT:    ret55  call void @llvm.aarch64.sme.umop4s.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)56  ret void57}58 59define void @mop4a_za32_s8_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {60; CHECK-LABEL: mop4a_za32_s8_u8:61; CHECK:       // %bb.0:62; CHECK-NEXT:    mov z25.d, z3.d63; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z164; CHECK-NEXT:    mov z24.d, z2.d65; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z166; CHECK-NEXT:    sumop4a za0.s, { z0.b, z1.b }, { z24.b, z25.b }67; CHECK-NEXT:    ret68  call void @llvm.aarch64.sme.sumop4a.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)69  ret void70}71 72define void @mop4s_za32_s8_u8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {73; CHECK-LABEL: mop4s_za32_s8_u8:74; CHECK:       // %bb.0:75; CHECK-NEXT:    mov z25.d, z3.d76; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z177; CHECK-NEXT:    mov z24.d, z2.d78; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z179; CHECK-NEXT:    sumop4s za0.s, { z0.b, z1.b }, { z24.b, z25.b }80; CHECK-NEXT:    ret81  call void @llvm.aarch64.sme.sumop4s.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)82  ret void83}84 85define void @mop4a_za32_u8_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {86; CHECK-LABEL: mop4a_za32_u8_s8:87; CHECK:       // %bb.0:88; CHECK-NEXT:    mov z25.d, z3.d89; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z190; CHECK-NEXT:    mov z24.d, z2.d91; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z192; CHECK-NEXT:    usmop4a za0.s, { z0.b, z1.b }, { z24.b, z25.b }93; CHECK-NEXT:    ret94  call void @llvm.aarch64.sme.usmop4a.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)95  ret void96}97 98define void @mop4s_za32_u8_s8(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {99; CHECK-LABEL: mop4s_za32_u8_s8:100; CHECK:       // %bb.0:101; CHECK-NEXT:    mov z25.d, z3.d102; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1103; CHECK-NEXT:    mov z24.d, z2.d104; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1105; CHECK-NEXT:    usmop4s za0.s, { z0.b, z1.b }, { z24.b, z25.b }106; CHECK-NEXT:    ret107  call void @llvm.aarch64.sme.usmop4s.wide.2x2.nxv16i8(i32 0, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)108  ret void109}110 111 112define void @mop4a_za32_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {113; CHECK-LABEL: mop4a_za32_s16:114; CHECK:       // %bb.0:115; CHECK-NEXT:    mov z25.d, z3.d116; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1117; CHECK-NEXT:    mov z24.d, z2.d118; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1119; CHECK-NEXT:    smop4a za0.s, { z0.h, z1.h }, { z24.h, z25.h }120; CHECK-NEXT:    ret121  call void @llvm.aarch64.sme.smop4a.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)122  ret void123}124 125define void @mop4s_za32_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {126; CHECK-LABEL: mop4s_za32_s16:127; CHECK:       // %bb.0:128; CHECK-NEXT:    mov z25.d, z3.d129; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1130; CHECK-NEXT:    mov z24.d, z2.d131; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1132; CHECK-NEXT:    smop4s za0.s, { z0.h, z1.h }, { z24.h, z25.h }133; CHECK-NEXT:    ret134  call void @llvm.aarch64.sme.smop4s.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)135  ret void136}137 138define void @mop4a_za32_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {139; CHECK-LABEL: mop4a_za32_u16:140; CHECK:       // %bb.0:141; CHECK-NEXT:    mov z25.d, z3.d142; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1143; CHECK-NEXT:    mov z24.d, z2.d144; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1145; CHECK-NEXT:    umop4a za0.s, { z0.h, z1.h }, { z24.h, z25.h }146; CHECK-NEXT:    ret147  call void @llvm.aarch64.sme.umop4a.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)148  ret void149}150 151define void @mop4s_za32_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {152; CHECK-LABEL: mop4s_za32_u16:153; CHECK:       // %bb.0:154; CHECK-NEXT:    mov z25.d, z3.d155; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1156; CHECK-NEXT:    mov z24.d, z2.d157; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1158; CHECK-NEXT:    umop4s za0.s, { z0.h, z1.h }, { z24.h, z25.h }159; CHECK-NEXT:    ret160  call void @llvm.aarch64.sme.umop4s.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)161  ret void162}163 164define void @mop4a_za32_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2) #0 {165; CHECK-LABEL: mop4a_za32_f16:166; CHECK:       // %bb.0:167; CHECK-NEXT:    mov z25.d, z3.d168; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1169; CHECK-NEXT:    mov z24.d, z2.d170; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1171; CHECK-NEXT:    fmop4a za0.s, { z0.h, z1.h }, { z24.h, z25.h }172; CHECK-NEXT:    ret173  call void @llvm.aarch64.sme.mop4a.wide.2x2.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2)174  ret void175}176 177define void @mop4s_za32_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2) #0 {178; CHECK-LABEL: mop4s_za32_f16:179; CHECK:       // %bb.0:180; CHECK-NEXT:    mov z25.d, z3.d181; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1182; CHECK-NEXT:    mov z24.d, z2.d183; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1184; CHECK-NEXT:    fmop4s za0.s, { z0.h, z1.h }, { z24.h, z25.h }185; CHECK-NEXT:    ret186  call void @llvm.aarch64.sme.mop4s.wide.2x2.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2)187  ret void188}189 190define void @mop4a_za32_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2) #0 {191; CHECK-LABEL: mop4a_za32_bf16:192; CHECK:       // %bb.0:193; CHECK-NEXT:    mov z25.d, z3.d194; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1195; CHECK-NEXT:    mov z24.d, z2.d196; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1197; CHECK-NEXT:    bfmop4a za0.s, { z0.h, z1.h }, { z24.h, z25.h }198; CHECK-NEXT:    ret199  call void @llvm.aarch64.sme.mop4a.wide.2x2.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2)200  ret void201}202 203define void @mop4s_za32_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2) #0 {204; CHECK-LABEL: mop4s_za32_bf16:205; CHECK:       // %bb.0:206; CHECK-NEXT:    mov z25.d, z3.d207; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1208; CHECK-NEXT:    mov z24.d, z2.d209; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1210; CHECK-NEXT:    bfmop4s za0.s, { z0.h, z1.h }, { z24.h, z25.h }211; CHECK-NEXT:    ret212  call void @llvm.aarch64.sme.mop4s.wide.2x2.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2)213  ret void214}215 216define void @mop4a_za64_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {217; CHECK-LABEL: mop4a_za64_s16:218; CHECK:       // %bb.0:219; CHECK-NEXT:    mov z25.d, z3.d220; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1221; CHECK-NEXT:    mov z24.d, z2.d222; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1223; CHECK-NEXT:    smop4a za0.d, { z0.h, z1.h }, { z24.h, z25.h }224; CHECK-NEXT:    ret225  call void @llvm.aarch64.sme.smop4a.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)226  ret void227}228 229define void @mop4s_za64_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {230; CHECK-LABEL: mop4s_za64_s16:231; CHECK:       // %bb.0:232; CHECK-NEXT:    mov z25.d, z3.d233; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1234; CHECK-NEXT:    mov z24.d, z2.d235; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1236; CHECK-NEXT:    smop4s za0.d, { z0.h, z1.h }, { z24.h, z25.h }237; CHECK-NEXT:    ret238  call void @llvm.aarch64.sme.smop4s.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)239  ret void240}241 242define void @mop4a_za64_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {243; CHECK-LABEL: mop4a_za64_u16:244; CHECK:       // %bb.0:245; CHECK-NEXT:    mov z25.d, z3.d246; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1247; CHECK-NEXT:    mov z24.d, z2.d248; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1249; CHECK-NEXT:    umop4a za0.d, { z0.h, z1.h }, { z24.h, z25.h }250; CHECK-NEXT:    ret251  call void @llvm.aarch64.sme.umop4a.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)252  ret void253}254 255define void @mop4s_za64_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {256; CHECK-LABEL: mop4s_za64_u16:257; CHECK:       // %bb.0:258; CHECK-NEXT:    mov z25.d, z3.d259; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1260; CHECK-NEXT:    mov z24.d, z2.d261; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1262; CHECK-NEXT:    umop4s za0.d, { z0.h, z1.h }, { z24.h, z25.h }263; CHECK-NEXT:    ret264  call void @llvm.aarch64.sme.umop4s.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)265  ret void266}267 268define void @mop4a_za64_s16_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {269; CHECK-LABEL: mop4a_za64_s16_u16:270; CHECK:       // %bb.0:271; CHECK-NEXT:    mov z25.d, z3.d272; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1273; CHECK-NEXT:    mov z24.d, z2.d274; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1275; CHECK-NEXT:    sumop4a za0.d, { z0.h, z1.h }, { z24.h, z25.h }276; CHECK-NEXT:    ret277  call void @llvm.aarch64.sme.sumop4a.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)278  ret void279}280 281define void @mop4s_za64_s16_u16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {282; CHECK-LABEL: mop4s_za64_s16_u16:283; CHECK:       // %bb.0:284; CHECK-NEXT:    mov z25.d, z3.d285; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1286; CHECK-NEXT:    mov z24.d, z2.d287; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1288; CHECK-NEXT:    sumop4s za0.d, { z0.h, z1.h }, { z24.h, z25.h }289; CHECK-NEXT:    ret290  call void @llvm.aarch64.sme.sumop4s.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)291  ret void292}293 294define void @mop4a_za64_u16_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {295; CHECK-LABEL: mop4a_za64_u16_s16:296; CHECK:       // %bb.0:297; CHECK-NEXT:    mov z25.d, z3.d298; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1299; CHECK-NEXT:    mov z24.d, z2.d300; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1301; CHECK-NEXT:    usmop4a za0.d, { z0.h, z1.h }, { z24.h, z25.h }302; CHECK-NEXT:    ret303  call void @llvm.aarch64.sme.usmop4a.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)304  ret void305}306 307define void @mop4s_za64_u16_s16(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {308; CHECK-LABEL: mop4s_za64_u16_s16:309; CHECK:       // %bb.0:310; CHECK-NEXT:    mov z25.d, z3.d311; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1312; CHECK-NEXT:    mov z24.d, z2.d313; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1314; CHECK-NEXT:    usmop4s za0.d, { z0.h, z1.h }, { z24.h, z25.h }315; CHECK-NEXT:    ret316  call void @llvm.aarch64.sme.usmop4s.za64.wide.2x2.nxv8i16(i32 0, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)317  ret void318}319 320; Non-widening321define void @mop4a_za16_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2) #0 {322; CHECK-LABEL: mop4a_za16_f16:323; CHECK:       // %bb.0:324; CHECK-NEXT:    mov z25.d, z3.d325; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1326; CHECK-NEXT:    mov z24.d, z2.d327; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1328; CHECK-NEXT:    fmop4a za0.h, { z0.h, z1.h }, { z24.h, z25.h }329; CHECK-NEXT:    ret330  call void @llvm.aarch64.sme.mop4a.2x2.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2)331  ret void332}333 334define void @mop4s_za16_f16(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2) #0 {335; CHECK-LABEL: mop4s_za16_f16:336; CHECK:       // %bb.0:337; CHECK-NEXT:    mov z25.d, z3.d338; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1339; CHECK-NEXT:    mov z24.d, z2.d340; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1341; CHECK-NEXT:    fmop4s za0.h, { z0.h, z1.h }, { z24.h, z25.h }342; CHECK-NEXT:    ret343  call void @llvm.aarch64.sme.mop4s.2x2.nxv8f16(i32 0, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2)344  ret void345}346 347define void @mop4a_za32_f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm1, <vscale x 4 x float> %zm2) #0 {348; CHECK-LABEL: mop4a_za32_f32:349; CHECK:       // %bb.0:350; CHECK-NEXT:    mov z25.d, z3.d351; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1352; CHECK-NEXT:    mov z24.d, z2.d353; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1354; CHECK-NEXT:    fmop4a za0.s, { z0.s, z1.s }, { z24.s, z25.s }355; CHECK-NEXT:    ret356  call void @llvm.aarch64.sme.mop4a.2x2.nxv4f32(i32 0, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm1, <vscale x 4 x float> %zm2)357  ret void358}359 360define void @mop4s_za32_f32(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm1, <vscale x 4 x float> %zm2) #0 {361; CHECK-LABEL: mop4s_za32_f32:362; CHECK:       // %bb.0:363; CHECK-NEXT:    mov z25.d, z3.d364; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1365; CHECK-NEXT:    mov z24.d, z2.d366; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1367; CHECK-NEXT:    fmop4s za0.s, { z0.s, z1.s }, { z24.s, z25.s }368; CHECK-NEXT:    ret369  call void @llvm.aarch64.sme.mop4s.2x2.nxv4f32(i32 0, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm1, <vscale x 4 x float> %zm2)370  ret void371}372 373define void @mop4a_za64_f64(<vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm1, <vscale x 2 x double> %zm2) #0 {374; CHECK-LABEL: mop4a_za64_f64:375; CHECK:       // %bb.0:376; CHECK-NEXT:    mov z25.d, z3.d377; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1378; CHECK-NEXT:    mov z24.d, z2.d379; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1380; CHECK-NEXT:    fmop4a za0.d, { z0.d, z1.d }, { z24.d, z25.d }381; CHECK-NEXT:    ret382  call void @llvm.aarch64.sme.mop4a.2x2.nxv2f64(i32 0, <vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm1, <vscale x 2 x double> %zm2)383  ret void384}385 386define void @mop4s_za64_f64(<vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm1, <vscale x 2 x double> %zm2) #0 {387; CHECK-LABEL: mop4s_za64_f64:388; CHECK:       // %bb.0:389; CHECK-NEXT:    mov z25.d, z3.d390; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1391; CHECK-NEXT:    mov z24.d, z2.d392; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1393; CHECK-NEXT:    fmop4s za0.d, { z0.d, z1.d }, { z24.d, z25.d }394; CHECK-NEXT:    ret395  call void @llvm.aarch64.sme.mop4s.2x2.nxv2f64(i32 0, <vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm1, <vscale x 2 x double> %zm2)396  ret void397}398 399define void @mop4a_za16_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2) #0 {400; CHECK-LABEL: mop4a_za16_bf16:401; CHECK:       // %bb.0:402; CHECK-NEXT:    mov z25.d, z3.d403; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1404; CHECK-NEXT:    mov z24.d, z2.d405; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1406; CHECK-NEXT:    bfmop4a za0.h, { z0.h, z1.h }, { z24.h, z25.h }407; CHECK-NEXT:    ret408  call void @llvm.aarch64.sme.mop4a.2x2.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2)409  ret void410}411 412define void @mop4s_za16_bf16(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2) #0 {413; CHECK-LABEL: mop4s_za16_bf16:414; CHECK:       // %bb.0:415; CHECK-NEXT:    mov z25.d, z3.d416; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1417; CHECK-NEXT:    mov z24.d, z2.d418; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1419; CHECK-NEXT:    bfmop4s za0.h, { z0.h, z1.h }, { z24.h, z25.h }420; CHECK-NEXT:    ret421  call void @llvm.aarch64.sme.mop4s.2x2.nxv8bf16(i32 0, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2)422  ret void423}424 425; Tile limits426 427define void @mop4s_za32_s8_limit(<vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2) #0 {428; CHECK-LABEL: mop4s_za32_s8_limit:429; CHECK:       // %bb.0:430; CHECK-NEXT:    mov z25.d, z3.d431; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1432; CHECK-NEXT:    mov z24.d, z2.d433; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1434; CHECK-NEXT:    smop4s za3.s, { z0.b, z1.b }, { z24.b, z25.b }435; CHECK-NEXT:    ret436  call void @llvm.aarch64.sme.smop4s.wide.2x2.nxv16i8(i32 3, <vscale x 16 x i8> %zn1, <vscale x 16 x i8> %zn2, <vscale x 16 x i8> %zm1, <vscale x 16 x i8> %zm2)437  ret void438}439 440define void @mop4s_za32_s16_limit(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {441; CHECK-LABEL: mop4s_za32_s16_limit:442; CHECK:       // %bb.0:443; CHECK-NEXT:    mov z25.d, z3.d444; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1445; CHECK-NEXT:    mov z24.d, z2.d446; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1447; CHECK-NEXT:    smop4s za3.s, { z0.h, z1.h }, { z24.h, z25.h }448; CHECK-NEXT:    ret449  call void @llvm.aarch64.sme.smop4s.wide.2x2.nxv8i16(i32 3, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)450  ret void451}452 453define void @mop4s_za32_f16_limit(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2) #0 {454; CHECK-LABEL: mop4s_za32_f16_limit:455; CHECK:       // %bb.0:456; CHECK-NEXT:    mov z25.d, z3.d457; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1458; CHECK-NEXT:    mov z24.d, z2.d459; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1460; CHECK-NEXT:    fmop4s za3.s, { z0.h, z1.h }, { z24.h, z25.h }461; CHECK-NEXT:    ret462  call void @llvm.aarch64.sme.mop4s.wide.2x2.nxv8f16(i32 3, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2)463  ret void464}465 466define void @mop4s_za32_bf16_limit(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2) #0 {467; CHECK-LABEL: mop4s_za32_bf16_limit:468; CHECK:       // %bb.0:469; CHECK-NEXT:    mov z25.d, z3.d470; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1471; CHECK-NEXT:    mov z24.d, z2.d472; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1473; CHECK-NEXT:    bfmop4s za3.s, { z0.h, z1.h }, { z24.h, z25.h }474; CHECK-NEXT:    ret475  call void @llvm.aarch64.sme.mop4s.wide.2x2.nxv8bf16(i32 3, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2)476  ret void477}478 479define void @mop4s_za64_s16_limit(<vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2) #0 {480; CHECK-LABEL: mop4s_za64_s16_limit:481; CHECK:       // %bb.0:482; CHECK-NEXT:    mov z25.d, z3.d483; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1484; CHECK-NEXT:    mov z24.d, z2.d485; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1486; CHECK-NEXT:    smop4s za7.d, { z0.h, z1.h }, { z24.h, z25.h }487; CHECK-NEXT:    ret488  call void @llvm.aarch64.sme.smop4s.za64.wide.2x2.nxv8i16(i32 7, <vscale x 8 x i16> %zn1, <vscale x 8 x i16> %zn2, <vscale x 8 x i16> %zm1, <vscale x 8 x i16> %zm2)489  ret void490}491 492define void @mop4s_za64_f64_limit(<vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm1, <vscale x 2 x double> %zm2) #0 {493; CHECK-LABEL: mop4s_za64_f64_limit:494; CHECK:       // %bb.0:495; CHECK-NEXT:    mov z25.d, z3.d496; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1497; CHECK-NEXT:    mov z24.d, z2.d498; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1499; CHECK-NEXT:    fmop4s za7.d, { z0.d, z1.d }, { z24.d, z25.d }500; CHECK-NEXT:    ret501  call void @llvm.aarch64.sme.mop4s.2x2.nxv2f64(i32 7, <vscale x 2 x double> %zn1, <vscale x 2 x double> %zn2, <vscale x 2 x double> %zm1, <vscale x 2 x double> %zm2)502  ret void503}504 505define void @mop4s_za32_f32_limit(<vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm1, <vscale x 4 x float> %zm2) #0 {506; CHECK-LABEL: mop4s_za32_f32_limit:507; CHECK:       // %bb.0:508; CHECK-NEXT:    mov z25.d, z3.d509; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1510; CHECK-NEXT:    mov z24.d, z2.d511; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1512; CHECK-NEXT:    fmop4s za3.s, { z0.s, z1.s }, { z24.s, z25.s }513; CHECK-NEXT:    ret514  call void @llvm.aarch64.sme.mop4s.2x2.nxv4f32(i32 3, <vscale x 4 x float> %zn1, <vscale x 4 x float> %zn2, <vscale x 4 x float> %zm1, <vscale x 4 x float> %zm2)515  ret void516}517 518define void @mop4s_za16_f16_limit(<vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2) #0 {519; CHECK-LABEL: mop4s_za16_f16_limit:520; CHECK:       // %bb.0:521; CHECK-NEXT:    mov z25.d, z3.d522; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1523; CHECK-NEXT:    mov z24.d, z2.d524; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1525; CHECK-NEXT:    fmop4s za1.h, { z0.h, z1.h }, { z24.h, z25.h }526; CHECK-NEXT:    ret527  call void @llvm.aarch64.sme.mop4s.2x2.nxv8f16(i32 1, <vscale x 8 x half> %zn1, <vscale x 8 x half> %zn2, <vscale x 8 x half> %zm1, <vscale x 8 x half> %zm2)528  ret void529}530 531define void @mop4s_za16_bf16_limit(<vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2) #0 {532; CHECK-LABEL: mop4s_za16_bf16_limit:533; CHECK:       // %bb.0:534; CHECK-NEXT:    mov z25.d, z3.d535; CHECK-NEXT:    // kill: def $z1 killed $z1 killed $z0_z1 def $z0_z1536; CHECK-NEXT:    mov z24.d, z2.d537; CHECK-NEXT:    // kill: def $z0 killed $z0 killed $z0_z1 def $z0_z1538; CHECK-NEXT:    bfmop4s za1.h, { z0.h, z1.h }, { z24.h, z25.h }539; CHECK-NEXT:    ret540  call void @llvm.aarch64.sme.mop4s.2x2.nxv8bf16(i32 1, <vscale x 8 x bfloat> %zn1, <vscale x 8 x bfloat> %zn2, <vscale x 8 x bfloat> %zm1, <vscale x 8 x bfloat> %zm2)541  ret void542}543 544attributes #0 = {nounwind "target-features" = "+sme-i16i64,+sme-f64f64,+sme-b16b16,+sme2p1,+bf16,+sme-f16f16,+sme-mop4" }545