brintos

brintos / llvm-project-archived public Read only

0
0
Text · 47.3 KiB · 618887f Raw
1285 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mattr=+sve    < %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 2 x double> @test_svabs_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {13; CHECK-LABEL: test_svabs_f64_x_1:14; CHECK:       // %bb.0: // %entry15; CHECK-NEXT:    fabs z0.d, p0/m, z0.d16; CHECK-NEXT:    ret17;18; CHECK-2p2-LABEL: test_svabs_f64_x_1:19; CHECK-2p2:       // %bb.0: // %entry20; CHECK-2p2-NEXT:    fabs z0.d, p0/z, z0.d21; CHECK-2p2-NEXT:    ret22entry:23  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)24  ret <vscale x 2 x double> %025}26 27define <vscale x 2 x double> @test_svabs_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {28; CHECK-LABEL: test_svabs_f64_x_2:29; CHECK:       // %bb.0: // %entry30; CHECK-NEXT:    movprfx z0, z131; CHECK-NEXT:    fabs z0.d, p0/m, z1.d32; CHECK-NEXT:    ret33;34; CHECK-2p2-LABEL: test_svabs_f64_x_2:35; CHECK-2p2:       // %bb.0: // %entry36; CHECK-2p2-NEXT:    fabs z0.d, p0/z, z1.d37; CHECK-2p2-NEXT:    ret38entry:39  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)40  ret <vscale x 2 x double> %041}42 43define <vscale x 2 x double> @test_svabs_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {44; SVE-LABEL: test_svabs_f64_z:45; SVE:       // %bb.0: // %entry46; SVE-NEXT:    movi v0.2d, #000000000000000047; SVE-NEXT:    fabs z0.d, p0/m, z1.d48; SVE-NEXT:    ret49;50; CHECK-2p2-LABEL: test_svabs_f64_z:51; CHECK-2p2:       // %bb.0: // %entry52; CHECK-2p2-NEXT:    fabs z0.d, p0/z, z1.d53; CHECK-2p2-NEXT:    ret54;55; STREAMING-SVE-LABEL: test_svabs_f64_z:56; STREAMING-SVE:       // %bb.0: // %entry57; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x058; STREAMING-SVE-NEXT:    fabs z0.d, p0/m, z1.d59; STREAMING-SVE-NEXT:    ret60entry:61  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)62  ret <vscale x 2 x double> %063}64 65define <vscale x 4 x float> @test_svabs_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {66; CHECK-LABEL: test_svabs_f32_x_1:67; CHECK:       // %bb.0: // %entry68; CHECK-NEXT:    fabs z0.s, p0/m, z0.s69; CHECK-NEXT:    ret70;71; CHECK-2p2-LABEL: test_svabs_f32_x_1:72; CHECK-2p2:       // %bb.0: // %entry73; CHECK-2p2-NEXT:    fabs z0.s, p0/z, z0.s74; CHECK-2p2-NEXT:    ret75entry:76  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)77  ret <vscale x 4 x float> %078}79 80define <vscale x 4 x float> @test_svabs_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {81; CHECK-LABEL: test_svabs_f32_x_2:82; CHECK:       // %bb.0: // %entry83; CHECK-NEXT:    movprfx z0, z184; CHECK-NEXT:    fabs z0.s, p0/m, z1.s85; CHECK-NEXT:    ret86;87; CHECK-2p2-LABEL: test_svabs_f32_x_2:88; CHECK-2p2:       // %bb.0: // %entry89; CHECK-2p2-NEXT:    fabs z0.s, p0/z, z1.s90; CHECK-2p2-NEXT:    ret91entry:92  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)93  ret <vscale x 4 x float> %094}95 96define <vscale x 4 x float> @test_svabs_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {97; SVE-LABEL: test_svabs_f32_z:98; SVE:       // %bb.0: // %entry99; SVE-NEXT:    movi v0.2d, #0000000000000000100; SVE-NEXT:    fabs z0.s, p0/m, z1.s101; SVE-NEXT:    ret102;103; CHECK-2p2-LABEL: test_svabs_f32_z:104; CHECK-2p2:       // %bb.0: // %entry105; CHECK-2p2-NEXT:    fabs z0.s, p0/z, z1.s106; CHECK-2p2-NEXT:    ret107;108; STREAMING-SVE-LABEL: test_svabs_f32_z:109; STREAMING-SVE:       // %bb.0: // %entry110; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0111; STREAMING-SVE-NEXT:    fabs z0.s, p0/m, z1.s112; STREAMING-SVE-NEXT:    ret113entry:114  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)115  ret <vscale x 4 x float> %0116}117 118define <vscale x 8 x half> @test_svabs_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {119; CHECK-LABEL: test_svabs_f16_x_1:120; CHECK:       // %bb.0: // %entry121; CHECK-NEXT:    fabs z0.h, p0/m, z0.h122; CHECK-NEXT:    ret123;124; CHECK-2p2-LABEL: test_svabs_f16_x_1:125; CHECK-2p2:       // %bb.0: // %entry126; CHECK-2p2-NEXT:    fabs z0.h, p0/z, z0.h127; CHECK-2p2-NEXT:    ret128entry:129  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)130  ret <vscale x 8 x half> %0131}132 133define <vscale x 8 x half> @test_svabs_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {134; CHECK-LABEL: test_svabs_f16_x_2:135; CHECK:       // %bb.0: // %entry136; CHECK-NEXT:    movprfx z0, z1137; CHECK-NEXT:    fabs z0.h, p0/m, z1.h138; CHECK-NEXT:    ret139;140; CHECK-2p2-LABEL: test_svabs_f16_x_2:141; CHECK-2p2:       // %bb.0: // %entry142; CHECK-2p2-NEXT:    fabs z0.h, p0/z, z1.h143; CHECK-2p2-NEXT:    ret144entry:145  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)146  ret <vscale x 8 x half> %0147}148 149define <vscale x 8 x half> @test_svabs_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {150; SVE-LABEL: test_svabs_f16_z:151; SVE:       // %bb.0: // %entry152; SVE-NEXT:    movi v0.2d, #0000000000000000153; SVE-NEXT:    fabs z0.h, p0/m, z1.h154; SVE-NEXT:    ret155;156; CHECK-2p2-LABEL: test_svabs_f16_z:157; CHECK-2p2:       // %bb.0: // %entry158; CHECK-2p2-NEXT:    fabs z0.h, p0/z, z1.h159; CHECK-2p2-NEXT:    ret160;161; STREAMING-SVE-LABEL: test_svabs_f16_z:162; STREAMING-SVE:       // %bb.0: // %entry163; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0164; STREAMING-SVE-NEXT:    fabs z0.h, p0/m, z1.h165; STREAMING-SVE-NEXT:    ret166entry:167  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)168  ret <vscale x 8 x half> %0169}170 171define <vscale x 16 x i8> @test_svabs_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {172; CHECK-LABEL: test_svabs_s8_x_1:173; CHECK:       // %bb.0: // %entry174; CHECK-NEXT:    abs z0.b, p0/m, z0.b175; CHECK-NEXT:    ret176;177; CHECK-2p2-LABEL: test_svabs_s8_x_1:178; CHECK-2p2:       // %bb.0: // %entry179; CHECK-2p2-NEXT:    abs z0.b, p0/z, z0.b180; CHECK-2p2-NEXT:    ret181entry:182  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.abs.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)183  ret <vscale x 16 x i8> %0184}185 186define <vscale x 16 x i8> @test_svabs_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {187; CHECK-LABEL: test_svabs_s8_x_2:188; CHECK:       // %bb.0: // %entry189; CHECK-NEXT:    movprfx z0, z1190; CHECK-NEXT:    abs z0.b, p0/m, z1.b191; CHECK-NEXT:    ret192;193; CHECK-2p2-LABEL: test_svabs_s8_x_2:194; CHECK-2p2:       // %bb.0: // %entry195; CHECK-2p2-NEXT:    abs z0.b, p0/z, z1.b196; CHECK-2p2-NEXT:    ret197entry:198  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.abs.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)199  ret <vscale x 16 x i8> %0200}201 202define <vscale x 16 x i8> @test_svabs_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {203; SVE-LABEL: test_svabs_s8_z:204; SVE:       // %bb.0: // %entry205; SVE-NEXT:    movi v0.2d, #0000000000000000206; SVE-NEXT:    abs z0.b, p0/m, z1.b207; SVE-NEXT:    ret208;209; CHECK-2p2-LABEL: test_svabs_s8_z:210; CHECK-2p2:       // %bb.0: // %entry211; CHECK-2p2-NEXT:    abs z0.b, p0/z, z1.b212; CHECK-2p2-NEXT:    ret213;214; STREAMING-SVE-LABEL: test_svabs_s8_z:215; STREAMING-SVE:       // %bb.0: // %entry216; STREAMING-SVE-NEXT:    mov z0.b, #0 // =0x0217; STREAMING-SVE-NEXT:    abs z0.b, p0/m, z1.b218; STREAMING-SVE-NEXT:    ret219entry:220  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.abs.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)221  ret <vscale x 16 x i8> %0222}223 224define <vscale x 8 x i16> @test_svabs_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {225; CHECK-LABEL: test_svabs_s16_x_1:226; CHECK:       // %bb.0: // %entry227; CHECK-NEXT:    abs z0.h, p0/m, z0.h228; CHECK-NEXT:    ret229;230; CHECK-2p2-LABEL: test_svabs_s16_x_1:231; CHECK-2p2:       // %bb.0: // %entry232; CHECK-2p2-NEXT:    abs z0.h, p0/z, z0.h233; CHECK-2p2-NEXT:    ret234entry:235  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.abs.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)236  ret <vscale x 8 x i16> %0237}238 239define <vscale x 8 x i16> @test_svabs_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {240; CHECK-LABEL: test_svabs_s16_x_2:241; CHECK:       // %bb.0: // %entry242; CHECK-NEXT:    movprfx z0, z1243; CHECK-NEXT:    abs z0.h, p0/m, z1.h244; CHECK-NEXT:    ret245;246; CHECK-2p2-LABEL: test_svabs_s16_x_2:247; CHECK-2p2:       // %bb.0: // %entry248; CHECK-2p2-NEXT:    abs z0.h, p0/z, z1.h249; CHECK-2p2-NEXT:    ret250entry:251  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.abs.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)252  ret <vscale x 8 x i16> %0253}254 255define <vscale x 8 x i16> @test_svabs_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {256; SVE-LABEL: test_svabs_s16_z:257; SVE:       // %bb.0: // %entry258; SVE-NEXT:    movi v0.2d, #0000000000000000259; SVE-NEXT:    abs z0.h, p0/m, z1.h260; SVE-NEXT:    ret261;262; CHECK-2p2-LABEL: test_svabs_s16_z:263; CHECK-2p2:       // %bb.0: // %entry264; CHECK-2p2-NEXT:    abs z0.h, p0/z, z1.h265; CHECK-2p2-NEXT:    ret266;267; STREAMING-SVE-LABEL: test_svabs_s16_z:268; STREAMING-SVE:       // %bb.0: // %entry269; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0270; STREAMING-SVE-NEXT:    abs z0.h, p0/m, z1.h271; STREAMING-SVE-NEXT:    ret272entry:273  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.abs.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)274  ret <vscale x 8 x i16> %0275}276 277define <vscale x 4 x i32> @test_svabs_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {278; CHECK-LABEL: test_svabs_s32_x_1:279; CHECK:       // %bb.0: // %entry280; CHECK-NEXT:    abs z0.s, p0/m, z0.s281; CHECK-NEXT:    ret282;283; CHECK-2p2-LABEL: test_svabs_s32_x_1:284; CHECK-2p2:       // %bb.0: // %entry285; CHECK-2p2-NEXT:    abs z0.s, p0/z, z0.s286; CHECK-2p2-NEXT:    ret287entry:288  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.abs.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)289  ret <vscale x 4 x i32> %0290}291 292define <vscale x 4 x i32> @test_svabs_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {293; CHECK-LABEL: test_svabs_s32_x_2:294; CHECK:       // %bb.0: // %entry295; CHECK-NEXT:    movprfx z0, z1296; CHECK-NEXT:    abs z0.s, p0/m, z1.s297; CHECK-NEXT:    ret298;299; CHECK-2p2-LABEL: test_svabs_s32_x_2:300; CHECK-2p2:       // %bb.0: // %entry301; CHECK-2p2-NEXT:    abs z0.s, p0/z, z1.s302; CHECK-2p2-NEXT:    ret303entry:304  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.abs.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)305  ret <vscale x 4 x i32> %0306}307 308define <vscale x 4 x i32> @test_svabs_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {309; SVE-LABEL: test_svabs_s32_z:310; SVE:       // %bb.0: // %entry311; SVE-NEXT:    movi v0.2d, #0000000000000000312; SVE-NEXT:    abs z0.s, p0/m, z1.s313; SVE-NEXT:    ret314;315; CHECK-2p2-LABEL: test_svabs_s32_z:316; CHECK-2p2:       // %bb.0: // %entry317; CHECK-2p2-NEXT:    abs z0.s, p0/z, z1.s318; CHECK-2p2-NEXT:    ret319;320; STREAMING-SVE-LABEL: test_svabs_s32_z:321; STREAMING-SVE:       // %bb.0: // %entry322; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0323; STREAMING-SVE-NEXT:    abs z0.s, p0/m, z1.s324; STREAMING-SVE-NEXT:    ret325entry:326  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.abs.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)327  ret <vscale x 4 x i32> %0328}329 330define <vscale x 2 x i64> @test_svabs_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {331; CHECK-LABEL: test_svabs_s64_x_1:332; CHECK:       // %bb.0: // %entry333; CHECK-NEXT:    abs z0.d, p0/m, z0.d334; CHECK-NEXT:    ret335;336; CHECK-2p2-LABEL: test_svabs_s64_x_1:337; CHECK-2p2:       // %bb.0: // %entry338; CHECK-2p2-NEXT:    abs z0.d, p0/z, z0.d339; CHECK-2p2-NEXT:    ret340entry:341  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.abs.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)342  ret <vscale x 2 x i64> %0343}344 345define <vscale x 2 x i64> @test_svabs_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {346; CHECK-LABEL: test_svabs_s64_x_2:347; CHECK:       // %bb.0: // %entry348; CHECK-NEXT:    movprfx z0, z1349; CHECK-NEXT:    abs z0.d, p0/m, z1.d350; CHECK-NEXT:    ret351;352; CHECK-2p2-LABEL: test_svabs_s64_x_2:353; CHECK-2p2:       // %bb.0: // %entry354; CHECK-2p2-NEXT:    abs z0.d, p0/z, z1.d355; CHECK-2p2-NEXT:    ret356entry:357  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.abs.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)358  ret <vscale x 2 x i64> %0359}360 361define <vscale x 2 x i64> @test_svabs_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {362; SVE-LABEL: test_svabs_s64_z:363; SVE:       // %bb.0: // %entry364; SVE-NEXT:    movi v0.2d, #0000000000000000365; SVE-NEXT:    abs z0.d, p0/m, z1.d366; SVE-NEXT:    ret367;368; CHECK-2p2-LABEL: test_svabs_s64_z:369; CHECK-2p2:       // %bb.0: // %entry370; CHECK-2p2-NEXT:    abs z0.d, p0/z, z1.d371; CHECK-2p2-NEXT:    ret372;373; STREAMING-SVE-LABEL: test_svabs_s64_z:374; STREAMING-SVE:       // %bb.0: // %entry375; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x0376; STREAMING-SVE-NEXT:    abs z0.d, p0/m, z1.d377; STREAMING-SVE-NEXT:    ret378entry:379  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.abs.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)380  ret <vscale x 2 x i64> %0381}382 383define <vscale x 2 x double> @test_svneg_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {384; CHECK-LABEL: test_svneg_f64_x_1:385; CHECK:       // %bb.0: // %entry386; CHECK-NEXT:    fneg z0.d, p0/m, z0.d387; CHECK-NEXT:    ret388;389; CHECK-2p2-LABEL: test_svneg_f64_x_1:390; CHECK-2p2:       // %bb.0: // %entry391; CHECK-2p2-NEXT:    fneg z0.d, p0/z, z0.d392; CHECK-2p2-NEXT:    ret393entry:394  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)395  ret <vscale x 2 x double> %0396}397 398define <vscale x 2 x double> @test_svneg_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {399; CHECK-LABEL: test_svneg_f64_x_2:400; CHECK:       // %bb.0: // %entry401; CHECK-NEXT:    movprfx z0, z1402; CHECK-NEXT:    fneg z0.d, p0/m, z1.d403; CHECK-NEXT:    ret404;405; CHECK-2p2-LABEL: test_svneg_f64_x_2:406; CHECK-2p2:       // %bb.0: // %entry407; CHECK-2p2-NEXT:    fneg z0.d, p0/z, z1.d408; CHECK-2p2-NEXT:    ret409entry:410  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)411  ret <vscale x 2 x double> %0412}413 414define <vscale x 2 x double> @test_svneg_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {415; SVE-LABEL: test_svneg_f64_z:416; SVE:       // %bb.0: // %entry417; SVE-NEXT:    movi v0.2d, #0000000000000000418; SVE-NEXT:    fneg z0.d, p0/m, z1.d419; SVE-NEXT:    ret420;421; CHECK-2p2-LABEL: test_svneg_f64_z:422; CHECK-2p2:       // %bb.0: // %entry423; CHECK-2p2-NEXT:    fneg z0.d, p0/z, z1.d424; CHECK-2p2-NEXT:    ret425;426; STREAMING-SVE-LABEL: test_svneg_f64_z:427; STREAMING-SVE:       // %bb.0: // %entry428; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x0429; STREAMING-SVE-NEXT:    fneg z0.d, p0/m, z1.d430; STREAMING-SVE-NEXT:    ret431entry:432  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)433  ret <vscale x 2 x double> %0434}435 436define <vscale x 4 x float> @test_svneg_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {437; CHECK-LABEL: test_svneg_f32_x_1:438; CHECK:       // %bb.0: // %entry439; CHECK-NEXT:    fneg z0.s, p0/m, z0.s440; CHECK-NEXT:    ret441;442; CHECK-2p2-LABEL: test_svneg_f32_x_1:443; CHECK-2p2:       // %bb.0: // %entry444; CHECK-2p2-NEXT:    fneg z0.s, p0/z, z0.s445; CHECK-2p2-NEXT:    ret446entry:447  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)448  ret <vscale x 4 x float> %0449}450 451define <vscale x 4 x float> @test_svneg_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {452; CHECK-LABEL: test_svneg_f32_x_2:453; CHECK:       // %bb.0: // %entry454; CHECK-NEXT:    movprfx z0, z1455; CHECK-NEXT:    fneg z0.s, p0/m, z1.s456; CHECK-NEXT:    ret457;458; CHECK-2p2-LABEL: test_svneg_f32_x_2:459; CHECK-2p2:       // %bb.0: // %entry460; CHECK-2p2-NEXT:    fneg z0.s, p0/z, z1.s461; CHECK-2p2-NEXT:    ret462entry:463  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)464  ret <vscale x 4 x float> %0465}466 467define <vscale x 4 x float> @test_svneg_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {468; SVE-LABEL: test_svneg_f32_z:469; SVE:       // %bb.0: // %entry470; SVE-NEXT:    movi v0.2d, #0000000000000000471; SVE-NEXT:    fneg z0.s, p0/m, z1.s472; SVE-NEXT:    ret473;474; CHECK-2p2-LABEL: test_svneg_f32_z:475; CHECK-2p2:       // %bb.0: // %entry476; CHECK-2p2-NEXT:    fneg z0.s, p0/z, z1.s477; CHECK-2p2-NEXT:    ret478;479; STREAMING-SVE-LABEL: test_svneg_f32_z:480; STREAMING-SVE:       // %bb.0: // %entry481; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0482; STREAMING-SVE-NEXT:    fneg z0.s, p0/m, z1.s483; STREAMING-SVE-NEXT:    ret484entry:485  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)486  ret <vscale x 4 x float> %0487}488 489define <vscale x 8 x half> @test_svneg_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {490; CHECK-LABEL: test_svneg_f16_x_1:491; CHECK:       // %bb.0: // %entry492; CHECK-NEXT:    fneg z0.h, p0/m, z0.h493; CHECK-NEXT:    ret494;495; CHECK-2p2-LABEL: test_svneg_f16_x_1:496; CHECK-2p2:       // %bb.0: // %entry497; CHECK-2p2-NEXT:    fneg z0.h, p0/z, z0.h498; CHECK-2p2-NEXT:    ret499entry:500  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)501  ret <vscale x 8 x half> %0502}503 504define <vscale x 8 x half> @test_svneg_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {505; CHECK-LABEL: test_svneg_f16_x_2:506; CHECK:       // %bb.0: // %entry507; CHECK-NEXT:    movprfx z0, z1508; CHECK-NEXT:    fneg z0.h, p0/m, z1.h509; CHECK-NEXT:    ret510;511; CHECK-2p2-LABEL: test_svneg_f16_x_2:512; CHECK-2p2:       // %bb.0: // %entry513; CHECK-2p2-NEXT:    fneg z0.h, p0/z, z1.h514; CHECK-2p2-NEXT:    ret515entry:516  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)517  ret <vscale x 8 x half> %0518}519 520define <vscale x 8 x half> @test_svneg_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {521; SVE-LABEL: test_svneg_f16_z:522; SVE:       // %bb.0: // %entry523; SVE-NEXT:    movi v0.2d, #0000000000000000524; SVE-NEXT:    fneg z0.h, p0/m, z1.h525; SVE-NEXT:    ret526;527; CHECK-2p2-LABEL: test_svneg_f16_z:528; CHECK-2p2:       // %bb.0: // %entry529; CHECK-2p2-NEXT:    fneg z0.h, p0/z, z1.h530; CHECK-2p2-NEXT:    ret531;532; STREAMING-SVE-LABEL: test_svneg_f16_z:533; STREAMING-SVE:       // %bb.0: // %entry534; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0535; STREAMING-SVE-NEXT:    fneg z0.h, p0/m, z1.h536; STREAMING-SVE-NEXT:    ret537entry:538  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)539  ret <vscale x 8 x half> %0540}541 542define <vscale x 16 x i8> @test_svneg_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {543; CHECK-LABEL: test_svneg_s8_x_1:544; CHECK:       // %bb.0: // %entry545; CHECK-NEXT:    neg z0.b, p0/m, z0.b546; CHECK-NEXT:    ret547;548; CHECK-2p2-LABEL: test_svneg_s8_x_1:549; CHECK-2p2:       // %bb.0: // %entry550; CHECK-2p2-NEXT:    neg z0.b, p0/z, z0.b551; CHECK-2p2-NEXT:    ret552entry:553  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.neg.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)554  ret <vscale x 16 x i8> %0555}556 557define <vscale x 16 x i8> @test_svneg_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {558; CHECK-LABEL: test_svneg_s8_x_2:559; CHECK:       // %bb.0: // %entry560; CHECK-NEXT:    movprfx z0, z1561; CHECK-NEXT:    neg z0.b, p0/m, z1.b562; CHECK-NEXT:    ret563;564; CHECK-2p2-LABEL: test_svneg_s8_x_2:565; CHECK-2p2:       // %bb.0: // %entry566; CHECK-2p2-NEXT:    neg z0.b, p0/z, z1.b567; CHECK-2p2-NEXT:    ret568entry:569  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.neg.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)570  ret <vscale x 16 x i8> %0571}572 573define <vscale x 16 x i8> @test_svneg_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {574; SVE-LABEL: test_svneg_s8_z:575; SVE:       // %bb.0: // %entry576; SVE-NEXT:    movi v0.2d, #0000000000000000577; SVE-NEXT:    neg z0.b, p0/m, z1.b578; SVE-NEXT:    ret579;580; CHECK-2p2-LABEL: test_svneg_s8_z:581; CHECK-2p2:       // %bb.0: // %entry582; CHECK-2p2-NEXT:    neg z0.b, p0/z, z1.b583; CHECK-2p2-NEXT:    ret584;585; STREAMING-SVE-LABEL: test_svneg_s8_z:586; STREAMING-SVE:       // %bb.0: // %entry587; STREAMING-SVE-NEXT:    mov z0.b, #0 // =0x0588; STREAMING-SVE-NEXT:    neg z0.b, p0/m, z1.b589; STREAMING-SVE-NEXT:    ret590entry:591  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.neg.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)592  ret <vscale x 16 x i8> %0593}594 595define <vscale x 8 x i16> @test_svneg_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {596; CHECK-LABEL: test_svneg_s16_x_1:597; CHECK:       // %bb.0: // %entry598; CHECK-NEXT:    neg z0.h, p0/m, z0.h599; CHECK-NEXT:    ret600;601; CHECK-2p2-LABEL: test_svneg_s16_x_1:602; CHECK-2p2:       // %bb.0: // %entry603; CHECK-2p2-NEXT:    neg z0.h, p0/z, z0.h604; CHECK-2p2-NEXT:    ret605entry:606  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.neg.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)607  ret <vscale x 8 x i16> %0608}609 610define <vscale x 8 x i16> @test_svneg_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {611; CHECK-LABEL: test_svneg_s16_x_2:612; CHECK:       // %bb.0: // %entry613; CHECK-NEXT:    movprfx z0, z1614; CHECK-NEXT:    neg z0.h, p0/m, z1.h615; CHECK-NEXT:    ret616;617; CHECK-2p2-LABEL: test_svneg_s16_x_2:618; CHECK-2p2:       // %bb.0: // %entry619; CHECK-2p2-NEXT:    neg z0.h, p0/z, z1.h620; CHECK-2p2-NEXT:    ret621entry:622  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.neg.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)623  ret <vscale x 8 x i16> %0624}625 626define <vscale x 8 x i16> @test_svneg_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {627; SVE-LABEL: test_svneg_s16_z:628; SVE:       // %bb.0: // %entry629; SVE-NEXT:    movi v0.2d, #0000000000000000630; SVE-NEXT:    neg z0.h, p0/m, z1.h631; SVE-NEXT:    ret632;633; CHECK-2p2-LABEL: test_svneg_s16_z:634; CHECK-2p2:       // %bb.0: // %entry635; CHECK-2p2-NEXT:    neg z0.h, p0/z, z1.h636; CHECK-2p2-NEXT:    ret637;638; STREAMING-SVE-LABEL: test_svneg_s16_z:639; STREAMING-SVE:       // %bb.0: // %entry640; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0641; STREAMING-SVE-NEXT:    neg z0.h, p0/m, z1.h642; STREAMING-SVE-NEXT:    ret643entry:644  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.neg.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)645  ret <vscale x 8 x i16> %0646}647 648define <vscale x 4 x i32> @test_svneg_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {649; CHECK-LABEL: test_svneg_s32_x_1:650; CHECK:       // %bb.0: // %entry651; CHECK-NEXT:    neg z0.s, p0/m, z0.s652; CHECK-NEXT:    ret653;654; CHECK-2p2-LABEL: test_svneg_s32_x_1:655; CHECK-2p2:       // %bb.0: // %entry656; CHECK-2p2-NEXT:    neg z0.s, p0/z, z0.s657; CHECK-2p2-NEXT:    ret658entry:659  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.neg.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)660  ret <vscale x 4 x i32> %0661}662 663define <vscale x 4 x i32> @test_svneg_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {664; CHECK-LABEL: test_svneg_s32_x_2:665; CHECK:       // %bb.0: // %entry666; CHECK-NEXT:    movprfx z0, z1667; CHECK-NEXT:    neg z0.s, p0/m, z1.s668; CHECK-NEXT:    ret669;670; CHECK-2p2-LABEL: test_svneg_s32_x_2:671; CHECK-2p2:       // %bb.0: // %entry672; CHECK-2p2-NEXT:    neg z0.s, p0/z, z1.s673; CHECK-2p2-NEXT:    ret674entry:675  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.neg.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)676  ret <vscale x 4 x i32> %0677}678 679define <vscale x 4 x i32> @test_svneg_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {680; SVE-LABEL: test_svneg_s32_z:681; SVE:       // %bb.0: // %entry682; SVE-NEXT:    movi v0.2d, #0000000000000000683; SVE-NEXT:    neg z0.s, p0/m, z1.s684; SVE-NEXT:    ret685;686; CHECK-2p2-LABEL: test_svneg_s32_z:687; CHECK-2p2:       // %bb.0: // %entry688; CHECK-2p2-NEXT:    neg z0.s, p0/z, z1.s689; CHECK-2p2-NEXT:    ret690;691; STREAMING-SVE-LABEL: test_svneg_s32_z:692; STREAMING-SVE:       // %bb.0: // %entry693; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0694; STREAMING-SVE-NEXT:    neg z0.s, p0/m, z1.s695; STREAMING-SVE-NEXT:    ret696entry:697  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.neg.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)698  ret <vscale x 4 x i32> %0699}700 701define <vscale x 2 x i64> @test_svneg_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {702; CHECK-LABEL: test_svneg_s64_x_1:703; CHECK:       // %bb.0: // %entry704; CHECK-NEXT:    neg z0.d, p0/m, z0.d705; CHECK-NEXT:    ret706;707; CHECK-2p2-LABEL: test_svneg_s64_x_1:708; CHECK-2p2:       // %bb.0: // %entry709; CHECK-2p2-NEXT:    neg z0.d, p0/z, z0.d710; CHECK-2p2-NEXT:    ret711entry:712  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.neg.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)713  ret <vscale x 2 x i64> %0714}715 716define <vscale x 2 x i64> @test_svneg_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {717; CHECK-LABEL: test_svneg_s64_x_2:718; CHECK:       // %bb.0: // %entry719; CHECK-NEXT:    movprfx z0, z1720; CHECK-NEXT:    neg z0.d, p0/m, z1.d721; CHECK-NEXT:    ret722;723; CHECK-2p2-LABEL: test_svneg_s64_x_2:724; CHECK-2p2:       // %bb.0: // %entry725; CHECK-2p2-NEXT:    neg z0.d, p0/z, z1.d726; CHECK-2p2-NEXT:    ret727entry:728  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.neg.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)729  ret <vscale x 2 x i64> %0730}731 732define <vscale x 2 x i64> @test_svneg_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {733; SVE-LABEL: test_svneg_s64_z:734; SVE:       // %bb.0: // %entry735; SVE-NEXT:    movi v0.2d, #0000000000000000736; SVE-NEXT:    neg z0.d, p0/m, z1.d737; SVE-NEXT:    ret738;739; CHECK-2p2-LABEL: test_svneg_s64_z:740; CHECK-2p2:       // %bb.0: // %entry741; CHECK-2p2-NEXT:    neg z0.d, p0/z, z1.d742; CHECK-2p2-NEXT:    ret743;744; STREAMING-SVE-LABEL: test_svneg_s64_z:745; STREAMING-SVE:       // %bb.0: // %entry746; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x0747; STREAMING-SVE-NEXT:    neg z0.d, p0/m, z1.d748; STREAMING-SVE-NEXT:    ret749entry:750  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.neg.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)751  ret <vscale x 2 x i64> %0752}753 754define <vscale x 2 x double> @test_svfabs_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {755; CHECK-LABEL: test_svfabs_f64_ptrue_u:756; CHECK:       // %bb.0: // %entry757; CHECK-NEXT:    ptrue p0.d758; CHECK-NEXT:    movprfx z0, z1759; CHECK-NEXT:    fabs z0.d, p0/m, z1.d760; CHECK-NEXT:    ret761;762; CHECK-2p2-LABEL: test_svfabs_f64_ptrue_u:763; CHECK-2p2:       // %bb.0: // %entry764; CHECK-2p2-NEXT:    ptrue p0.d765; CHECK-2p2-NEXT:    fabs z0.d, p0/z, z1.d766; CHECK-2p2-NEXT:    ret767entry:768  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)769  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)770  ret <vscale x 2 x double> %0771}772 773define <vscale x 2 x double> @test_svfabs_f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {774; CHECK-LABEL: test_svfabs_f64_ptrue:775; CHECK:       // %bb.0: // %entry776; CHECK-NEXT:    ptrue p0.d777; CHECK-NEXT:    movprfx z0, z2778; CHECK-NEXT:    fabs z0.d, p0/m, z2.d779; CHECK-NEXT:    ret780;781; CHECK-2p2-LABEL: test_svfabs_f64_ptrue:782; CHECK-2p2:       // %bb.0: // %entry783; CHECK-2p2-NEXT:    ptrue p0.d784; CHECK-2p2-NEXT:    fabs z0.d, p0/z, z2.d785; CHECK-2p2-NEXT:    ret786entry:787  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)788  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)789  ret <vscale x 2 x double> %0790}791 792define <vscale x 4 x float> @test_svfabs_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {793; CHECK-LABEL: test_svfabs_f32_ptrue_u:794; CHECK:       // %bb.0: // %entry795; CHECK-NEXT:    ptrue p0.s796; CHECK-NEXT:    movprfx z0, z1797; CHECK-NEXT:    fabs z0.s, p0/m, z1.s798; CHECK-NEXT:    ret799;800; CHECK-2p2-LABEL: test_svfabs_f32_ptrue_u:801; CHECK-2p2:       // %bb.0: // %entry802; CHECK-2p2-NEXT:    ptrue p0.s803; CHECK-2p2-NEXT:    fabs z0.s, p0/z, z1.s804; CHECK-2p2-NEXT:    ret805entry:806  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)807  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)808  ret <vscale x 4 x float> %0809}810 811define <vscale x 4 x float> @test_svfabs_f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {812; CHECK-LABEL: test_svfabs_f32_ptrue:813; CHECK:       // %bb.0: // %entry814; CHECK-NEXT:    ptrue p0.s815; CHECK-NEXT:    movprfx z0, z2816; CHECK-NEXT:    fabs z0.s, p0/m, z2.s817; CHECK-NEXT:    ret818;819; CHECK-2p2-LABEL: test_svfabs_f32_ptrue:820; CHECK-2p2:       // %bb.0: // %entry821; CHECK-2p2-NEXT:    ptrue p0.s822; CHECK-2p2-NEXT:    fabs z0.s, p0/z, z2.s823; CHECK-2p2-NEXT:    ret824entry:825  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)826  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)827  ret <vscale x 4 x float> %0828}829 830define <vscale x 8 x half> @test_svfabs_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {831; CHECK-LABEL: test_svfabs_f16_ptrue_u:832; CHECK:       // %bb.0: // %entry833; CHECK-NEXT:    ptrue p0.h834; CHECK-NEXT:    movprfx z0, z1835; CHECK-NEXT:    fabs z0.h, p0/m, z1.h836; CHECK-NEXT:    ret837;838; CHECK-2p2-LABEL: test_svfabs_f16_ptrue_u:839; CHECK-2p2:       // %bb.0: // %entry840; CHECK-2p2-NEXT:    ptrue p0.h841; CHECK-2p2-NEXT:    fabs z0.h, p0/z, z1.h842; CHECK-2p2-NEXT:    ret843entry:844  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)845  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)846  ret <vscale x 8 x half> %0847}848 849define <vscale x 8 x half> @test_svfabs_f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {850; CHECK-LABEL: test_svfabs_f16_ptrue:851; CHECK:       // %bb.0: // %entry852; CHECK-NEXT:    ptrue p0.h853; CHECK-NEXT:    movprfx z0, z2854; CHECK-NEXT:    fabs z0.h, p0/m, z2.h855; CHECK-NEXT:    ret856;857; CHECK-2p2-LABEL: test_svfabs_f16_ptrue:858; CHECK-2p2:       // %bb.0: // %entry859; CHECK-2p2-NEXT:    ptrue p0.h860; CHECK-2p2-NEXT:    fabs z0.h, p0/z, z2.h861; CHECK-2p2-NEXT:    ret862entry:863  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)864  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)865  ret <vscale x 8 x half> %0866}867 868define <vscale x 16 x i8> @test_svabs_s8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {869; CHECK-LABEL: test_svabs_s8_ptrue_u:870; CHECK:       // %bb.0: // %entry871; CHECK-NEXT:    ptrue p0.b872; CHECK-NEXT:    movprfx z0, z1873; CHECK-NEXT:    abs z0.b, p0/m, z1.b874; CHECK-NEXT:    ret875;876; CHECK-2p2-LABEL: test_svabs_s8_ptrue_u:877; CHECK-2p2:       // %bb.0: // %entry878; CHECK-2p2-NEXT:    ptrue p0.b879; CHECK-2p2-NEXT:    abs z0.b, p0/z, z1.b880; CHECK-2p2-NEXT:    ret881entry:882  %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)883  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.abs.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)884  ret <vscale x 16 x i8> %0885}886 887define <vscale x 16 x i8> @test_svabs_s8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {888; CHECK-LABEL: test_svabs_s8_ptrue:889; CHECK:       // %bb.0: // %entry890; CHECK-NEXT:    ptrue p0.b891; CHECK-NEXT:    movprfx z0, z2892; CHECK-NEXT:    abs z0.b, p0/m, z2.b893; CHECK-NEXT:    ret894;895; CHECK-2p2-LABEL: test_svabs_s8_ptrue:896; CHECK-2p2:       // %bb.0: // %entry897; CHECK-2p2-NEXT:    ptrue p0.b898; CHECK-2p2-NEXT:    abs z0.b, p0/z, z2.b899; CHECK-2p2-NEXT:    ret900entry:901  %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)902  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.abs.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)903  ret <vscale x 16 x i8> %0904}905 906define <vscale x 8 x i16> @test_svabs_s16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {907; CHECK-LABEL: test_svabs_s16_ptrue_u:908; CHECK:       // %bb.0: // %entry909; CHECK-NEXT:    ptrue p0.h910; CHECK-NEXT:    movprfx z0, z1911; CHECK-NEXT:    abs z0.h, p0/m, z1.h912; CHECK-NEXT:    ret913;914; CHECK-2p2-LABEL: test_svabs_s16_ptrue_u:915; CHECK-2p2:       // %bb.0: // %entry916; CHECK-2p2-NEXT:    ptrue p0.h917; CHECK-2p2-NEXT:    abs z0.h, p0/z, z1.h918; CHECK-2p2-NEXT:    ret919entry:920  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nx84i1(i32 31)921  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.abs.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)922  ret <vscale x 8 x i16> %0923}924 925define <vscale x 8 x i16> @test_svabs_s16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {926; CHECK-LABEL: test_svabs_s16_ptrue:927; CHECK:       // %bb.0: // %entry928; CHECK-NEXT:    ptrue p0.h929; CHECK-NEXT:    movprfx z0, z2930; CHECK-NEXT:    abs z0.h, p0/m, z2.h931; CHECK-NEXT:    ret932;933; CHECK-2p2-LABEL: test_svabs_s16_ptrue:934; CHECK-2p2:       // %bb.0: // %entry935; CHECK-2p2-NEXT:    ptrue p0.h936; CHECK-2p2-NEXT:    abs z0.h, p0/z, z2.h937; CHECK-2p2-NEXT:    ret938entry:939  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)940  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.abs.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)941  ret <vscale x 8 x i16> %0942}943 944define <vscale x 4 x i32> @test_svabs_s32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {945; CHECK-LABEL: test_svabs_s32_ptrue_u:946; CHECK:       // %bb.0: // %entry947; CHECK-NEXT:    ptrue p0.s948; CHECK-NEXT:    movprfx z0, z1949; CHECK-NEXT:    abs z0.s, p0/m, z1.s950; CHECK-NEXT:    ret951;952; CHECK-2p2-LABEL: test_svabs_s32_ptrue_u:953; CHECK-2p2:       // %bb.0: // %entry954; CHECK-2p2-NEXT:    ptrue p0.s955; CHECK-2p2-NEXT:    abs z0.s, p0/z, z1.s956; CHECK-2p2-NEXT:    ret957entry:958  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)959  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.abs.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)960  ret <vscale x 4 x i32> %0961}962 963define <vscale x 4 x i32> @test_svabs_s32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {964; CHECK-LABEL: test_svabs_s32_ptrue:965; CHECK:       // %bb.0: // %entry966; CHECK-NEXT:    ptrue p0.s967; CHECK-NEXT:    movprfx z0, z2968; CHECK-NEXT:    abs z0.s, p0/m, z2.s969; CHECK-NEXT:    ret970;971; CHECK-2p2-LABEL: test_svabs_s32_ptrue:972; CHECK-2p2:       // %bb.0: // %entry973; CHECK-2p2-NEXT:    ptrue p0.s974; CHECK-2p2-NEXT:    abs z0.s, p0/z, z2.s975; CHECK-2p2-NEXT:    ret976entry:977  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)978  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.abs.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)979  ret <vscale x 4 x i32> %0980}981 982define <vscale x 2 x i64> @test_svabs_s64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {983; CHECK-LABEL: test_svabs_s64_ptrue_u:984; CHECK:       // %bb.0: // %entry985; CHECK-NEXT:    ptrue p0.d986; CHECK-NEXT:    movprfx z0, z1987; CHECK-NEXT:    abs z0.d, p0/m, z1.d988; CHECK-NEXT:    ret989;990; CHECK-2p2-LABEL: test_svabs_s64_ptrue_u:991; CHECK-2p2:       // %bb.0: // %entry992; CHECK-2p2-NEXT:    ptrue p0.d993; CHECK-2p2-NEXT:    abs z0.d, p0/z, z1.d994; CHECK-2p2-NEXT:    ret995entry:996  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)997  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.abs.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)998  ret <vscale x 2 x i64> %0999}1000 1001define <vscale x 2 x i64> @test_svabs_s64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1002; CHECK-LABEL: test_svabs_s64_ptrue:1003; CHECK:       // %bb.0: // %entry1004; CHECK-NEXT:    ptrue p0.d1005; CHECK-NEXT:    movprfx z0, z21006; CHECK-NEXT:    abs z0.d, p0/m, z2.d1007; CHECK-NEXT:    ret1008;1009; CHECK-2p2-LABEL: test_svabs_s64_ptrue:1010; CHECK-2p2:       // %bb.0: // %entry1011; CHECK-2p2-NEXT:    ptrue p0.d1012; CHECK-2p2-NEXT:    abs z0.d, p0/z, z2.d1013; CHECK-2p2-NEXT:    ret1014entry:1015  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1016  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.abs.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1017  ret <vscale x 2 x i64> %01018}1019 1020define <vscale x 2 x double> @test_svfneg_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {1021; CHECK-LABEL: test_svfneg_f64_ptrue_u:1022; CHECK:       // %bb.0: // %entry1023; CHECK-NEXT:    ptrue p0.d1024; CHECK-NEXT:    movprfx z0, z11025; CHECK-NEXT:    fneg z0.d, p0/m, z1.d1026; CHECK-NEXT:    ret1027;1028; CHECK-2p2-LABEL: test_svfneg_f64_ptrue_u:1029; CHECK-2p2:       // %bb.0: // %entry1030; CHECK-2p2-NEXT:    ptrue p0.d1031; CHECK-2p2-NEXT:    fneg z0.d, p0/z, z1.d1032; CHECK-2p2-NEXT:    ret1033entry:1034  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1035  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1036  ret <vscale x 2 x double> %01037}1038 1039define <vscale x 2 x double> @test_svfneg_f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {1040; CHECK-LABEL: test_svfneg_f64_ptrue:1041; CHECK:       // %bb.0: // %entry1042; CHECK-NEXT:    ptrue p0.d1043; CHECK-NEXT:    movprfx z0, z21044; CHECK-NEXT:    fneg z0.d, p0/m, z2.d1045; CHECK-NEXT:    ret1046;1047; CHECK-2p2-LABEL: test_svfneg_f64_ptrue:1048; CHECK-2p2:       // %bb.0: // %entry1049; CHECK-2p2-NEXT:    ptrue p0.d1050; CHECK-2p2-NEXT:    fneg z0.d, p0/z, z2.d1051; CHECK-2p2-NEXT:    ret1052entry:1053  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1054  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)1055  ret <vscale x 2 x double> %01056}1057 1058define <vscale x 4 x float> @test_svfneg_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {1059; CHECK-LABEL: test_svfneg_f32_ptrue_u:1060; CHECK:       // %bb.0: // %entry1061; CHECK-NEXT:    ptrue p0.s1062; CHECK-NEXT:    movprfx z0, z11063; CHECK-NEXT:    fneg z0.s, p0/m, z1.s1064; CHECK-NEXT:    ret1065;1066; CHECK-2p2-LABEL: test_svfneg_f32_ptrue_u:1067; CHECK-2p2:       // %bb.0: // %entry1068; CHECK-2p2-NEXT:    ptrue p0.s1069; CHECK-2p2-NEXT:    fneg z0.s, p0/z, z1.s1070; CHECK-2p2-NEXT:    ret1071entry:1072  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1073  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1074  ret <vscale x 4 x float> %01075}1076 1077define <vscale x 4 x float> @test_svfneg_f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {1078; CHECK-LABEL: test_svfneg_f32_ptrue:1079; CHECK:       // %bb.0: // %entry1080; CHECK-NEXT:    ptrue p0.s1081; CHECK-NEXT:    movprfx z0, z21082; CHECK-NEXT:    fneg z0.s, p0/m, z2.s1083; CHECK-NEXT:    ret1084;1085; CHECK-2p2-LABEL: test_svfneg_f32_ptrue:1086; CHECK-2p2:       // %bb.0: // %entry1087; CHECK-2p2-NEXT:    ptrue p0.s1088; CHECK-2p2-NEXT:    fneg z0.s, p0/z, z2.s1089; CHECK-2p2-NEXT:    ret1090entry:1091  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1092  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)1093  ret <vscale x 4 x float> %01094}1095 1096define <vscale x 8 x half> @test_svfneg_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {1097; CHECK-LABEL: test_svfneg_f16_ptrue_u:1098; CHECK:       // %bb.0: // %entry1099; CHECK-NEXT:    ptrue p0.h1100; CHECK-NEXT:    movprfx z0, z11101; CHECK-NEXT:    fneg z0.h, p0/m, z1.h1102; CHECK-NEXT:    ret1103;1104; CHECK-2p2-LABEL: test_svfneg_f16_ptrue_u:1105; CHECK-2p2:       // %bb.0: // %entry1106; CHECK-2p2-NEXT:    ptrue p0.h1107; CHECK-2p2-NEXT:    fneg z0.h, p0/z, z1.h1108; CHECK-2p2-NEXT:    ret1109entry:1110  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1111  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1112  ret <vscale x 8 x half> %01113}1114 1115define <vscale x 8 x half> @test_svfneg_f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {1116; CHECK-LABEL: test_svfneg_f16_ptrue:1117; CHECK:       // %bb.0: // %entry1118; CHECK-NEXT:    ptrue p0.h1119; CHECK-NEXT:    movprfx z0, z21120; CHECK-NEXT:    fneg z0.h, p0/m, z2.h1121; CHECK-NEXT:    ret1122;1123; CHECK-2p2-LABEL: test_svfneg_f16_ptrue:1124; CHECK-2p2:       // %bb.0: // %entry1125; CHECK-2p2-NEXT:    ptrue p0.h1126; CHECK-2p2-NEXT:    fneg z0.h, p0/z, z2.h1127; CHECK-2p2-NEXT:    ret1128entry:1129  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1130  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)1131  ret <vscale x 8 x half> %01132}1133 1134define <vscale x 16 x i8> @test_svneg_s8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {1135; CHECK-LABEL: test_svneg_s8_ptrue_u:1136; CHECK:       // %bb.0: // %entry1137; CHECK-NEXT:    ptrue p0.b1138; CHECK-NEXT:    movprfx z0, z11139; CHECK-NEXT:    neg z0.b, p0/m, z1.b1140; CHECK-NEXT:    ret1141;1142; CHECK-2p2-LABEL: test_svneg_s8_ptrue_u:1143; CHECK-2p2:       // %bb.0: // %entry1144; CHECK-2p2-NEXT:    ptrue p0.b1145; CHECK-2p2-NEXT:    neg z0.b, p0/z, z1.b1146; CHECK-2p2-NEXT:    ret1147entry:1148  %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1149  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.neg.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1150  ret <vscale x 16 x i8> %01151}1152 1153define <vscale x 16 x i8> @test_svneg_s8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {1154; CHECK-LABEL: test_svneg_s8_ptrue:1155; CHECK:       // %bb.0: // %entry1156; CHECK-NEXT:    ptrue p0.b1157; CHECK-NEXT:    movprfx z0, z21158; CHECK-NEXT:    neg z0.b, p0/m, z2.b1159; CHECK-NEXT:    ret1160;1161; CHECK-2p2-LABEL: test_svneg_s8_ptrue:1162; CHECK-2p2:       // %bb.0: // %entry1163; CHECK-2p2-NEXT:    ptrue p0.b1164; CHECK-2p2-NEXT:    neg z0.b, p0/z, z2.b1165; CHECK-2p2-NEXT:    ret1166entry:1167  %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1168  %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.neg.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)1169  ret <vscale x 16 x i8> %01170}1171 1172define <vscale x 8 x i16> @test_svneg_s16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1173; CHECK-LABEL: test_svneg_s16_ptrue_u:1174; CHECK:       // %bb.0: // %entry1175; CHECK-NEXT:    ptrue p0.h1176; CHECK-NEXT:    movprfx z0, z11177; CHECK-NEXT:    neg z0.h, p0/m, z1.h1178; CHECK-NEXT:    ret1179;1180; CHECK-2p2-LABEL: test_svneg_s16_ptrue_u:1181; CHECK-2p2:       // %bb.0: // %entry1182; CHECK-2p2-NEXT:    ptrue p0.h1183; CHECK-2p2-NEXT:    neg z0.h, p0/z, z1.h1184; CHECK-2p2-NEXT:    ret1185entry:1186  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1187  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.neg.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1188  ret <vscale x 8 x i16> %01189}1190 1191define <vscale x 8 x i16> @test_svneg_s16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1192; CHECK-LABEL: test_svneg_s16_ptrue:1193; CHECK:       // %bb.0: // %entry1194; CHECK-NEXT:    ptrue p0.h1195; CHECK-NEXT:    movprfx z0, z21196; CHECK-NEXT:    neg z0.h, p0/m, z2.h1197; CHECK-NEXT:    ret1198;1199; CHECK-2p2-LABEL: test_svneg_s16_ptrue:1200; CHECK-2p2:       // %bb.0: // %entry1201; CHECK-2p2-NEXT:    ptrue p0.h1202; CHECK-2p2-NEXT:    neg z0.h, p0/z, z2.h1203; CHECK-2p2-NEXT:    ret1204entry:1205  %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1206  %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.neg.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1207  ret <vscale x 8 x i16> %01208}1209 1210define <vscale x 4 x i32> @test_svneg_s32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1211; CHECK-LABEL: test_svneg_s32_ptrue_u:1212; CHECK:       // %bb.0: // %entry1213; CHECK-NEXT:    ptrue p0.s1214; CHECK-NEXT:    movprfx z0, z11215; CHECK-NEXT:    neg z0.s, p0/m, z1.s1216; CHECK-NEXT:    ret1217;1218; CHECK-2p2-LABEL: test_svneg_s32_ptrue_u:1219; CHECK-2p2:       // %bb.0: // %entry1220; CHECK-2p2-NEXT:    ptrue p0.s1221; CHECK-2p2-NEXT:    neg z0.s, p0/z, z1.s1222; CHECK-2p2-NEXT:    ret1223entry:1224  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1225  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.neg.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1226  ret <vscale x 4 x i32> %01227}1228 1229define <vscale x 4 x i32> @test_svneg_s32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1230; CHECK-LABEL: test_svneg_s32_ptrue:1231; CHECK:       // %bb.0: // %entry1232; CHECK-NEXT:    ptrue p0.s1233; CHECK-NEXT:    movprfx z0, z21234; CHECK-NEXT:    neg z0.s, p0/m, z2.s1235; CHECK-NEXT:    ret1236;1237; CHECK-2p2-LABEL: test_svneg_s32_ptrue:1238; CHECK-2p2:       // %bb.0: // %entry1239; CHECK-2p2-NEXT:    ptrue p0.s1240; CHECK-2p2-NEXT:    neg z0.s, p0/z, z2.s1241; CHECK-2p2-NEXT:    ret1242entry:1243  %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1244  %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.neg.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1245  ret <vscale x 4 x i32> %01246}1247 1248define <vscale x 2 x i64> @test_svneg_s64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1249; CHECK-LABEL: test_svneg_s64_ptrue_u:1250; CHECK:       // %bb.0: // %entry1251; CHECK-NEXT:    ptrue p0.d1252; CHECK-NEXT:    movprfx z0, z11253; CHECK-NEXT:    neg z0.d, p0/m, z1.d1254; CHECK-NEXT:    ret1255;1256; CHECK-2p2-LABEL: test_svneg_s64_ptrue_u:1257; CHECK-2p2:       // %bb.0: // %entry1258; CHECK-2p2-NEXT:    ptrue p0.d1259; CHECK-2p2-NEXT:    neg z0.d, p0/z, z1.d1260; CHECK-2p2-NEXT:    ret1261entry:1262  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1263  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.neg.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1264  ret <vscale x 2 x i64> %01265}1266 1267define <vscale x 2 x i64> @test_svneg_s64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1268; CHECK-LABEL: test_svneg_s64_ptrue:1269; CHECK:       // %bb.0: // %entry1270; CHECK-NEXT:    ptrue p0.d1271; CHECK-NEXT:    movprfx z0, z21272; CHECK-NEXT:    neg z0.d, p0/m, z2.d1273; CHECK-NEXT:    ret1274;1275; CHECK-2p2-LABEL: test_svneg_s64_ptrue:1276; CHECK-2p2:       // %bb.0: // %entry1277; CHECK-2p2-NEXT:    ptrue p0.d1278; CHECK-2p2-NEXT:    neg z0.d, p0/z, z2.d1279; CHECK-2p2-NEXT:    ret1280entry:1281  %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1282  %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.neg.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1283  ret <vscale x 2 x i64> %01284}1285