brintos

brintos / llvm-project-archived public Read only

0
0
Text · 40.8 KiB · d56e5e9 Raw
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