1613 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mattr=+sve2p1 < %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 16 x i8> @test_svrbit_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {13; CHECK-LABEL: test_svrbit_s8_x_1:14; CHECK: // %bb.0: // %entry15; CHECK-NEXT: rbit z0.b, p0/m, z0.b16; CHECK-NEXT: ret17;18; CHECK-2p2-LABEL: test_svrbit_s8_x_1:19; CHECK-2p2: // %bb.0: // %entry20; CHECK-2p2-NEXT: rbit z0.b, p0/z, z0.b21; CHECK-2p2-NEXT: ret22entry:23 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.rbit.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)24 ret <vscale x 16 x i8> %025}26 27define <vscale x 16 x i8> @test_svrbit_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {28; CHECK-LABEL: test_svrbit_s8_x_2:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: rbit z0.b, p0/m, z1.b31; CHECK-NEXT: ret32;33; CHECK-2p2-LABEL: test_svrbit_s8_x_2:34; CHECK-2p2: // %bb.0: // %entry35; CHECK-2p2-NEXT: rbit z0.b, p0/z, z1.b36; CHECK-2p2-NEXT: ret37entry:38 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.rbit.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)39 ret <vscale x 16 x i8> %040}41 42define <vscale x 16 x i8> @test_svrbit_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {43; SVE-LABEL: test_svrbit_s8_z:44; SVE: // %bb.0: // %entry45; SVE-NEXT: movi v0.2d, #000000000000000046; SVE-NEXT: rbit z0.b, p0/m, z1.b47; SVE-NEXT: ret48;49; CHECK-2p2-LABEL: test_svrbit_s8_z:50; CHECK-2p2: // %bb.0: // %entry51; CHECK-2p2-NEXT: rbit z0.b, p0/z, z1.b52; CHECK-2p2-NEXT: ret53;54; STREAMING-SVE-LABEL: test_svrbit_s8_z:55; STREAMING-SVE: // %bb.0: // %entry56; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x057; STREAMING-SVE-NEXT: rbit z0.b, p0/m, z1.b58; STREAMING-SVE-NEXT: ret59entry:60 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.rbit.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)61 ret <vscale x 16 x i8> %062}63 64define <vscale x 8 x i16> @test_svrbit_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {65; CHECK-LABEL: test_svrbit_s16_x_1:66; CHECK: // %bb.0: // %entry67; CHECK-NEXT: rbit z0.h, p0/m, z0.h68; CHECK-NEXT: ret69;70; CHECK-2p2-LABEL: test_svrbit_s16_x_1:71; CHECK-2p2: // %bb.0: // %entry72; CHECK-2p2-NEXT: rbit z0.h, p0/z, z0.h73; CHECK-2p2-NEXT: ret74entry:75 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.rbit.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)76 ret <vscale x 8 x i16> %077}78 79define <vscale x 8 x i16> @test_svrbit_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {80; CHECK-LABEL: test_svrbit_s16_x_2:81; CHECK: // %bb.0: // %entry82; CHECK-NEXT: rbit z0.h, p0/m, z1.h83; CHECK-NEXT: ret84;85; CHECK-2p2-LABEL: test_svrbit_s16_x_2:86; CHECK-2p2: // %bb.0: // %entry87; CHECK-2p2-NEXT: rbit z0.h, p0/z, z1.h88; CHECK-2p2-NEXT: ret89entry:90 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.rbit.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)91 ret <vscale x 8 x i16> %092}93 94define <vscale x 8 x i16> @test_svrbit_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {95; SVE-LABEL: test_svrbit_s16_z:96; SVE: // %bb.0: // %entry97; SVE-NEXT: movi v0.2d, #000000000000000098; SVE-NEXT: rbit z0.h, p0/m, z1.h99; SVE-NEXT: ret100;101; CHECK-2p2-LABEL: test_svrbit_s16_z:102; CHECK-2p2: // %bb.0: // %entry103; CHECK-2p2-NEXT: rbit z0.h, p0/z, z1.h104; CHECK-2p2-NEXT: ret105;106; STREAMING-SVE-LABEL: test_svrbit_s16_z:107; STREAMING-SVE: // %bb.0: // %entry108; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0109; STREAMING-SVE-NEXT: rbit z0.h, p0/m, z1.h110; STREAMING-SVE-NEXT: ret111entry:112 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.rbit.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)113 ret <vscale x 8 x i16> %0114}115 116define <vscale x 4 x i32> @test_svrbit_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {117; CHECK-LABEL: test_svrbit_s32_x_1:118; CHECK: // %bb.0: // %entry119; CHECK-NEXT: rbit z0.s, p0/m, z0.s120; CHECK-NEXT: ret121;122; CHECK-2p2-LABEL: test_svrbit_s32_x_1:123; CHECK-2p2: // %bb.0: // %entry124; CHECK-2p2-NEXT: rbit z0.s, p0/z, z0.s125; CHECK-2p2-NEXT: ret126entry:127 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.rbit.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)128 ret <vscale x 4 x i32> %0129}130 131define <vscale x 4 x i32> @test_svrbit_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {132; CHECK-LABEL: test_svrbit_s32_x_2:133; CHECK: // %bb.0: // %entry134; CHECK-NEXT: rbit z0.s, p0/m, z1.s135; CHECK-NEXT: ret136;137; CHECK-2p2-LABEL: test_svrbit_s32_x_2:138; CHECK-2p2: // %bb.0: // %entry139; CHECK-2p2-NEXT: rbit z0.s, p0/z, z1.s140; CHECK-2p2-NEXT: ret141entry:142 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.rbit.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)143 ret <vscale x 4 x i32> %0144}145 146define <vscale x 4 x i32> @test_svrbit_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {147; SVE-LABEL: test_svrbit_s32_z:148; SVE: // %bb.0: // %entry149; SVE-NEXT: movi v0.2d, #0000000000000000150; SVE-NEXT: rbit z0.s, p0/m, z1.s151; SVE-NEXT: ret152;153; CHECK-2p2-LABEL: test_svrbit_s32_z:154; CHECK-2p2: // %bb.0: // %entry155; CHECK-2p2-NEXT: rbit z0.s, p0/z, z1.s156; CHECK-2p2-NEXT: ret157;158; STREAMING-SVE-LABEL: test_svrbit_s32_z:159; STREAMING-SVE: // %bb.0: // %entry160; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0161; STREAMING-SVE-NEXT: rbit z0.s, p0/m, z1.s162; STREAMING-SVE-NEXT: ret163entry:164 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.rbit.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)165 ret <vscale x 4 x i32> %0166}167 168define <vscale x 2 x i64> @test_svrbit_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {169; CHECK-LABEL: test_svrbit_s64_x_1:170; CHECK: // %bb.0: // %entry171; CHECK-NEXT: rbit z0.d, p0/m, z0.d172; CHECK-NEXT: ret173;174; CHECK-2p2-LABEL: test_svrbit_s64_x_1:175; CHECK-2p2: // %bb.0: // %entry176; CHECK-2p2-NEXT: rbit z0.d, p0/z, z0.d177; CHECK-2p2-NEXT: ret178entry:179 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.rbit.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)180 ret <vscale x 2 x i64> %0181}182 183define <vscale x 2 x i64> @test_svrbit_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {184; CHECK-LABEL: test_svrbit_s64_x_2:185; CHECK: // %bb.0: // %entry186; CHECK-NEXT: rbit z0.d, p0/m, z1.d187; CHECK-NEXT: ret188;189; CHECK-2p2-LABEL: test_svrbit_s64_x_2:190; CHECK-2p2: // %bb.0: // %entry191; CHECK-2p2-NEXT: rbit z0.d, p0/z, z1.d192; CHECK-2p2-NEXT: ret193entry:194 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.rbit.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)195 ret <vscale x 2 x i64> %0196}197 198define <vscale x 2 x i64> @test_svrbit_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {199; SVE-LABEL: test_svrbit_s64_z:200; SVE: // %bb.0: // %entry201; SVE-NEXT: movi v0.2d, #0000000000000000202; SVE-NEXT: rbit z0.d, p0/m, z1.d203; SVE-NEXT: ret204;205; CHECK-2p2-LABEL: test_svrbit_s64_z:206; CHECK-2p2: // %bb.0: // %entry207; CHECK-2p2-NEXT: rbit z0.d, p0/z, z1.d208; CHECK-2p2-NEXT: ret209;210; STREAMING-SVE-LABEL: test_svrbit_s64_z:211; STREAMING-SVE: // %bb.0: // %entry212; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0213; STREAMING-SVE-NEXT: rbit z0.d, p0/m, z1.d214; STREAMING-SVE-NEXT: ret215entry:216 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.rbit.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)217 ret <vscale x 2 x i64> %0218}219 220define <vscale x 8 x i16> @test_svrevb_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {221; CHECK-LABEL: test_svrevb_s16_x_1:222; CHECK: // %bb.0: // %entry223; CHECK-NEXT: revb z0.h, p0/m, z0.h224; CHECK-NEXT: ret225;226; CHECK-2p2-LABEL: test_svrevb_s16_x_1:227; CHECK-2p2: // %bb.0: // %entry228; CHECK-2p2-NEXT: revb z0.h, p0/z, z0.h229; CHECK-2p2-NEXT: ret230entry:231 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)232 ret <vscale x 8 x i16> %0233}234 235define <vscale x 8 x i16> @test_svrevb_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {236; CHECK-LABEL: test_svrevb_s16_x_2:237; CHECK: // %bb.0: // %entry238; CHECK-NEXT: revb z0.h, p0/m, z1.h239; CHECK-NEXT: ret240;241; CHECK-2p2-LABEL: test_svrevb_s16_x_2:242; CHECK-2p2: // %bb.0: // %entry243; CHECK-2p2-NEXT: revb z0.h, p0/z, z1.h244; CHECK-2p2-NEXT: ret245entry:246 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)247 ret <vscale x 8 x i16> %0248}249 250define <vscale x 8 x i16> @test_svrevb_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {251; SVE-LABEL: test_svrevb_s16_z:252; SVE: // %bb.0: // %entry253; SVE-NEXT: movi v0.2d, #0000000000000000254; SVE-NEXT: revb z0.h, p0/m, z1.h255; SVE-NEXT: ret256;257; CHECK-2p2-LABEL: test_svrevb_s16_z:258; CHECK-2p2: // %bb.0: // %entry259; CHECK-2p2-NEXT: revb z0.h, p0/z, z1.h260; CHECK-2p2-NEXT: ret261;262; STREAMING-SVE-LABEL: test_svrevb_s16_z:263; STREAMING-SVE: // %bb.0: // %entry264; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0265; STREAMING-SVE-NEXT: revb z0.h, p0/m, z1.h266; STREAMING-SVE-NEXT: ret267entry:268 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)269 ret <vscale x 8 x i16> %0270}271 272define <vscale x 4 x i32> @test_svrevb_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {273; CHECK-LABEL: test_svrevb_s32_x_1:274; CHECK: // %bb.0: // %entry275; CHECK-NEXT: revb z0.s, p0/m, z0.s276; CHECK-NEXT: ret277;278; CHECK-2p2-LABEL: test_svrevb_s32_x_1:279; CHECK-2p2: // %bb.0: // %entry280; CHECK-2p2-NEXT: revb z0.s, p0/z, z0.s281; CHECK-2p2-NEXT: ret282entry:283 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)284 ret <vscale x 4 x i32> %0285}286 287define <vscale x 4 x i32> @test_svrevb_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {288; CHECK-LABEL: test_svrevb_s32_x_2:289; CHECK: // %bb.0: // %entry290; CHECK-NEXT: revb z0.s, p0/m, z1.s291; CHECK-NEXT: ret292;293; CHECK-2p2-LABEL: test_svrevb_s32_x_2:294; CHECK-2p2: // %bb.0: // %entry295; CHECK-2p2-NEXT: revb z0.s, p0/z, z1.s296; CHECK-2p2-NEXT: ret297entry:298 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)299 ret <vscale x 4 x i32> %0300}301 302define <vscale x 4 x i32> @test_svrevb_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {303; SVE-LABEL: test_svrevb_s32_z:304; SVE: // %bb.0: // %entry305; SVE-NEXT: movi v0.2d, #0000000000000000306; SVE-NEXT: revb z0.s, p0/m, z1.s307; SVE-NEXT: ret308;309; CHECK-2p2-LABEL: test_svrevb_s32_z:310; CHECK-2p2: // %bb.0: // %entry311; CHECK-2p2-NEXT: revb z0.s, p0/z, z1.s312; CHECK-2p2-NEXT: ret313;314; STREAMING-SVE-LABEL: test_svrevb_s32_z:315; STREAMING-SVE: // %bb.0: // %entry316; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0317; STREAMING-SVE-NEXT: revb z0.s, p0/m, z1.s318; STREAMING-SVE-NEXT: ret319entry:320 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)321 ret <vscale x 4 x i32> %0322}323 324define <vscale x 2 x i64> @test_svrevb_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {325; CHECK-LABEL: test_svrevb_s64_x_1:326; CHECK: // %bb.0: // %entry327; CHECK-NEXT: revb z0.d, p0/m, z0.d328; CHECK-NEXT: ret329;330; CHECK-2p2-LABEL: test_svrevb_s64_x_1:331; CHECK-2p2: // %bb.0: // %entry332; CHECK-2p2-NEXT: revb z0.d, p0/z, z0.d333; CHECK-2p2-NEXT: ret334entry:335 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)336 ret <vscale x 2 x i64> %0337}338 339define <vscale x 2 x i64> @test_svrevb_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {340; CHECK-LABEL: test_svrevb_s64_x_2:341; CHECK: // %bb.0: // %entry342; CHECK-NEXT: revb z0.d, p0/m, z1.d343; CHECK-NEXT: ret344;345; CHECK-2p2-LABEL: test_svrevb_s64_x_2:346; CHECK-2p2: // %bb.0: // %entry347; CHECK-2p2-NEXT: revb z0.d, p0/z, z1.d348; CHECK-2p2-NEXT: ret349entry:350 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)351 ret <vscale x 2 x i64> %0352}353 354define <vscale x 2 x i64> @test_svrevb_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {355; SVE-LABEL: test_svrevb_s64_z:356; SVE: // %bb.0: // %entry357; SVE-NEXT: movi v0.2d, #0000000000000000358; SVE-NEXT: revb z0.d, p0/m, z1.d359; SVE-NEXT: ret360;361; CHECK-2p2-LABEL: test_svrevb_s64_z:362; CHECK-2p2: // %bb.0: // %entry363; CHECK-2p2-NEXT: revb z0.d, p0/z, z1.d364; CHECK-2p2-NEXT: ret365;366; STREAMING-SVE-LABEL: test_svrevb_s64_z:367; STREAMING-SVE: // %bb.0: // %entry368; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0369; STREAMING-SVE-NEXT: revb z0.d, p0/m, z1.d370; STREAMING-SVE-NEXT: ret371entry:372 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)373 ret <vscale x 2 x i64> %0374}375 376define <vscale x 4 x i32> @test_svrevh_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {377; CHECK-LABEL: test_svrevh_s32_x_1:378; CHECK: // %bb.0: // %entry379; CHECK-NEXT: revh z0.s, p0/m, z0.s380; CHECK-NEXT: ret381;382; CHECK-2p2-LABEL: test_svrevh_s32_x_1:383; CHECK-2p2: // %bb.0: // %entry384; CHECK-2p2-NEXT: revh z0.s, p0/z, z0.s385; CHECK-2p2-NEXT: ret386entry:387 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revh.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)388 ret <vscale x 4 x i32> %0389}390 391define <vscale x 4 x i32> @test_svrevh_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {392; CHECK-LABEL: test_svrevh_s32_x_2:393; CHECK: // %bb.0: // %entry394; CHECK-NEXT: revh z0.s, p0/m, z1.s395; CHECK-NEXT: ret396;397; CHECK-2p2-LABEL: test_svrevh_s32_x_2:398; CHECK-2p2: // %bb.0: // %entry399; CHECK-2p2-NEXT: revh z0.s, p0/z, z1.s400; CHECK-2p2-NEXT: ret401entry:402 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revh.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)403 ret <vscale x 4 x i32> %0404}405 406define <vscale x 4 x i32> @test_svrevh_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {407; SVE-LABEL: test_svrevh_s32_z:408; SVE: // %bb.0: // %entry409; SVE-NEXT: movi v0.2d, #0000000000000000410; SVE-NEXT: revh z0.s, p0/m, z1.s411; SVE-NEXT: ret412;413; CHECK-2p2-LABEL: test_svrevh_s32_z:414; CHECK-2p2: // %bb.0: // %entry415; CHECK-2p2-NEXT: revh z0.s, p0/z, z1.s416; CHECK-2p2-NEXT: ret417;418; STREAMING-SVE-LABEL: test_svrevh_s32_z:419; STREAMING-SVE: // %bb.0: // %entry420; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0421; STREAMING-SVE-NEXT: revh z0.s, p0/m, z1.s422; STREAMING-SVE-NEXT: ret423entry:424 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revh.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)425 ret <vscale x 4 x i32> %0426}427 428define <vscale x 2 x i64> @test_svrevh_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {429; CHECK-LABEL: test_svrevh_s64_x_1:430; CHECK: // %bb.0: // %entry431; CHECK-NEXT: revh z0.d, p0/m, z0.d432; CHECK-NEXT: ret433;434; CHECK-2p2-LABEL: test_svrevh_s64_x_1:435; CHECK-2p2: // %bb.0: // %entry436; CHECK-2p2-NEXT: revh z0.d, p0/z, z0.d437; CHECK-2p2-NEXT: ret438entry:439 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revh.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)440 ret <vscale x 2 x i64> %0441}442 443define <vscale x 2 x i64> @test_svrevh_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {444; CHECK-LABEL: test_svrevh_s64_x_2:445; CHECK: // %bb.0: // %entry446; CHECK-NEXT: revh z0.d, p0/m, z1.d447; CHECK-NEXT: ret448;449; CHECK-2p2-LABEL: test_svrevh_s64_x_2:450; CHECK-2p2: // %bb.0: // %entry451; CHECK-2p2-NEXT: revh z0.d, p0/z, z1.d452; CHECK-2p2-NEXT: ret453entry:454 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revh.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)455 ret <vscale x 2 x i64> %0456}457 458define <vscale x 2 x i64> @test_svrevh_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {459; SVE-LABEL: test_svrevh_s64_z:460; SVE: // %bb.0: // %entry461; SVE-NEXT: movi v0.2d, #0000000000000000462; SVE-NEXT: revh z0.d, p0/m, z1.d463; SVE-NEXT: ret464;465; CHECK-2p2-LABEL: test_svrevh_s64_z:466; CHECK-2p2: // %bb.0: // %entry467; CHECK-2p2-NEXT: revh z0.d, p0/z, z1.d468; CHECK-2p2-NEXT: ret469;470; STREAMING-SVE-LABEL: test_svrevh_s64_z:471; STREAMING-SVE: // %bb.0: // %entry472; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0473; STREAMING-SVE-NEXT: revh z0.d, p0/m, z1.d474; STREAMING-SVE-NEXT: ret475entry:476 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revh.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)477 ret <vscale x 2 x i64> %0478}479 480define <vscale x 2 x i64> @test_svrevw_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {481; CHECK-LABEL: test_svrevw_s64_x_1:482; CHECK: // %bb.0: // %entry483; CHECK-NEXT: revw z0.d, p0/m, z0.d484; CHECK-NEXT: ret485;486; CHECK-2p2-LABEL: test_svrevw_s64_x_1:487; CHECK-2p2: // %bb.0: // %entry488; CHECK-2p2-NEXT: revw z0.d, p0/z, z0.d489; CHECK-2p2-NEXT: ret490entry:491 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)492 ret <vscale x 2 x i64> %0493}494 495define <vscale x 2 x i64> @test_svrevw_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {496; CHECK-LABEL: test_svrevw_s64_x_2:497; CHECK: // %bb.0: // %entry498; CHECK-NEXT: revw z0.d, p0/m, z1.d499; CHECK-NEXT: ret500;501; CHECK-2p2-LABEL: test_svrevw_s64_x_2:502; CHECK-2p2: // %bb.0: // %entry503; CHECK-2p2-NEXT: revw z0.d, p0/z, z1.d504; CHECK-2p2-NEXT: ret505entry:506 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)507 ret <vscale x 2 x i64> %0508}509 510define <vscale x 2 x i64> @test_svrevw_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {511; SVE-LABEL: test_svrevw_s64_z:512; SVE: // %bb.0: // %entry513; SVE-NEXT: movi v0.2d, #0000000000000000514; SVE-NEXT: revw z0.d, p0/m, z1.d515; SVE-NEXT: ret516;517; CHECK-2p2-LABEL: test_svrevw_s64_z:518; CHECK-2p2: // %bb.0: // %entry519; CHECK-2p2-NEXT: revw z0.d, p0/z, z1.d520; CHECK-2p2-NEXT: ret521;522; STREAMING-SVE-LABEL: test_svrevw_s64_z:523; STREAMING-SVE: // %bb.0: // %entry524; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0525; STREAMING-SVE-NEXT: revw z0.d, p0/m, z1.d526; STREAMING-SVE-NEXT: ret527entry:528 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)529 ret <vscale x 2 x i64> %0530}531 532define <vscale x 16 x i8> @test_svrevd_s8_x_1(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %x) {533; CHECK-LABEL: test_svrevd_s8_x_1:534; CHECK: // %bb.0: // %entry535; CHECK-NEXT: revd z0.q, p0/m, z0.q536; CHECK-NEXT: ret537;538; CHECK-2p2-LABEL: test_svrevd_s8_x_1:539; CHECK-2p2: // %bb.0: // %entry540; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q541; CHECK-2p2-NEXT: ret542entry:543 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.revd.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)544 ret <vscale x 16 x i8> %0545}546 547define <vscale x 16 x i8> @test_svrevd_s8_x_2(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {548; CHECK-LABEL: test_svrevd_s8_x_2:549; CHECK: // %bb.0: // %entry550; CHECK-NEXT: revd z0.q, p0/m, z1.q551; CHECK-NEXT: ret552;553; CHECK-2p2-LABEL: test_svrevd_s8_x_2:554; CHECK-2p2: // %bb.0: // %entry555; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q556; CHECK-2p2-NEXT: ret557entry:558 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.revd.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)559 ret <vscale x 16 x i8> %0560}561 562define <vscale x 16 x i8> @test_svrevd_s8_z(<vscale x 16 x i1> %pg, double %z0, <vscale x 16 x i8> %x) {563; SVE-LABEL: test_svrevd_s8_z:564; SVE: // %bb.0: // %entry565; SVE-NEXT: movi v0.2d, #0000000000000000566; SVE-NEXT: revd z0.q, p0/m, z1.q567; SVE-NEXT: ret568;569; CHECK-2p2-LABEL: test_svrevd_s8_z:570; CHECK-2p2: // %bb.0: // %entry571; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q572; CHECK-2p2-NEXT: ret573;574; STREAMING-SVE-LABEL: test_svrevd_s8_z:575; STREAMING-SVE: // %bb.0: // %entry576; STREAMING-SVE-NEXT: mov z0.b, #0 // =0x0577; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q578; STREAMING-SVE-NEXT: ret579entry:580 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.revd.nxv16i8(<vscale x 16 x i8> zeroinitializer, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)581 ret <vscale x 16 x i8> %0582}583 584define <vscale x 8 x i16> @test_svrevd_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {585; CHECK-LABEL: test_svrevd_s16_x_1:586; CHECK: // %bb.0: // %entry587; CHECK-NEXT: revd z0.q, p0/m, z0.q588; CHECK-NEXT: ret589;590; CHECK-2p2-LABEL: test_svrevd_s16_x_1:591; CHECK-2p2: // %bb.0: // %entry592; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q593; CHECK-2p2-NEXT: ret594entry:595 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revd.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)596 ret <vscale x 8 x i16> %0597}598 599define <vscale x 8 x i16> @test_svrevd_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {600; CHECK-LABEL: test_svrevd_s16_x_2:601; CHECK: // %bb.0: // %entry602; CHECK-NEXT: revd z0.q, p0/m, z1.q603; CHECK-NEXT: ret604;605; CHECK-2p2-LABEL: test_svrevd_s16_x_2:606; CHECK-2p2: // %bb.0: // %entry607; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q608; CHECK-2p2-NEXT: ret609entry:610 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revd.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)611 ret <vscale x 8 x i16> %0612}613 614define <vscale x 8 x i16> @test_svrevd_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {615; SVE-LABEL: test_svrevd_s16_z:616; SVE: // %bb.0: // %entry617; SVE-NEXT: movi v0.2d, #0000000000000000618; SVE-NEXT: revd z0.q, p0/m, z1.q619; SVE-NEXT: ret620;621; CHECK-2p2-LABEL: test_svrevd_s16_z:622; CHECK-2p2: // %bb.0: // %entry623; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q624; CHECK-2p2-NEXT: ret625;626; STREAMING-SVE-LABEL: test_svrevd_s16_z:627; STREAMING-SVE: // %bb.0: // %entry628; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0629; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q630; STREAMING-SVE-NEXT: ret631entry:632 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revd.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)633 ret <vscale x 8 x i16> %0634}635 636define <vscale x 4 x i32> @test_svrevd_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {637; CHECK-LABEL: test_svrevd_s32_x_1:638; CHECK: // %bb.0: // %entry639; CHECK-NEXT: revd z0.q, p0/m, z0.q640; CHECK-NEXT: ret641;642; CHECK-2p2-LABEL: test_svrevd_s32_x_1:643; CHECK-2p2: // %bb.0: // %entry644; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q645; CHECK-2p2-NEXT: ret646entry:647 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revd.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)648 ret <vscale x 4 x i32> %0649}650 651define <vscale x 4 x i32> @test_svrevd_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {652; CHECK-LABEL: test_svrevd_s32_x_2:653; CHECK: // %bb.0: // %entry654; CHECK-NEXT: revd z0.q, p0/m, z1.q655; CHECK-NEXT: ret656;657; CHECK-2p2-LABEL: test_svrevd_s32_x_2:658; CHECK-2p2: // %bb.0: // %entry659; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q660; CHECK-2p2-NEXT: ret661entry:662 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revd.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)663 ret <vscale x 4 x i32> %0664}665 666define <vscale x 4 x i32> @test_svrevd_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {667; SVE-LABEL: test_svrevd_s32_z:668; SVE: // %bb.0: // %entry669; SVE-NEXT: movi v0.2d, #0000000000000000670; SVE-NEXT: revd z0.q, p0/m, z1.q671; SVE-NEXT: ret672;673; CHECK-2p2-LABEL: test_svrevd_s32_z:674; CHECK-2p2: // %bb.0: // %entry675; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q676; CHECK-2p2-NEXT: ret677;678; STREAMING-SVE-LABEL: test_svrevd_s32_z:679; STREAMING-SVE: // %bb.0: // %entry680; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0681; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q682; STREAMING-SVE-NEXT: ret683entry:684 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revd.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)685 ret <vscale x 4 x i32> %0686}687 688define <vscale x 2 x i64> @test_svrevd_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {689; CHECK-LABEL: test_svrevd_s64_x_1:690; CHECK: // %bb.0: // %entry691; CHECK-NEXT: revd z0.q, p0/m, z0.q692; CHECK-NEXT: ret693;694; CHECK-2p2-LABEL: test_svrevd_s64_x_1:695; CHECK-2p2: // %bb.0: // %entry696; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q697; CHECK-2p2-NEXT: ret698entry:699 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revd.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)700 ret <vscale x 2 x i64> %0701}702 703define <vscale x 2 x i64> @test_svrevd_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {704; CHECK-LABEL: test_svrevd_s64_x_2:705; CHECK: // %bb.0: // %entry706; CHECK-NEXT: revd z0.q, p0/m, z1.q707; CHECK-NEXT: ret708;709; CHECK-2p2-LABEL: test_svrevd_s64_x_2:710; CHECK-2p2: // %bb.0: // %entry711; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q712; CHECK-2p2-NEXT: ret713entry:714 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revd.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)715 ret <vscale x 2 x i64> %0716}717 718define <vscale x 2 x i64> @test_svrevd_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {719; SVE-LABEL: test_svrevd_s64_z:720; SVE: // %bb.0: // %entry721; SVE-NEXT: movi v0.2d, #0000000000000000722; SVE-NEXT: revd z0.q, p0/m, z1.q723; SVE-NEXT: ret724;725; CHECK-2p2-LABEL: test_svrevd_s64_z:726; CHECK-2p2: // %bb.0: // %entry727; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q728; CHECK-2p2-NEXT: ret729;730; STREAMING-SVE-LABEL: test_svrevd_s64_z:731; STREAMING-SVE: // %bb.0: // %entry732; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0733; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q734; STREAMING-SVE-NEXT: ret735entry:736 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revd.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)737 ret <vscale x 2 x i64> %0738}739 740define <vscale x 8 x half> @test_svrevd_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {741; CHECK-LABEL: test_svrevd_f16_x_1:742; CHECK: // %bb.0: // %entry743; CHECK-NEXT: revd z0.q, p0/m, z0.q744; CHECK-NEXT: ret745;746; CHECK-2p2-LABEL: test_svrevd_f16_x_1:747; CHECK-2p2: // %bb.0: // %entry748; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q749; CHECK-2p2-NEXT: ret750entry:751 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.revd.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)752 ret <vscale x 8 x half> %0753}754 755define <vscale x 8 x half> @test_svrevd_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {756; CHECK-LABEL: test_svrevd_f16_x_2:757; CHECK: // %bb.0: // %entry758; CHECK-NEXT: revd z0.q, p0/m, z1.q759; CHECK-NEXT: ret760;761; CHECK-2p2-LABEL: test_svrevd_f16_x_2:762; CHECK-2p2: // %bb.0: // %entry763; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q764; CHECK-2p2-NEXT: ret765entry:766 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.revd.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)767 ret <vscale x 8 x half> %0768}769 770define <vscale x 8 x half> @test_svrevd_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {771; SVE-LABEL: test_svrevd_f16_z:772; SVE: // %bb.0: // %entry773; SVE-NEXT: movi v0.2d, #0000000000000000774; SVE-NEXT: revd z0.q, p0/m, z1.q775; SVE-NEXT: ret776;777; CHECK-2p2-LABEL: test_svrevd_f16_z:778; CHECK-2p2: // %bb.0: // %entry779; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q780; CHECK-2p2-NEXT: ret781;782; STREAMING-SVE-LABEL: test_svrevd_f16_z:783; STREAMING-SVE: // %bb.0: // %entry784; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0785; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q786; STREAMING-SVE-NEXT: ret787entry:788 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.revd.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)789 ret <vscale x 8 x half> %0790}791 792define <vscale x 8 x bfloat> @test_svrevd_bf16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x) {793; CHECK-LABEL: test_svrevd_bf16_x_1:794; CHECK: // %bb.0: // %entry795; CHECK-NEXT: revd z0.q, p0/m, z0.q796; CHECK-NEXT: ret797;798; CHECK-2p2-LABEL: test_svrevd_bf16_x_1:799; CHECK-2p2: // %bb.0: // %entry800; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q801; CHECK-2p2-NEXT: ret802entry:803 %0 = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.revd.nxv8bf16(<vscale x 8 x bfloat> poison, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)804 ret <vscale x 8 x bfloat> %0805}806 807define <vscale x 8 x bfloat> @test_svrevd_bf16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x bfloat> %x) {808; CHECK-LABEL: test_svrevd_bf16_x_2:809; CHECK: // %bb.0: // %entry810; CHECK-NEXT: revd z0.q, p0/m, z1.q811; CHECK-NEXT: ret812;813; CHECK-2p2-LABEL: test_svrevd_bf16_x_2:814; CHECK-2p2: // %bb.0: // %entry815; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q816; CHECK-2p2-NEXT: ret817entry:818 %0 = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.revd.nxv8bf16(<vscale x 8 x bfloat> poison, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)819 ret <vscale x 8 x bfloat> %0820}821 822define <vscale x 8 x bfloat> @test_svrevd_bf16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x bfloat> %x) {823; SVE-LABEL: test_svrevd_bf16_z:824; SVE: // %bb.0: // %entry825; SVE-NEXT: movi v0.2d, #0000000000000000826; SVE-NEXT: revd z0.q, p0/m, z1.q827; SVE-NEXT: ret828;829; CHECK-2p2-LABEL: test_svrevd_bf16_z:830; CHECK-2p2: // %bb.0: // %entry831; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q832; CHECK-2p2-NEXT: ret833;834; STREAMING-SVE-LABEL: test_svrevd_bf16_z:835; STREAMING-SVE: // %bb.0: // %entry836; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0837; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q838; STREAMING-SVE-NEXT: ret839entry:840 %0 = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.revd.nxv8bf16(<vscale x 8 x bfloat> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)841 ret <vscale x 8 x bfloat> %0842}843 844define <vscale x 4 x float> @test_svrevd_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {845; CHECK-LABEL: test_svrevd_f32_x_1:846; CHECK: // %bb.0: // %entry847; CHECK-NEXT: revd z0.q, p0/m, z0.q848; CHECK-NEXT: ret849;850; CHECK-2p2-LABEL: test_svrevd_f32_x_1:851; CHECK-2p2: // %bb.0: // %entry852; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q853; CHECK-2p2-NEXT: ret854entry:855 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.revd.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)856 ret <vscale x 4 x float> %0857}858 859define <vscale x 4 x float> @test_svrevd_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {860; CHECK-LABEL: test_svrevd_f32_x_2:861; CHECK: // %bb.0: // %entry862; CHECK-NEXT: revd z0.q, p0/m, z1.q863; CHECK-NEXT: ret864;865; CHECK-2p2-LABEL: test_svrevd_f32_x_2:866; CHECK-2p2: // %bb.0: // %entry867; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q868; CHECK-2p2-NEXT: ret869entry:870 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.revd.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)871 ret <vscale x 4 x float> %0872}873 874define <vscale x 4 x float> @test_svrevd_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {875; SVE-LABEL: test_svrevd_f32_z:876; SVE: // %bb.0: // %entry877; SVE-NEXT: movi v0.2d, #0000000000000000878; SVE-NEXT: revd z0.q, p0/m, z1.q879; SVE-NEXT: ret880;881; CHECK-2p2-LABEL: test_svrevd_f32_z:882; CHECK-2p2: // %bb.0: // %entry883; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q884; CHECK-2p2-NEXT: ret885;886; STREAMING-SVE-LABEL: test_svrevd_f32_z:887; STREAMING-SVE: // %bb.0: // %entry888; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0889; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q890; STREAMING-SVE-NEXT: ret891entry:892 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.revd.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)893 ret <vscale x 4 x float> %0894}895 896define <vscale x 2 x double> @test_svrevd_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {897; CHECK-LABEL: test_svrevd_f64_x_1:898; CHECK: // %bb.0: // %entry899; CHECK-NEXT: revd z0.q, p0/m, z0.q900; CHECK-NEXT: ret901;902; CHECK-2p2-LABEL: test_svrevd_f64_x_1:903; CHECK-2p2: // %bb.0: // %entry904; CHECK-2p2-NEXT: revd z0.q, p0/z, z0.q905; CHECK-2p2-NEXT: ret906entry:907 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.revd.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)908 ret <vscale x 2 x double> %0909}910 911define <vscale x 2 x double> @test_svrevd_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {912; CHECK-LABEL: test_svrevd_f64_x_2:913; CHECK: // %bb.0: // %entry914; CHECK-NEXT: revd z0.q, p0/m, z1.q915; CHECK-NEXT: ret916;917; CHECK-2p2-LABEL: test_svrevd_f64_x_2:918; CHECK-2p2: // %bb.0: // %entry919; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q920; CHECK-2p2-NEXT: ret921entry:922 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.revd.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)923 ret <vscale x 2 x double> %0924}925 926define <vscale x 2 x double> @test_svrevd_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {927; SVE-LABEL: test_svrevd_f64_z:928; SVE: // %bb.0: // %entry929; SVE-NEXT: movi v0.2d, #0000000000000000930; SVE-NEXT: revd z0.q, p0/m, z1.q931; SVE-NEXT: ret932;933; CHECK-2p2-LABEL: test_svrevd_f64_z:934; CHECK-2p2: // %bb.0: // %entry935; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q936; CHECK-2p2-NEXT: ret937;938; STREAMING-SVE-LABEL: test_svrevd_f64_z:939; STREAMING-SVE: // %bb.0: // %entry940; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0941; STREAMING-SVE-NEXT: revd z0.q, p0/m, z1.q942; STREAMING-SVE-NEXT: ret943entry:944 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.revd.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)945 ret <vscale x 2 x double> %0946}947 948define <vscale x 16 x i8> @test_svrbit_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {949; CHECK-LABEL: test_svrbit_nxv16i8_ptrue_u:950; CHECK: // %bb.0: // %entry951; CHECK-NEXT: ptrue p0.b952; CHECK-NEXT: rbit z0.b, p0/m, z1.b953; CHECK-NEXT: ret954;955; CHECK-2p2-LABEL: test_svrbit_nxv16i8_ptrue_u:956; CHECK-2p2: // %bb.0: // %entry957; CHECK-2p2-NEXT: ptrue p0.b958; CHECK-2p2-NEXT: rbit z0.b, p0/z, z1.b959; CHECK-2p2-NEXT: ret960entry:961 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)962 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.rbit.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)963 ret <vscale x 16 x i8> %0964}965 966define <vscale x 16 x i8> @test_svrbit_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {967; CHECK-LABEL: test_svrbit_nxv16i8_ptrue:968; CHECK: // %bb.0: // %entry969; CHECK-NEXT: mov z0.d, z1.d970; CHECK-NEXT: ptrue p0.b971; CHECK-NEXT: rbit z0.b, p0/m, z2.b972; CHECK-NEXT: ret973;974; CHECK-2p2-LABEL: test_svrbit_nxv16i8_ptrue:975; CHECK-2p2: // %bb.0: // %entry976; CHECK-2p2-NEXT: ptrue p0.b977; CHECK-2p2-NEXT: rbit z0.b, p0/z, z2.b978; CHECK-2p2-NEXT: ret979entry:980 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)981 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.rbit.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)982 ret <vscale x 16 x i8> %0983}984 985define <vscale x 8 x i16> @test_svrbit_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {986; CHECK-LABEL: test_svrbit_nxv8i16_ptrue_u:987; CHECK: // %bb.0: // %entry988; CHECK-NEXT: ptrue p0.h989; CHECK-NEXT: rbit z0.h, p0/m, z1.h990; CHECK-NEXT: ret991;992; CHECK-2p2-LABEL: test_svrbit_nxv8i16_ptrue_u:993; CHECK-2p2: // %bb.0: // %entry994; CHECK-2p2-NEXT: ptrue p0.h995; CHECK-2p2-NEXT: rbit z0.h, p0/z, z1.h996; CHECK-2p2-NEXT: ret997entry:998 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)999 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.rbit.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1000 ret <vscale x 8 x i16> %01001}1002 1003define <vscale x 8 x i16> @test_svrbit_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1004; CHECK-LABEL: test_svrbit_nxv8i16_ptrue:1005; CHECK: // %bb.0: // %entry1006; CHECK-NEXT: mov z0.d, z1.d1007; CHECK-NEXT: ptrue p0.h1008; CHECK-NEXT: rbit z0.h, p0/m, z2.h1009; CHECK-NEXT: ret1010;1011; CHECK-2p2-LABEL: test_svrbit_nxv8i16_ptrue:1012; CHECK-2p2: // %bb.0: // %entry1013; CHECK-2p2-NEXT: ptrue p0.h1014; CHECK-2p2-NEXT: rbit z0.h, p0/z, z2.h1015; CHECK-2p2-NEXT: ret1016entry:1017 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1018 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.rbit.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1019 ret <vscale x 8 x i16> %01020}1021 1022define <vscale x 4 x i32> @test_svrbit_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1023; CHECK-LABEL: test_svrbit_nxv4i32_ptrue_u:1024; CHECK: // %bb.0: // %entry1025; CHECK-NEXT: ptrue p0.s1026; CHECK-NEXT: rbit z0.s, p0/m, z1.s1027; CHECK-NEXT: ret1028;1029; CHECK-2p2-LABEL: test_svrbit_nxv4i32_ptrue_u:1030; CHECK-2p2: // %bb.0: // %entry1031; CHECK-2p2-NEXT: ptrue p0.s1032; CHECK-2p2-NEXT: rbit z0.s, p0/z, z1.s1033; CHECK-2p2-NEXT: ret1034entry:1035 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1036 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.rbit.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1037 ret <vscale x 4 x i32> %01038}1039 1040define <vscale x 4 x i32> @test_svrbit_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1041; CHECK-LABEL: test_svrbit_nxv4i32_ptrue:1042; CHECK: // %bb.0: // %entry1043; CHECK-NEXT: mov z0.d, z1.d1044; CHECK-NEXT: ptrue p0.s1045; CHECK-NEXT: rbit z0.s, p0/m, z2.s1046; CHECK-NEXT: ret1047;1048; CHECK-2p2-LABEL: test_svrbit_nxv4i32_ptrue:1049; CHECK-2p2: // %bb.0: // %entry1050; CHECK-2p2-NEXT: ptrue p0.s1051; CHECK-2p2-NEXT: rbit z0.s, p0/z, z2.s1052; CHECK-2p2-NEXT: ret1053entry:1054 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1055 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.rbit.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1056 ret <vscale x 4 x i32> %01057}1058 1059define <vscale x 2 x i64> @test_svrbit_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1060; CHECK-LABEL: test_svrbit_nxv2i64_ptrue_u:1061; CHECK: // %bb.0: // %entry1062; CHECK-NEXT: ptrue p0.d1063; CHECK-NEXT: rbit z0.d, p0/m, z1.d1064; CHECK-NEXT: ret1065;1066; CHECK-2p2-LABEL: test_svrbit_nxv2i64_ptrue_u:1067; CHECK-2p2: // %bb.0: // %entry1068; CHECK-2p2-NEXT: ptrue p0.d1069; CHECK-2p2-NEXT: rbit z0.d, p0/z, z1.d1070; CHECK-2p2-NEXT: ret1071entry:1072 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1073 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.rbit.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1074 ret <vscale x 2 x i64> %01075}1076 1077define <vscale x 2 x i64> @test_svrbit_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1078; CHECK-LABEL: test_svrbit_nxv2i64_ptrue:1079; CHECK: // %bb.0: // %entry1080; CHECK-NEXT: mov z0.d, z1.d1081; CHECK-NEXT: ptrue p0.d1082; CHECK-NEXT: rbit z0.d, p0/m, z2.d1083; CHECK-NEXT: ret1084;1085; CHECK-2p2-LABEL: test_svrbit_nxv2i64_ptrue:1086; CHECK-2p2: // %bb.0: // %entry1087; CHECK-2p2-NEXT: ptrue p0.d1088; CHECK-2p2-NEXT: rbit z0.d, p0/z, z2.d1089; CHECK-2p2-NEXT: ret1090entry:1091 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1092 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.rbit.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1093 ret <vscale x 2 x i64> %01094}1095 1096define <vscale x 8 x i16> @test_svrevb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1097; CHECK-LABEL: test_svrevb_nxv8i16_ptrue_u:1098; CHECK: // %bb.0: // %entry1099; CHECK-NEXT: ptrue p0.h1100; CHECK-NEXT: revb z0.h, p0/m, z1.h1101; CHECK-NEXT: ret1102;1103; CHECK-2p2-LABEL: test_svrevb_nxv8i16_ptrue_u:1104; CHECK-2p2: // %bb.0: // %entry1105; CHECK-2p2-NEXT: ptrue p0.h1106; CHECK-2p2-NEXT: revb z0.h, p0/z, z1.h1107; CHECK-2p2-NEXT: ret1108entry:1109 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1110 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1111 ret <vscale x 8 x i16> %01112}1113 1114define <vscale x 8 x i16> @test_svrevb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1115; CHECK-LABEL: test_svrevb_nxv8i16_ptrue:1116; CHECK: // %bb.0: // %entry1117; CHECK-NEXT: mov z0.d, z1.d1118; CHECK-NEXT: ptrue p0.h1119; CHECK-NEXT: revb z0.h, p0/m, z2.h1120; CHECK-NEXT: ret1121;1122; CHECK-2p2-LABEL: test_svrevb_nxv8i16_ptrue:1123; CHECK-2p2: // %bb.0: // %entry1124; CHECK-2p2-NEXT: ptrue p0.h1125; CHECK-2p2-NEXT: revb z0.h, p0/z, z2.h1126; CHECK-2p2-NEXT: ret1127entry:1128 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1129 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1130 ret <vscale x 8 x i16> %01131}1132 1133define <vscale x 4 x i32> @test_svrevb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1134; CHECK-LABEL: test_svrevb_nxv4i32_ptrue_u:1135; CHECK: // %bb.0: // %entry1136; CHECK-NEXT: ptrue p0.s1137; CHECK-NEXT: revb z0.s, p0/m, z1.s1138; CHECK-NEXT: ret1139;1140; CHECK-2p2-LABEL: test_svrevb_nxv4i32_ptrue_u:1141; CHECK-2p2: // %bb.0: // %entry1142; CHECK-2p2-NEXT: ptrue p0.s1143; CHECK-2p2-NEXT: revb z0.s, p0/z, z1.s1144; CHECK-2p2-NEXT: ret1145entry:1146 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1147 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1148 ret <vscale x 4 x i32> %01149}1150 1151define <vscale x 4 x i32> @test_svrevb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1152; CHECK-LABEL: test_svrevb_nxv4i32_ptrue:1153; CHECK: // %bb.0: // %entry1154; CHECK-NEXT: mov z0.d, z1.d1155; CHECK-NEXT: ptrue p0.s1156; CHECK-NEXT: revb z0.s, p0/m, z2.s1157; CHECK-NEXT: ret1158;1159; CHECK-2p2-LABEL: test_svrevb_nxv4i32_ptrue:1160; CHECK-2p2: // %bb.0: // %entry1161; CHECK-2p2-NEXT: ptrue p0.s1162; CHECK-2p2-NEXT: revb z0.s, p0/z, z2.s1163; CHECK-2p2-NEXT: ret1164entry:1165 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1166 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1167 ret <vscale x 4 x i32> %01168}1169 1170define <vscale x 2 x i64> @test_svrevb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1171; CHECK-LABEL: test_svrevb_nxv2i64_ptrue_u:1172; CHECK: // %bb.0: // %entry1173; CHECK-NEXT: ptrue p0.d1174; CHECK-NEXT: revb z0.d, p0/m, z1.d1175; CHECK-NEXT: ret1176;1177; CHECK-2p2-LABEL: test_svrevb_nxv2i64_ptrue_u:1178; CHECK-2p2: // %bb.0: // %entry1179; CHECK-2p2-NEXT: ptrue p0.d1180; CHECK-2p2-NEXT: revb z0.d, p0/z, z1.d1181; CHECK-2p2-NEXT: ret1182entry:1183 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1184 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1185 ret <vscale x 2 x i64> %01186}1187 1188define <vscale x 2 x i64> @test_svrevb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1189; CHECK-LABEL: test_svrevb_nxv2i64_ptrue:1190; CHECK: // %bb.0: // %entry1191; CHECK-NEXT: mov z0.d, z1.d1192; CHECK-NEXT: ptrue p0.d1193; CHECK-NEXT: revb z0.d, p0/m, z2.d1194; CHECK-NEXT: ret1195;1196; CHECK-2p2-LABEL: test_svrevb_nxv2i64_ptrue:1197; CHECK-2p2: // %bb.0: // %entry1198; CHECK-2p2-NEXT: ptrue p0.d1199; CHECK-2p2-NEXT: revb z0.d, p0/z, z2.d1200; CHECK-2p2-NEXT: ret1201entry:1202 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1203 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1204 ret <vscale x 2 x i64> %01205}1206 1207define <vscale x 4 x i32> @test_svrevh_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1208; CHECK-LABEL: test_svrevh_nxv4i32_ptrue_u:1209; CHECK: // %bb.0: // %entry1210; CHECK-NEXT: ptrue p0.s1211; CHECK-NEXT: revh z0.s, p0/m, z1.s1212; CHECK-NEXT: ret1213;1214; CHECK-2p2-LABEL: test_svrevh_nxv4i32_ptrue_u:1215; CHECK-2p2: // %bb.0: // %entry1216; CHECK-2p2-NEXT: ptrue p0.s1217; CHECK-2p2-NEXT: revh z0.s, p0/z, z1.s1218; CHECK-2p2-NEXT: ret1219entry:1220 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1221 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revh.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1222 ret <vscale x 4 x i32> %01223}1224 1225define <vscale x 4 x i32> @test_svrevh_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1226; CHECK-LABEL: test_svrevh_nxv4i32_ptrue:1227; CHECK: // %bb.0: // %entry1228; CHECK-NEXT: mov z0.d, z1.d1229; CHECK-NEXT: ptrue p0.s1230; CHECK-NEXT: revh z0.s, p0/m, z2.s1231; CHECK-NEXT: ret1232;1233; CHECK-2p2-LABEL: test_svrevh_nxv4i32_ptrue:1234; CHECK-2p2: // %bb.0: // %entry1235; CHECK-2p2-NEXT: ptrue p0.s1236; CHECK-2p2-NEXT: revh z0.s, p0/z, z2.s1237; CHECK-2p2-NEXT: ret1238entry:1239 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1240 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revh.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1241 ret <vscale x 4 x i32> %01242}1243 1244define <vscale x 2 x i64> @test_svrevh_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1245; CHECK-LABEL: test_svrevh_nxv2i64_ptrue_u:1246; CHECK: // %bb.0: // %entry1247; CHECK-NEXT: ptrue p0.d1248; CHECK-NEXT: revh z0.d, p0/m, z1.d1249; CHECK-NEXT: ret1250;1251; CHECK-2p2-LABEL: test_svrevh_nxv2i64_ptrue_u:1252; CHECK-2p2: // %bb.0: // %entry1253; CHECK-2p2-NEXT: ptrue p0.d1254; CHECK-2p2-NEXT: revh z0.d, p0/z, z1.d1255; CHECK-2p2-NEXT: ret1256entry:1257 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1258 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revh.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1259 ret <vscale x 2 x i64> %01260}1261 1262define <vscale x 2 x i64> @test_svrevh_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1263; CHECK-LABEL: test_svrevh_nxv2i64_ptrue:1264; CHECK: // %bb.0: // %entry1265; CHECK-NEXT: mov z0.d, z1.d1266; CHECK-NEXT: ptrue p0.d1267; CHECK-NEXT: revh z0.d, p0/m, z2.d1268; CHECK-NEXT: ret1269;1270; CHECK-2p2-LABEL: test_svrevh_nxv2i64_ptrue:1271; CHECK-2p2: // %bb.0: // %entry1272; CHECK-2p2-NEXT: ptrue p0.d1273; CHECK-2p2-NEXT: revh z0.d, p0/z, z2.d1274; CHECK-2p2-NEXT: ret1275entry:1276 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1277 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revh.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1278 ret <vscale x 2 x i64> %01279}1280 1281define <vscale x 2 x i64> @test_svrevw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1282; CHECK-LABEL: test_svrevw_nxv2i64_ptrue_u:1283; CHECK: // %bb.0: // %entry1284; CHECK-NEXT: ptrue p0.d1285; CHECK-NEXT: revw z0.d, p0/m, z1.d1286; CHECK-NEXT: ret1287;1288; CHECK-2p2-LABEL: test_svrevw_nxv2i64_ptrue_u:1289; CHECK-2p2: // %bb.0: // %entry1290; CHECK-2p2-NEXT: ptrue p0.d1291; CHECK-2p2-NEXT: revw z0.d, p0/z, z1.d1292; CHECK-2p2-NEXT: ret1293entry:1294 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1295 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1296 ret <vscale x 2 x i64> %01297}1298 1299define <vscale x 2 x i64> @test_svrevw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1300; CHECK-LABEL: test_svrevw_nxv2i64_ptrue:1301; CHECK: // %bb.0: // %entry1302; CHECK-NEXT: mov z0.d, z1.d1303; CHECK-NEXT: ptrue p0.d1304; CHECK-NEXT: revw z0.d, p0/m, z2.d1305; CHECK-NEXT: ret1306;1307; CHECK-2p2-LABEL: test_svrevw_nxv2i64_ptrue:1308; CHECK-2p2: // %bb.0: // %entry1309; CHECK-2p2-NEXT: ptrue p0.d1310; CHECK-2p2-NEXT: revw z0.d, p0/z, z2.d1311; CHECK-2p2-NEXT: ret1312entry:1313 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1314 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1315 ret <vscale x 2 x i64> %01316}1317 1318define <vscale x 16 x i8> @test_svrevd_nxv16i8_ptrue_u(double %z0, <vscale x 16 x i8> %x) {1319; CHECK-LABEL: test_svrevd_nxv16i8_ptrue_u:1320; CHECK: // %bb.0: // %entry1321; CHECK-NEXT: ptrue p0.b1322; CHECK-NEXT: revd z0.q, p0/m, z1.q1323; CHECK-NEXT: ret1324;1325; CHECK-2p2-LABEL: test_svrevd_nxv16i8_ptrue_u:1326; CHECK-2p2: // %bb.0: // %entry1327; CHECK-2p2-NEXT: ptrue p0.b1328; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1329; CHECK-2p2-NEXT: ret1330entry:1331 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1332 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.revd.nxv16i8(<vscale x 16 x i8> poison, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %x)1333 ret <vscale x 16 x i8> %01334}1335 1336define <vscale x 16 x i8> @test_svrevd_nxv16i8_ptrue(double %z0, <vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {1337; CHECK-LABEL: test_svrevd_nxv16i8_ptrue:1338; CHECK: // %bb.0: // %entry1339; CHECK-NEXT: mov z0.d, z1.d1340; CHECK-NEXT: ptrue p0.b1341; CHECK-NEXT: revd z0.q, p0/m, z2.q1342; CHECK-NEXT: ret1343;1344; CHECK-2p2-LABEL: test_svrevd_nxv16i8_ptrue:1345; CHECK-2p2: // %bb.0: // %entry1346; CHECK-2p2-NEXT: ptrue p0.b1347; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1348; CHECK-2p2-NEXT: ret1349entry:1350 %pg = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)1351 %0 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.revd.nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i1> %pg, <vscale x 16 x i8> %y)1352 ret <vscale x 16 x i8> %01353}1354 1355define <vscale x 8 x i16> @test_svrevd_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1356; CHECK-LABEL: test_svrevd_nxv8i16_ptrue_u:1357; CHECK: // %bb.0: // %entry1358; CHECK-NEXT: ptrue p0.h1359; CHECK-NEXT: revd z0.q, p0/m, z1.q1360; CHECK-NEXT: ret1361;1362; CHECK-2p2-LABEL: test_svrevd_nxv8i16_ptrue_u:1363; CHECK-2p2: // %bb.0: // %entry1364; CHECK-2p2-NEXT: ptrue p0.h1365; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1366; CHECK-2p2-NEXT: ret1367entry:1368 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1369 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revd.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1370 ret <vscale x 8 x i16> %01371}1372 1373define <vscale x 8 x i16> @test_svrevd_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {1374; CHECK-LABEL: test_svrevd_nxv8i16_ptrue:1375; CHECK: // %bb.0: // %entry1376; CHECK-NEXT: mov z0.d, z1.d1377; CHECK-NEXT: ptrue p0.h1378; CHECK-NEXT: revd z0.q, p0/m, z2.q1379; CHECK-NEXT: ret1380;1381; CHECK-2p2-LABEL: test_svrevd_nxv8i16_ptrue:1382; CHECK-2p2: // %bb.0: // %entry1383; CHECK-2p2-NEXT: ptrue p0.h1384; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1385; CHECK-2p2-NEXT: ret1386entry:1387 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1388 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.revd.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1389 ret <vscale x 8 x i16> %01390}1391 1392define <vscale x 4 x i32> @test_svrevd_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1393; CHECK-LABEL: test_svrevd_nxv4i32_ptrue_u:1394; CHECK: // %bb.0: // %entry1395; CHECK-NEXT: ptrue p0.s1396; CHECK-NEXT: revd z0.q, p0/m, z1.q1397; CHECK-NEXT: ret1398;1399; CHECK-2p2-LABEL: test_svrevd_nxv4i32_ptrue_u:1400; CHECK-2p2: // %bb.0: // %entry1401; CHECK-2p2-NEXT: ptrue p0.s1402; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1403; CHECK-2p2-NEXT: ret1404entry:1405 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1406 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revd.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1407 ret <vscale x 4 x i32> %01408}1409 1410define <vscale x 4 x i32> @test_svrevd_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {1411; CHECK-LABEL: test_svrevd_nxv4i32_ptrue:1412; CHECK: // %bb.0: // %entry1413; CHECK-NEXT: mov z0.d, z1.d1414; CHECK-NEXT: ptrue p0.s1415; CHECK-NEXT: revd z0.q, p0/m, z2.q1416; CHECK-NEXT: ret1417;1418; CHECK-2p2-LABEL: test_svrevd_nxv4i32_ptrue:1419; CHECK-2p2: // %bb.0: // %entry1420; CHECK-2p2-NEXT: ptrue p0.s1421; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1422; CHECK-2p2-NEXT: ret1423entry:1424 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1425 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.revd.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1426 ret <vscale x 4 x i32> %01427}1428 1429define <vscale x 2 x i64> @test_svrevd_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1430; CHECK-LABEL: test_svrevd_nxv2i64_ptrue_u:1431; CHECK: // %bb.0: // %entry1432; CHECK-NEXT: ptrue p0.d1433; CHECK-NEXT: revd z0.q, p0/m, z1.q1434; CHECK-NEXT: ret1435;1436; CHECK-2p2-LABEL: test_svrevd_nxv2i64_ptrue_u:1437; CHECK-2p2: // %bb.0: // %entry1438; CHECK-2p2-NEXT: ptrue p0.d1439; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1440; CHECK-2p2-NEXT: ret1441entry:1442 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1443 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revd.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1444 ret <vscale x 2 x i64> %01445}1446 1447define <vscale x 2 x i64> @test_svrevd_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1448; CHECK-LABEL: test_svrevd_nxv2i64_ptrue:1449; CHECK: // %bb.0: // %entry1450; CHECK-NEXT: mov z0.d, z1.d1451; CHECK-NEXT: ptrue p0.d1452; CHECK-NEXT: revd z0.q, p0/m, z2.q1453; CHECK-NEXT: ret1454;1455; CHECK-2p2-LABEL: test_svrevd_nxv2i64_ptrue:1456; CHECK-2p2: // %bb.0: // %entry1457; CHECK-2p2-NEXT: ptrue p0.d1458; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1459; CHECK-2p2-NEXT: ret1460entry:1461 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1462 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.revd.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1463 ret <vscale x 2 x i64> %01464}1465 1466define <vscale x 8 x half> @test_svrevd_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {1467; CHECK-LABEL: test_svrevd_nxv8f16_ptrue_u:1468; CHECK: // %bb.0: // %entry1469; CHECK-NEXT: ptrue p0.h1470; CHECK-NEXT: revd z0.q, p0/m, z1.q1471; CHECK-NEXT: ret1472;1473; CHECK-2p2-LABEL: test_svrevd_nxv8f16_ptrue_u:1474; CHECK-2p2: // %bb.0: // %entry1475; CHECK-2p2-NEXT: ptrue p0.h1476; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1477; CHECK-2p2-NEXT: ret1478entry:1479 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1480 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.revd.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1481 ret <vscale x 8 x half> %01482}1483 1484define <vscale x 8 x half> @test_svrevd_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {1485; CHECK-LABEL: test_svrevd_nxv8f16_ptrue:1486; CHECK: // %bb.0: // %entry1487; CHECK-NEXT: mov z0.d, z1.d1488; CHECK-NEXT: ptrue p0.h1489; CHECK-NEXT: revd z0.q, p0/m, z2.q1490; CHECK-NEXT: ret1491;1492; CHECK-2p2-LABEL: test_svrevd_nxv8f16_ptrue:1493; CHECK-2p2: // %bb.0: // %entry1494; CHECK-2p2-NEXT: ptrue p0.h1495; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1496; CHECK-2p2-NEXT: ret1497entry:1498 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1499 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.revd.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)1500 ret <vscale x 8 x half> %01501}1502 1503define <vscale x 8 x bfloat> @test_svrevd_nxv8bf16_ptrue_u(double %z0, <vscale x 8 x bfloat> %x) {1504; CHECK-LABEL: test_svrevd_nxv8bf16_ptrue_u:1505; CHECK: // %bb.0: // %entry1506; CHECK-NEXT: ptrue p0.h1507; CHECK-NEXT: revd z0.q, p0/m, z1.q1508; CHECK-NEXT: ret1509;1510; CHECK-2p2-LABEL: test_svrevd_nxv8bf16_ptrue_u:1511; CHECK-2p2: // %bb.0: // %entry1512; CHECK-2p2-NEXT: ptrue p0.h1513; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1514; CHECK-2p2-NEXT: ret1515entry:1516 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1517 %0 = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.revd.nxv8bf16(<vscale x 8 x bfloat> poison, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %x)1518 ret <vscale x 8 x bfloat> %01519}1520 1521define <vscale x 8 x bfloat> @test_svrevd_nxv8bf16_ptrue(double %z0, <vscale x 8 x bfloat> %x, <vscale x 8 x bfloat> %y) {1522; CHECK-LABEL: test_svrevd_nxv8bf16_ptrue:1523; CHECK: // %bb.0: // %entry1524; CHECK-NEXT: mov z0.d, z1.d1525; CHECK-NEXT: ptrue p0.h1526; CHECK-NEXT: revd z0.q, p0/m, z2.q1527; CHECK-NEXT: ret1528;1529; CHECK-2p2-LABEL: test_svrevd_nxv8bf16_ptrue:1530; CHECK-2p2: // %bb.0: // %entry1531; CHECK-2p2-NEXT: ptrue p0.h1532; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1533; CHECK-2p2-NEXT: ret1534entry:1535 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1536 %0 = tail call <vscale x 8 x bfloat> @llvm.aarch64.sve.revd.nxv8bf16(<vscale x 8 x bfloat> %x, <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %y)1537 ret <vscale x 8 x bfloat> %01538}1539 1540define <vscale x 4 x float> @test_svrevd_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {1541; CHECK-LABEL: test_svrevd_nxv4f32_ptrue_u:1542; CHECK: // %bb.0: // %entry1543; CHECK-NEXT: ptrue p0.s1544; CHECK-NEXT: revd z0.q, p0/m, z1.q1545; CHECK-NEXT: ret1546;1547; CHECK-2p2-LABEL: test_svrevd_nxv4f32_ptrue_u:1548; CHECK-2p2: // %bb.0: // %entry1549; CHECK-2p2-NEXT: ptrue p0.s1550; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1551; CHECK-2p2-NEXT: ret1552entry:1553 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1554 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.revd.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1555 ret <vscale x 4 x float> %01556}1557 1558define <vscale x 4 x float> @test_svrevd_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {1559; CHECK-LABEL: test_svrevd_nxv4f32_ptrue:1560; CHECK: // %bb.0: // %entry1561; CHECK-NEXT: mov z0.d, z1.d1562; CHECK-NEXT: ptrue p0.s1563; CHECK-NEXT: revd z0.q, p0/m, z2.q1564; CHECK-NEXT: ret1565;1566; CHECK-2p2-LABEL: test_svrevd_nxv4f32_ptrue:1567; CHECK-2p2: // %bb.0: // %entry1568; CHECK-2p2-NEXT: ptrue p0.s1569; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1570; CHECK-2p2-NEXT: ret1571entry:1572 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1573 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.revd.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)1574 ret <vscale x 4 x float> %01575}1576 1577define <vscale x 2 x double> @test_svrevd_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {1578; CHECK-LABEL: test_svrevd_nxv2f64_ptrue_u:1579; CHECK: // %bb.0: // %entry1580; CHECK-NEXT: ptrue p0.d1581; CHECK-NEXT: revd z0.q, p0/m, z1.q1582; CHECK-NEXT: ret1583;1584; CHECK-2p2-LABEL: test_svrevd_nxv2f64_ptrue_u:1585; CHECK-2p2: // %bb.0: // %entry1586; CHECK-2p2-NEXT: ptrue p0.d1587; CHECK-2p2-NEXT: revd z0.q, p0/z, z1.q1588; CHECK-2p2-NEXT: ret1589entry:1590 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1591 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.revd.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1592 ret <vscale x 2 x double> %01593}1594 1595define <vscale x 2 x double> @test_svrevd_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {1596; CHECK-LABEL: test_svrevd_nxv2f64_ptrue:1597; CHECK: // %bb.0: // %entry1598; CHECK-NEXT: mov z0.d, z1.d1599; CHECK-NEXT: ptrue p0.d1600; CHECK-NEXT: revd z0.q, p0/m, z2.q1601; CHECK-NEXT: ret1602;1603; CHECK-2p2-LABEL: test_svrevd_nxv2f64_ptrue:1604; CHECK-2p2: // %bb.0: // %entry1605; CHECK-2p2-NEXT: ptrue p0.d1606; CHECK-2p2-NEXT: revd z0.q, p0/z, z2.q1607; CHECK-2p2-NEXT: ret1608entry:1609 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1610 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.revd.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)1611 ret <vscale x 2 x double> %01612}1613