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