921 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mattr=+sve2 < %s | FileCheck %s -check-prefixes=CHECK,SVE3; RUN: llc -mattr=+sve2p2 < %s | FileCheck %s -check-prefix CHECK-2p24; RUN: llc -mattr=+sve,+sme2p2 < %s | FileCheck %s -check-prefix CHECK-2p25 6; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s -check-prefixes=CHECK,STREAMING-SVE7; RUN: llc -mattr=+sme2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p28; RUN: llc -mattr=+sme,+sve2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p29 10target triple = "aarch64-linux"11 12define <vscale x 4 x i32> @test_svrecpe_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {13; CHECK-LABEL: test_svrecpe_x_1:14; CHECK: // %bb.0: // %entry15; CHECK-NEXT: urecpe z0.s, p0/m, z0.s16; CHECK-NEXT: ret17;18; CHECK-2p2-LABEL: test_svrecpe_x_1:19; CHECK-2p2: // %bb.0: // %entry20; CHECK-2p2-NEXT: urecpe z0.s, p0/z, z0.s21; CHECK-2p2-NEXT: ret22entry:23 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)24 ret <vscale x 4 x i32> %025}26 27define <vscale x 4 x i32> @test_svrecpe_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {28; CHECK-LABEL: test_svrecpe_x_2:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: movprfx z0, z131; CHECK-NEXT: urecpe z0.s, p0/m, z1.s32; CHECK-NEXT: ret33;34; CHECK-2p2-LABEL: test_svrecpe_x_2:35; CHECK-2p2: // %bb.0: // %entry36; CHECK-2p2-NEXT: urecpe z0.s, p0/z, z1.s37; CHECK-2p2-NEXT: ret38entry:39 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)40 ret <vscale x 4 x i32> %041}42 43define <vscale x 4 x i32> @test_svrecpe_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {44; SVE-LABEL: test_svrecpe_z:45; SVE: // %bb.0: // %entry46; SVE-NEXT: movi v0.2d, #000000000000000047; SVE-NEXT: urecpe z0.s, p0/m, z1.s48; SVE-NEXT: ret49;50; CHECK-2p2-LABEL: test_svrecpe_z:51; CHECK-2p2: // %bb.0: // %entry52; CHECK-2p2-NEXT: urecpe z0.s, p0/z, z1.s53; CHECK-2p2-NEXT: ret54;55; STREAMING-SVE-LABEL: test_svrecpe_z:56; STREAMING-SVE: // %bb.0: // %entry57; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x058; STREAMING-SVE-NEXT: urecpe z0.s, p0/m, z1.s59; STREAMING-SVE-NEXT: ret60entry:61 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)62 ret <vscale x 4 x i32> %063}64 65define <vscale x 4 x i32> @test_svrsqrte_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {66; CHECK-LABEL: test_svrsqrte_x_1:67; CHECK: // %bb.0: // %entry68; CHECK-NEXT: ursqrte z0.s, p0/m, z0.s69; CHECK-NEXT: ret70;71; CHECK-2p2-LABEL: test_svrsqrte_x_1:72; CHECK-2p2: // %bb.0: // %entry73; CHECK-2p2-NEXT: ursqrte z0.s, p0/z, z0.s74; CHECK-2p2-NEXT: ret75entry:76 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)77 ret <vscale x 4 x i32> %078}79 80define <vscale x 4 x i32> @test_svrsqrte_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {81; CHECK-LABEL: test_svrsqrte_x_2:82; CHECK: // %bb.0: // %entry83; CHECK-NEXT: movprfx z0, z184; CHECK-NEXT: ursqrte z0.s, p0/m, z1.s85; CHECK-NEXT: ret86;87; CHECK-2p2-LABEL: test_svrsqrte_x_2:88; CHECK-2p2: // %bb.0: // %entry89; CHECK-2p2-NEXT: ursqrte z0.s, p0/z, z1.s90; CHECK-2p2-NEXT: ret91entry:92 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)93 ret <vscale x 4 x i32> %094}95 96define <vscale x 4 x i32> @test_svrsqrte_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {97; SVE-LABEL: test_svrsqrte_z:98; SVE: // %bb.0: // %entry99; SVE-NEXT: movi v0.2d, #0000000000000000100; SVE-NEXT: ursqrte z0.s, p0/m, z1.s101; SVE-NEXT: ret102;103; CHECK-2p2-LABEL: test_svrsqrte_z:104; CHECK-2p2: // %bb.0: // %entry105; CHECK-2p2-NEXT: ursqrte z0.s, p0/z, z1.s106; CHECK-2p2-NEXT: ret107;108; STREAMING-SVE-LABEL: test_svrsqrte_z:109; STREAMING-SVE: // %bb.0: // %entry110; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0111; STREAMING-SVE-NEXT: ursqrte z0.s, p0/m, z1.s112; STREAMING-SVE-NEXT: ret113entry:114 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)115 ret <vscale x 4 x i32> %0116}117 118define <vscale x 16 x i8> @test_svqabs_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {119; CHECK-LABEL: test_svqabs_s8_x_1:120; CHECK: // %bb.0: // %entry121; CHECK-NEXT: sqabs z0.b, p0/m, z0.b122; CHECK-NEXT: ret123;124; CHECK-2p2-LABEL: test_svqabs_s8_x_1:125; CHECK-2p2: // %bb.0: // %entry126; CHECK-2p2-NEXT: sqabs z0.b, p0/z, z0.b127; CHECK-2p2-NEXT: ret128entry:129 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)130 ret <vscale x 16 x i8> %0131}132 133define <vscale x 16 x i8> @test_svqabs_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {134; CHECK-LABEL: test_svqabs_s8_x_2:135; CHECK: // %bb.0: // %entry136; CHECK-NEXT: movprfx z0, z1137; CHECK-NEXT: sqabs z0.b, p0/m, z1.b138; CHECK-NEXT: ret139;140; CHECK-2p2-LABEL: test_svqabs_s8_x_2:141; CHECK-2p2: // %bb.0: // %entry142; CHECK-2p2-NEXT: sqabs z0.b, p0/z, z1.b143; CHECK-2p2-NEXT: ret144entry:145 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)146 ret <vscale x 16 x i8> %0147}148 149define <vscale x 16 x i8> @test_svqabs_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {150; SVE-LABEL: test_svqabs_s8_z:151; SVE: // %bb.0: // %entry152; SVE-NEXT: movi v0.2d, #0000000000000000153; SVE-NEXT: sqabs z0.b, p0/m, z1.b154; SVE-NEXT: ret155;156; CHECK-2p2-LABEL: test_svqabs_s8_z:157; CHECK-2p2: // %bb.0: // %entry158; CHECK-2p2-NEXT: sqabs z0.b, p0/z, z1.b159; CHECK-2p2-NEXT: ret160;161; STREAMING-SVE-LABEL: test_svqabs_s8_z:162; STREAMING-SVE: // %bb.0: // %entry163; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x0164; STREAMING-SVE-NEXT: sqabs z0.b, p0/m, z1.b165; STREAMING-SVE-NEXT: ret166entry:167 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)168 ret <vscale x 16 x i8> %0169}170 171define <vscale x 8 x i16> @test_svqabs_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {172; CHECK-LABEL: test_svqabs_s16_x_1:173; CHECK: // %bb.0: // %entry174; CHECK-NEXT: sqabs z0.h, p0/m, z0.h175; CHECK-NEXT: ret176;177; CHECK-2p2-LABEL: test_svqabs_s16_x_1:178; CHECK-2p2: // %bb.0: // %entry179; CHECK-2p2-NEXT: sqabs z0.h, p0/z, z0.h180; CHECK-2p2-NEXT: ret181entry:182 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)183 ret <vscale x 8 x i16> %0184}185 186define <vscale x 8 x i16> @test_svqabs_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {187; CHECK-LABEL: test_svqabs_s16_x_2:188; CHECK: // %bb.0: // %entry189; CHECK-NEXT: movprfx z0, z1190; CHECK-NEXT: sqabs z0.h, p0/m, z1.h191; CHECK-NEXT: ret192;193; CHECK-2p2-LABEL: test_svqabs_s16_x_2:194; CHECK-2p2: // %bb.0: // %entry195; CHECK-2p2-NEXT: sqabs z0.h, p0/z, z1.h196; CHECK-2p2-NEXT: ret197entry:198 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)199 ret <vscale x 8 x i16> %0200}201 202define <vscale x 8 x i16> @test_svqabs_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {203; SVE-LABEL: test_svqabs_s16_z:204; SVE: // %bb.0: // %entry205; SVE-NEXT: movi v0.2d, #0000000000000000206; SVE-NEXT: sqabs z0.h, p0/m, z1.h207; SVE-NEXT: ret208;209; CHECK-2p2-LABEL: test_svqabs_s16_z:210; CHECK-2p2: // %bb.0: // %entry211; CHECK-2p2-NEXT: sqabs z0.h, p0/z, z1.h212; CHECK-2p2-NEXT: ret213;214; STREAMING-SVE-LABEL: test_svqabs_s16_z:215; STREAMING-SVE: // %bb.0: // %entry216; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0217; STREAMING-SVE-NEXT: sqabs z0.h, p0/m, z1.h218; STREAMING-SVE-NEXT: ret219entry:220 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)221 ret <vscale x 8 x i16> %0222}223 224define <vscale x 4 x i32> @test_svqabs_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {225; CHECK-LABEL: test_svqabs_s32_x_1:226; CHECK: // %bb.0: // %entry227; CHECK-NEXT: sqabs z0.s, p0/m, z0.s228; CHECK-NEXT: ret229;230; CHECK-2p2-LABEL: test_svqabs_s32_x_1:231; CHECK-2p2: // %bb.0: // %entry232; CHECK-2p2-NEXT: sqabs z0.s, p0/z, z0.s233; CHECK-2p2-NEXT: ret234entry:235 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)236 ret <vscale x 4 x i32> %0237}238 239define <vscale x 4 x i32> @test_svqabs_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {240; CHECK-LABEL: test_svqabs_s32_x_2:241; CHECK: // %bb.0: // %entry242; CHECK-NEXT: movprfx z0, z1243; CHECK-NEXT: sqabs z0.s, p0/m, z1.s244; CHECK-NEXT: ret245;246; CHECK-2p2-LABEL: test_svqabs_s32_x_2:247; CHECK-2p2: // %bb.0: // %entry248; CHECK-2p2-NEXT: sqabs z0.s, p0/z, z1.s249; CHECK-2p2-NEXT: ret250entry:251 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)252 ret <vscale x 4 x i32> %0253}254 255define <vscale x 4 x i32> @test_svqabs_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {256; SVE-LABEL: test_svqabs_s32_z:257; SVE: // %bb.0: // %entry258; SVE-NEXT: movi v0.2d, #0000000000000000259; SVE-NEXT: sqabs z0.s, p0/m, z1.s260; SVE-NEXT: ret261;262; CHECK-2p2-LABEL: test_svqabs_s32_z:263; CHECK-2p2: // %bb.0: // %entry264; CHECK-2p2-NEXT: sqabs z0.s, p0/z, z1.s265; CHECK-2p2-NEXT: ret266;267; STREAMING-SVE-LABEL: test_svqabs_s32_z:268; STREAMING-SVE: // %bb.0: // %entry269; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0270; STREAMING-SVE-NEXT: sqabs z0.s, p0/m, z1.s271; STREAMING-SVE-NEXT: ret272entry:273 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)274 ret <vscale x 4 x i32> %0275}276 277define <vscale x 2 x i64> @test_svqabs_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {278; CHECK-LABEL: test_svqabs_s64_x_1:279; CHECK: // %bb.0: // %entry280; CHECK-NEXT: sqabs z0.d, p0/m, z0.d281; CHECK-NEXT: ret282;283; CHECK-2p2-LABEL: test_svqabs_s64_x_1:284; CHECK-2p2: // %bb.0: // %entry285; CHECK-2p2-NEXT: sqabs z0.d, p0/z, z0.d286; CHECK-2p2-NEXT: ret287entry:288 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)289 ret <vscale x 2 x i64> %0290}291 292define <vscale x 2 x i64> @test_svqabs_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {293; CHECK-LABEL: test_svqabs_s64_x_2:294; CHECK: // %bb.0: // %entry295; CHECK-NEXT: movprfx z0, z1296; CHECK-NEXT: sqabs z0.d, p0/m, z1.d297; CHECK-NEXT: ret298;299; CHECK-2p2-LABEL: test_svqabs_s64_x_2:300; CHECK-2p2: // %bb.0: // %entry301; CHECK-2p2-NEXT: sqabs z0.d, p0/z, z1.d302; CHECK-2p2-NEXT: ret303entry:304 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)305 ret <vscale x 2 x i64> %0306}307 308define <vscale x 2 x i64> @test_svqabs_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {309; SVE-LABEL: test_svqabs_s64_z:310; SVE: // %bb.0: // %entry311; SVE-NEXT: movi v0.2d, #0000000000000000312; SVE-NEXT: sqabs z0.d, p0/m, z1.d313; SVE-NEXT: ret314;315; CHECK-2p2-LABEL: test_svqabs_s64_z:316; CHECK-2p2: // %bb.0: // %entry317; CHECK-2p2-NEXT: sqabs z0.d, p0/z, z1.d318; CHECK-2p2-NEXT: ret319;320; STREAMING-SVE-LABEL: test_svqabs_s64_z:321; STREAMING-SVE: // %bb.0: // %entry322; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0323; STREAMING-SVE-NEXT: sqabs z0.d, p0/m, z1.d324; STREAMING-SVE-NEXT: ret325entry:326 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)327 ret <vscale x 2 x i64> %0328}329 330define <vscale x 16 x i8> @test_svqneg_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {331; CHECK-LABEL: test_svqneg_s8_x_1:332; CHECK: // %bb.0: // %entry333; CHECK-NEXT: sqneg z0.b, p0/m, z0.b334; CHECK-NEXT: ret335;336; CHECK-2p2-LABEL: test_svqneg_s8_x_1:337; CHECK-2p2: // %bb.0: // %entry338; CHECK-2p2-NEXT: sqneg z0.b, p0/z, z0.b339; CHECK-2p2-NEXT: ret340entry:341 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)342 ret <vscale x 16 x i8> %0343}344 345define <vscale x 16 x i8> @test_svqneg_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {346; CHECK-LABEL: test_svqneg_s8_x_2:347; CHECK: // %bb.0: // %entry348; CHECK-NEXT: movprfx z0, z1349; CHECK-NEXT: sqneg z0.b, p0/m, z1.b350; CHECK-NEXT: ret351;352; CHECK-2p2-LABEL: test_svqneg_s8_x_2:353; CHECK-2p2: // %bb.0: // %entry354; CHECK-2p2-NEXT: sqneg z0.b, p0/z, z1.b355; CHECK-2p2-NEXT: ret356entry:357 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)358 ret <vscale x 16 x i8> %0359}360 361define <vscale x 16 x i8> @test_svqneg_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {362; SVE-LABEL: test_svqneg_s8_z:363; SVE: // %bb.0: // %entry364; SVE-NEXT: movi v0.2d, #0000000000000000365; SVE-NEXT: sqneg z0.b, p0/m, z1.b366; SVE-NEXT: ret367;368; CHECK-2p2-LABEL: test_svqneg_s8_z:369; CHECK-2p2: // %bb.0: // %entry370; CHECK-2p2-NEXT: sqneg z0.b, p0/z, z1.b371; CHECK-2p2-NEXT: ret372;373; STREAMING-SVE-LABEL: test_svqneg_s8_z:374; STREAMING-SVE: // %bb.0: // %entry375; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x0376; STREAMING-SVE-NEXT: sqneg z0.b, p0/m, z1.b377; STREAMING-SVE-NEXT: ret378entry:379 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)380 ret <vscale x 16 x i8> %0381}382 383define <vscale x 8 x i16> @test_svqneg_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {384; CHECK-LABEL: test_svqneg_s16_x_1:385; CHECK: // %bb.0: // %entry386; CHECK-NEXT: sqneg z0.h, p0/m, z0.h387; CHECK-NEXT: ret388;389; CHECK-2p2-LABEL: test_svqneg_s16_x_1:390; CHECK-2p2: // %bb.0: // %entry391; CHECK-2p2-NEXT: sqneg z0.h, p0/z, z0.h392; CHECK-2p2-NEXT: ret393entry:394 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)395 ret <vscale x 8 x i16> %0396}397 398define <vscale x 8 x i16> @test_svqneg_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {399; CHECK-LABEL: test_svqneg_s16_x_2:400; CHECK: // %bb.0: // %entry401; CHECK-NEXT: movprfx z0, z1402; CHECK-NEXT: sqneg z0.h, p0/m, z1.h403; CHECK-NEXT: ret404;405; CHECK-2p2-LABEL: test_svqneg_s16_x_2:406; CHECK-2p2: // %bb.0: // %entry407; CHECK-2p2-NEXT: sqneg z0.h, p0/z, z1.h408; CHECK-2p2-NEXT: ret409entry:410 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)411 ret <vscale x 8 x i16> %0412}413 414define <vscale x 8 x i16> @test_svqneg_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {415; SVE-LABEL: test_svqneg_s16_z:416; SVE: // %bb.0: // %entry417; SVE-NEXT: movi v0.2d, #0000000000000000418; SVE-NEXT: sqneg z0.h, p0/m, z1.h419; SVE-NEXT: ret420;421; CHECK-2p2-LABEL: test_svqneg_s16_z:422; CHECK-2p2: // %bb.0: // %entry423; CHECK-2p2-NEXT: sqneg z0.h, p0/z, z1.h424; CHECK-2p2-NEXT: ret425;426; STREAMING-SVE-LABEL: test_svqneg_s16_z:427; STREAMING-SVE: // %bb.0: // %entry428; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0429; STREAMING-SVE-NEXT: sqneg z0.h, p0/m, z1.h430; STREAMING-SVE-NEXT: ret431entry:432 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)433 ret <vscale x 8 x i16> %0434}435 436define <vscale x 4 x i32> @test_svqneg_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {437; CHECK-LABEL: test_svqneg_s32_x_1:438; CHECK: // %bb.0: // %entry439; CHECK-NEXT: sqneg z0.s, p0/m, z0.s440; CHECK-NEXT: ret441;442; CHECK-2p2-LABEL: test_svqneg_s32_x_1:443; CHECK-2p2: // %bb.0: // %entry444; CHECK-2p2-NEXT: sqneg z0.s, p0/z, z0.s445; CHECK-2p2-NEXT: ret446entry:447 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)448 ret <vscale x 4 x i32> %0449}450 451define <vscale x 4 x i32> @test_svqneg_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {452; CHECK-LABEL: test_svqneg_s32_x_2:453; CHECK: // %bb.0: // %entry454; CHECK-NEXT: movprfx z0, z1455; CHECK-NEXT: sqneg z0.s, p0/m, z1.s456; CHECK-NEXT: ret457;458; CHECK-2p2-LABEL: test_svqneg_s32_x_2:459; CHECK-2p2: // %bb.0: // %entry460; CHECK-2p2-NEXT: sqneg z0.s, p0/z, z1.s461; CHECK-2p2-NEXT: ret462entry:463 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)464 ret <vscale x 4 x i32> %0465}466 467define <vscale x 4 x i32> @test_svqneg_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {468; SVE-LABEL: test_svqneg_s32_z:469; SVE: // %bb.0: // %entry470; SVE-NEXT: movi v0.2d, #0000000000000000471; SVE-NEXT: sqneg z0.s, p0/m, z1.s472; SVE-NEXT: ret473;474; CHECK-2p2-LABEL: test_svqneg_s32_z:475; CHECK-2p2: // %bb.0: // %entry476; CHECK-2p2-NEXT: sqneg z0.s, p0/z, z1.s477; CHECK-2p2-NEXT: ret478;479; STREAMING-SVE-LABEL: test_svqneg_s32_z:480; STREAMING-SVE: // %bb.0: // %entry481; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0482; STREAMING-SVE-NEXT: sqneg z0.s, p0/m, z1.s483; STREAMING-SVE-NEXT: ret484entry:485 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)486 ret <vscale x 4 x i32> %0487}488 489define <vscale x 2 x i64> @test_svqneg_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {490; CHECK-LABEL: test_svqneg_s64_x_1:491; CHECK: // %bb.0: // %entry492; CHECK-NEXT: sqneg z0.d, p0/m, z0.d493; CHECK-NEXT: ret494;495; CHECK-2p2-LABEL: test_svqneg_s64_x_1:496; CHECK-2p2: // %bb.0: // %entry497; CHECK-2p2-NEXT: sqneg z0.d, p0/z, z0.d498; CHECK-2p2-NEXT: ret499entry:500 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)501 ret <vscale x 2 x i64> %0502}503 504define <vscale x 2 x i64> @test_svqneg_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {505; CHECK-LABEL: test_svqneg_s64_x_2:506; CHECK: // %bb.0: // %entry507; CHECK-NEXT: movprfx z0, z1508; CHECK-NEXT: sqneg z0.d, p0/m, z1.d509; CHECK-NEXT: ret510;511; CHECK-2p2-LABEL: test_svqneg_s64_x_2:512; CHECK-2p2: // %bb.0: // %entry513; CHECK-2p2-NEXT: sqneg z0.d, p0/z, z1.d514; CHECK-2p2-NEXT: ret515entry:516 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)517 ret <vscale x 2 x i64> %0518}519 520define <vscale x 2 x i64> @test_svqneg_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {521; SVE-LABEL: test_svqneg_s64_z:522; SVE: // %bb.0: // %entry523; SVE-NEXT: movi v0.2d, #0000000000000000524; SVE-NEXT: sqneg z0.d, p0/m, z1.d525; SVE-NEXT: ret526;527; CHECK-2p2-LABEL: test_svqneg_s64_z:528; CHECK-2p2: // %bb.0: // %entry529; CHECK-2p2-NEXT: sqneg z0.d, p0/z, z1.d530; CHECK-2p2-NEXT: ret531;532; STREAMING-SVE-LABEL: test_svqneg_s64_z:533; STREAMING-SVE: // %bb.0: // %entry534; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0535; STREAMING-SVE-NEXT: sqneg z0.d, p0/m, z1.d536; STREAMING-SVE-NEXT: ret537entry:538 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)539 ret <vscale x 2 x i64> %0540}541 542define <vscale x 4 x i32> @test_svurecpe_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {543; CHECK-LABEL: test_svurecpe_nxv4i32_ptrue_u:544; CHECK: // %bb.0: // %entry545; CHECK-NEXT: ptrue p0.s546; CHECK-NEXT: movprfx z0, z1547; CHECK-NEXT: urecpe z0.s, p0/m, z1.s548; CHECK-NEXT: ret549;550; CHECK-2p2-LABEL: test_svurecpe_nxv4i32_ptrue_u:551; CHECK-2p2: // %bb.0: // %entry552; CHECK-2p2-NEXT: ptrue p0.s553; CHECK-2p2-NEXT: urecpe z0.s, p0/z, z1.s554; CHECK-2p2-NEXT: ret555entry:556 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)557 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)558 ret <vscale x 4 x i32> %0559}560 561define <vscale x 4 x i32> @test_svurecpe_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {562; CHECK-LABEL: test_svurecpe_nxv4i32_ptrue:563; CHECK: // %bb.0: // %entry564; CHECK-NEXT: ptrue p0.s565; CHECK-NEXT: movprfx z0, z2566; CHECK-NEXT: urecpe z0.s, p0/m, z2.s567; CHECK-NEXT: ret568;569; CHECK-2p2-LABEL: test_svurecpe_nxv4i32_ptrue:570; CHECK-2p2: // %bb.0: // %entry571; CHECK-2p2-NEXT: ptrue p0.s572; CHECK-2p2-NEXT: urecpe z0.s, p0/z, z2.s573; CHECK-2p2-NEXT: ret574entry:575 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)576 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.urecpe.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)577 ret <vscale x 4 x i32> %0578}579 580define <vscale x 4 x i32> @test_svursqrte_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {581; CHECK-LABEL: test_svursqrte_nxv4i32_ptrue_u:582; CHECK: // %bb.0: // %entry583; CHECK-NEXT: ptrue p0.s584; CHECK-NEXT: movprfx z0, z1585; CHECK-NEXT: ursqrte z0.s, p0/m, z1.s586; CHECK-NEXT: ret587;588; CHECK-2p2-LABEL: test_svursqrte_nxv4i32_ptrue_u:589; CHECK-2p2: // %bb.0: // %entry590; CHECK-2p2-NEXT: ptrue p0.s591; CHECK-2p2-NEXT: ursqrte z0.s, p0/z, z1.s592; CHECK-2p2-NEXT: ret593entry:594 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)595 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)596 ret <vscale x 4 x i32> %0597}598 599define <vscale x 4 x i32> @test_svursqrte_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {600; CHECK-LABEL: test_svursqrte_nxv4i32_ptrue:601; CHECK: // %bb.0: // %entry602; CHECK-NEXT: ptrue p0.s603; CHECK-NEXT: movprfx z0, z2604; CHECK-NEXT: ursqrte z0.s, p0/m, z2.s605; CHECK-NEXT: ret606;607; CHECK-2p2-LABEL: test_svursqrte_nxv4i32_ptrue:608; CHECK-2p2: // %bb.0: // %entry609; CHECK-2p2-NEXT: ptrue p0.s610; CHECK-2p2-NEXT: ursqrte z0.s, p0/z, z2.s611; CHECK-2p2-NEXT: ret612entry:613 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)614 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.ursqrte.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)615 ret <vscale x 4 x i32> %0616}617 618define <vscale x 16 x i8> @test_svsqabs_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {619; CHECK-LABEL: test_svsqabs_nxv16i8_ptrue_u:620; CHECK: // %bb.0: // %entry621; CHECK-NEXT: ptrue p0.b622; CHECK-NEXT: movprfx z0, z1623; CHECK-NEXT: sqabs z0.b, p0/m, z1.b624; CHECK-NEXT: ret625;626; CHECK-2p2-LABEL: test_svsqabs_nxv16i8_ptrue_u:627; CHECK-2p2: // %bb.0: // %entry628; CHECK-2p2-NEXT: ptrue p0.b629; CHECK-2p2-NEXT: sqabs z0.b, p0/z, z1.b630; CHECK-2p2-NEXT: ret631entry:632 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)633 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)634 ret <vscale x 16 x i8> %0635}636 637define <vscale x 16 x i8> @test_svsqabs_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {638; CHECK-LABEL: test_svsqabs_nxv16i8_ptrue:639; CHECK: // %bb.0: // %entry640; CHECK-NEXT: ptrue p0.b641; CHECK-NEXT: movprfx z0, z2642; CHECK-NEXT: sqabs z0.b, p0/m, z2.b643; CHECK-NEXT: ret644;645; CHECK-2p2-LABEL: test_svsqabs_nxv16i8_ptrue:646; CHECK-2p2: // %bb.0: // %entry647; CHECK-2p2-NEXT: ptrue p0.b648; CHECK-2p2-NEXT: sqabs z0.b, p0/z, z2.b649; CHECK-2p2-NEXT: ret650entry:651 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)652 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqabs.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)653 ret <vscale x 16 x i8> %0654}655 656define <vscale x 8 x i16> @test_svsqabs_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {657; CHECK-LABEL: test_svsqabs_nxv8i16_ptrue_u:658; CHECK: // %bb.0: // %entry659; CHECK-NEXT: ptrue p0.h660; CHECK-NEXT: movprfx z0, z1661; CHECK-NEXT: sqabs z0.h, p0/m, z1.h662; CHECK-NEXT: ret663;664; CHECK-2p2-LABEL: test_svsqabs_nxv8i16_ptrue_u:665; CHECK-2p2: // %bb.0: // %entry666; CHECK-2p2-NEXT: ptrue p0.h667; CHECK-2p2-NEXT: sqabs z0.h, p0/z, z1.h668; CHECK-2p2-NEXT: ret669entry:670 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)671 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)672 ret <vscale x 8 x i16> %0673}674 675define <vscale x 8 x i16> @test_svsqabs_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {676; CHECK-LABEL: test_svsqabs_nxv8i16_ptrue:677; CHECK: // %bb.0: // %entry678; CHECK-NEXT: ptrue p0.h679; CHECK-NEXT: movprfx z0, z2680; CHECK-NEXT: sqabs z0.h, p0/m, z2.h681; CHECK-NEXT: ret682;683; CHECK-2p2-LABEL: test_svsqabs_nxv8i16_ptrue:684; CHECK-2p2: // %bb.0: // %entry685; CHECK-2p2-NEXT: ptrue p0.h686; CHECK-2p2-NEXT: sqabs z0.h, p0/z, z2.h687; CHECK-2p2-NEXT: ret688entry:689 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)690 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqabs.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)691 ret <vscale x 8 x i16> %0692}693 694define <vscale x 4 x i32> @test_svsqabs_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {695; CHECK-LABEL: test_svsqabs_nxv4i32_ptrue_u:696; CHECK: // %bb.0: // %entry697; CHECK-NEXT: ptrue p0.s698; CHECK-NEXT: movprfx z0, z1699; CHECK-NEXT: sqabs z0.s, p0/m, z1.s700; CHECK-NEXT: ret701;702; CHECK-2p2-LABEL: test_svsqabs_nxv4i32_ptrue_u:703; CHECK-2p2: // %bb.0: // %entry704; CHECK-2p2-NEXT: ptrue p0.s705; CHECK-2p2-NEXT: sqabs z0.s, p0/z, z1.s706; CHECK-2p2-NEXT: ret707entry:708 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)709 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)710 ret <vscale x 4 x i32> %0711}712 713define <vscale x 4 x i32> @test_svsqabs_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {714; CHECK-LABEL: test_svsqabs_nxv4i32_ptrue:715; CHECK: // %bb.0: // %entry716; CHECK-NEXT: ptrue p0.s717; CHECK-NEXT: movprfx z0, z2718; CHECK-NEXT: sqabs z0.s, p0/m, z2.s719; CHECK-NEXT: ret720;721; CHECK-2p2-LABEL: test_svsqabs_nxv4i32_ptrue:722; CHECK-2p2: // %bb.0: // %entry723; CHECK-2p2-NEXT: ptrue p0.s724; CHECK-2p2-NEXT: sqabs z0.s, p0/z, z2.s725; CHECK-2p2-NEXT: ret726entry:727 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)728 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqabs.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)729 ret <vscale x 4 x i32> %0730}731 732define <vscale x 2 x i64> @test_svsqabs_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {733; CHECK-LABEL: test_svsqabs_nxv2i64_ptrue_u:734; CHECK: // %bb.0: // %entry735; CHECK-NEXT: ptrue p0.d736; CHECK-NEXT: movprfx z0, z1737; CHECK-NEXT: sqabs z0.d, p0/m, z1.d738; CHECK-NEXT: ret739;740; CHECK-2p2-LABEL: test_svsqabs_nxv2i64_ptrue_u:741; CHECK-2p2: // %bb.0: // %entry742; CHECK-2p2-NEXT: ptrue p0.d743; CHECK-2p2-NEXT: sqabs z0.d, p0/z, z1.d744; CHECK-2p2-NEXT: ret745entry:746 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)747 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)748 ret <vscale x 2 x i64> %0749}750 751define <vscale x 2 x i64> @test_svsqabs_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {752; CHECK-LABEL: test_svsqabs_nxv2i64_ptrue:753; CHECK: // %bb.0: // %entry754; CHECK-NEXT: ptrue p0.d755; CHECK-NEXT: movprfx z0, z2756; CHECK-NEXT: sqabs z0.d, p0/m, z2.d757; CHECK-NEXT: ret758;759; CHECK-2p2-LABEL: test_svsqabs_nxv2i64_ptrue:760; CHECK-2p2: // %bb.0: // %entry761; CHECK-2p2-NEXT: ptrue p0.d762; CHECK-2p2-NEXT: sqabs z0.d, p0/z, z2.d763; CHECK-2p2-NEXT: ret764entry:765 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)766 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqabs.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)767 ret <vscale x 2 x i64> %0768}769 770define <vscale x 16 x i8> @test_svsqneg_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {771; CHECK-LABEL: test_svsqneg_nxv16i8_ptrue_u:772; CHECK: // %bb.0: // %entry773; CHECK-NEXT: ptrue p0.b774; CHECK-NEXT: movprfx z0, z1775; CHECK-NEXT: sqneg z0.b, p0/m, z1.b776; CHECK-NEXT: ret777;778; CHECK-2p2-LABEL: test_svsqneg_nxv16i8_ptrue_u:779; CHECK-2p2: // %bb.0: // %entry780; CHECK-2p2-NEXT: ptrue p0.b781; CHECK-2p2-NEXT: sqneg z0.b, p0/z, z1.b782; CHECK-2p2-NEXT: ret783entry:784 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)785 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)786 ret <vscale x 16 x i8> %0787}788 789define <vscale x 16 x i8> @test_svsqneg_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {790; CHECK-LABEL: test_svsqneg_nxv16i8_ptrue:791; CHECK: // %bb.0: // %entry792; CHECK-NEXT: ptrue p0.b793; CHECK-NEXT: movprfx z0, z2794; CHECK-NEXT: sqneg z0.b, p0/m, z2.b795; CHECK-NEXT: ret796;797; CHECK-2p2-LABEL: test_svsqneg_nxv16i8_ptrue:798; CHECK-2p2: // %bb.0: // %entry799; CHECK-2p2-NEXT: ptrue p0.b800; CHECK-2p2-NEXT: sqneg z0.b, p0/z, z2.b801; CHECK-2p2-NEXT: ret802entry:803 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)804 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.sqneg.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)805 ret <vscale x 16 x i8> %0806}807 808define <vscale x 8 x i16> @test_svsqneg_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {809; CHECK-LABEL: test_svsqneg_nxv8i16_ptrue_u:810; CHECK: // %bb.0: // %entry811; CHECK-NEXT: ptrue p0.h812; CHECK-NEXT: movprfx z0, z1813; CHECK-NEXT: sqneg z0.h, p0/m, z1.h814; CHECK-NEXT: ret815;816; CHECK-2p2-LABEL: test_svsqneg_nxv8i16_ptrue_u:817; CHECK-2p2: // %bb.0: // %entry818; CHECK-2p2-NEXT: ptrue p0.h819; CHECK-2p2-NEXT: sqneg z0.h, p0/z, z1.h820; CHECK-2p2-NEXT: ret821entry:822 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)823 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)824 ret <vscale x 8 x i16> %0825}826 827define <vscale x 8 x i16> @test_svsqneg_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {828; CHECK-LABEL: test_svsqneg_nxv8i16_ptrue:829; CHECK: // %bb.0: // %entry830; CHECK-NEXT: ptrue p0.h831; CHECK-NEXT: movprfx z0, z2832; CHECK-NEXT: sqneg z0.h, p0/m, z2.h833; CHECK-NEXT: ret834;835; CHECK-2p2-LABEL: test_svsqneg_nxv8i16_ptrue:836; CHECK-2p2: // %bb.0: // %entry837; CHECK-2p2-NEXT: ptrue p0.h838; CHECK-2p2-NEXT: sqneg z0.h, p0/z, z2.h839; CHECK-2p2-NEXT: ret840entry:841 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)842 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sqneg.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)843 ret <vscale x 8 x i16> %0844}845 846define <vscale x 4 x i32> @test_svsqneg_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {847; CHECK-LABEL: test_svsqneg_nxv4i32_ptrue_u:848; CHECK: // %bb.0: // %entry849; CHECK-NEXT: ptrue p0.s850; CHECK-NEXT: movprfx z0, z1851; CHECK-NEXT: sqneg z0.s, p0/m, z1.s852; CHECK-NEXT: ret853;854; CHECK-2p2-LABEL: test_svsqneg_nxv4i32_ptrue_u:855; CHECK-2p2: // %bb.0: // %entry856; CHECK-2p2-NEXT: ptrue p0.s857; CHECK-2p2-NEXT: sqneg z0.s, p0/z, z1.s858; CHECK-2p2-NEXT: ret859entry:860 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)861 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)862 ret <vscale x 4 x i32> %0863}864 865define <vscale x 4 x i32> @test_svsqneg_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {866; CHECK-LABEL: test_svsqneg_nxv4i32_ptrue:867; CHECK: // %bb.0: // %entry868; CHECK-NEXT: ptrue p0.s869; CHECK-NEXT: movprfx z0, z2870; CHECK-NEXT: sqneg z0.s, p0/m, z2.s871; CHECK-NEXT: ret872;873; CHECK-2p2-LABEL: test_svsqneg_nxv4i32_ptrue:874; CHECK-2p2: // %bb.0: // %entry875; CHECK-2p2-NEXT: ptrue p0.s876; CHECK-2p2-NEXT: sqneg z0.s, p0/z, z2.s877; CHECK-2p2-NEXT: ret878entry:879 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)880 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sqneg.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)881 ret <vscale x 4 x i32> %0882}883 884define <vscale x 2 x i64> @test_svsqneg_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {885; CHECK-LABEL: test_svsqneg_nxv2i64_ptrue_u:886; CHECK: // %bb.0: // %entry887; CHECK-NEXT: ptrue p0.d888; CHECK-NEXT: movprfx z0, z1889; CHECK-NEXT: sqneg z0.d, p0/m, z1.d890; CHECK-NEXT: ret891;892; CHECK-2p2-LABEL: test_svsqneg_nxv2i64_ptrue_u:893; CHECK-2p2: // %bb.0: // %entry894; CHECK-2p2-NEXT: ptrue p0.d895; CHECK-2p2-NEXT: sqneg z0.d, p0/z, z1.d896; CHECK-2p2-NEXT: ret897entry:898 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)899 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)900 ret <vscale x 2 x i64> %0901}902 903define <vscale x 2 x i64> @test_svsqneg_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {904; CHECK-LABEL: test_svsqneg_nxv2i64_ptrue:905; CHECK: // %bb.0: // %entry906; CHECK-NEXT: ptrue p0.d907; CHECK-NEXT: movprfx z0, z2908; CHECK-NEXT: sqneg z0.d, p0/m, z2.d909; CHECK-NEXT: ret910;911; CHECK-2p2-LABEL: test_svsqneg_nxv2i64_ptrue:912; CHECK-2p2: // %bb.0: // %entry913; CHECK-2p2-NEXT: ptrue p0.d914; CHECK-2p2-NEXT: sqneg z0.d, p0/z, z2.d915; CHECK-2p2-NEXT: ret916entry:917 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)918 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sqneg.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)919 ret <vscale x 2 x i64> %0920}921