1103 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 8 x i16> @test_svextb_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {13; CHECK-LABEL: test_svextb_s16_x_1:14; CHECK: // %bb.0: // %entry15; CHECK-NEXT: sxtb z0.h, p0/m, z0.h16; CHECK-NEXT: ret17;18; CHECK-2p2-LABEL: test_svextb_s16_x_1:19; CHECK-2p2: // %bb.0: // %entry20; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z0.h21; CHECK-2p2-NEXT: ret22entry:23 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)24 ret <vscale x 8 x i16> %025}26 27define <vscale x 8 x i16> @test_svextb_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {28; CHECK-LABEL: test_svextb_s16_x_2:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: movprfx z0, z131; CHECK-NEXT: sxtb z0.h, p0/m, z1.h32; CHECK-NEXT: ret33;34; CHECK-2p2-LABEL: test_svextb_s16_x_2:35; CHECK-2p2: // %bb.0: // %entry36; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z1.h37; CHECK-2p2-NEXT: ret38entry:39 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)40 ret <vscale x 8 x i16> %041}42 43define <vscale x 8 x i16> @test_svextb_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {44; SVE-LABEL: test_svextb_s16_z:45; SVE: // %bb.0: // %entry46; SVE-NEXT: movi v0.2d, #000000000000000047; SVE-NEXT: sxtb z0.h, p0/m, z1.h48; SVE-NEXT: ret49;50; CHECK-2p2-LABEL: test_svextb_s16_z:51; CHECK-2p2: // %bb.0: // %entry52; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z1.h53; CHECK-2p2-NEXT: ret54;55; STREAMING-SVE-LABEL: test_svextb_s16_z:56; STREAMING-SVE: // %bb.0: // %entry57; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x058; STREAMING-SVE-NEXT: sxtb z0.h, p0/m, z1.h59; STREAMING-SVE-NEXT: ret60entry:61 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)62 ret <vscale x 8 x i16> %063}64 65define <vscale x 4 x i32> @test_svextb_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {66; CHECK-LABEL: test_svextb_s32_x_1:67; CHECK: // %bb.0: // %entry68; CHECK-NEXT: sxtb z0.s, p0/m, z0.s69; CHECK-NEXT: ret70;71; CHECK-2p2-LABEL: test_svextb_s32_x_1:72; CHECK-2p2: // %bb.0: // %entry73; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z0.s74; CHECK-2p2-NEXT: ret75entry:76 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)77 ret <vscale x 4 x i32> %078}79 80define <vscale x 4 x i32> @test_svextb_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {81; CHECK-LABEL: test_svextb_s32_x_2:82; CHECK: // %bb.0: // %entry83; CHECK-NEXT: movprfx z0, z184; CHECK-NEXT: sxtb z0.s, p0/m, z1.s85; CHECK-NEXT: ret86;87; CHECK-2p2-LABEL: test_svextb_s32_x_2:88; CHECK-2p2: // %bb.0: // %entry89; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z1.s90; CHECK-2p2-NEXT: ret91entry:92 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)93 ret <vscale x 4 x i32> %094}95 96define <vscale x 4 x i32> @test_svextb_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {97; SVE-LABEL: test_svextb_s32_z:98; SVE: // %bb.0: // %entry99; SVE-NEXT: movi v0.2d, #0000000000000000100; SVE-NEXT: sxtb z0.s, p0/m, z1.s101; SVE-NEXT: ret102;103; CHECK-2p2-LABEL: test_svextb_s32_z:104; CHECK-2p2: // %bb.0: // %entry105; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z1.s106; CHECK-2p2-NEXT: ret107;108; STREAMING-SVE-LABEL: test_svextb_s32_z:109; STREAMING-SVE: // %bb.0: // %entry110; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0111; STREAMING-SVE-NEXT: sxtb z0.s, p0/m, z1.s112; STREAMING-SVE-NEXT: ret113entry:114 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)115 ret <vscale x 4 x i32> %0116}117 118define <vscale x 2 x i64> @test_svextb_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {119; CHECK-LABEL: test_svextb_s64_x_1:120; CHECK: // %bb.0: // %entry121; CHECK-NEXT: sxtb z0.d, p0/m, z0.d122; CHECK-NEXT: ret123;124; CHECK-2p2-LABEL: test_svextb_s64_x_1:125; CHECK-2p2: // %bb.0: // %entry126; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z0.d127; CHECK-2p2-NEXT: ret128entry:129 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)130 ret <vscale x 2 x i64> %0131}132 133define <vscale x 2 x i64> @test_svextb_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {134; CHECK-LABEL: test_svextb_s64_x_2:135; CHECK: // %bb.0: // %entry136; CHECK-NEXT: movprfx z0, z1137; CHECK-NEXT: sxtb z0.d, p0/m, z1.d138; CHECK-NEXT: ret139;140; CHECK-2p2-LABEL: test_svextb_s64_x_2:141; CHECK-2p2: // %bb.0: // %entry142; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z1.d143; CHECK-2p2-NEXT: ret144entry:145 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)146 ret <vscale x 2 x i64> %0147}148 149define <vscale x 2 x i64> @test_svextb_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {150; SVE-LABEL: test_svextb_s64_z:151; SVE: // %bb.0: // %entry152; SVE-NEXT: movi v0.2d, #0000000000000000153; SVE-NEXT: sxtb z0.d, p0/m, z1.d154; SVE-NEXT: ret155;156; CHECK-2p2-LABEL: test_svextb_s64_z:157; CHECK-2p2: // %bb.0: // %entry158; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z1.d159; CHECK-2p2-NEXT: ret160;161; STREAMING-SVE-LABEL: test_svextb_s64_z:162; STREAMING-SVE: // %bb.0: // %entry163; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0164; STREAMING-SVE-NEXT: sxtb z0.d, p0/m, z1.d165; STREAMING-SVE-NEXT: ret166entry:167 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)168 ret <vscale x 2 x i64> %0169}170 171define <vscale x 8 x i16> @test_svextb_u16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {172; CHECK-LABEL: test_svextb_u16_x_1:173; CHECK: // %bb.0: // %entry174; CHECK-NEXT: uxtb z0.h, p0/m, z0.h175; CHECK-NEXT: ret176;177; CHECK-2p2-LABEL: test_svextb_u16_x_1:178; CHECK-2p2: // %bb.0: // %entry179; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z0.h180; CHECK-2p2-NEXT: ret181entry:182 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)183 ret <vscale x 8 x i16> %0184}185 186define <vscale x 8 x i16> @test_svextb_u16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {187; CHECK-LABEL: test_svextb_u16_x_2:188; CHECK: // %bb.0: // %entry189; CHECK-NEXT: movprfx z0, z1190; CHECK-NEXT: uxtb z0.h, p0/m, z1.h191; CHECK-NEXT: ret192;193; CHECK-2p2-LABEL: test_svextb_u16_x_2:194; CHECK-2p2: // %bb.0: // %entry195; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z1.h196; CHECK-2p2-NEXT: ret197entry:198 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)199 ret <vscale x 8 x i16> %0200}201 202define <vscale x 8 x i16> @test_svextb_u16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {203; SVE-LABEL: test_svextb_u16_z:204; SVE: // %bb.0: // %entry205; SVE-NEXT: movi v0.2d, #0000000000000000206; SVE-NEXT: uxtb z0.h, p0/m, z1.h207; SVE-NEXT: ret208;209; CHECK-2p2-LABEL: test_svextb_u16_z:210; CHECK-2p2: // %bb.0: // %entry211; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z1.h212; CHECK-2p2-NEXT: ret213;214; STREAMING-SVE-LABEL: test_svextb_u16_z:215; STREAMING-SVE: // %bb.0: // %entry216; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0217; STREAMING-SVE-NEXT: uxtb z0.h, p0/m, z1.h218; STREAMING-SVE-NEXT: ret219entry:220 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)221 ret <vscale x 8 x i16> %0222}223 224define <vscale x 4 x i32> @test_svextb_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {225; CHECK-LABEL: test_svextb_u32_x_1:226; CHECK: // %bb.0: // %entry227; CHECK-NEXT: uxtb z0.s, p0/m, z0.s228; CHECK-NEXT: ret229;230; CHECK-2p2-LABEL: test_svextb_u32_x_1:231; CHECK-2p2: // %bb.0: // %entry232; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z0.s233; CHECK-2p2-NEXT: ret234entry:235 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)236 ret <vscale x 4 x i32> %0237}238 239define <vscale x 4 x i32> @test_svextb_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {240; CHECK-LABEL: test_svextb_u32_x_2:241; CHECK: // %bb.0: // %entry242; CHECK-NEXT: movprfx z0, z1243; CHECK-NEXT: uxtb z0.s, p0/m, z1.s244; CHECK-NEXT: ret245;246; CHECK-2p2-LABEL: test_svextb_u32_x_2:247; CHECK-2p2: // %bb.0: // %entry248; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z1.s249; CHECK-2p2-NEXT: ret250entry:251 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)252 ret <vscale x 4 x i32> %0253}254 255define <vscale x 4 x i32> @test_svextb_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {256; SVE-LABEL: test_svextb_u32_z:257; SVE: // %bb.0: // %entry258; SVE-NEXT: movi v0.2d, #0000000000000000259; SVE-NEXT: uxtb z0.s, p0/m, z1.s260; SVE-NEXT: ret261;262; CHECK-2p2-LABEL: test_svextb_u32_z:263; CHECK-2p2: // %bb.0: // %entry264; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z1.s265; CHECK-2p2-NEXT: ret266;267; STREAMING-SVE-LABEL: test_svextb_u32_z:268; STREAMING-SVE: // %bb.0: // %entry269; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0270; STREAMING-SVE-NEXT: uxtb z0.s, p0/m, z1.s271; STREAMING-SVE-NEXT: ret272entry:273 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)274 ret <vscale x 4 x i32> %0275}276 277define <vscale x 2 x i64> @test_svextb_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {278; CHECK-LABEL: test_svextb_u64_x_1:279; CHECK: // %bb.0: // %entry280; CHECK-NEXT: uxtb z0.d, p0/m, z0.d281; CHECK-NEXT: ret282;283; CHECK-2p2-LABEL: test_svextb_u64_x_1:284; CHECK-2p2: // %bb.0: // %entry285; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z0.d286; CHECK-2p2-NEXT: ret287entry:288 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)289 ret <vscale x 2 x i64> %0290}291 292define <vscale x 2 x i64> @test_svextb_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {293; CHECK-LABEL: test_svextb_u64_x_2:294; CHECK: // %bb.0: // %entry295; CHECK-NEXT: movprfx z0, z1296; CHECK-NEXT: uxtb z0.d, p0/m, z1.d297; CHECK-NEXT: ret298;299; CHECK-2p2-LABEL: test_svextb_u64_x_2:300; CHECK-2p2: // %bb.0: // %entry301; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z1.d302; CHECK-2p2-NEXT: ret303entry:304 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)305 ret <vscale x 2 x i64> %0306}307 308define <vscale x 2 x i64> @test_svextb_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {309; SVE-LABEL: test_svextb_u64_z:310; SVE: // %bb.0: // %entry311; SVE-NEXT: movi v0.2d, #0000000000000000312; SVE-NEXT: uxtb z0.d, p0/m, z1.d313; SVE-NEXT: ret314;315; CHECK-2p2-LABEL: test_svextb_u64_z:316; CHECK-2p2: // %bb.0: // %entry317; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z1.d318; CHECK-2p2-NEXT: ret319;320; STREAMING-SVE-LABEL: test_svextb_u64_z:321; STREAMING-SVE: // %bb.0: // %entry322; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0323; STREAMING-SVE-NEXT: uxtb z0.d, p0/m, z1.d324; STREAMING-SVE-NEXT: ret325entry:326 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)327 ret <vscale x 2 x i64> %0328}329 330define <vscale x 4 x i32> @test_svexth_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {331; CHECK-LABEL: test_svexth_s32_x_1:332; CHECK: // %bb.0: // %entry333; CHECK-NEXT: sxth z0.s, p0/m, z0.s334; CHECK-NEXT: ret335;336; CHECK-2p2-LABEL: test_svexth_s32_x_1:337; CHECK-2p2: // %bb.0: // %entry338; CHECK-2p2-NEXT: sxth z0.s, p0/z, z0.s339; CHECK-2p2-NEXT: ret340entry:341 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)342 ret <vscale x 4 x i32> %0343}344 345define <vscale x 4 x i32> @test_svexth_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {346; CHECK-LABEL: test_svexth_s32_x_2:347; CHECK: // %bb.0: // %entry348; CHECK-NEXT: movprfx z0, z1349; CHECK-NEXT: sxth z0.s, p0/m, z1.s350; CHECK-NEXT: ret351;352; CHECK-2p2-LABEL: test_svexth_s32_x_2:353; CHECK-2p2: // %bb.0: // %entry354; CHECK-2p2-NEXT: sxth z0.s, p0/z, z1.s355; CHECK-2p2-NEXT: ret356entry:357 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)358 ret <vscale x 4 x i32> %0359}360 361define <vscale x 4 x i32> @test_svexth_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {362; SVE-LABEL: test_svexth_s32_z:363; SVE: // %bb.0: // %entry364; SVE-NEXT: movi v0.2d, #0000000000000000365; SVE-NEXT: sxth z0.s, p0/m, z1.s366; SVE-NEXT: ret367;368; CHECK-2p2-LABEL: test_svexth_s32_z:369; CHECK-2p2: // %bb.0: // %entry370; CHECK-2p2-NEXT: sxth z0.s, p0/z, z1.s371; CHECK-2p2-NEXT: ret372;373; STREAMING-SVE-LABEL: test_svexth_s32_z:374; STREAMING-SVE: // %bb.0: // %entry375; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0376; STREAMING-SVE-NEXT: sxth z0.s, p0/m, z1.s377; STREAMING-SVE-NEXT: ret378entry:379 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)380 ret <vscale x 4 x i32> %0381}382 383define <vscale x 2 x i64> @test_svexth_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {384; CHECK-LABEL: test_svexth_s64_x_1:385; CHECK: // %bb.0: // %entry386; CHECK-NEXT: sxth z0.d, p0/m, z0.d387; CHECK-NEXT: ret388;389; CHECK-2p2-LABEL: test_svexth_s64_x_1:390; CHECK-2p2: // %bb.0: // %entry391; CHECK-2p2-NEXT: sxth z0.d, p0/z, z0.d392; CHECK-2p2-NEXT: ret393entry:394 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)395 ret <vscale x 2 x i64> %0396}397 398define <vscale x 2 x i64> @test_svexth_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {399; CHECK-LABEL: test_svexth_s64_x_2:400; CHECK: // %bb.0: // %entry401; CHECK-NEXT: movprfx z0, z1402; CHECK-NEXT: sxth z0.d, p0/m, z1.d403; CHECK-NEXT: ret404;405; CHECK-2p2-LABEL: test_svexth_s64_x_2:406; CHECK-2p2: // %bb.0: // %entry407; CHECK-2p2-NEXT: sxth z0.d, p0/z, z1.d408; CHECK-2p2-NEXT: ret409entry:410 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)411 ret <vscale x 2 x i64> %0412}413 414define <vscale x 2 x i64> @test_svexth_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {415; SVE-LABEL: test_svexth_s64_z:416; SVE: // %bb.0: // %entry417; SVE-NEXT: movi v0.2d, #0000000000000000418; SVE-NEXT: sxth z0.d, p0/m, z1.d419; SVE-NEXT: ret420;421; CHECK-2p2-LABEL: test_svexth_s64_z:422; CHECK-2p2: // %bb.0: // %entry423; CHECK-2p2-NEXT: sxth z0.d, p0/z, z1.d424; CHECK-2p2-NEXT: ret425;426; STREAMING-SVE-LABEL: test_svexth_s64_z:427; STREAMING-SVE: // %bb.0: // %entry428; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0429; STREAMING-SVE-NEXT: sxth z0.d, p0/m, z1.d430; STREAMING-SVE-NEXT: ret431entry:432 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)433 ret <vscale x 2 x i64> %0434}435 436define <vscale x 4 x i32> @test_svexth_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {437; CHECK-LABEL: test_svexth_u32_x_1:438; CHECK: // %bb.0: // %entry439; CHECK-NEXT: uxth z0.s, p0/m, z0.s440; CHECK-NEXT: ret441;442; CHECK-2p2-LABEL: test_svexth_u32_x_1:443; CHECK-2p2: // %bb.0: // %entry444; CHECK-2p2-NEXT: uxth z0.s, p0/z, z0.s445; CHECK-2p2-NEXT: ret446entry:447 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)448 ret <vscale x 4 x i32> %0449}450 451define <vscale x 4 x i32> @test_svexth_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {452; CHECK-LABEL: test_svexth_u32_x_2:453; CHECK: // %bb.0: // %entry454; CHECK-NEXT: movprfx z0, z1455; CHECK-NEXT: uxth z0.s, p0/m, z1.s456; CHECK-NEXT: ret457;458; CHECK-2p2-LABEL: test_svexth_u32_x_2:459; CHECK-2p2: // %bb.0: // %entry460; CHECK-2p2-NEXT: uxth z0.s, p0/z, z1.s461; CHECK-2p2-NEXT: ret462entry:463 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)464 ret <vscale x 4 x i32> %0465}466 467define <vscale x 4 x i32> @test_svexth_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {468; SVE-LABEL: test_svexth_u32_z:469; SVE: // %bb.0: // %entry470; SVE-NEXT: movi v0.2d, #0000000000000000471; SVE-NEXT: uxth z0.s, p0/m, z1.s472; SVE-NEXT: ret473;474; CHECK-2p2-LABEL: test_svexth_u32_z:475; CHECK-2p2: // %bb.0: // %entry476; CHECK-2p2-NEXT: uxth z0.s, p0/z, z1.s477; CHECK-2p2-NEXT: ret478;479; STREAMING-SVE-LABEL: test_svexth_u32_z:480; STREAMING-SVE: // %bb.0: // %entry481; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0482; STREAMING-SVE-NEXT: uxth z0.s, p0/m, z1.s483; STREAMING-SVE-NEXT: ret484entry:485 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)486 ret <vscale x 4 x i32> %0487}488 489define <vscale x 2 x i64> @test_svexth_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {490; CHECK-LABEL: test_svexth_u64_x_1:491; CHECK: // %bb.0: // %entry492; CHECK-NEXT: uxth z0.d, p0/m, z0.d493; CHECK-NEXT: ret494;495; CHECK-2p2-LABEL: test_svexth_u64_x_1:496; CHECK-2p2: // %bb.0: // %entry497; CHECK-2p2-NEXT: uxth z0.d, p0/z, z0.d498; CHECK-2p2-NEXT: ret499entry:500 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)501 ret <vscale x 2 x i64> %0502}503 504define <vscale x 2 x i64> @test_svexth_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {505; CHECK-LABEL: test_svexth_u64_x_2:506; CHECK: // %bb.0: // %entry507; CHECK-NEXT: movprfx z0, z1508; CHECK-NEXT: uxth z0.d, p0/m, z1.d509; CHECK-NEXT: ret510;511; CHECK-2p2-LABEL: test_svexth_u64_x_2:512; CHECK-2p2: // %bb.0: // %entry513; CHECK-2p2-NEXT: uxth z0.d, p0/z, z1.d514; CHECK-2p2-NEXT: ret515entry:516 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)517 ret <vscale x 2 x i64> %0518}519 520define <vscale x 2 x i64> @test_svexth_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {521; SVE-LABEL: test_svexth_u64_z:522; SVE: // %bb.0: // %entry523; SVE-NEXT: movi v0.2d, #0000000000000000524; SVE-NEXT: uxth z0.d, p0/m, z1.d525; SVE-NEXT: ret526;527; CHECK-2p2-LABEL: test_svexth_u64_z:528; CHECK-2p2: // %bb.0: // %entry529; CHECK-2p2-NEXT: uxth z0.d, p0/z, z1.d530; CHECK-2p2-NEXT: ret531;532; STREAMING-SVE-LABEL: test_svexth_u64_z:533; STREAMING-SVE: // %bb.0: // %entry534; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0535; STREAMING-SVE-NEXT: uxth z0.d, p0/m, z1.d536; STREAMING-SVE-NEXT: ret537entry:538 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)539 ret <vscale x 2 x i64> %0540}541 542define <vscale x 2 x i64> @test_svextw_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {543; CHECK-LABEL: test_svextw_s64_x_1:544; CHECK: // %bb.0: // %entry545; CHECK-NEXT: sxtw z0.d, p0/m, z0.d546; CHECK-NEXT: ret547;548; CHECK-2p2-LABEL: test_svextw_s64_x_1:549; CHECK-2p2: // %bb.0: // %entry550; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z0.d551; CHECK-2p2-NEXT: ret552entry:553 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)554 ret <vscale x 2 x i64> %0555}556 557define <vscale x 2 x i64> @test_svextw_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {558; CHECK-LABEL: test_svextw_s64_x_2:559; CHECK: // %bb.0: // %entry560; CHECK-NEXT: movprfx z0, z1561; CHECK-NEXT: sxtw z0.d, p0/m, z1.d562; CHECK-NEXT: ret563;564; CHECK-2p2-LABEL: test_svextw_s64_x_2:565; CHECK-2p2: // %bb.0: // %entry566; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z1.d567; CHECK-2p2-NEXT: ret568entry:569 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)570 ret <vscale x 2 x i64> %0571}572 573define <vscale x 2 x i64> @test_svextw_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {574; SVE-LABEL: test_svextw_s64_z:575; SVE: // %bb.0: // %entry576; SVE-NEXT: movi v0.2d, #0000000000000000577; SVE-NEXT: sxtw z0.d, p0/m, z1.d578; SVE-NEXT: ret579;580; CHECK-2p2-LABEL: test_svextw_s64_z:581; CHECK-2p2: // %bb.0: // %entry582; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z1.d583; CHECK-2p2-NEXT: ret584;585; STREAMING-SVE-LABEL: test_svextw_s64_z:586; STREAMING-SVE: // %bb.0: // %entry587; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0588; STREAMING-SVE-NEXT: sxtw z0.d, p0/m, z1.d589; STREAMING-SVE-NEXT: ret590entry:591 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)592 ret <vscale x 2 x i64> %0593}594 595define <vscale x 2 x i64> @test_svextw_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {596; CHECK-LABEL: test_svextw_u64_x_1:597; CHECK: // %bb.0: // %entry598; CHECK-NEXT: uxtw z0.d, p0/m, z0.d599; CHECK-NEXT: ret600;601; CHECK-2p2-LABEL: test_svextw_u64_x_1:602; CHECK-2p2: // %bb.0: // %entry603; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z0.d604; CHECK-2p2-NEXT: ret605entry:606 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)607 ret <vscale x 2 x i64> %0608}609 610define <vscale x 2 x i64> @test_svextw_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {611; CHECK-LABEL: test_svextw_u64_x_2:612; CHECK: // %bb.0: // %entry613; CHECK-NEXT: movprfx z0, z1614; CHECK-NEXT: uxtw z0.d, p0/m, z1.d615; CHECK-NEXT: ret616;617; CHECK-2p2-LABEL: test_svextw_u64_x_2:618; CHECK-2p2: // %bb.0: // %entry619; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z1.d620; CHECK-2p2-NEXT: ret621entry:622 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)623 ret <vscale x 2 x i64> %0624}625 626define <vscale x 2 x i64> @test_svextw_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {627; SVE-LABEL: test_svextw_u64_z:628; SVE: // %bb.0: // %entry629; SVE-NEXT: movi v0.2d, #0000000000000000630; SVE-NEXT: uxtw z0.d, p0/m, z1.d631; SVE-NEXT: ret632;633; CHECK-2p2-LABEL: test_svextw_u64_z:634; CHECK-2p2: // %bb.0: // %entry635; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z1.d636; CHECK-2p2-NEXT: ret637;638; STREAMING-SVE-LABEL: test_svextw_u64_z:639; STREAMING-SVE: // %bb.0: // %entry640; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0641; STREAMING-SVE-NEXT: uxtw z0.d, p0/m, z1.d642; STREAMING-SVE-NEXT: ret643entry:644 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)645 ret <vscale x 2 x i64> %0646}647 648define <vscale x 8 x i16> @test_svsxtb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {649; CHECK-LABEL: test_svsxtb_nxv8i16_ptrue_u:650; CHECK: // %bb.0: // %entry651; CHECK-NEXT: ptrue p0.h652; CHECK-NEXT: movprfx z0, z1653; CHECK-NEXT: sxtb z0.h, p0/m, z1.h654; CHECK-NEXT: ret655;656; CHECK-2p2-LABEL: test_svsxtb_nxv8i16_ptrue_u:657; CHECK-2p2: // %bb.0: // %entry658; CHECK-2p2-NEXT: ptrue p0.h659; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z1.h660; CHECK-2p2-NEXT: ret661entry:662 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)663 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)664 ret <vscale x 8 x i16> %0665}666 667define <vscale x 8 x i16> @test_svsxtb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {668; CHECK-LABEL: test_svsxtb_nxv8i16_ptrue:669; CHECK: // %bb.0: // %entry670; CHECK-NEXT: ptrue p0.h671; CHECK-NEXT: movprfx z0, z2672; CHECK-NEXT: sxtb z0.h, p0/m, z2.h673; CHECK-NEXT: ret674;675; CHECK-2p2-LABEL: test_svsxtb_nxv8i16_ptrue:676; CHECK-2p2: // %bb.0: // %entry677; CHECK-2p2-NEXT: ptrue p0.h678; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z2.h679; CHECK-2p2-NEXT: ret680entry:681 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)682 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)683 ret <vscale x 8 x i16> %0684}685 686define <vscale x 4 x i32> @test_svsxtb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {687; CHECK-LABEL: test_svsxtb_nxv4i32_ptrue_u:688; CHECK: // %bb.0: // %entry689; CHECK-NEXT: ptrue p0.s690; CHECK-NEXT: movprfx z0, z1691; CHECK-NEXT: sxtb z0.s, p0/m, z1.s692; CHECK-NEXT: ret693;694; CHECK-2p2-LABEL: test_svsxtb_nxv4i32_ptrue_u:695; CHECK-2p2: // %bb.0: // %entry696; CHECK-2p2-NEXT: ptrue p0.s697; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z1.s698; CHECK-2p2-NEXT: ret699entry:700 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)701 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)702 ret <vscale x 4 x i32> %0703}704 705define <vscale x 4 x i32> @test_svsxtb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {706; CHECK-LABEL: test_svsxtb_nxv4i32_ptrue:707; CHECK: // %bb.0: // %entry708; CHECK-NEXT: ptrue p0.s709; CHECK-NEXT: movprfx z0, z2710; CHECK-NEXT: sxtb z0.s, p0/m, z2.s711; CHECK-NEXT: ret712;713; CHECK-2p2-LABEL: test_svsxtb_nxv4i32_ptrue:714; CHECK-2p2: // %bb.0: // %entry715; CHECK-2p2-NEXT: ptrue p0.s716; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z2.s717; CHECK-2p2-NEXT: ret718entry:719 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)720 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)721 ret <vscale x 4 x i32> %0722}723 724define <vscale x 2 x i64> @test_svsxtb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {725; CHECK-LABEL: test_svsxtb_nxv2i64_ptrue_u:726; CHECK: // %bb.0: // %entry727; CHECK-NEXT: ptrue p0.d728; CHECK-NEXT: movprfx z0, z1729; CHECK-NEXT: sxtb z0.d, p0/m, z1.d730; CHECK-NEXT: ret731;732; CHECK-2p2-LABEL: test_svsxtb_nxv2i64_ptrue_u:733; CHECK-2p2: // %bb.0: // %entry734; CHECK-2p2-NEXT: ptrue p0.d735; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z1.d736; CHECK-2p2-NEXT: ret737entry:738 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)739 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)740 ret <vscale x 2 x i64> %0741}742 743define <vscale x 2 x i64> @test_svsxtb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {744; CHECK-LABEL: test_svsxtb_nxv2i64_ptrue:745; CHECK: // %bb.0: // %entry746; CHECK-NEXT: ptrue p0.d747; CHECK-NEXT: movprfx z0, z2748; CHECK-NEXT: sxtb z0.d, p0/m, z2.d749; CHECK-NEXT: ret750;751; CHECK-2p2-LABEL: test_svsxtb_nxv2i64_ptrue:752; CHECK-2p2: // %bb.0: // %entry753; CHECK-2p2-NEXT: ptrue p0.d754; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z2.d755; CHECK-2p2-NEXT: ret756entry:757 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)758 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)759 ret <vscale x 2 x i64> %0760}761 762define <vscale x 8 x i16> @test_svuxtb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {763; CHECK-LABEL: test_svuxtb_nxv8i16_ptrue_u:764; CHECK: // %bb.0: // %entry765; CHECK-NEXT: ptrue p0.h766; CHECK-NEXT: movprfx z0, z1767; CHECK-NEXT: uxtb z0.h, p0/m, z1.h768; CHECK-NEXT: ret769;770; CHECK-2p2-LABEL: test_svuxtb_nxv8i16_ptrue_u:771; CHECK-2p2: // %bb.0: // %entry772; CHECK-2p2-NEXT: ptrue p0.h773; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z1.h774; CHECK-2p2-NEXT: ret775entry:776 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)777 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)778 ret <vscale x 8 x i16> %0779}780 781define <vscale x 8 x i16> @test_svuxtb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {782; CHECK-LABEL: test_svuxtb_nxv8i16_ptrue:783; CHECK: // %bb.0: // %entry784; CHECK-NEXT: ptrue p0.h785; CHECK-NEXT: movprfx z0, z2786; CHECK-NEXT: uxtb z0.h, p0/m, z2.h787; CHECK-NEXT: ret788;789; CHECK-2p2-LABEL: test_svuxtb_nxv8i16_ptrue:790; CHECK-2p2: // %bb.0: // %entry791; CHECK-2p2-NEXT: ptrue p0.h792; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z2.h793; CHECK-2p2-NEXT: ret794entry:795 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)796 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)797 ret <vscale x 8 x i16> %0798}799 800define <vscale x 4 x i32> @test_svuxtb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {801; CHECK-LABEL: test_svuxtb_nxv4i32_ptrue_u:802; CHECK: // %bb.0: // %entry803; CHECK-NEXT: ptrue p0.s804; CHECK-NEXT: movprfx z0, z1805; CHECK-NEXT: uxtb z0.s, p0/m, z1.s806; CHECK-NEXT: ret807;808; CHECK-2p2-LABEL: test_svuxtb_nxv4i32_ptrue_u:809; CHECK-2p2: // %bb.0: // %entry810; CHECK-2p2-NEXT: ptrue p0.s811; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z1.s812; CHECK-2p2-NEXT: ret813entry:814 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)815 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)816 ret <vscale x 4 x i32> %0817}818 819define <vscale x 4 x i32> @test_svuxtb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {820; CHECK-LABEL: test_svuxtb_nxv4i32_ptrue:821; CHECK: // %bb.0: // %entry822; CHECK-NEXT: ptrue p0.s823; CHECK-NEXT: movprfx z0, z2824; CHECK-NEXT: uxtb z0.s, p0/m, z2.s825; CHECK-NEXT: ret826;827; CHECK-2p2-LABEL: test_svuxtb_nxv4i32_ptrue:828; CHECK-2p2: // %bb.0: // %entry829; CHECK-2p2-NEXT: ptrue p0.s830; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z2.s831; CHECK-2p2-NEXT: ret832entry:833 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)834 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)835 ret <vscale x 4 x i32> %0836}837 838define <vscale x 2 x i64> @test_svuxtb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {839; CHECK-LABEL: test_svuxtb_nxv2i64_ptrue_u:840; CHECK: // %bb.0: // %entry841; CHECK-NEXT: ptrue p0.d842; CHECK-NEXT: movprfx z0, z1843; CHECK-NEXT: uxtb z0.d, p0/m, z1.d844; CHECK-NEXT: ret845;846; CHECK-2p2-LABEL: test_svuxtb_nxv2i64_ptrue_u:847; CHECK-2p2: // %bb.0: // %entry848; CHECK-2p2-NEXT: ptrue p0.d849; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z1.d850; CHECK-2p2-NEXT: ret851entry:852 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)853 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)854 ret <vscale x 2 x i64> %0855}856 857define <vscale x 2 x i64> @test_svuxtb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {858; CHECK-LABEL: test_svuxtb_nxv2i64_ptrue:859; CHECK: // %bb.0: // %entry860; CHECK-NEXT: ptrue p0.d861; CHECK-NEXT: movprfx z0, z2862; CHECK-NEXT: uxtb z0.d, p0/m, z2.d863; CHECK-NEXT: ret864;865; CHECK-2p2-LABEL: test_svuxtb_nxv2i64_ptrue:866; CHECK-2p2: // %bb.0: // %entry867; CHECK-2p2-NEXT: ptrue p0.d868; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z2.d869; CHECK-2p2-NEXT: ret870entry:871 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)872 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)873 ret <vscale x 2 x i64> %0874}875 876define <vscale x 4 x i32> @test_svsxth_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {877; CHECK-LABEL: test_svsxth_nxv4i32_ptrue_u:878; CHECK: // %bb.0: // %entry879; CHECK-NEXT: ptrue p0.s880; CHECK-NEXT: movprfx z0, z1881; CHECK-NEXT: sxth z0.s, p0/m, z1.s882; CHECK-NEXT: ret883;884; CHECK-2p2-LABEL: test_svsxth_nxv4i32_ptrue_u:885; CHECK-2p2: // %bb.0: // %entry886; CHECK-2p2-NEXT: ptrue p0.s887; CHECK-2p2-NEXT: sxth z0.s, p0/z, z1.s888; CHECK-2p2-NEXT: ret889entry:890 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)891 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)892 ret <vscale x 4 x i32> %0893}894 895define <vscale x 4 x i32> @test_svsxth_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {896; CHECK-LABEL: test_svsxth_nxv4i32_ptrue:897; CHECK: // %bb.0: // %entry898; CHECK-NEXT: ptrue p0.s899; CHECK-NEXT: movprfx z0, z2900; CHECK-NEXT: sxth z0.s, p0/m, z2.s901; CHECK-NEXT: ret902;903; CHECK-2p2-LABEL: test_svsxth_nxv4i32_ptrue:904; CHECK-2p2: // %bb.0: // %entry905; CHECK-2p2-NEXT: ptrue p0.s906; CHECK-2p2-NEXT: sxth z0.s, p0/z, z2.s907; CHECK-2p2-NEXT: ret908entry:909 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)910 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)911 ret <vscale x 4 x i32> %0912}913 914define <vscale x 2 x i64> @test_svsxth_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {915; CHECK-LABEL: test_svsxth_nxv2i64_ptrue_u:916; CHECK: // %bb.0: // %entry917; CHECK-NEXT: ptrue p0.d918; CHECK-NEXT: movprfx z0, z1919; CHECK-NEXT: sxth z0.d, p0/m, z1.d920; CHECK-NEXT: ret921;922; CHECK-2p2-LABEL: test_svsxth_nxv2i64_ptrue_u:923; CHECK-2p2: // %bb.0: // %entry924; CHECK-2p2-NEXT: ptrue p0.d925; CHECK-2p2-NEXT: sxth z0.d, p0/z, z1.d926; CHECK-2p2-NEXT: ret927entry:928 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)929 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)930 ret <vscale x 2 x i64> %0931}932 933define <vscale x 2 x i64> @test_svsxth_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {934; CHECK-LABEL: test_svsxth_nxv2i64_ptrue:935; CHECK: // %bb.0: // %entry936; CHECK-NEXT: ptrue p0.d937; CHECK-NEXT: movprfx z0, z2938; CHECK-NEXT: sxth z0.d, p0/m, z2.d939; CHECK-NEXT: ret940;941; CHECK-2p2-LABEL: test_svsxth_nxv2i64_ptrue:942; CHECK-2p2: // %bb.0: // %entry943; CHECK-2p2-NEXT: ptrue p0.d944; CHECK-2p2-NEXT: sxth z0.d, p0/z, z2.d945; CHECK-2p2-NEXT: ret946entry:947 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)948 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)949 ret <vscale x 2 x i64> %0950}951 952define <vscale x 4 x i32> @test_svuxth_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {953; CHECK-LABEL: test_svuxth_nxv4i32_ptrue_u:954; CHECK: // %bb.0: // %entry955; CHECK-NEXT: ptrue p0.s956; CHECK-NEXT: movprfx z0, z1957; CHECK-NEXT: uxth z0.s, p0/m, z1.s958; CHECK-NEXT: ret959;960; CHECK-2p2-LABEL: test_svuxth_nxv4i32_ptrue_u:961; CHECK-2p2: // %bb.0: // %entry962; CHECK-2p2-NEXT: ptrue p0.s963; CHECK-2p2-NEXT: uxth z0.s, p0/z, z1.s964; CHECK-2p2-NEXT: ret965entry:966 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)967 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)968 ret <vscale x 4 x i32> %0969}970 971define <vscale x 4 x i32> @test_svuxth_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {972; CHECK-LABEL: test_svuxth_nxv4i32_ptrue:973; CHECK: // %bb.0: // %entry974; CHECK-NEXT: ptrue p0.s975; CHECK-NEXT: movprfx z0, z2976; CHECK-NEXT: uxth z0.s, p0/m, z2.s977; CHECK-NEXT: ret978;979; CHECK-2p2-LABEL: test_svuxth_nxv4i32_ptrue:980; CHECK-2p2: // %bb.0: // %entry981; CHECK-2p2-NEXT: ptrue p0.s982; CHECK-2p2-NEXT: uxth z0.s, p0/z, z2.s983; CHECK-2p2-NEXT: ret984entry:985 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)986 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)987 ret <vscale x 4 x i32> %0988}989 990define <vscale x 2 x i64> @test_svuxth_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {991; CHECK-LABEL: test_svuxth_nxv2i64_ptrue_u:992; CHECK: // %bb.0: // %entry993; CHECK-NEXT: ptrue p0.d994; CHECK-NEXT: movprfx z0, z1995; CHECK-NEXT: uxth z0.d, p0/m, z1.d996; CHECK-NEXT: ret997;998; CHECK-2p2-LABEL: test_svuxth_nxv2i64_ptrue_u:999; CHECK-2p2: // %bb.0: // %entry1000; CHECK-2p2-NEXT: ptrue p0.d1001; CHECK-2p2-NEXT: uxth z0.d, p0/z, z1.d1002; CHECK-2p2-NEXT: ret1003entry:1004 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1005 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1006 ret <vscale x 2 x i64> %01007}1008 1009define <vscale x 2 x i64> @test_svuxth_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1010; CHECK-LABEL: test_svuxth_nxv2i64_ptrue:1011; CHECK: // %bb.0: // %entry1012; CHECK-NEXT: ptrue p0.d1013; CHECK-NEXT: movprfx z0, z21014; CHECK-NEXT: uxth z0.d, p0/m, z2.d1015; CHECK-NEXT: ret1016;1017; CHECK-2p2-LABEL: test_svuxth_nxv2i64_ptrue:1018; CHECK-2p2: // %bb.0: // %entry1019; CHECK-2p2-NEXT: ptrue p0.d1020; CHECK-2p2-NEXT: uxth z0.d, p0/z, z2.d1021; CHECK-2p2-NEXT: ret1022entry:1023 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1024 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1025 ret <vscale x 2 x i64> %01026}1027 1028define <vscale x 2 x i64> @test_svsxtw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1029; CHECK-LABEL: test_svsxtw_nxv2i64_ptrue_u:1030; CHECK: // %bb.0: // %entry1031; CHECK-NEXT: ptrue p0.d1032; CHECK-NEXT: movprfx z0, z11033; CHECK-NEXT: sxtw z0.d, p0/m, z1.d1034; CHECK-NEXT: ret1035;1036; CHECK-2p2-LABEL: test_svsxtw_nxv2i64_ptrue_u:1037; CHECK-2p2: // %bb.0: // %entry1038; CHECK-2p2-NEXT: ptrue p0.d1039; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z1.d1040; CHECK-2p2-NEXT: ret1041entry:1042 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1043 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1044 ret <vscale x 2 x i64> %01045}1046 1047define <vscale x 2 x i64> @test_svsxtw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1048; CHECK-LABEL: test_svsxtw_nxv2i64_ptrue:1049; CHECK: // %bb.0: // %entry1050; CHECK-NEXT: ptrue p0.d1051; CHECK-NEXT: movprfx z0, z21052; CHECK-NEXT: sxtw z0.d, p0/m, z2.d1053; CHECK-NEXT: ret1054;1055; CHECK-2p2-LABEL: test_svsxtw_nxv2i64_ptrue:1056; CHECK-2p2: // %bb.0: // %entry1057; CHECK-2p2-NEXT: ptrue p0.d1058; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z2.d1059; CHECK-2p2-NEXT: ret1060entry:1061 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1062 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1063 ret <vscale x 2 x i64> %01064}1065 1066define <vscale x 2 x i64> @test_svuxtw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1067; CHECK-LABEL: test_svuxtw_nxv2i64_ptrue_u:1068; CHECK: // %bb.0: // %entry1069; CHECK-NEXT: ptrue p0.d1070; CHECK-NEXT: movprfx z0, z11071; CHECK-NEXT: uxtw z0.d, p0/m, z1.d1072; CHECK-NEXT: ret1073;1074; CHECK-2p2-LABEL: test_svuxtw_nxv2i64_ptrue_u:1075; CHECK-2p2: // %bb.0: // %entry1076; CHECK-2p2-NEXT: ptrue p0.d1077; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z1.d1078; CHECK-2p2-NEXT: ret1079entry:1080 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1081 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1082 ret <vscale x 2 x i64> %01083}1084 1085define <vscale x 2 x i64> @test_svuxtw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {1086; CHECK-LABEL: test_svuxtw_nxv2i64_ptrue:1087; CHECK: // %bb.0: // %entry1088; CHECK-NEXT: ptrue p0.d1089; CHECK-NEXT: movprfx z0, z21090; CHECK-NEXT: uxtw z0.d, p0/m, z2.d1091; CHECK-NEXT: ret1092;1093; CHECK-2p2-LABEL: test_svuxtw_nxv2i64_ptrue:1094; CHECK-2p2: // %bb.0: // %entry1095; CHECK-2p2-NEXT: ptrue p0.d1096; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z2.d1097; CHECK-2p2-NEXT: ret1098entry:1099 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1100 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1101 ret <vscale x 2 x i64> %01102}1103