2195 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mattr=+bf16,+sve < %s | FileCheck %s -check-prefixes=CHECK,SVE3; RUN: llc -mattr=+bf16,+sve2p2 < %s | FileCheck %s -check-prefix CHECK-2p24; RUN: llc -mattr=+bf16,+sve,+sme2p2 < %s | FileCheck %s -check-prefix CHECK-2p25 6; RUN: llc -mattr=+bf16,+sme -force-streaming < %s | FileCheck %s -check-prefixes=CHECK,STREAMING-SVE7; RUN: llc -mattr=+bf16,+sme2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p28; RUN: llc -mattr=+bf16,+sme,+sve2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p29 10target triple = "aarch64-linux"11 12define <vscale x 16 x i8> @test_svcls_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {13; CHECK-LABEL: test_svcls_s8_x_1:14; CHECK: // %bb.0: // %entry15; CHECK-NEXT: cls z0.b, p0/m, z0.b16; CHECK-NEXT: ret17;18; CHECK-2p2-LABEL: test_svcls_s8_x_1:19; CHECK-2p2: // %bb.0: // %entry20; CHECK-2p2-NEXT: cls z0.b, p0/z, z0.b21; CHECK-2p2-NEXT: ret22entry:23 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cls.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)24 ret <vscale x 16 x i8> %025}26 27define <vscale x 16 x i8> @test_svcls_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {28; CHECK-LABEL: test_svcls_s8_x_2:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: movprfx z0, z131; CHECK-NEXT: cls z0.b, p0/m, z1.b32; CHECK-NEXT: ret33;34; CHECK-2p2-LABEL: test_svcls_s8_x_2:35; CHECK-2p2: // %bb.0: // %entry36; CHECK-2p2-NEXT: cls z0.b, p0/z, z1.b37; CHECK-2p2-NEXT: ret38entry:39 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cls.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)40 ret <vscale x 16 x i8> %041}42 43define <vscale x 16 x i8> @test_svcls_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {44; SVE-LABEL: test_svcls_s8_z:45; SVE: // %bb.0: // %entry46; SVE-NEXT: movi v0.2d, #000000000000000047; SVE-NEXT: cls z0.b, p0/m, z1.b48; SVE-NEXT: ret49;50; CHECK-2p2-LABEL: test_svcls_s8_z:51; CHECK-2p2: // %bb.0: // %entry52; CHECK-2p2-NEXT: cls z0.b, p0/z, z1.b53; CHECK-2p2-NEXT: ret54;55; STREAMING-SVE-LABEL: test_svcls_s8_z:56; STREAMING-SVE: // %bb.0: // %entry57; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x058; STREAMING-SVE-NEXT: cls z0.b, p0/m, z1.b59; STREAMING-SVE-NEXT: ret60entry:61 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cls.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)62 ret <vscale x 16 x i8> %063}64 65define <vscale x 8 x i16> @test_svcls_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {66; CHECK-LABEL: test_svcls_s16_x_1:67; CHECK: // %bb.0: // %entry68; CHECK-NEXT: cls z0.h, p0/m, z0.h69; CHECK-NEXT: ret70;71; CHECK-2p2-LABEL: test_svcls_s16_x_1:72; CHECK-2p2: // %bb.0: // %entry73; CHECK-2p2-NEXT: cls z0.h, p0/z, z0.h74; CHECK-2p2-NEXT: ret75entry:76 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cls.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)77 ret <vscale x 8 x i16> %078}79 80define <vscale x 8 x i16> @test_svcls_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {81; CHECK-LABEL: test_svcls_s16_x_2:82; CHECK: // %bb.0: // %entry83; CHECK-NEXT: movprfx z0, z184; CHECK-NEXT: cls z0.h, p0/m, z1.h85; CHECK-NEXT: ret86;87; CHECK-2p2-LABEL: test_svcls_s16_x_2:88; CHECK-2p2: // %bb.0: // %entry89; CHECK-2p2-NEXT: cls z0.h, p0/z, z1.h90; CHECK-2p2-NEXT: ret91entry:92 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cls.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)93 ret <vscale x 8 x i16> %094}95 96define <vscale x 8 x i16> @test_svcls_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {97; SVE-LABEL: test_svcls_s16_z:98; SVE: // %bb.0: // %entry99; SVE-NEXT: movi v0.2d, #0000000000000000100; SVE-NEXT: cls z0.h, p0/m, z1.h101; SVE-NEXT: ret102;103; CHECK-2p2-LABEL: test_svcls_s16_z:104; CHECK-2p2: // %bb.0: // %entry105; CHECK-2p2-NEXT: cls z0.h, p0/z, z1.h106; CHECK-2p2-NEXT: ret107;108; STREAMING-SVE-LABEL: test_svcls_s16_z:109; STREAMING-SVE: // %bb.0: // %entry110; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0111; STREAMING-SVE-NEXT: cls z0.h, p0/m, z1.h112; STREAMING-SVE-NEXT: ret113entry:114 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cls.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)115 ret <vscale x 8 x i16> %0116}117 118define <vscale x 4 x i32> @test_svcls_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {119; CHECK-LABEL: test_svcls_s32_x_1:120; CHECK: // %bb.0: // %entry121; CHECK-NEXT: cls z0.s, p0/m, z0.s122; CHECK-NEXT: ret123;124; CHECK-2p2-LABEL: test_svcls_s32_x_1:125; CHECK-2p2: // %bb.0: // %entry126; CHECK-2p2-NEXT: cls z0.s, p0/z, z0.s127; CHECK-2p2-NEXT: ret128entry:129 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cls.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)130 ret <vscale x 4 x i32> %0131}132 133define <vscale x 4 x i32> @test_svcls_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {134; CHECK-LABEL: test_svcls_s32_x_2:135; CHECK: // %bb.0: // %entry136; CHECK-NEXT: movprfx z0, z1137; CHECK-NEXT: cls z0.s, p0/m, z1.s138; CHECK-NEXT: ret139;140; CHECK-2p2-LABEL: test_svcls_s32_x_2:141; CHECK-2p2: // %bb.0: // %entry142; CHECK-2p2-NEXT: cls z0.s, p0/z, z1.s143; CHECK-2p2-NEXT: ret144entry:145 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cls.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)146 ret <vscale x 4 x i32> %0147}148 149define <vscale x 4 x i32> @test_svcls_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {150; SVE-LABEL: test_svcls_s32_z:151; SVE: // %bb.0: // %entry152; SVE-NEXT: movi v0.2d, #0000000000000000153; SVE-NEXT: cls z0.s, p0/m, z1.s154; SVE-NEXT: ret155;156; CHECK-2p2-LABEL: test_svcls_s32_z:157; CHECK-2p2: // %bb.0: // %entry158; CHECK-2p2-NEXT: cls z0.s, p0/z, z1.s159; CHECK-2p2-NEXT: ret160;161; STREAMING-SVE-LABEL: test_svcls_s32_z:162; STREAMING-SVE: // %bb.0: // %entry163; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0164; STREAMING-SVE-NEXT: cls z0.s, p0/m, z1.s165; STREAMING-SVE-NEXT: ret166entry:167 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cls.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)168 ret <vscale x 4 x i32> %0169}170 171define <vscale x 2 x i64> @test_svcls_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {172; CHECK-LABEL: test_svcls_s64_x_1:173; CHECK: // %bb.0: // %entry174; CHECK-NEXT: cls z0.d, p0/m, z0.d175; CHECK-NEXT: ret176;177; CHECK-2p2-LABEL: test_svcls_s64_x_1:178; CHECK-2p2: // %bb.0: // %entry179; CHECK-2p2-NEXT: cls z0.d, p0/z, z0.d180; CHECK-2p2-NEXT: ret181entry:182 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cls.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)183 ret <vscale x 2 x i64> %0184}185 186define <vscale x 2 x i64> @test_svcls_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {187; CHECK-LABEL: test_svcls_s64_x_2:188; CHECK: // %bb.0: // %entry189; CHECK-NEXT: movprfx z0, z1190; CHECK-NEXT: cls z0.d, p0/m, z1.d191; CHECK-NEXT: ret192;193; CHECK-2p2-LABEL: test_svcls_s64_x_2:194; CHECK-2p2: // %bb.0: // %entry195; CHECK-2p2-NEXT: cls z0.d, p0/z, z1.d196; CHECK-2p2-NEXT: ret197entry:198 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cls.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)199 ret <vscale x 2 x i64> %0200}201 202define <vscale x 2 x i64> @test_svcls_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {203; SVE-LABEL: test_svcls_s64_z:204; SVE: // %bb.0: // %entry205; SVE-NEXT: movi v0.2d, #0000000000000000206; SVE-NEXT: cls z0.d, p0/m, z1.d207; SVE-NEXT: ret208;209; CHECK-2p2-LABEL: test_svcls_s64_z:210; CHECK-2p2: // %bb.0: // %entry211; CHECK-2p2-NEXT: cls z0.d, p0/z, z1.d212; CHECK-2p2-NEXT: ret213;214; STREAMING-SVE-LABEL: test_svcls_s64_z:215; STREAMING-SVE: // %bb.0: // %entry216; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0217; STREAMING-SVE-NEXT: cls z0.d, p0/m, z1.d218; STREAMING-SVE-NEXT: ret219entry:220 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cls.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)221 ret <vscale x 2 x i64> %0222}223 224define <vscale x 16 x i8> @test_svclz_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {225; CHECK-LABEL: test_svclz_s8_x_1:226; CHECK: // %bb.0: // %entry227; CHECK-NEXT: clz z0.b, p0/m, z0.b228; CHECK-NEXT: ret229;230; CHECK-2p2-LABEL: test_svclz_s8_x_1:231; CHECK-2p2: // %bb.0: // %entry232; CHECK-2p2-NEXT: clz z0.b, p0/z, z0.b233; CHECK-2p2-NEXT: ret234entry:235 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.clz.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)236 ret <vscale x 16 x i8> %0237}238 239define <vscale x 16 x i8> @test_svclz_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {240; CHECK-LABEL: test_svclz_s8_x_2:241; CHECK: // %bb.0: // %entry242; CHECK-NEXT: movprfx z0, z1243; CHECK-NEXT: clz z0.b, p0/m, z1.b244; CHECK-NEXT: ret245;246; CHECK-2p2-LABEL: test_svclz_s8_x_2:247; CHECK-2p2: // %bb.0: // %entry248; CHECK-2p2-NEXT: clz z0.b, p0/z, z1.b249; CHECK-2p2-NEXT: ret250entry:251 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.clz.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)252 ret <vscale x 16 x i8> %0253}254 255define <vscale x 16 x i8> @test_svclz_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {256; SVE-LABEL: test_svclz_s8_z:257; SVE: // %bb.0: // %entry258; SVE-NEXT: movi v0.2d, #0000000000000000259; SVE-NEXT: clz z0.b, p0/m, z1.b260; SVE-NEXT: ret261;262; CHECK-2p2-LABEL: test_svclz_s8_z:263; CHECK-2p2: // %bb.0: // %entry264; CHECK-2p2-NEXT: clz z0.b, p0/z, z1.b265; CHECK-2p2-NEXT: ret266;267; STREAMING-SVE-LABEL: test_svclz_s8_z:268; STREAMING-SVE: // %bb.0: // %entry269; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x0270; STREAMING-SVE-NEXT: clz z0.b, p0/m, z1.b271; STREAMING-SVE-NEXT: ret272entry:273 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.clz.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)274 ret <vscale x 16 x i8> %0275}276 277define <vscale x 8 x i16> @test_svclz_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {278; CHECK-LABEL: test_svclz_s16_x_1:279; CHECK: // %bb.0: // %entry280; CHECK-NEXT: clz z0.h, p0/m, z0.h281; CHECK-NEXT: ret282;283; CHECK-2p2-LABEL: test_svclz_s16_x_1:284; CHECK-2p2: // %bb.0: // %entry285; CHECK-2p2-NEXT: clz z0.h, p0/z, z0.h286; CHECK-2p2-NEXT: ret287entry:288 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.clz.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)289 ret <vscale x 8 x i16> %0290}291 292define <vscale x 8 x i16> @test_svclz_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {293; CHECK-LABEL: test_svclz_s16_x_2:294; CHECK: // %bb.0: // %entry295; CHECK-NEXT: movprfx z0, z1296; CHECK-NEXT: clz z0.h, p0/m, z1.h297; CHECK-NEXT: ret298;299; CHECK-2p2-LABEL: test_svclz_s16_x_2:300; CHECK-2p2: // %bb.0: // %entry301; CHECK-2p2-NEXT: clz z0.h, p0/z, z1.h302; CHECK-2p2-NEXT: ret303entry:304 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.clz.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)305 ret <vscale x 8 x i16> %0306}307 308define <vscale x 8 x i16> @test_svclz_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {309; SVE-LABEL: test_svclz_s16_z:310; SVE: // %bb.0: // %entry311; SVE-NEXT: movi v0.2d, #0000000000000000312; SVE-NEXT: clz z0.h, p0/m, z1.h313; SVE-NEXT: ret314;315; CHECK-2p2-LABEL: test_svclz_s16_z:316; CHECK-2p2: // %bb.0: // %entry317; CHECK-2p2-NEXT: clz z0.h, p0/z, z1.h318; CHECK-2p2-NEXT: ret319;320; STREAMING-SVE-LABEL: test_svclz_s16_z:321; STREAMING-SVE: // %bb.0: // %entry322; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0323; STREAMING-SVE-NEXT: clz z0.h, p0/m, z1.h324; STREAMING-SVE-NEXT: ret325entry:326 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.clz.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)327 ret <vscale x 8 x i16> %0328}329 330define <vscale x 4 x i32> @test_svclz_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {331; CHECK-LABEL: test_svclz_s32_x_1:332; CHECK: // %bb.0: // %entry333; CHECK-NEXT: clz z0.s, p0/m, z0.s334; CHECK-NEXT: ret335;336; CHECK-2p2-LABEL: test_svclz_s32_x_1:337; CHECK-2p2: // %bb.0: // %entry338; CHECK-2p2-NEXT: clz z0.s, p0/z, z0.s339; CHECK-2p2-NEXT: ret340entry:341 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.clz.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)342 ret <vscale x 4 x i32> %0343}344 345define <vscale x 4 x i32> @test_svclz_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {346; CHECK-LABEL: test_svclz_s32_x_2:347; CHECK: // %bb.0: // %entry348; CHECK-NEXT: movprfx z0, z1349; CHECK-NEXT: clz z0.s, p0/m, z1.s350; CHECK-NEXT: ret351;352; CHECK-2p2-LABEL: test_svclz_s32_x_2:353; CHECK-2p2: // %bb.0: // %entry354; CHECK-2p2-NEXT: clz z0.s, p0/z, z1.s355; CHECK-2p2-NEXT: ret356entry:357 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.clz.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)358 ret <vscale x 4 x i32> %0359}360 361define <vscale x 4 x i32> @test_svclz_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {362; SVE-LABEL: test_svclz_s32_z:363; SVE: // %bb.0: // %entry364; SVE-NEXT: movi v0.2d, #0000000000000000365; SVE-NEXT: clz z0.s, p0/m, z1.s366; SVE-NEXT: ret367;368; CHECK-2p2-LABEL: test_svclz_s32_z:369; CHECK-2p2: // %bb.0: // %entry370; CHECK-2p2-NEXT: clz z0.s, p0/z, z1.s371; CHECK-2p2-NEXT: ret372;373; STREAMING-SVE-LABEL: test_svclz_s32_z:374; STREAMING-SVE: // %bb.0: // %entry375; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0376; STREAMING-SVE-NEXT: clz z0.s, p0/m, z1.s377; STREAMING-SVE-NEXT: ret378entry:379 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.clz.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)380 ret <vscale x 4 x i32> %0381}382 383define <vscale x 2 x i64> @test_svclz_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {384; CHECK-LABEL: test_svclz_s64_x_1:385; CHECK: // %bb.0: // %entry386; CHECK-NEXT: clz z0.d, p0/m, z0.d387; CHECK-NEXT: ret388;389; CHECK-2p2-LABEL: test_svclz_s64_x_1:390; CHECK-2p2: // %bb.0: // %entry391; CHECK-2p2-NEXT: clz z0.d, p0/z, z0.d392; CHECK-2p2-NEXT: ret393entry:394 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.clz.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)395 ret <vscale x 2 x i64> %0396}397 398define <vscale x 2 x i64> @test_svclz_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {399; CHECK-LABEL: test_svclz_s64_x_2:400; CHECK: // %bb.0: // %entry401; CHECK-NEXT: movprfx z0, z1402; CHECK-NEXT: clz z0.d, p0/m, z1.d403; CHECK-NEXT: ret404;405; CHECK-2p2-LABEL: test_svclz_s64_x_2:406; CHECK-2p2: // %bb.0: // %entry407; CHECK-2p2-NEXT: clz z0.d, p0/z, z1.d408; CHECK-2p2-NEXT: ret409entry:410 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.clz.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)411 ret <vscale x 2 x i64> %0412}413 414define <vscale x 2 x i64> @test_svclz_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {415; SVE-LABEL: test_svclz_s64_z:416; SVE: // %bb.0: // %entry417; SVE-NEXT: movi v0.2d, #0000000000000000418; SVE-NEXT: clz z0.d, p0/m, z1.d419; SVE-NEXT: ret420;421; CHECK-2p2-LABEL: test_svclz_s64_z:422; CHECK-2p2: // %bb.0: // %entry423; CHECK-2p2-NEXT: clz z0.d, p0/z, z1.d424; CHECK-2p2-NEXT: ret425;426; STREAMING-SVE-LABEL: test_svclz_s64_z:427; STREAMING-SVE: // %bb.0: // %entry428; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0429; STREAMING-SVE-NEXT: clz z0.d, p0/m, z1.d430; STREAMING-SVE-NEXT: ret431entry:432 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.clz.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)433 ret <vscale x 2 x i64> %0434}435 436define <vscale x 16 x i8> @test_svcnt_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {437; CHECK-LABEL: test_svcnt_s8_x_1:438; CHECK: // %bb.0: // %entry439; CHECK-NEXT: cnt z0.b, p0/m, z0.b440; CHECK-NEXT: ret441;442; CHECK-2p2-LABEL: test_svcnt_s8_x_1:443; CHECK-2p2: // %bb.0: // %entry444; CHECK-2p2-NEXT: cnt z0.b, p0/z, z0.b445; CHECK-2p2-NEXT: ret446entry:447 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnt.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)448 ret <vscale x 16 x i8> %0449}450 451define <vscale x 16 x i8> @test_svcnt_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {452; CHECK-LABEL: test_svcnt_s8_x_2:453; CHECK: // %bb.0: // %entry454; CHECK-NEXT: movprfx z0, z1455; CHECK-NEXT: cnt z0.b, p0/m, z1.b456; CHECK-NEXT: ret457;458; CHECK-2p2-LABEL: test_svcnt_s8_x_2:459; CHECK-2p2: // %bb.0: // %entry460; CHECK-2p2-NEXT: cnt z0.b, p0/z, z1.b461; CHECK-2p2-NEXT: ret462entry:463 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnt.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)464 ret <vscale x 16 x i8> %0465}466 467define <vscale x 16 x i8> @test_svcnt_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {468; SVE-LABEL: test_svcnt_s8_z:469; SVE: // %bb.0: // %entry470; SVE-NEXT: movi v0.2d, #0000000000000000471; SVE-NEXT: cnt z0.b, p0/m, z1.b472; SVE-NEXT: ret473;474; CHECK-2p2-LABEL: test_svcnt_s8_z:475; CHECK-2p2: // %bb.0: // %entry476; CHECK-2p2-NEXT: cnt z0.b, p0/z, z1.b477; CHECK-2p2-NEXT: ret478;479; STREAMING-SVE-LABEL: test_svcnt_s8_z:480; STREAMING-SVE: // %bb.0: // %entry481; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x0482; STREAMING-SVE-NEXT: cnt z0.b, p0/m, z1.b483; STREAMING-SVE-NEXT: ret484entry:485 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnt.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)486 ret <vscale x 16 x i8> %0487}488 489define <vscale x 8 x i16> @test_svcnt_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {490; CHECK-LABEL: test_svcnt_s16_x_1:491; CHECK: // %bb.0: // %entry492; CHECK-NEXT: cnt z0.h, p0/m, z0.h493; CHECK-NEXT: ret494;495; CHECK-2p2-LABEL: test_svcnt_s16_x_1:496; CHECK-2p2: // %bb.0: // %entry497; CHECK-2p2-NEXT: cnt z0.h, p0/z, z0.h498; CHECK-2p2-NEXT: ret499entry:500 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)501 ret <vscale x 8 x i16> %0502}503 504define <vscale x 8 x i16> @test_svcnt_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {505; CHECK-LABEL: test_svcnt_s16_x_2:506; CHECK: // %bb.0: // %entry507; CHECK-NEXT: movprfx z0, z1508; CHECK-NEXT: cnt z0.h, p0/m, z1.h509; CHECK-NEXT: ret510;511; CHECK-2p2-LABEL: test_svcnt_s16_x_2:512; CHECK-2p2: // %bb.0: // %entry513; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h514; CHECK-2p2-NEXT: ret515entry:516 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)517 ret <vscale x 8 x i16> %0518}519 520define <vscale x 8 x i16> @test_svcnt_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {521; SVE-LABEL: test_svcnt_s16_z:522; SVE: // %bb.0: // %entry523; SVE-NEXT: movi v0.2d, #0000000000000000524; SVE-NEXT: cnt z0.h, p0/m, z1.h525; SVE-NEXT: ret526;527; CHECK-2p2-LABEL: test_svcnt_s16_z:528; CHECK-2p2: // %bb.0: // %entry529; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h530; CHECK-2p2-NEXT: ret531;532; STREAMING-SVE-LABEL: test_svcnt_s16_z:533; STREAMING-SVE: // %bb.0: // %entry534; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0535; STREAMING-SVE-NEXT: cnt z0.h, p0/m, z1.h536; STREAMING-SVE-NEXT: ret537entry:538 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)539 ret <vscale x 8 x i16> %0540}541 542define <vscale x 4 x i32> @test_svcnt_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {543; CHECK-LABEL: test_svcnt_s32_x_1:544; CHECK: // %bb.0: // %entry545; CHECK-NEXT: cnt z0.s, p0/m, z0.s546; CHECK-NEXT: ret547;548; CHECK-2p2-LABEL: test_svcnt_s32_x_1:549; CHECK-2p2: // %bb.0: // %entry550; CHECK-2p2-NEXT: cnt z0.s, p0/z, z0.s551; CHECK-2p2-NEXT: ret552entry:553 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)554 ret <vscale x 4 x i32> %0555}556 557define <vscale x 4 x i32> @test_svcnt_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {558; CHECK-LABEL: test_svcnt_s32_x_2:559; CHECK: // %bb.0: // %entry560; CHECK-NEXT: movprfx z0, z1561; CHECK-NEXT: cnt z0.s, p0/m, z1.s562; CHECK-NEXT: ret563;564; CHECK-2p2-LABEL: test_svcnt_s32_x_2:565; CHECK-2p2: // %bb.0: // %entry566; CHECK-2p2-NEXT: cnt z0.s, p0/z, z1.s567; CHECK-2p2-NEXT: ret568entry:569 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)570 ret <vscale x 4 x i32> %0571}572 573define <vscale x 4 x i32> @test_svcnt_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {574; SVE-LABEL: test_svcnt_s32_z:575; SVE: // %bb.0: // %entry576; SVE-NEXT: movi v0.2d, #0000000000000000577; SVE-NEXT: cnt z0.s, p0/m, z1.s578; SVE-NEXT: ret579;580; CHECK-2p2-LABEL: test_svcnt_s32_z:581; CHECK-2p2: // %bb.0: // %entry582; CHECK-2p2-NEXT: cnt z0.s, p0/z, z1.s583; CHECK-2p2-NEXT: ret584;585; STREAMING-SVE-LABEL: test_svcnt_s32_z:586; STREAMING-SVE: // %bb.0: // %entry587; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0588; STREAMING-SVE-NEXT: cnt z0.s, p0/m, z1.s589; STREAMING-SVE-NEXT: ret590entry:591 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)592 ret <vscale x 4 x i32> %0593}594 595define <vscale x 2 x i64> @test_svcnt_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {596; CHECK-LABEL: test_svcnt_s64_x_1:597; CHECK: // %bb.0: // %entry598; CHECK-NEXT: cnt z0.d, p0/m, z0.d599; CHECK-NEXT: ret600;601; CHECK-2p2-LABEL: test_svcnt_s64_x_1:602; CHECK-2p2: // %bb.0: // %entry603; CHECK-2p2-NEXT: cnt z0.d, p0/z, z0.d604; CHECK-2p2-NEXT: ret605entry:606 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)607 ret <vscale x 2 x i64> %0608}609 610define <vscale x 2 x i64> @test_svcnt_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {611; CHECK-LABEL: test_svcnt_s64_x_2:612; CHECK: // %bb.0: // %entry613; CHECK-NEXT: movprfx z0, z1614; CHECK-NEXT: cnt z0.d, p0/m, z1.d615; CHECK-NEXT: ret616;617; CHECK-2p2-LABEL: test_svcnt_s64_x_2:618; CHECK-2p2: // %bb.0: // %entry619; CHECK-2p2-NEXT: cnt z0.d, p0/z, z1.d620; CHECK-2p2-NEXT: ret621entry:622 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)623 ret <vscale x 2 x i64> %0624}625 626define <vscale x 2 x i64> @test_svcnt_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {627; SVE-LABEL: test_svcnt_s64_z:628; SVE: // %bb.0: // %entry629; SVE-NEXT: movi v0.2d, #0000000000000000630; SVE-NEXT: cnt z0.d, p0/m, z1.d631; SVE-NEXT: ret632;633; CHECK-2p2-LABEL: test_svcnt_s64_z:634; CHECK-2p2: // %bb.0: // %entry635; CHECK-2p2-NEXT: cnt z0.d, p0/z, z1.d636; CHECK-2p2-NEXT: ret637;638; STREAMING-SVE-LABEL: test_svcnt_s64_z:639; STREAMING-SVE: // %bb.0: // %entry640; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0641; STREAMING-SVE-NEXT: cnt z0.d, p0/m, z1.d642; STREAMING-SVE-NEXT: ret643entry:644 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)645 ret <vscale x 2 x i64> %0646}647 648define <vscale x 8 x i16> @test_svcnt_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {649; CHECK-LABEL: test_svcnt_f16_x_1:650; CHECK: // %bb.0: // %entry651; CHECK-NEXT: cnt z0.h, p0/m, z0.h652; CHECK-NEXT: ret653;654; CHECK-2p2-LABEL: test_svcnt_f16_x_1:655; CHECK-2p2: // %bb.0: // %entry656; CHECK-2p2-NEXT: cnt z0.h, p0/z, z0.h657; CHECK-2p2-NEXT: ret658entry:659 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)660 ret <vscale x 8 x i16> %0661}662 663define <vscale x 8 x i16> @test_svcnt_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {664; CHECK-LABEL: test_svcnt_f16_x_2:665; CHECK: // %bb.0: // %entry666; CHECK-NEXT: movprfx z0, z1667; CHECK-NEXT: cnt z0.h, p0/m, z1.h668; CHECK-NEXT: ret669;670; CHECK-2p2-LABEL: test_svcnt_f16_x_2:671; CHECK-2p2: // %bb.0: // %entry672; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h673; CHECK-2p2-NEXT: ret674entry:675 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)676 ret <vscale x 8 x i16> %0677}678 679define <vscale x 8 x i16> @test_svcnt_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {680; SVE-LABEL: test_svcnt_f16_z:681; SVE: // %bb.0: // %entry682; SVE-NEXT: movi v0.2d, #0000000000000000683; SVE-NEXT: cnt z0.h, p0/m, z1.h684; SVE-NEXT: ret685;686; CHECK-2p2-LABEL: test_svcnt_f16_z:687; CHECK-2p2: // %bb.0: // %entry688; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h689; CHECK-2p2-NEXT: ret690;691; STREAMING-SVE-LABEL: test_svcnt_f16_z:692; STREAMING-SVE: // %bb.0: // %entry693; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0694; STREAMING-SVE-NEXT: cnt z0.h, p0/m, z1.h695; STREAMING-SVE-NEXT: ret696entry:697 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8f16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)698 ret <vscale x 8 x i16> %0699}700 701define <vscale x 8 x i16> @test_svcnt_bf16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x) {702; CHECK-LABEL: test_svcnt_bf16_x_1:703; CHECK: // %bb.0: // %entry704; CHECK-NEXT: cnt z0.h, p0/m, z0.h705; CHECK-NEXT: ret706;707; CHECK-2p2-LABEL: test_svcnt_bf16_x_1:708; CHECK-2p2: // %bb.0: // %entry709; CHECK-2p2-NEXT: cnt z0.h, p0/z, z0.h710; CHECK-2p2-NEXT: ret711entry:712 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8bf16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)713 ret <vscale x 8 x i16> %0714}715 716define <vscale x 8 x i16> @test_svcnt_bf16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x bfloat> %x) {717; CHECK-LABEL: test_svcnt_bf16_x_2:718; CHECK: // %bb.0: // %entry719; CHECK-NEXT: movprfx z0, z1720; CHECK-NEXT: cnt z0.h, p0/m, z1.h721; CHECK-NEXT: ret722;723; CHECK-2p2-LABEL: test_svcnt_bf16_x_2:724; CHECK-2p2: // %bb.0: // %entry725; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h726; CHECK-2p2-NEXT: ret727entry:728 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8bf16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)729 ret <vscale x 8 x i16> %0730}731 732define <vscale x 8 x i16> @test_svcnt_bf16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x bfloat> %x) {733; SVE-LABEL: test_svcnt_bf16_z:734; SVE: // %bb.0: // %entry735; SVE-NEXT: movi v0.2d, #0000000000000000736; SVE-NEXT: cnt z0.h, p0/m, z1.h737; SVE-NEXT: ret738;739; CHECK-2p2-LABEL: test_svcnt_bf16_z:740; CHECK-2p2: // %bb.0: // %entry741; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h742; CHECK-2p2-NEXT: ret743;744; STREAMING-SVE-LABEL: test_svcnt_bf16_z:745; STREAMING-SVE: // %bb.0: // %entry746; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0747; STREAMING-SVE-NEXT: cnt z0.h, p0/m, z1.h748; STREAMING-SVE-NEXT: ret749entry:750 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8bf16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)751 ret <vscale x 8 x i16> %0752}753 754define <vscale x 4 x i32> @test_svcnt_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {755; CHECK-LABEL: test_svcnt_f32_x_1:756; CHECK: // %bb.0: // %entry757; CHECK-NEXT: cnt z0.s, p0/m, z0.s758; CHECK-NEXT: ret759;760; CHECK-2p2-LABEL: test_svcnt_f32_x_1:761; CHECK-2p2: // %bb.0: // %entry762; CHECK-2p2-NEXT: cnt z0.s, p0/z, z0.s763; CHECK-2p2-NEXT: ret764entry:765 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)766 ret <vscale x 4 x i32> %0767}768 769define <vscale x 4 x i32> @test_svcnt_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {770; CHECK-LABEL: test_svcnt_f32_x_2:771; CHECK: // %bb.0: // %entry772; CHECK-NEXT: movprfx z0, z1773; CHECK-NEXT: cnt z0.s, p0/m, z1.s774; CHECK-NEXT: ret775;776; CHECK-2p2-LABEL: test_svcnt_f32_x_2:777; CHECK-2p2: // %bb.0: // %entry778; CHECK-2p2-NEXT: cnt z0.s, p0/z, z1.s779; CHECK-2p2-NEXT: ret780entry:781 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)782 ret <vscale x 4 x i32> %0783}784 785define <vscale x 4 x i32> @test_svcnt_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {786; SVE-LABEL: test_svcnt_f32_z:787; SVE: // %bb.0: // %entry788; SVE-NEXT: movi v0.2d, #0000000000000000789; SVE-NEXT: cnt z0.s, p0/m, z1.s790; SVE-NEXT: ret791;792; CHECK-2p2-LABEL: test_svcnt_f32_z:793; CHECK-2p2: // %bb.0: // %entry794; CHECK-2p2-NEXT: cnt z0.s, p0/z, z1.s795; CHECK-2p2-NEXT: ret796;797; STREAMING-SVE-LABEL: test_svcnt_f32_z:798; STREAMING-SVE: // %bb.0: // %entry799; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0800; STREAMING-SVE-NEXT: cnt z0.s, p0/m, z1.s801; STREAMING-SVE-NEXT: ret802entry:803 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4f32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)804 ret <vscale x 4 x i32> %0805}806 807define <vscale x 2 x i64> @test_svcnt_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {808; CHECK-LABEL: test_svcnt_f64_x_1:809; CHECK: // %bb.0: // %entry810; CHECK-NEXT: cnt z0.d, p0/m, z0.d811; CHECK-NEXT: ret812;813; CHECK-2p2-LABEL: test_svcnt_f64_x_1:814; CHECK-2p2: // %bb.0: // %entry815; CHECK-2p2-NEXT: cnt z0.d, p0/z, z0.d816; CHECK-2p2-NEXT: ret817entry:818 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)819 ret <vscale x 2 x i64> %0820}821 822define <vscale x 2 x i64> @test_svcnt_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {823; CHECK-LABEL: test_svcnt_f64_x_2:824; CHECK: // %bb.0: // %entry825; CHECK-NEXT: movprfx z0, z1826; CHECK-NEXT: cnt z0.d, p0/m, z1.d827; CHECK-NEXT: ret828;829; CHECK-2p2-LABEL: test_svcnt_f64_x_2:830; CHECK-2p2: // %bb.0: // %entry831; CHECK-2p2-NEXT: cnt z0.d, p0/z, z1.d832; CHECK-2p2-NEXT: ret833entry:834 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)835 ret <vscale x 2 x i64> %0836}837 838define <vscale x 2 x i64> @test_svcnt_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {839; SVE-LABEL: test_svcnt_f64_z:840; SVE: // %bb.0: // %entry841; SVE-NEXT: movi v0.2d, #0000000000000000842; SVE-NEXT: cnt z0.d, p0/m, z1.d843; SVE-NEXT: ret844;845; CHECK-2p2-LABEL: test_svcnt_f64_z:846; CHECK-2p2: // %bb.0: // %entry847; CHECK-2p2-NEXT: cnt z0.d, p0/z, z1.d848; CHECK-2p2-NEXT: ret849;850; STREAMING-SVE-LABEL: test_svcnt_f64_z:851; STREAMING-SVE: // %bb.0: // %entry852; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0853; STREAMING-SVE-NEXT: cnt z0.d, p0/m, z1.d854; STREAMING-SVE-NEXT: ret855entry:856 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2f64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)857 ret <vscale x 2 x i64> %0858}859 860define <vscale x 16 x i8> @test_svcnot_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {861; CHECK-LABEL: test_svcnot_s8_x_1:862; CHECK: // %bb.0: // %entry863; CHECK-NEXT: cnot z0.b, p0/m, z0.b864; CHECK-NEXT: ret865;866; CHECK-2p2-LABEL: test_svcnot_s8_x_1:867; CHECK-2p2: // %bb.0: // %entry868; CHECK-2p2-NEXT: cnot z0.b, p0/z, z0.b869; CHECK-2p2-NEXT: ret870entry:871 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnot.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)872 ret <vscale x 16 x i8> %0873}874 875define <vscale x 16 x i8> @test_svcnot_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {876; CHECK-LABEL: test_svcnot_s8_x_2:877; CHECK: // %bb.0: // %entry878; CHECK-NEXT: movprfx z0, z1879; CHECK-NEXT: cnot z0.b, p0/m, z1.b880; CHECK-NEXT: ret881;882; CHECK-2p2-LABEL: test_svcnot_s8_x_2:883; CHECK-2p2: // %bb.0: // %entry884; CHECK-2p2-NEXT: cnot z0.b, p0/z, z1.b885; CHECK-2p2-NEXT: ret886entry:887 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnot.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)888 ret <vscale x 16 x i8> %0889}890 891define <vscale x 16 x i8> @test_svcnot_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {892; SVE-LABEL: test_svcnot_s8_z:893; SVE: // %bb.0: // %entry894; SVE-NEXT: movi v0.2d, #0000000000000000895; SVE-NEXT: cnot z0.b, p0/m, z1.b896; SVE-NEXT: ret897;898; CHECK-2p2-LABEL: test_svcnot_s8_z:899; CHECK-2p2: // %bb.0: // %entry900; CHECK-2p2-NEXT: cnot z0.b, p0/z, z1.b901; CHECK-2p2-NEXT: ret902;903; STREAMING-SVE-LABEL: test_svcnot_s8_z:904; STREAMING-SVE: // %bb.0: // %entry905; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x0906; STREAMING-SVE-NEXT: cnot z0.b, p0/m, z1.b907; STREAMING-SVE-NEXT: ret908entry:909 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnot.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)910 ret <vscale x 16 x i8> %0911}912 913define <vscale x 8 x i16> @test_svcnot_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {914; CHECK-LABEL: test_svcnot_s16_x_1:915; CHECK: // %bb.0: // %entry916; CHECK-NEXT: cnot z0.h, p0/m, z0.h917; CHECK-NEXT: ret918;919; CHECK-2p2-LABEL: test_svcnot_s16_x_1:920; CHECK-2p2: // %bb.0: // %entry921; CHECK-2p2-NEXT: cnot z0.h, p0/z, z0.h922; CHECK-2p2-NEXT: ret923entry:924 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnot.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)925 ret <vscale x 8 x i16> %0926}927 928define <vscale x 8 x i16> @test_svcnot_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {929; CHECK-LABEL: test_svcnot_s16_x_2:930; CHECK: // %bb.0: // %entry931; CHECK-NEXT: movprfx z0, z1932; CHECK-NEXT: cnot z0.h, p0/m, z1.h933; CHECK-NEXT: ret934;935; CHECK-2p2-LABEL: test_svcnot_s16_x_2:936; CHECK-2p2: // %bb.0: // %entry937; CHECK-2p2-NEXT: cnot z0.h, p0/z, z1.h938; CHECK-2p2-NEXT: ret939entry:940 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnot.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)941 ret <vscale x 8 x i16> %0942}943 944define <vscale x 8 x i16> @test_svcnot_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {945; SVE-LABEL: test_svcnot_s16_z:946; SVE: // %bb.0: // %entry947; SVE-NEXT: movi v0.2d, #0000000000000000948; SVE-NEXT: cnot z0.h, p0/m, z1.h949; SVE-NEXT: ret950;951; CHECK-2p2-LABEL: test_svcnot_s16_z:952; CHECK-2p2: // %bb.0: // %entry953; CHECK-2p2-NEXT: cnot z0.h, p0/z, z1.h954; CHECK-2p2-NEXT: ret955;956; STREAMING-SVE-LABEL: test_svcnot_s16_z:957; STREAMING-SVE: // %bb.0: // %entry958; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0959; STREAMING-SVE-NEXT: cnot z0.h, p0/m, z1.h960; STREAMING-SVE-NEXT: ret961entry:962 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnot.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)963 ret <vscale x 8 x i16> %0964}965 966define <vscale x 4 x i32> @test_svcnot_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {967; CHECK-LABEL: test_svcnot_s32_x_1:968; CHECK: // %bb.0: // %entry969; CHECK-NEXT: cnot z0.s, p0/m, z0.s970; CHECK-NEXT: ret971;972; CHECK-2p2-LABEL: test_svcnot_s32_x_1:973; CHECK-2p2: // %bb.0: // %entry974; CHECK-2p2-NEXT: cnot z0.s, p0/z, z0.s975; CHECK-2p2-NEXT: ret976entry:977 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnot.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)978 ret <vscale x 4 x i32> %0979}980 981define <vscale x 4 x i32> @test_svcnot_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {982; CHECK-LABEL: test_svcnot_s32_x_2:983; CHECK: // %bb.0: // %entry984; CHECK-NEXT: movprfx z0, z1985; CHECK-NEXT: cnot z0.s, p0/m, z1.s986; CHECK-NEXT: ret987;988; CHECK-2p2-LABEL: test_svcnot_s32_x_2:989; CHECK-2p2: // %bb.0: // %entry990; CHECK-2p2-NEXT: cnot z0.s, p0/z, z1.s991; CHECK-2p2-NEXT: ret992entry:993 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnot.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)994 ret <vscale x 4 x i32> %0995}996 997define <vscale x 4 x i32> @test_svcnot_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {998; SVE-LABEL: test_svcnot_s32_z:999; SVE: // %bb.0: // %entry1000; SVE-NEXT: movi v0.2d, #00000000000000001001; SVE-NEXT: cnot z0.s, p0/m, z1.s1002; SVE-NEXT: ret1003;1004; CHECK-2p2-LABEL: test_svcnot_s32_z:1005; CHECK-2p2: // %bb.0: // %entry1006; CHECK-2p2-NEXT: cnot z0.s, p0/z, z1.s1007; CHECK-2p2-NEXT: ret1008;1009; STREAMING-SVE-LABEL: test_svcnot_s32_z:1010; STREAMING-SVE: // %bb.0: // %entry1011; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x01012; STREAMING-SVE-NEXT: cnot z0.s, p0/m, z1.s1013; STREAMING-SVE-NEXT: ret1014entry:1015 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnot.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1016 ret <vscale x 4 x i32> %01017}1018 1019define <vscale x 2 x i64> @test_svcnot_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {1020; CHECK-LABEL: test_svcnot_s64_x_1:1021; CHECK: // %bb.0: // %entry1022; CHECK-NEXT: cnot z0.d, p0/m, z0.d1023; CHECK-NEXT: ret1024;1025; CHECK-2p2-LABEL: test_svcnot_s64_x_1:1026; CHECK-2p2: // %bb.0: // %entry1027; CHECK-2p2-NEXT: cnot z0.d, p0/z, z0.d1028; CHECK-2p2-NEXT: ret1029entry:1030 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnot.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1031 ret <vscale x 2 x i64> %01032}1033 1034define <vscale x 2 x i64> @test_svcnot_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {1035; CHECK-LABEL: test_svcnot_s64_x_2:1036; CHECK: // %bb.0: // %entry1037; CHECK-NEXT: movprfx z0, z11038; CHECK-NEXT: cnot z0.d, p0/m, z1.d1039; CHECK-NEXT: ret1040;1041; CHECK-2p2-LABEL: test_svcnot_s64_x_2:1042; CHECK-2p2: // %bb.0: // %entry1043; CHECK-2p2-NEXT: cnot z0.d, p0/z, z1.d1044; CHECK-2p2-NEXT: ret1045entry:1046 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnot.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1047 ret <vscale x 2 x i64> %01048}1049 1050define <vscale x 2 x i64> @test_svcnot_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {1051; SVE-LABEL: test_svcnot_s64_z:1052; SVE: // %bb.0: // %entry1053; SVE-NEXT: movi v0.2d, #00000000000000001054; SVE-NEXT: cnot z0.d, p0/m, z1.d1055; SVE-NEXT: ret1056;1057; CHECK-2p2-LABEL: test_svcnot_s64_z:1058; CHECK-2p2: // %bb.0: // %entry1059; CHECK-2p2-NEXT: cnot z0.d, p0/z, z1.d1060; CHECK-2p2-NEXT: ret1061;1062; STREAMING-SVE-LABEL: test_svcnot_s64_z:1063; STREAMING-SVE: // %bb.0: // %entry1064; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x01065; STREAMING-SVE-NEXT: cnot z0.d, p0/m, z1.d1066; STREAMING-SVE-NEXT: ret1067entry:1068 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnot.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1069 ret <vscale x 2 x i64> %01070}1071 1072define <vscale x 16 x i8> @test_svnot_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {1073; CHECK-LABEL: test_svnot_s8_x_1:1074; CHECK: // %bb.0: // %entry1075; CHECK-NEXT: not z0.b, p0/m, z0.b1076; CHECK-NEXT: ret1077;1078; CHECK-2p2-LABEL: test_svnot_s8_x_1:1079; CHECK-2p2: // %bb.0: // %entry1080; CHECK-2p2-NEXT: not z0.b, p0/z, z0.b1081; CHECK-2p2-NEXT: ret1082entry:1083 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.not.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1084 ret <vscale x 16 x i8> %01085}1086 1087define <vscale x 16 x i8> @test_svnot_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {1088; CHECK-LABEL: test_svnot_s8_x_2:1089; CHECK: // %bb.0: // %entry1090; CHECK-NEXT: movprfx z0, z11091; CHECK-NEXT: not z0.b, p0/m, z1.b1092; CHECK-NEXT: ret1093;1094; CHECK-2p2-LABEL: test_svnot_s8_x_2:1095; CHECK-2p2: // %bb.0: // %entry1096; CHECK-2p2-NEXT: not z0.b, p0/z, z1.b1097; CHECK-2p2-NEXT: ret1098entry:1099 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.not.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1100 ret <vscale x 16 x i8> %01101}1102 1103define <vscale x 16 x i8> @test_svnot_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {1104; SVE-LABEL: test_svnot_s8_z:1105; SVE: // %bb.0: // %entry1106; SVE-NEXT: movi v0.2d, #00000000000000001107; SVE-NEXT: not z0.b, p0/m, z1.b1108; SVE-NEXT: ret1109;1110; CHECK-2p2-LABEL: test_svnot_s8_z:1111; CHECK-2p2: // %bb.0: // %entry1112; CHECK-2p2-NEXT: not z0.b, p0/z, z1.b1113; CHECK-2p2-NEXT: ret1114;1115; STREAMING-SVE-LABEL: test_svnot_s8_z:1116; STREAMING-SVE: // %bb.0: // %entry1117; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x01118; STREAMING-SVE-NEXT: not z0.b, p0/m, z1.b1119; STREAMING-SVE-NEXT: ret1120entry:1121 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.not.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1122 ret <vscale x 16 x i8> %01123}1124 1125define <vscale x 8 x i16> @test_svnot_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {1126; CHECK-LABEL: test_svnot_s16_x_1:1127; CHECK: // %bb.0: // %entry1128; CHECK-NEXT: not z0.h, p0/m, z0.h1129; CHECK-NEXT: ret1130;1131; CHECK-2p2-LABEL: test_svnot_s16_x_1:1132; CHECK-2p2: // %bb.0: // %entry1133; CHECK-2p2-NEXT: not z0.h, p0/z, z0.h1134; CHECK-2p2-NEXT: ret1135entry:1136 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.not.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1137 ret <vscale x 8 x i16> %01138}1139 1140define <vscale x 8 x i16> @test_svnot_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {1141; CHECK-LABEL: test_svnot_s16_x_2:1142; CHECK: // %bb.0: // %entry1143; CHECK-NEXT: movprfx z0, z11144; CHECK-NEXT: not z0.h, p0/m, z1.h1145; CHECK-NEXT: ret1146;1147; CHECK-2p2-LABEL: test_svnot_s16_x_2:1148; CHECK-2p2: // %bb.0: // %entry1149; CHECK-2p2-NEXT: not z0.h, p0/z, z1.h1150; CHECK-2p2-NEXT: ret1151entry:1152 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.not.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1153 ret <vscale x 8 x i16> %01154}1155 1156define <vscale x 8 x i16> @test_svnot_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {1157; SVE-LABEL: test_svnot_s16_z:1158; SVE: // %bb.0: // %entry1159; SVE-NEXT: movi v0.2d, #00000000000000001160; SVE-NEXT: not z0.h, p0/m, z1.h1161; SVE-NEXT: ret1162;1163; CHECK-2p2-LABEL: test_svnot_s16_z:1164; CHECK-2p2: // %bb.0: // %entry1165; CHECK-2p2-NEXT: not z0.h, p0/z, z1.h1166; CHECK-2p2-NEXT: ret1167;1168; STREAMING-SVE-LABEL: test_svnot_s16_z:1169; STREAMING-SVE: // %bb.0: // %entry1170; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x01171; STREAMING-SVE-NEXT: not z0.h, p0/m, z1.h1172; STREAMING-SVE-NEXT: ret1173entry:1174 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.not.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1175 ret <vscale x 8 x i16> %01176}1177 1178define <vscale x 4 x i32> @test_svnot_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {1179; CHECK-LABEL: test_svnot_s32_x_1:1180; CHECK: // %bb.0: // %entry1181; CHECK-NEXT: not z0.s, p0/m, z0.s1182; CHECK-NEXT: ret1183;1184; CHECK-2p2-LABEL: test_svnot_s32_x_1:1185; CHECK-2p2: // %bb.0: // %entry1186; CHECK-2p2-NEXT: not z0.s, p0/z, z0.s1187; CHECK-2p2-NEXT: ret1188entry:1189 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.not.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1190 ret <vscale x 4 x i32> %01191}1192 1193define <vscale x 4 x i32> @test_svnot_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {1194; CHECK-LABEL: test_svnot_s32_x_2:1195; CHECK: // %bb.0: // %entry1196; CHECK-NEXT: movprfx z0, z11197; CHECK-NEXT: not z0.s, p0/m, z1.s1198; CHECK-NEXT: ret1199;1200; CHECK-2p2-LABEL: test_svnot_s32_x_2:1201; CHECK-2p2: // %bb.0: // %entry1202; CHECK-2p2-NEXT: not z0.s, p0/z, z1.s1203; CHECK-2p2-NEXT: ret1204entry:1205 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.not.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1206 ret <vscale x 4 x i32> %01207}1208 1209define <vscale x 4 x i32> @test_svnot_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {1210; SVE-LABEL: test_svnot_s32_z:1211; SVE: // %bb.0: // %entry1212; SVE-NEXT: movi v0.2d, #00000000000000001213; SVE-NEXT: not z0.s, p0/m, z1.s1214; SVE-NEXT: ret1215;1216; CHECK-2p2-LABEL: test_svnot_s32_z:1217; CHECK-2p2: // %bb.0: // %entry1218; CHECK-2p2-NEXT: not z0.s, p0/z, z1.s1219; CHECK-2p2-NEXT: ret1220;1221; STREAMING-SVE-LABEL: test_svnot_s32_z:1222; STREAMING-SVE: // %bb.0: // %entry1223; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x01224; STREAMING-SVE-NEXT: not z0.s, p0/m, z1.s1225; STREAMING-SVE-NEXT: ret1226entry:1227 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.not.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1228 ret <vscale x 4 x i32> %01229}1230 1231define <vscale x 2 x i64> @test_svnot_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {1232; CHECK-LABEL: test_svnot_s64_x_1:1233; CHECK: // %bb.0: // %entry1234; CHECK-NEXT: not z0.d, p0/m, z0.d1235; CHECK-NEXT: ret1236;1237; CHECK-2p2-LABEL: test_svnot_s64_x_1:1238; CHECK-2p2: // %bb.0: // %entry1239; CHECK-2p2-NEXT: not z0.d, p0/z, z0.d1240; CHECK-2p2-NEXT: ret1241entry:1242 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.not.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1243 ret <vscale x 2 x i64> %01244}1245 1246define <vscale x 2 x i64> @test_svnot_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {1247; CHECK-LABEL: test_svnot_s64_x_2:1248; CHECK: // %bb.0: // %entry1249; CHECK-NEXT: movprfx z0, z11250; CHECK-NEXT: not z0.d, p0/m, z1.d1251; CHECK-NEXT: ret1252;1253; CHECK-2p2-LABEL: test_svnot_s64_x_2:1254; CHECK-2p2: // %bb.0: // %entry1255; CHECK-2p2-NEXT: not z0.d, p0/z, z1.d1256; CHECK-2p2-NEXT: ret1257entry:1258 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.not.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1259 ret <vscale x 2 x i64> %01260}1261 1262define <vscale x 2 x i64> @test_svnot_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {1263; SVE-LABEL: test_svnot_s64_z:1264; SVE: // %bb.0: // %entry1265; SVE-NEXT: movi v0.2d, #00000000000000001266; SVE-NEXT: not z0.d, p0/m, z1.d1267; SVE-NEXT: ret1268;1269; CHECK-2p2-LABEL: test_svnot_s64_z:1270; CHECK-2p2: // %bb.0: // %entry1271; CHECK-2p2-NEXT: not z0.d, p0/z, z1.d1272; CHECK-2p2-NEXT: ret1273;1274; STREAMING-SVE-LABEL: test_svnot_s64_z:1275; STREAMING-SVE: // %bb.0: // %entry1276; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x01277; STREAMING-SVE-NEXT: not z0.d, p0/m, z1.d1278; STREAMING-SVE-NEXT: ret1279entry:1280 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.not.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1281 ret <vscale x 2 x i64> %01282}1283 1284define <vscale x 16 x i8> @test_svcls_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {1285; CHECK-LABEL: test_svcls_nxv16i8_ptrue_u:1286; CHECK: // %bb.0: // %entry1287; CHECK-NEXT: ptrue p0.b1288; CHECK-NEXT: movprfx z0, z11289; CHECK-NEXT: cls z0.b, p0/m, z1.b1290; CHECK-NEXT: ret1291;1292; CHECK-2p2-LABEL: test_svcls_nxv16i8_ptrue_u:1293; CHECK-2p2: // %bb.0: // %entry1294; CHECK-2p2-NEXT: ptrue p0.b1295; CHECK-2p2-NEXT: cls z0.b, p0/z, z1.b1296; CHECK-2p2-NEXT: ret1297entry:1298 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1299 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cls.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1300 ret <vscale x 16 x i8> %01301}1302 1303define <vscale x 16 x i8> @test_svcls_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {1304; CHECK-LABEL: test_svcls_nxv16i8_ptrue:1305; CHECK: // %bb.0: // %entry1306; CHECK-NEXT: ptrue p0.b1307; CHECK-NEXT: movprfx z0, z21308; CHECK-NEXT: cls z0.b, p0/m, z2.b1309; CHECK-NEXT: ret1310;1311; CHECK-2p2-LABEL: test_svcls_nxv16i8_ptrue:1312; CHECK-2p2: // %bb.0: // %entry1313; CHECK-2p2-NEXT: ptrue p0.b1314; CHECK-2p2-NEXT: cls z0.b, p0/z, z2.b1315; CHECK-2p2-NEXT: ret1316entry:1317 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1318 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cls.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)1319 ret <vscale x 16 x i8> %01320}1321 1322define <vscale x 8 x i16> @test_svcls_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1323; CHECK-LABEL: test_svcls_nxv8i16_ptrue_u:1324; CHECK: // %bb.0: // %entry1325; CHECK-NEXT: ptrue p0.h1326; CHECK-NEXT: movprfx z0, z11327; CHECK-NEXT: cls z0.h, p0/m, z1.h1328; CHECK-NEXT: ret1329;1330; CHECK-2p2-LABEL: test_svcls_nxv8i16_ptrue_u:1331; CHECK-2p2: // %bb.0: // %entry1332; CHECK-2p2-NEXT: ptrue p0.h1333; CHECK-2p2-NEXT: cls z0.h, p0/z, z1.h1334; CHECK-2p2-NEXT: ret1335entry:1336 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1337 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cls.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1338 ret <vscale x 8 x i16> %01339}1340 1341define <vscale x 8 x i16> @test_svcls_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1342; CHECK-LABEL: test_svcls_nxv8i16_ptrue:1343; CHECK: // %bb.0: // %entry1344; CHECK-NEXT: ptrue p0.h1345; CHECK-NEXT: movprfx z0, z21346; CHECK-NEXT: cls z0.h, p0/m, z2.h1347; CHECK-NEXT: ret1348;1349; CHECK-2p2-LABEL: test_svcls_nxv8i16_ptrue:1350; CHECK-2p2: // %bb.0: // %entry1351; CHECK-2p2-NEXT: ptrue p0.h1352; CHECK-2p2-NEXT: cls z0.h, p0/z, z2.h1353; CHECK-2p2-NEXT: ret1354entry:1355 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1356 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cls.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1357 ret <vscale x 8 x i16> %01358}1359 1360define <vscale x 4 x i32> @test_svcls_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1361; CHECK-LABEL: test_svcls_nxv4i32_ptrue_u:1362; CHECK: // %bb.0: // %entry1363; CHECK-NEXT: ptrue p0.s1364; CHECK-NEXT: movprfx z0, z11365; CHECK-NEXT: cls z0.s, p0/m, z1.s1366; CHECK-NEXT: ret1367;1368; CHECK-2p2-LABEL: test_svcls_nxv4i32_ptrue_u:1369; CHECK-2p2: // %bb.0: // %entry1370; CHECK-2p2-NEXT: ptrue p0.s1371; CHECK-2p2-NEXT: cls z0.s, p0/z, z1.s1372; CHECK-2p2-NEXT: ret1373entry:1374 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1375 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cls.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1376 ret <vscale x 4 x i32> %01377}1378 1379define <vscale x 4 x i32> @test_svcls_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1380; CHECK-LABEL: test_svcls_nxv4i32_ptrue:1381; CHECK: // %bb.0: // %entry1382; CHECK-NEXT: ptrue p0.s1383; CHECK-NEXT: movprfx z0, z21384; CHECK-NEXT: cls z0.s, p0/m, z2.s1385; CHECK-NEXT: ret1386;1387; CHECK-2p2-LABEL: test_svcls_nxv4i32_ptrue:1388; CHECK-2p2: // %bb.0: // %entry1389; CHECK-2p2-NEXT: ptrue p0.s1390; CHECK-2p2-NEXT: cls z0.s, p0/z, z2.s1391; CHECK-2p2-NEXT: ret1392entry:1393 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1394 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cls.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1395 ret <vscale x 4 x i32> %01396}1397 1398define <vscale x 2 x i64> @test_svcls_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1399; CHECK-LABEL: test_svcls_nxv2i64_ptrue_u:1400; CHECK: // %bb.0: // %entry1401; CHECK-NEXT: ptrue p0.d1402; CHECK-NEXT: movprfx z0, z11403; CHECK-NEXT: cls z0.d, p0/m, z1.d1404; CHECK-NEXT: ret1405;1406; CHECK-2p2-LABEL: test_svcls_nxv2i64_ptrue_u:1407; CHECK-2p2: // %bb.0: // %entry1408; CHECK-2p2-NEXT: ptrue p0.d1409; CHECK-2p2-NEXT: cls z0.d, p0/z, z1.d1410; CHECK-2p2-NEXT: ret1411entry:1412 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1413 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cls.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1414 ret <vscale x 2 x i64> %01415}1416 1417define <vscale x 2 x i64> @test_svcls_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1418; CHECK-LABEL: test_svcls_nxv2i64_ptrue:1419; CHECK: // %bb.0: // %entry1420; CHECK-NEXT: ptrue p0.d1421; CHECK-NEXT: movprfx z0, z21422; CHECK-NEXT: cls z0.d, p0/m, z2.d1423; CHECK-NEXT: ret1424;1425; CHECK-2p2-LABEL: test_svcls_nxv2i64_ptrue:1426; CHECK-2p2: // %bb.0: // %entry1427; CHECK-2p2-NEXT: ptrue p0.d1428; CHECK-2p2-NEXT: cls z0.d, p0/z, z2.d1429; CHECK-2p2-NEXT: ret1430entry:1431 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1432 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cls.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1433 ret <vscale x 2 x i64> %01434}1435 1436define <vscale x 16 x i8> @test_svclz_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {1437; CHECK-LABEL: test_svclz_nxv16i8_ptrue_u:1438; CHECK: // %bb.0: // %entry1439; CHECK-NEXT: ptrue p0.b1440; CHECK-NEXT: movprfx z0, z11441; CHECK-NEXT: clz z0.b, p0/m, z1.b1442; CHECK-NEXT: ret1443;1444; CHECK-2p2-LABEL: test_svclz_nxv16i8_ptrue_u:1445; CHECK-2p2: // %bb.0: // %entry1446; CHECK-2p2-NEXT: ptrue p0.b1447; CHECK-2p2-NEXT: clz z0.b, p0/z, z1.b1448; CHECK-2p2-NEXT: ret1449entry:1450 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1451 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.clz.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1452 ret <vscale x 16 x i8> %01453}1454 1455define <vscale x 16 x i8> @test_svclz_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {1456; CHECK-LABEL: test_svclz_nxv16i8_ptrue:1457; CHECK: // %bb.0: // %entry1458; CHECK-NEXT: ptrue p0.b1459; CHECK-NEXT: movprfx z0, z21460; CHECK-NEXT: clz z0.b, p0/m, z2.b1461; CHECK-NEXT: ret1462;1463; CHECK-2p2-LABEL: test_svclz_nxv16i8_ptrue:1464; CHECK-2p2: // %bb.0: // %entry1465; CHECK-2p2-NEXT: ptrue p0.b1466; CHECK-2p2-NEXT: clz z0.b, p0/z, z2.b1467; CHECK-2p2-NEXT: ret1468entry:1469 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1470 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.clz.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)1471 ret <vscale x 16 x i8> %01472}1473 1474define <vscale x 8 x i16> @test_svclz_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1475; CHECK-LABEL: test_svclz_nxv8i16_ptrue_u:1476; CHECK: // %bb.0: // %entry1477; CHECK-NEXT: ptrue p0.h1478; CHECK-NEXT: movprfx z0, z11479; CHECK-NEXT: clz z0.h, p0/m, z1.h1480; CHECK-NEXT: ret1481;1482; CHECK-2p2-LABEL: test_svclz_nxv8i16_ptrue_u:1483; CHECK-2p2: // %bb.0: // %entry1484; CHECK-2p2-NEXT: ptrue p0.h1485; CHECK-2p2-NEXT: clz z0.h, p0/z, z1.h1486; CHECK-2p2-NEXT: ret1487entry:1488 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1489 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.clz.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1490 ret <vscale x 8 x i16> %01491}1492 1493define <vscale x 8 x i16> @test_svclz_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1494; CHECK-LABEL: test_svclz_nxv8i16_ptrue:1495; CHECK: // %bb.0: // %entry1496; CHECK-NEXT: ptrue p0.h1497; CHECK-NEXT: movprfx z0, z21498; CHECK-NEXT: clz z0.h, p0/m, z2.h1499; CHECK-NEXT: ret1500;1501; CHECK-2p2-LABEL: test_svclz_nxv8i16_ptrue:1502; CHECK-2p2: // %bb.0: // %entry1503; CHECK-2p2-NEXT: ptrue p0.h1504; CHECK-2p2-NEXT: clz z0.h, p0/z, z2.h1505; CHECK-2p2-NEXT: ret1506entry:1507 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1508 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.clz.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1509 ret <vscale x 8 x i16> %01510}1511 1512define <vscale x 4 x i32> @test_svclz_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1513; CHECK-LABEL: test_svclz_nxv4i32_ptrue_u:1514; CHECK: // %bb.0: // %entry1515; CHECK-NEXT: ptrue p0.s1516; CHECK-NEXT: movprfx z0, z11517; CHECK-NEXT: clz z0.s, p0/m, z1.s1518; CHECK-NEXT: ret1519;1520; CHECK-2p2-LABEL: test_svclz_nxv4i32_ptrue_u:1521; CHECK-2p2: // %bb.0: // %entry1522; CHECK-2p2-NEXT: ptrue p0.s1523; CHECK-2p2-NEXT: clz z0.s, p0/z, z1.s1524; CHECK-2p2-NEXT: ret1525entry:1526 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1527 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.clz.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1528 ret <vscale x 4 x i32> %01529}1530 1531define <vscale x 4 x i32> @test_svclz_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1532; CHECK-LABEL: test_svclz_nxv4i32_ptrue:1533; CHECK: // %bb.0: // %entry1534; CHECK-NEXT: ptrue p0.s1535; CHECK-NEXT: movprfx z0, z21536; CHECK-NEXT: clz z0.s, p0/m, z2.s1537; CHECK-NEXT: ret1538;1539; CHECK-2p2-LABEL: test_svclz_nxv4i32_ptrue:1540; CHECK-2p2: // %bb.0: // %entry1541; CHECK-2p2-NEXT: ptrue p0.s1542; CHECK-2p2-NEXT: clz z0.s, p0/z, z2.s1543; CHECK-2p2-NEXT: ret1544entry:1545 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1546 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.clz.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1547 ret <vscale x 4 x i32> %01548}1549 1550define <vscale x 2 x i64> @test_svclz_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1551; CHECK-LABEL: test_svclz_nxv2i64_ptrue_u:1552; CHECK: // %bb.0: // %entry1553; CHECK-NEXT: ptrue p0.d1554; CHECK-NEXT: movprfx z0, z11555; CHECK-NEXT: clz z0.d, p0/m, z1.d1556; CHECK-NEXT: ret1557;1558; CHECK-2p2-LABEL: test_svclz_nxv2i64_ptrue_u:1559; CHECK-2p2: // %bb.0: // %entry1560; CHECK-2p2-NEXT: ptrue p0.d1561; CHECK-2p2-NEXT: clz z0.d, p0/z, z1.d1562; CHECK-2p2-NEXT: ret1563entry:1564 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1565 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.clz.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1566 ret <vscale x 2 x i64> %01567}1568 1569define <vscale x 2 x i64> @test_svclz_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1570; CHECK-LABEL: test_svclz_nxv2i64_ptrue:1571; CHECK: // %bb.0: // %entry1572; CHECK-NEXT: ptrue p0.d1573; CHECK-NEXT: movprfx z0, z21574; CHECK-NEXT: clz z0.d, p0/m, z2.d1575; CHECK-NEXT: ret1576;1577; CHECK-2p2-LABEL: test_svclz_nxv2i64_ptrue:1578; CHECK-2p2: // %bb.0: // %entry1579; CHECK-2p2-NEXT: ptrue p0.d1580; CHECK-2p2-NEXT: clz z0.d, p0/z, z2.d1581; CHECK-2p2-NEXT: ret1582entry:1583 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1584 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.clz.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1585 ret <vscale x 2 x i64> %01586}1587 1588define <vscale x 16 x i8> @test_svcnt_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {1589; CHECK-LABEL: test_svcnt_nxv16i8_ptrue_u:1590; CHECK: // %bb.0: // %entry1591; CHECK-NEXT: ptrue p0.b1592; CHECK-NEXT: movprfx z0, z11593; CHECK-NEXT: cnt z0.b, p0/m, z1.b1594; CHECK-NEXT: ret1595;1596; CHECK-2p2-LABEL: test_svcnt_nxv16i8_ptrue_u:1597; CHECK-2p2: // %bb.0: // %entry1598; CHECK-2p2-NEXT: ptrue p0.b1599; CHECK-2p2-NEXT: cnt z0.b, p0/z, z1.b1600; CHECK-2p2-NEXT: ret1601entry:1602 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1603 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnt.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1604 ret <vscale x 16 x i8> %01605}1606 1607define <vscale x 16 x i8> @test_svcnt_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {1608; CHECK-LABEL: test_svcnt_nxv16i8_ptrue:1609; CHECK: // %bb.0: // %entry1610; CHECK-NEXT: ptrue p0.b1611; CHECK-NEXT: movprfx z0, z21612; CHECK-NEXT: cnt z0.b, p0/m, z2.b1613; CHECK-NEXT: ret1614;1615; CHECK-2p2-LABEL: test_svcnt_nxv16i8_ptrue:1616; CHECK-2p2: // %bb.0: // %entry1617; CHECK-2p2-NEXT: ptrue p0.b1618; CHECK-2p2-NEXT: cnt z0.b, p0/z, z2.b1619; CHECK-2p2-NEXT: ret1620entry:1621 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1622 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnt.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)1623 ret <vscale x 16 x i8> %01624}1625 1626define <vscale x 8 x i16> @test_svcnt_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1627; CHECK-LABEL: test_svcnt_nxv8i16_ptrue_u:1628; CHECK: // %bb.0: // %entry1629; CHECK-NEXT: ptrue p0.h1630; CHECK-NEXT: movprfx z0, z11631; CHECK-NEXT: cnt z0.h, p0/m, z1.h1632; CHECK-NEXT: ret1633;1634; CHECK-2p2-LABEL: test_svcnt_nxv8i16_ptrue_u:1635; CHECK-2p2: // %bb.0: // %entry1636; CHECK-2p2-NEXT: ptrue p0.h1637; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h1638; CHECK-2p2-NEXT: ret1639entry:1640 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1641 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1642 ret <vscale x 8 x i16> %01643}1644 1645define <vscale x 8 x i16> @test_svcnt_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1646; CHECK-LABEL: test_svcnt_nxv8i16_ptrue:1647; CHECK: // %bb.0: // %entry1648; CHECK-NEXT: ptrue p0.h1649; CHECK-NEXT: movprfx z0, z21650; CHECK-NEXT: cnt z0.h, p0/m, z2.h1651; CHECK-NEXT: ret1652;1653; CHECK-2p2-LABEL: test_svcnt_nxv8i16_ptrue:1654; CHECK-2p2: // %bb.0: // %entry1655; CHECK-2p2-NEXT: ptrue p0.h1656; CHECK-2p2-NEXT: cnt z0.h, p0/z, z2.h1657; CHECK-2p2-NEXT: ret1658entry:1659 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1660 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1661 ret <vscale x 8 x i16> %01662}1663 1664define <vscale x 4 x i32> @test_svcnt_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1665; CHECK-LABEL: test_svcnt_nxv4i32_ptrue_u:1666; CHECK: // %bb.0: // %entry1667; CHECK-NEXT: ptrue p0.s1668; CHECK-NEXT: movprfx z0, z11669; CHECK-NEXT: cnt z0.s, p0/m, z1.s1670; CHECK-NEXT: ret1671;1672; CHECK-2p2-LABEL: test_svcnt_nxv4i32_ptrue_u:1673; CHECK-2p2: // %bb.0: // %entry1674; CHECK-2p2-NEXT: ptrue p0.s1675; CHECK-2p2-NEXT: cnt z0.s, p0/z, z1.s1676; CHECK-2p2-NEXT: ret1677entry:1678 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1679 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1680 ret <vscale x 4 x i32> %01681}1682 1683define <vscale x 4 x i32> @test_svcnt_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1684; CHECK-LABEL: test_svcnt_nxv4i32_ptrue:1685; CHECK: // %bb.0: // %entry1686; CHECK-NEXT: ptrue p0.s1687; CHECK-NEXT: movprfx z0, z21688; CHECK-NEXT: cnt z0.s, p0/m, z2.s1689; CHECK-NEXT: ret1690;1691; CHECK-2p2-LABEL: test_svcnt_nxv4i32_ptrue:1692; CHECK-2p2: // %bb.0: // %entry1693; CHECK-2p2-NEXT: ptrue p0.s1694; CHECK-2p2-NEXT: cnt z0.s, p0/z, z2.s1695; CHECK-2p2-NEXT: ret1696entry:1697 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1698 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1699 ret <vscale x 4 x i32> %01700}1701 1702define <vscale x 2 x i64> @test_svcnt_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1703; CHECK-LABEL: test_svcnt_nxv2i64_ptrue_u:1704; CHECK: // %bb.0: // %entry1705; CHECK-NEXT: ptrue p0.d1706; CHECK-NEXT: movprfx z0, z11707; CHECK-NEXT: cnt z0.d, p0/m, z1.d1708; CHECK-NEXT: ret1709;1710; CHECK-2p2-LABEL: test_svcnt_nxv2i64_ptrue_u:1711; CHECK-2p2: // %bb.0: // %entry1712; CHECK-2p2-NEXT: ptrue p0.d1713; CHECK-2p2-NEXT: cnt z0.d, p0/z, z1.d1714; CHECK-2p2-NEXT: ret1715entry:1716 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1717 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1718 ret <vscale x 2 x i64> %01719}1720 1721define <vscale x 2 x i64> @test_svcnt_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1722; CHECK-LABEL: test_svcnt_nxv2i64_ptrue:1723; CHECK: // %bb.0: // %entry1724; CHECK-NEXT: ptrue p0.d1725; CHECK-NEXT: movprfx z0, z21726; CHECK-NEXT: cnt z0.d, p0/m, z2.d1727; CHECK-NEXT: ret1728;1729; CHECK-2p2-LABEL: test_svcnt_nxv2i64_ptrue:1730; CHECK-2p2: // %bb.0: // %entry1731; CHECK-2p2-NEXT: ptrue p0.d1732; CHECK-2p2-NEXT: cnt z0.d, p0/z, z2.d1733; CHECK-2p2-NEXT: ret1734entry:1735 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1736 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1737 ret <vscale x 2 x i64> %01738}1739 1740define <vscale x 8 x i16> @test_svcnt_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {1741; CHECK-LABEL: test_svcnt_nxv8f16_ptrue_u:1742; CHECK: // %bb.0: // %entry1743; CHECK-NEXT: ptrue p0.h1744; CHECK-NEXT: movprfx z0, z11745; CHECK-NEXT: cnt z0.h, p0/m, z1.h1746; CHECK-NEXT: ret1747;1748; CHECK-2p2-LABEL: test_svcnt_nxv8f16_ptrue_u:1749; CHECK-2p2: // %bb.0: // %entry1750; CHECK-2p2-NEXT: ptrue p0.h1751; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h1752; CHECK-2p2-NEXT: ret1753entry:1754 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1755 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1756 ret <vscale x 8 x i16> %01757}1758 1759define <vscale x 8 x i16> @test_svcnt_nxv8f16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x half> %y) {1760; CHECK-LABEL: test_svcnt_nxv8f16_ptrue:1761; CHECK: // %bb.0: // %entry1762; CHECK-NEXT: ptrue p0.h1763; CHECK-NEXT: movprfx z0, z21764; CHECK-NEXT: cnt z0.h, p0/m, z2.h1765; CHECK-NEXT: ret1766;1767; CHECK-2p2-LABEL: test_svcnt_nxv8f16_ptrue:1768; CHECK-2p2: // %bb.0: // %entry1769; CHECK-2p2-NEXT: ptrue p0.h1770; CHECK-2p2-NEXT: cnt z0.h, p0/z, z2.h1771; CHECK-2p2-NEXT: ret1772entry:1773 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1774 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8f16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)1775 ret <vscale x 8 x i16> %01776}1777 1778define <vscale x 8 x i16> @test_svcnt_nxv8bf16_ptrue_u(double %z0, <vscale x 8 x bfloat> %x) {1779; CHECK-LABEL: test_svcnt_nxv8bf16_ptrue_u:1780; CHECK: // %bb.0: // %entry1781; CHECK-NEXT: ptrue p0.h1782; CHECK-NEXT: movprfx z0, z11783; CHECK-NEXT: cnt z0.h, p0/m, z1.h1784; CHECK-NEXT: ret1785;1786; CHECK-2p2-LABEL: test_svcnt_nxv8bf16_ptrue_u:1787; CHECK-2p2: // %bb.0: // %entry1788; CHECK-2p2-NEXT: ptrue p0.h1789; CHECK-2p2-NEXT: cnt z0.h, p0/z, z1.h1790; CHECK-2p2-NEXT: ret1791entry:1792 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1793 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8bf16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)1794 ret <vscale x 8 x i16> %01795}1796 1797define <vscale x 8 x i16> @test_svcnt_nxv8bf16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x bfloat> %y) {1798; CHECK-LABEL: test_svcnt_nxv8bf16_ptrue:1799; CHECK: // %bb.0: // %entry1800; CHECK-NEXT: ptrue p0.h1801; CHECK-NEXT: movprfx z0, z21802; CHECK-NEXT: cnt z0.h, p0/m, z2.h1803; CHECK-NEXT: ret1804;1805; CHECK-2p2-LABEL: test_svcnt_nxv8bf16_ptrue:1806; CHECK-2p2: // %bb.0: // %entry1807; CHECK-2p2-NEXT: ptrue p0.h1808; CHECK-2p2-NEXT: cnt z0.h, p0/z, z2.h1809; CHECK-2p2-NEXT: ret1810entry:1811 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1812 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnt.nxv8bf16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %y)1813 ret <vscale x 8 x i16> %01814}1815 1816define <vscale x 4 x i32> @test_svcnt_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {1817; CHECK-LABEL: test_svcnt_nxv4f32_ptrue_u:1818; CHECK: // %bb.0: // %entry1819; CHECK-NEXT: ptrue p0.s1820; CHECK-NEXT: movprfx z0, z11821; CHECK-NEXT: cnt z0.s, p0/m, z1.s1822; CHECK-NEXT: ret1823;1824; CHECK-2p2-LABEL: test_svcnt_nxv4f32_ptrue_u:1825; CHECK-2p2: // %bb.0: // %entry1826; CHECK-2p2-NEXT: ptrue p0.s1827; CHECK-2p2-NEXT: cnt z0.s, p0/z, z1.s1828; CHECK-2p2-NEXT: ret1829entry:1830 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1831 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1832 ret <vscale x 4 x i32> %01833}1834 1835define <vscale x 4 x i32> @test_svcnt_nxv4f32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x float> %y) {1836; CHECK-LABEL: test_svcnt_nxv4f32_ptrue:1837; CHECK: // %bb.0: // %entry1838; CHECK-NEXT: ptrue p0.s1839; CHECK-NEXT: movprfx z0, z21840; CHECK-NEXT: cnt z0.s, p0/m, z2.s1841; CHECK-NEXT: ret1842;1843; CHECK-2p2-LABEL: test_svcnt_nxv4f32_ptrue:1844; CHECK-2p2: // %bb.0: // %entry1845; CHECK-2p2-NEXT: ptrue p0.s1846; CHECK-2p2-NEXT: cnt z0.s, p0/z, z2.s1847; CHECK-2p2-NEXT: ret1848entry:1849 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1850 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnt.nxv4f32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)1851 ret <vscale x 4 x i32> %01852}1853 1854define <vscale x 2 x i64> @test_svcnt_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {1855; CHECK-LABEL: test_svcnt_nxv2f64_ptrue_u:1856; CHECK: // %bb.0: // %entry1857; CHECK-NEXT: ptrue p0.d1858; CHECK-NEXT: movprfx z0, z11859; CHECK-NEXT: cnt z0.d, p0/m, z1.d1860; CHECK-NEXT: ret1861;1862; CHECK-2p2-LABEL: test_svcnt_nxv2f64_ptrue_u:1863; CHECK-2p2: // %bb.0: // %entry1864; CHECK-2p2-NEXT: ptrue p0.d1865; CHECK-2p2-NEXT: cnt z0.d, p0/z, z1.d1866; CHECK-2p2-NEXT: ret1867entry:1868 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1869 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1870 ret <vscale x 2 x i64> %01871}1872 1873define <vscale x 2 x i64> @test_svcnt_nxv2f64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x double> %y) {1874; CHECK-LABEL: test_svcnt_nxv2f64_ptrue:1875; CHECK: // %bb.0: // %entry1876; CHECK-NEXT: ptrue p0.d1877; CHECK-NEXT: movprfx z0, z21878; CHECK-NEXT: cnt z0.d, p0/m, z2.d1879; CHECK-NEXT: ret1880;1881; CHECK-2p2-LABEL: test_svcnt_nxv2f64_ptrue:1882; CHECK-2p2: // %bb.0: // %entry1883; CHECK-2p2-NEXT: ptrue p0.d1884; CHECK-2p2-NEXT: cnt z0.d, p0/z, z2.d1885; CHECK-2p2-NEXT: ret1886entry:1887 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1888 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnt.nxv2f64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)1889 ret <vscale x 2 x i64> %01890}1891 1892define <vscale x 16 x i8> @test_svcnot_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {1893; CHECK-LABEL: test_svcnot_nxv16i8_ptrue_u:1894; CHECK: // %bb.0: // %entry1895; CHECK-NEXT: ptrue p0.b1896; CHECK-NEXT: movprfx z0, z11897; CHECK-NEXT: cnot z0.b, p0/m, z1.b1898; CHECK-NEXT: ret1899;1900; CHECK-2p2-LABEL: test_svcnot_nxv16i8_ptrue_u:1901; CHECK-2p2: // %bb.0: // %entry1902; CHECK-2p2-NEXT: ptrue p0.b1903; CHECK-2p2-NEXT: cnot z0.b, p0/z, z1.b1904; CHECK-2p2-NEXT: ret1905entry:1906 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1907 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnot.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1908 ret <vscale x 16 x i8> %01909}1910 1911define <vscale x 16 x i8> @test_svcnot_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {1912; CHECK-LABEL: test_svcnot_nxv16i8_ptrue:1913; CHECK: // %bb.0: // %entry1914; CHECK-NEXT: ptrue p0.b1915; CHECK-NEXT: movprfx z0, z21916; CHECK-NEXT: cnot z0.b, p0/m, z2.b1917; CHECK-NEXT: ret1918;1919; CHECK-2p2-LABEL: test_svcnot_nxv16i8_ptrue:1920; CHECK-2p2: // %bb.0: // %entry1921; CHECK-2p2-NEXT: ptrue p0.b1922; CHECK-2p2-NEXT: cnot z0.b, p0/z, z2.b1923; CHECK-2p2-NEXT: ret1924entry:1925 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1926 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.cnot.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)1927 ret <vscale x 16 x i8> %01928}1929 1930define <vscale x 8 x i16> @test_svcnot_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1931; CHECK-LABEL: test_svcnot_nxv8i16_ptrue_u:1932; CHECK: // %bb.0: // %entry1933; CHECK-NEXT: ptrue p0.h1934; CHECK-NEXT: movprfx z0, z11935; CHECK-NEXT: cnot z0.h, p0/m, z1.h1936; CHECK-NEXT: ret1937;1938; CHECK-2p2-LABEL: test_svcnot_nxv8i16_ptrue_u:1939; CHECK-2p2: // %bb.0: // %entry1940; CHECK-2p2-NEXT: ptrue p0.h1941; CHECK-2p2-NEXT: cnot z0.h, p0/z, z1.h1942; CHECK-2p2-NEXT: ret1943entry:1944 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1945 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnot.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1946 ret <vscale x 8 x i16> %01947}1948 1949define <vscale x 8 x i16> @test_svcnot_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1950; CHECK-LABEL: test_svcnot_nxv8i16_ptrue:1951; CHECK: // %bb.0: // %entry1952; CHECK-NEXT: ptrue p0.h1953; CHECK-NEXT: movprfx z0, z21954; CHECK-NEXT: cnot z0.h, p0/m, z2.h1955; CHECK-NEXT: ret1956;1957; CHECK-2p2-LABEL: test_svcnot_nxv8i16_ptrue:1958; CHECK-2p2: // %bb.0: // %entry1959; CHECK-2p2-NEXT: ptrue p0.h1960; CHECK-2p2-NEXT: cnot z0.h, p0/z, z2.h1961; CHECK-2p2-NEXT: ret1962entry:1963 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1964 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.cnot.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1965 ret <vscale x 8 x i16> %01966}1967 1968define <vscale x 4 x i32> @test_svcnot_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1969; CHECK-LABEL: test_svcnot_nxv4i32_ptrue_u:1970; CHECK: // %bb.0: // %entry1971; CHECK-NEXT: ptrue p0.s1972; CHECK-NEXT: movprfx z0, z11973; CHECK-NEXT: cnot z0.s, p0/m, z1.s1974; CHECK-NEXT: ret1975;1976; CHECK-2p2-LABEL: test_svcnot_nxv4i32_ptrue_u:1977; CHECK-2p2: // %bb.0: // %entry1978; CHECK-2p2-NEXT: ptrue p0.s1979; CHECK-2p2-NEXT: cnot z0.s, p0/z, z1.s1980; CHECK-2p2-NEXT: ret1981entry:1982 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1983 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnot.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1984 ret <vscale x 4 x i32> %01985}1986 1987define <vscale x 4 x i32> @test_svcnot_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1988; CHECK-LABEL: test_svcnot_nxv4i32_ptrue:1989; CHECK: // %bb.0: // %entry1990; CHECK-NEXT: ptrue p0.s1991; CHECK-NEXT: movprfx z0, z21992; CHECK-NEXT: cnot z0.s, p0/m, z2.s1993; CHECK-NEXT: ret1994;1995; CHECK-2p2-LABEL: test_svcnot_nxv4i32_ptrue:1996; CHECK-2p2: // %bb.0: // %entry1997; CHECK-2p2-NEXT: ptrue p0.s1998; CHECK-2p2-NEXT: cnot z0.s, p0/z, z2.s1999; CHECK-2p2-NEXT: ret2000entry:2001 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)2002 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.cnot.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)2003 ret <vscale x 4 x i32> %02004}2005 2006define <vscale x 2 x i64> @test_svcnot_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {2007; CHECK-LABEL: test_svcnot_nxv2i64_ptrue_u:2008; CHECK: // %bb.0: // %entry2009; CHECK-NEXT: ptrue p0.d2010; CHECK-NEXT: movprfx z0, z12011; CHECK-NEXT: cnot z0.d, p0/m, z1.d2012; CHECK-NEXT: ret2013;2014; CHECK-2p2-LABEL: test_svcnot_nxv2i64_ptrue_u:2015; CHECK-2p2: // %bb.0: // %entry2016; CHECK-2p2-NEXT: ptrue p0.d2017; CHECK-2p2-NEXT: cnot z0.d, p0/z, z1.d2018; CHECK-2p2-NEXT: ret2019entry:2020 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)2021 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnot.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)2022 ret <vscale x 2 x i64> %02023}2024 2025define <vscale x 2 x i64> @test_svcnot_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {2026; CHECK-LABEL: test_svcnot_nxv2i64_ptrue:2027; CHECK: // %bb.0: // %entry2028; CHECK-NEXT: ptrue p0.d2029; CHECK-NEXT: movprfx z0, z22030; CHECK-NEXT: cnot z0.d, p0/m, z2.d2031; CHECK-NEXT: ret2032;2033; CHECK-2p2-LABEL: test_svcnot_nxv2i64_ptrue:2034; CHECK-2p2: // %bb.0: // %entry2035; CHECK-2p2-NEXT: ptrue p0.d2036; CHECK-2p2-NEXT: cnot z0.d, p0/z, z2.d2037; CHECK-2p2-NEXT: ret2038entry:2039 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)2040 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.cnot.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)2041 ret <vscale x 2 x i64> %02042}2043 2044define <vscale x 16 x i8> @test_svnot_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {2045; CHECK-LABEL: test_svnot_nxv16i8_ptrue_u:2046; CHECK: // %bb.0: // %entry2047; CHECK-NEXT: ptrue p0.b2048; CHECK-NEXT: movprfx z0, z12049; CHECK-NEXT: not z0.b, p0/m, z1.b2050; CHECK-NEXT: ret2051;2052; CHECK-2p2-LABEL: test_svnot_nxv16i8_ptrue_u:2053; CHECK-2p2: // %bb.0: // %entry2054; CHECK-2p2-NEXT: ptrue p0.b2055; CHECK-2p2-NEXT: not z0.b, p0/z, z1.b2056; CHECK-2p2-NEXT: ret2057entry:2058 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)2059 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.not.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)2060 ret <vscale x 16 x i8> %02061}2062 2063define <vscale x 16 x i8> @test_svnot_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {2064; CHECK-LABEL: test_svnot_nxv16i8_ptrue:2065; CHECK: // %bb.0: // %entry2066; CHECK-NEXT: ptrue p0.b2067; CHECK-NEXT: movprfx z0, z22068; CHECK-NEXT: not z0.b, p0/m, z2.b2069; CHECK-NEXT: ret2070;2071; CHECK-2p2-LABEL: test_svnot_nxv16i8_ptrue:2072; CHECK-2p2: // %bb.0: // %entry2073; CHECK-2p2-NEXT: ptrue p0.b2074; CHECK-2p2-NEXT: not z0.b, p0/z, z2.b2075; CHECK-2p2-NEXT: ret2076entry:2077 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)2078 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.not.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)2079 ret <vscale x 16 x i8> %02080}2081 2082define <vscale x 8 x i16> @test_svnot_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {2083; CHECK-LABEL: test_svnot_nxv8i16_ptrue_u:2084; CHECK: // %bb.0: // %entry2085; CHECK-NEXT: ptrue p0.h2086; CHECK-NEXT: movprfx z0, z12087; CHECK-NEXT: not z0.h, p0/m, z1.h2088; CHECK-NEXT: ret2089;2090; CHECK-2p2-LABEL: test_svnot_nxv8i16_ptrue_u:2091; CHECK-2p2: // %bb.0: // %entry2092; CHECK-2p2-NEXT: ptrue p0.h2093; CHECK-2p2-NEXT: not z0.h, p0/z, z1.h2094; CHECK-2p2-NEXT: ret2095entry:2096 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)2097 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.not.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)2098 ret <vscale x 8 x i16> %02099}2100 2101define <vscale x 8 x i16> @test_svnot_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {2102; CHECK-LABEL: test_svnot_nxv8i16_ptrue:2103; CHECK: // %bb.0: // %entry2104; CHECK-NEXT: ptrue p0.h2105; CHECK-NEXT: movprfx z0, z22106; CHECK-NEXT: not z0.h, p0/m, z2.h2107; CHECK-NEXT: ret2108;2109; CHECK-2p2-LABEL: test_svnot_nxv8i16_ptrue:2110; CHECK-2p2: // %bb.0: // %entry2111; CHECK-2p2-NEXT: ptrue p0.h2112; CHECK-2p2-NEXT: not z0.h, p0/z, z2.h2113; CHECK-2p2-NEXT: ret2114entry:2115 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)2116 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.not.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)2117 ret <vscale x 8 x i16> %02118}2119 2120define <vscale x 4 x i32> @test_svnot_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {2121; CHECK-LABEL: test_svnot_nxv4i32_ptrue_u:2122; CHECK: // %bb.0: // %entry2123; CHECK-NEXT: ptrue p0.s2124; CHECK-NEXT: movprfx z0, z12125; CHECK-NEXT: not z0.s, p0/m, z1.s2126; CHECK-NEXT: ret2127;2128; CHECK-2p2-LABEL: test_svnot_nxv4i32_ptrue_u:2129; CHECK-2p2: // %bb.0: // %entry2130; CHECK-2p2-NEXT: ptrue p0.s2131; CHECK-2p2-NEXT: not z0.s, p0/z, z1.s2132; CHECK-2p2-NEXT: ret2133entry:2134 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)2135 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.not.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)2136 ret <vscale x 4 x i32> %02137}2138 2139define <vscale x 4 x i32> @test_svnot_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {2140; CHECK-LABEL: test_svnot_nxv4i32_ptrue:2141; CHECK: // %bb.0: // %entry2142; CHECK-NEXT: ptrue p0.s2143; CHECK-NEXT: movprfx z0, z22144; CHECK-NEXT: not z0.s, p0/m, z2.s2145; CHECK-NEXT: ret2146;2147; CHECK-2p2-LABEL: test_svnot_nxv4i32_ptrue:2148; CHECK-2p2: // %bb.0: // %entry2149; CHECK-2p2-NEXT: ptrue p0.s2150; CHECK-2p2-NEXT: not z0.s, p0/z, z2.s2151; CHECK-2p2-NEXT: ret2152entry:2153 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)2154 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.not.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)2155 ret <vscale x 4 x i32> %02156}2157 2158define <vscale x 2 x i64> @test_svnot_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {2159; CHECK-LABEL: test_svnot_nxv2i64_ptrue_u:2160; CHECK: // %bb.0: // %entry2161; CHECK-NEXT: ptrue p0.d2162; CHECK-NEXT: movprfx z0, z12163; CHECK-NEXT: not z0.d, p0/m, z1.d2164; CHECK-NEXT: ret2165;2166; CHECK-2p2-LABEL: test_svnot_nxv2i64_ptrue_u:2167; CHECK-2p2: // %bb.0: // %entry2168; CHECK-2p2-NEXT: ptrue p0.d2169; CHECK-2p2-NEXT: not z0.d, p0/z, z1.d2170; CHECK-2p2-NEXT: ret2171entry:2172 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)2173 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.not.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)2174 ret <vscale x 2 x i64> %02175}2176 2177define <vscale x 2 x i64> @test_svnot_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {2178; CHECK-LABEL: test_svnot_nxv2i64_ptrue:2179; CHECK: // %bb.0: // %entry2180; CHECK-NEXT: ptrue p0.d2181; CHECK-NEXT: movprfx z0, z22182; CHECK-NEXT: not z0.d, p0/m, z2.d2183; CHECK-NEXT: ret2184;2185; CHECK-2p2-LABEL: test_svnot_nxv2i64_ptrue:2186; CHECK-2p2: // %bb.0: // %entry2187; CHECK-2p2-NEXT: ptrue p0.d2188; CHECK-2p2-NEXT: not z0.d, p0/z, z2.d2189; CHECK-2p2-NEXT: ret2190entry:2191 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)2192 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.not.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)2193 ret <vscale x 2 x i64> %02194}2195