brintos

brintos / llvm-project-archived public Read only

0
0
Text · 187.6 KiB · 9c8f48d Raw
4983 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 half> @test_svrinta_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {13; CHECK-LABEL: test_svrinta_f16_x_1:14; CHECK:       // %bb.0: // %entry15; CHECK-NEXT:    frinta z0.h, p0/m, z0.h16; CHECK-NEXT:    ret17;18; CHECK-2p2-LABEL: test_svrinta_f16_x_1:19; CHECK-2p2:       // %bb.0: // %entry20; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z0.h21; CHECK-2p2-NEXT:    ret22entry:23  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)24  ret <vscale x 8 x half> %025}26 27define <vscale x 8 x half> @test_svrinta_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {28; CHECK-LABEL: test_svrinta_f16_x_2:29; CHECK:       // %bb.0: // %entry30; CHECK-NEXT:    movprfx z0, z131; CHECK-NEXT:    frinta z0.h, p0/m, z1.h32; CHECK-NEXT:    ret33;34; CHECK-2p2-LABEL: test_svrinta_f16_x_2:35; CHECK-2p2:       // %bb.0: // %entry36; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h37; CHECK-2p2-NEXT:    ret38entry:39  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)40  ret <vscale x 8 x half> %041}42 43define <vscale x 8 x half> @test_svrinta_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {44; SVE-LABEL: test_svrinta_f16_z:45; SVE:       // %bb.0: // %entry46; SVE-NEXT:    movi v0.2d, #000000000000000047; SVE-NEXT:    frinta z0.h, p0/m, z1.h48; SVE-NEXT:    ret49;50; CHECK-2p2-LABEL: test_svrinta_f16_z:51; CHECK-2p2:       // %bb.0: // %entry52; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h53; CHECK-2p2-NEXT:    ret54;55; STREAMING-SVE-LABEL: test_svrinta_f16_z:56; STREAMING-SVE:       // %bb.0: // %entry57; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x058; STREAMING-SVE-NEXT:    frinta z0.h, p0/m, z1.h59; STREAMING-SVE-NEXT:    ret60entry:61  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)62  ret <vscale x 8 x half> %063}64 65define <vscale x 4 x half> @test_svrinta_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {66; CHECK-LABEL: test_svrinta_4f16_x_1:67; CHECK:       // %bb.0: // %entry68; CHECK-NEXT:    frinta z0.h, p0/m, z0.h69; CHECK-NEXT:    ret70;71; CHECK-2p2-LABEL: test_svrinta_4f16_x_1:72; CHECK-2p2:       // %bb.0: // %entry73; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z0.h74; CHECK-2p2-NEXT:    ret75entry:76  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)77  ret <vscale x 4 x half> %078}79 80define <vscale x 4 x half> @test_svrinta_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {81; CHECK-LABEL: test_svrinta_4f16_x_2:82; CHECK:       // %bb.0: // %entry83; CHECK-NEXT:    movprfx z0, z184; CHECK-NEXT:    frinta z0.h, p0/m, z1.h85; CHECK-NEXT:    ret86;87; CHECK-2p2-LABEL: test_svrinta_4f16_x_2:88; CHECK-2p2:       // %bb.0: // %entry89; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h90; CHECK-2p2-NEXT:    ret91entry:92  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)93  ret <vscale x 4 x half> %094}95 96define <vscale x 4 x half> @test_svrinta_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {97; SVE-LABEL: test_svrinta_4f16_z:98; SVE:       // %bb.0: // %entry99; SVE-NEXT:    movi v0.2d, #0000000000000000100; SVE-NEXT:    frinta z0.h, p0/m, z1.h101; SVE-NEXT:    ret102;103; CHECK-2p2-LABEL: test_svrinta_4f16_z:104; CHECK-2p2:       // %bb.0: // %entry105; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h106; CHECK-2p2-NEXT:    ret107;108; STREAMING-SVE-LABEL: test_svrinta_4f16_z:109; STREAMING-SVE:       // %bb.0: // %entry110; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0111; STREAMING-SVE-NEXT:    frinta z0.h, p0/m, z1.h112; STREAMING-SVE-NEXT:    ret113entry:114  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)115  ret <vscale x 4 x half> %0116}117 118define <vscale x 2 x half> @test_svrinta_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {119; CHECK-LABEL: test_svrinta_2f16_x_1:120; CHECK:       // %bb.0: // %entry121; CHECK-NEXT:    frinta z0.h, p0/m, z0.h122; CHECK-NEXT:    ret123;124; CHECK-2p2-LABEL: test_svrinta_2f16_x_1:125; CHECK-2p2:       // %bb.0: // %entry126; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z0.h127; CHECK-2p2-NEXT:    ret128entry:129  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)130  ret <vscale x 2 x half> %0131}132 133define <vscale x 2 x half> @test_svrinta_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {134; CHECK-LABEL: test_svrinta_2f16_x_2:135; CHECK:       // %bb.0: // %entry136; CHECK-NEXT:    movprfx z0, z1137; CHECK-NEXT:    frinta z0.h, p0/m, z1.h138; CHECK-NEXT:    ret139;140; CHECK-2p2-LABEL: test_svrinta_2f16_x_2:141; CHECK-2p2:       // %bb.0: // %entry142; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h143; CHECK-2p2-NEXT:    ret144entry:145  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)146  ret <vscale x 2 x half> %0147}148 149define <vscale x 2 x half> @test_svrinta_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {150; SVE-LABEL: test_svrinta_2f16_z:151; SVE:       // %bb.0: // %entry152; SVE-NEXT:    movi v0.2d, #0000000000000000153; SVE-NEXT:    frinta z0.h, p0/m, z1.h154; SVE-NEXT:    ret155;156; CHECK-2p2-LABEL: test_svrinta_2f16_z:157; CHECK-2p2:       // %bb.0: // %entry158; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h159; CHECK-2p2-NEXT:    ret160;161; STREAMING-SVE-LABEL: test_svrinta_2f16_z:162; STREAMING-SVE:       // %bb.0: // %entry163; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0164; STREAMING-SVE-NEXT:    frinta z0.h, p0/m, z1.h165; STREAMING-SVE-NEXT:    ret166entry:167  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)168  ret <vscale x 2 x half> %0169}170 171define <vscale x 2 x float> @test_svrinta_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {172; CHECK-LABEL: test_svrinta_2f32_x_1:173; CHECK:       // %bb.0: // %entry174; CHECK-NEXT:    frinta z0.s, p0/m, z0.s175; CHECK-NEXT:    ret176;177; CHECK-2p2-LABEL: test_svrinta_2f32_x_1:178; CHECK-2p2:       // %bb.0: // %entry179; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z0.s180; CHECK-2p2-NEXT:    ret181entry:182  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)183  ret <vscale x 2 x float> %0184}185 186define <vscale x 2 x float> @test_svrinta_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {187; CHECK-LABEL: test_svrinta_2f32_x_2:188; CHECK:       // %bb.0: // %entry189; CHECK-NEXT:    movprfx z0, z1190; CHECK-NEXT:    frinta z0.s, p0/m, z1.s191; CHECK-NEXT:    ret192;193; CHECK-2p2-LABEL: test_svrinta_2f32_x_2:194; CHECK-2p2:       // %bb.0: // %entry195; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z1.s196; CHECK-2p2-NEXT:    ret197entry:198  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)199  ret <vscale x 2 x float> %0200}201 202define <vscale x 2 x float> @test_svrinta_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {203; SVE-LABEL: test_svrinta_2f32_z:204; SVE:       // %bb.0: // %entry205; SVE-NEXT:    movi v0.2d, #0000000000000000206; SVE-NEXT:    frinta z0.s, p0/m, z1.s207; SVE-NEXT:    ret208;209; CHECK-2p2-LABEL: test_svrinta_2f32_z:210; CHECK-2p2:       // %bb.0: // %entry211; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z1.s212; CHECK-2p2-NEXT:    ret213;214; STREAMING-SVE-LABEL: test_svrinta_2f32_z:215; STREAMING-SVE:       // %bb.0: // %entry216; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0217; STREAMING-SVE-NEXT:    frinta z0.s, p0/m, z1.s218; STREAMING-SVE-NEXT:    ret219entry:220  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)221  ret <vscale x 2 x float> %0222}223 224define <vscale x 4 x float> @test_svrinta_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {225; CHECK-LABEL: test_svrinta_f32_x_1:226; CHECK:       // %bb.0: // %entry227; CHECK-NEXT:    frinta z0.s, p0/m, z0.s228; CHECK-NEXT:    ret229;230; CHECK-2p2-LABEL: test_svrinta_f32_x_1:231; CHECK-2p2:       // %bb.0: // %entry232; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z0.s233; CHECK-2p2-NEXT:    ret234entry:235  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)236  ret <vscale x 4 x float> %0237}238 239define <vscale x 4 x float> @test_svrinta_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {240; CHECK-LABEL: test_svrinta_f32_x_2:241; CHECK:       // %bb.0: // %entry242; CHECK-NEXT:    movprfx z0, z1243; CHECK-NEXT:    frinta z0.s, p0/m, z1.s244; CHECK-NEXT:    ret245;246; CHECK-2p2-LABEL: test_svrinta_f32_x_2:247; CHECK-2p2:       // %bb.0: // %entry248; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z1.s249; CHECK-2p2-NEXT:    ret250entry:251  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)252  ret <vscale x 4 x float> %0253}254 255define <vscale x 4 x float> @test_svrinta_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {256; SVE-LABEL: test_svrinta_f32_z:257; SVE:       // %bb.0: // %entry258; SVE-NEXT:    movi v0.2d, #0000000000000000259; SVE-NEXT:    frinta z0.s, p0/m, z1.s260; SVE-NEXT:    ret261;262; CHECK-2p2-LABEL: test_svrinta_f32_z:263; CHECK-2p2:       // %bb.0: // %entry264; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z1.s265; CHECK-2p2-NEXT:    ret266;267; STREAMING-SVE-LABEL: test_svrinta_f32_z:268; STREAMING-SVE:       // %bb.0: // %entry269; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0270; STREAMING-SVE-NEXT:    frinta z0.s, p0/m, z1.s271; STREAMING-SVE-NEXT:    ret272entry:273  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)274  ret <vscale x 4 x float> %0275}276 277define <vscale x 2 x double> @test_svrinta_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {278; CHECK-LABEL: test_svrinta_f64_x_1:279; CHECK:       // %bb.0: // %entry280; CHECK-NEXT:    frinta z0.d, p0/m, z0.d281; CHECK-NEXT:    ret282;283; CHECK-2p2-LABEL: test_svrinta_f64_x_1:284; CHECK-2p2:       // %bb.0: // %entry285; CHECK-2p2-NEXT:    frinta z0.d, p0/z, z0.d286; CHECK-2p2-NEXT:    ret287entry:288  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)289  ret <vscale x 2 x double> %0290}291 292define <vscale x 2 x double> @test_svrinta_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {293; CHECK-LABEL: test_svrinta_f64_x_2:294; CHECK:       // %bb.0: // %entry295; CHECK-NEXT:    movprfx z0, z1296; CHECK-NEXT:    frinta z0.d, p0/m, z1.d297; CHECK-NEXT:    ret298;299; CHECK-2p2-LABEL: test_svrinta_f64_x_2:300; CHECK-2p2:       // %bb.0: // %entry301; CHECK-2p2-NEXT:    frinta z0.d, p0/z, z1.d302; CHECK-2p2-NEXT:    ret303entry:304  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)305  ret <vscale x 2 x double> %0306}307 308define <vscale x 2 x double> @test_svrinta_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {309; SVE-LABEL: test_svrinta_f64_z:310; SVE:       // %bb.0: // %entry311; SVE-NEXT:    movi v0.2d, #0000000000000000312; SVE-NEXT:    frinta z0.d, p0/m, z1.d313; SVE-NEXT:    ret314;315; CHECK-2p2-LABEL: test_svrinta_f64_z:316; CHECK-2p2:       // %bb.0: // %entry317; CHECK-2p2-NEXT:    frinta z0.d, p0/z, z1.d318; CHECK-2p2-NEXT:    ret319;320; STREAMING-SVE-LABEL: test_svrinta_f64_z:321; STREAMING-SVE:       // %bb.0: // %entry322; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x0323; STREAMING-SVE-NEXT:    frinta z0.d, p0/m, z1.d324; STREAMING-SVE-NEXT:    ret325entry:326  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)327  ret <vscale x 2 x double> %0328}329 330define <vscale x 8 x half> @test_svrinti_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {331; CHECK-LABEL: test_svrinti_f16_x_1:332; CHECK:       // %bb.0: // %entry333; CHECK-NEXT:    frinti z0.h, p0/m, z0.h334; CHECK-NEXT:    ret335;336; CHECK-2p2-LABEL: test_svrinti_f16_x_1:337; CHECK-2p2:       // %bb.0: // %entry338; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z0.h339; CHECK-2p2-NEXT:    ret340entry:341  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)342  ret <vscale x 8 x half> %0343}344 345define <vscale x 8 x half> @test_svrinti_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {346; CHECK-LABEL: test_svrinti_f16_x_2:347; CHECK:       // %bb.0: // %entry348; CHECK-NEXT:    movprfx z0, z1349; CHECK-NEXT:    frinti z0.h, p0/m, z1.h350; CHECK-NEXT:    ret351;352; CHECK-2p2-LABEL: test_svrinti_f16_x_2:353; CHECK-2p2:       // %bb.0: // %entry354; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h355; CHECK-2p2-NEXT:    ret356entry:357  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)358  ret <vscale x 8 x half> %0359}360 361define <vscale x 8 x half> @test_svrinti_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {362; SVE-LABEL: test_svrinti_f16_z:363; SVE:       // %bb.0: // %entry364; SVE-NEXT:    movi v0.2d, #0000000000000000365; SVE-NEXT:    frinti z0.h, p0/m, z1.h366; SVE-NEXT:    ret367;368; CHECK-2p2-LABEL: test_svrinti_f16_z:369; CHECK-2p2:       // %bb.0: // %entry370; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h371; CHECK-2p2-NEXT:    ret372;373; STREAMING-SVE-LABEL: test_svrinti_f16_z:374; STREAMING-SVE:       // %bb.0: // %entry375; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0376; STREAMING-SVE-NEXT:    frinti z0.h, p0/m, z1.h377; STREAMING-SVE-NEXT:    ret378entry:379  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)380  ret <vscale x 8 x half> %0381}382 383define <vscale x 4 x half> @test_svrinti_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {384; CHECK-LABEL: test_svrinti_4f16_x_1:385; CHECK:       // %bb.0: // %entry386; CHECK-NEXT:    frinti z0.h, p0/m, z0.h387; CHECK-NEXT:    ret388;389; CHECK-2p2-LABEL: test_svrinti_4f16_x_1:390; CHECK-2p2:       // %bb.0: // %entry391; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z0.h392; CHECK-2p2-NEXT:    ret393entry:394  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)395  ret <vscale x 4 x half> %0396}397 398define <vscale x 4 x half> @test_svrinti_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {399; CHECK-LABEL: test_svrinti_4f16_x_2:400; CHECK:       // %bb.0: // %entry401; CHECK-NEXT:    movprfx z0, z1402; CHECK-NEXT:    frinti z0.h, p0/m, z1.h403; CHECK-NEXT:    ret404;405; CHECK-2p2-LABEL: test_svrinti_4f16_x_2:406; CHECK-2p2:       // %bb.0: // %entry407; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h408; CHECK-2p2-NEXT:    ret409entry:410  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)411  ret <vscale x 4 x half> %0412}413 414define <vscale x 4 x half> @test_svrinti_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {415; SVE-LABEL: test_svrinti_4f16_z:416; SVE:       // %bb.0: // %entry417; SVE-NEXT:    movi v0.2d, #0000000000000000418; SVE-NEXT:    frinti z0.h, p0/m, z1.h419; SVE-NEXT:    ret420;421; CHECK-2p2-LABEL: test_svrinti_4f16_z:422; CHECK-2p2:       // %bb.0: // %entry423; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h424; CHECK-2p2-NEXT:    ret425;426; STREAMING-SVE-LABEL: test_svrinti_4f16_z:427; STREAMING-SVE:       // %bb.0: // %entry428; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0429; STREAMING-SVE-NEXT:    frinti z0.h, p0/m, z1.h430; STREAMING-SVE-NEXT:    ret431entry:432  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)433  ret <vscale x 4 x half> %0434}435 436define <vscale x 2 x half> @test_svrinti_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {437; CHECK-LABEL: test_svrinti_2f16_x_1:438; CHECK:       // %bb.0: // %entry439; CHECK-NEXT:    frinti z0.h, p0/m, z0.h440; CHECK-NEXT:    ret441;442; CHECK-2p2-LABEL: test_svrinti_2f16_x_1:443; CHECK-2p2:       // %bb.0: // %entry444; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z0.h445; CHECK-2p2-NEXT:    ret446entry:447  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)448  ret <vscale x 2 x half> %0449}450 451define <vscale x 2 x half> @test_svrinti_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {452; CHECK-LABEL: test_svrinti_2f16_x_2:453; CHECK:       // %bb.0: // %entry454; CHECK-NEXT:    movprfx z0, z1455; CHECK-NEXT:    frinti z0.h, p0/m, z1.h456; CHECK-NEXT:    ret457;458; CHECK-2p2-LABEL: test_svrinti_2f16_x_2:459; CHECK-2p2:       // %bb.0: // %entry460; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h461; CHECK-2p2-NEXT:    ret462entry:463  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)464  ret <vscale x 2 x half> %0465}466 467define <vscale x 2 x half> @test_svrinti_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {468; SVE-LABEL: test_svrinti_2f16_z:469; SVE:       // %bb.0: // %entry470; SVE-NEXT:    movi v0.2d, #0000000000000000471; SVE-NEXT:    frinti z0.h, p0/m, z1.h472; SVE-NEXT:    ret473;474; CHECK-2p2-LABEL: test_svrinti_2f16_z:475; CHECK-2p2:       // %bb.0: // %entry476; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h477; CHECK-2p2-NEXT:    ret478;479; STREAMING-SVE-LABEL: test_svrinti_2f16_z:480; STREAMING-SVE:       // %bb.0: // %entry481; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0482; STREAMING-SVE-NEXT:    frinti z0.h, p0/m, z1.h483; STREAMING-SVE-NEXT:    ret484entry:485  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)486  ret <vscale x 2 x half> %0487}488 489define <vscale x 2 x float> @test_svrinti_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {490; CHECK-LABEL: test_svrinti_2f32_x_1:491; CHECK:       // %bb.0: // %entry492; CHECK-NEXT:    frinti z0.s, p0/m, z0.s493; CHECK-NEXT:    ret494;495; CHECK-2p2-LABEL: test_svrinti_2f32_x_1:496; CHECK-2p2:       // %bb.0: // %entry497; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z0.s498; CHECK-2p2-NEXT:    ret499entry:500  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)501  ret <vscale x 2 x float> %0502}503 504define <vscale x 2 x float> @test_svrinti_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {505; CHECK-LABEL: test_svrinti_2f32_x_2:506; CHECK:       // %bb.0: // %entry507; CHECK-NEXT:    movprfx z0, z1508; CHECK-NEXT:    frinti z0.s, p0/m, z1.s509; CHECK-NEXT:    ret510;511; CHECK-2p2-LABEL: test_svrinti_2f32_x_2:512; CHECK-2p2:       // %bb.0: // %entry513; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z1.s514; CHECK-2p2-NEXT:    ret515entry:516  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)517  ret <vscale x 2 x float> %0518}519 520define <vscale x 2 x float> @test_svrinti_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {521; SVE-LABEL: test_svrinti_2f32_z:522; SVE:       // %bb.0: // %entry523; SVE-NEXT:    movi v0.2d, #0000000000000000524; SVE-NEXT:    frinti z0.s, p0/m, z1.s525; SVE-NEXT:    ret526;527; CHECK-2p2-LABEL: test_svrinti_2f32_z:528; CHECK-2p2:       // %bb.0: // %entry529; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z1.s530; CHECK-2p2-NEXT:    ret531;532; STREAMING-SVE-LABEL: test_svrinti_2f32_z:533; STREAMING-SVE:       // %bb.0: // %entry534; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0535; STREAMING-SVE-NEXT:    frinti z0.s, p0/m, z1.s536; STREAMING-SVE-NEXT:    ret537entry:538  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)539  ret <vscale x 2 x float> %0540}541 542define <vscale x 4 x float> @test_svrinti_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {543; CHECK-LABEL: test_svrinti_f32_x_1:544; CHECK:       // %bb.0: // %entry545; CHECK-NEXT:    frinti z0.s, p0/m, z0.s546; CHECK-NEXT:    ret547;548; CHECK-2p2-LABEL: test_svrinti_f32_x_1:549; CHECK-2p2:       // %bb.0: // %entry550; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z0.s551; CHECK-2p2-NEXT:    ret552entry:553  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)554  ret <vscale x 4 x float> %0555}556 557define <vscale x 4 x float> @test_svrinti_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {558; CHECK-LABEL: test_svrinti_f32_x_2:559; CHECK:       // %bb.0: // %entry560; CHECK-NEXT:    movprfx z0, z1561; CHECK-NEXT:    frinti z0.s, p0/m, z1.s562; CHECK-NEXT:    ret563;564; CHECK-2p2-LABEL: test_svrinti_f32_x_2:565; CHECK-2p2:       // %bb.0: // %entry566; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z1.s567; CHECK-2p2-NEXT:    ret568entry:569  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)570  ret <vscale x 4 x float> %0571}572 573define <vscale x 4 x float> @test_svrinti_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {574; SVE-LABEL: test_svrinti_f32_z:575; SVE:       // %bb.0: // %entry576; SVE-NEXT:    movi v0.2d, #0000000000000000577; SVE-NEXT:    frinti z0.s, p0/m, z1.s578; SVE-NEXT:    ret579;580; CHECK-2p2-LABEL: test_svrinti_f32_z:581; CHECK-2p2:       // %bb.0: // %entry582; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z1.s583; CHECK-2p2-NEXT:    ret584;585; STREAMING-SVE-LABEL: test_svrinti_f32_z:586; STREAMING-SVE:       // %bb.0: // %entry587; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0588; STREAMING-SVE-NEXT:    frinti z0.s, p0/m, z1.s589; STREAMING-SVE-NEXT:    ret590entry:591  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)592  ret <vscale x 4 x float> %0593}594 595define <vscale x 2 x double> @test_svrinti_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {596; CHECK-LABEL: test_svrinti_f64_x_1:597; CHECK:       // %bb.0: // %entry598; CHECK-NEXT:    frinti z0.d, p0/m, z0.d599; CHECK-NEXT:    ret600;601; CHECK-2p2-LABEL: test_svrinti_f64_x_1:602; CHECK-2p2:       // %bb.0: // %entry603; CHECK-2p2-NEXT:    frinti z0.d, p0/z, z0.d604; CHECK-2p2-NEXT:    ret605entry:606  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)607  ret <vscale x 2 x double> %0608}609 610define <vscale x 2 x double> @test_svrinti_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {611; CHECK-LABEL: test_svrinti_f64_x_2:612; CHECK:       // %bb.0: // %entry613; CHECK-NEXT:    movprfx z0, z1614; CHECK-NEXT:    frinti z0.d, p0/m, z1.d615; CHECK-NEXT:    ret616;617; CHECK-2p2-LABEL: test_svrinti_f64_x_2:618; CHECK-2p2:       // %bb.0: // %entry619; CHECK-2p2-NEXT:    frinti z0.d, p0/z, z1.d620; CHECK-2p2-NEXT:    ret621entry:622  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)623  ret <vscale x 2 x double> %0624}625 626 627define <vscale x 2 x double> @test_svrinti_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {628; SVE-LABEL: test_svrinti_f64_z:629; SVE:       // %bb.0: // %entry630; SVE-NEXT:    movi v0.2d, #0000000000000000631; SVE-NEXT:    frinti z0.d, p0/m, z1.d632; SVE-NEXT:    ret633;634; CHECK-2p2-LABEL: test_svrinti_f64_z:635; CHECK-2p2:       // %bb.0: // %entry636; CHECK-2p2-NEXT:    frinti z0.d, p0/z, z1.d637; CHECK-2p2-NEXT:    ret638;639; STREAMING-SVE-LABEL: test_svrinti_f64_z:640; STREAMING-SVE:       // %bb.0: // %entry641; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x0642; STREAMING-SVE-NEXT:    frinti z0.d, p0/m, z1.d643; STREAMING-SVE-NEXT:    ret644entry:645  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)646  ret <vscale x 2 x double> %0647}648 649 650define <vscale x 8 x half> @test_svrintm_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {651; CHECK-LABEL: test_svrintm_f16_x_1:652; CHECK:       // %bb.0: // %entry653; CHECK-NEXT:    frintm z0.h, p0/m, z0.h654; CHECK-NEXT:    ret655;656; CHECK-2p2-LABEL: test_svrintm_f16_x_1:657; CHECK-2p2:       // %bb.0: // %entry658; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z0.h659; CHECK-2p2-NEXT:    ret660entry:661  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)662  ret <vscale x 8 x half> %0663}664 665define <vscale x 8 x half> @test_svrintm_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {666; CHECK-LABEL: test_svrintm_f16_x_2:667; CHECK:       // %bb.0: // %entry668; CHECK-NEXT:    movprfx z0, z1669; CHECK-NEXT:    frintm z0.h, p0/m, z1.h670; CHECK-NEXT:    ret671;672; CHECK-2p2-LABEL: test_svrintm_f16_x_2:673; CHECK-2p2:       // %bb.0: // %entry674; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h675; CHECK-2p2-NEXT:    ret676entry:677  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)678  ret <vscale x 8 x half> %0679}680 681 682define <vscale x 8 x half> @test_svrintm_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {683; SVE-LABEL: test_svrintm_f16_z:684; SVE:       // %bb.0: // %entry685; SVE-NEXT:    movi v0.2d, #0000000000000000686; SVE-NEXT:    frintm z0.h, p0/m, z1.h687; SVE-NEXT:    ret688;689; CHECK-2p2-LABEL: test_svrintm_f16_z:690; CHECK-2p2:       // %bb.0: // %entry691; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h692; CHECK-2p2-NEXT:    ret693;694; STREAMING-SVE-LABEL: test_svrintm_f16_z:695; STREAMING-SVE:       // %bb.0: // %entry696; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0697; STREAMING-SVE-NEXT:    frintm z0.h, p0/m, z1.h698; STREAMING-SVE-NEXT:    ret699entry:700  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)701  ret <vscale x 8 x half> %0702}703 704define <vscale x 4 x half> @test_svrintm_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {705; CHECK-LABEL: test_svrintm_4f16_x_1:706; CHECK:       // %bb.0: // %entry707; CHECK-NEXT:    frintm z0.h, p0/m, z0.h708; CHECK-NEXT:    ret709;710; CHECK-2p2-LABEL: test_svrintm_4f16_x_1:711; CHECK-2p2:       // %bb.0: // %entry712; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z0.h713; CHECK-2p2-NEXT:    ret714entry:715  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)716  ret <vscale x 4 x half> %0717}718 719define <vscale x 4 x half> @test_svrintm_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {720; CHECK-LABEL: test_svrintm_4f16_x_2:721; CHECK:       // %bb.0: // %entry722; CHECK-NEXT:    movprfx z0, z1723; CHECK-NEXT:    frintm z0.h, p0/m, z1.h724; CHECK-NEXT:    ret725;726; CHECK-2p2-LABEL: test_svrintm_4f16_x_2:727; CHECK-2p2:       // %bb.0: // %entry728; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h729; CHECK-2p2-NEXT:    ret730entry:731  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)732  ret <vscale x 4 x half> %0733}734 735define <vscale x 4 x half> @test_svrintm_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {736; SVE-LABEL: test_svrintm_4f16_z:737; SVE:       // %bb.0: // %entry738; SVE-NEXT:    movi v0.2d, #0000000000000000739; SVE-NEXT:    frintm z0.h, p0/m, z1.h740; SVE-NEXT:    ret741;742; CHECK-2p2-LABEL: test_svrintm_4f16_z:743; CHECK-2p2:       // %bb.0: // %entry744; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h745; CHECK-2p2-NEXT:    ret746;747; STREAMING-SVE-LABEL: test_svrintm_4f16_z:748; STREAMING-SVE:       // %bb.0: // %entry749; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0750; STREAMING-SVE-NEXT:    frintm z0.h, p0/m, z1.h751; STREAMING-SVE-NEXT:    ret752entry:753  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)754  ret <vscale x 4 x half> %0755}756 757define <vscale x 2 x half> @test_svrintm_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {758; CHECK-LABEL: test_svrintm_2f16_x_1:759; CHECK:       // %bb.0: // %entry760; CHECK-NEXT:    frintm z0.h, p0/m, z0.h761; CHECK-NEXT:    ret762;763; CHECK-2p2-LABEL: test_svrintm_2f16_x_1:764; CHECK-2p2:       // %bb.0: // %entry765; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z0.h766; CHECK-2p2-NEXT:    ret767entry:768  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)769  ret <vscale x 2 x half> %0770}771 772define <vscale x 2 x half> @test_svrintm_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {773; CHECK-LABEL: test_svrintm_2f16_x_2:774; CHECK:       // %bb.0: // %entry775; CHECK-NEXT:    movprfx z0, z1776; CHECK-NEXT:    frintm z0.h, p0/m, z1.h777; CHECK-NEXT:    ret778;779; CHECK-2p2-LABEL: test_svrintm_2f16_x_2:780; CHECK-2p2:       // %bb.0: // %entry781; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h782; CHECK-2p2-NEXT:    ret783entry:784  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)785  ret <vscale x 2 x half> %0786}787 788define <vscale x 2 x half> @test_svrintm_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {789; SVE-LABEL: test_svrintm_2f16_z:790; SVE:       // %bb.0: // %entry791; SVE-NEXT:    movi v0.2d, #0000000000000000792; SVE-NEXT:    frintm z0.h, p0/m, z1.h793; SVE-NEXT:    ret794;795; CHECK-2p2-LABEL: test_svrintm_2f16_z:796; CHECK-2p2:       // %bb.0: // %entry797; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h798; CHECK-2p2-NEXT:    ret799;800; STREAMING-SVE-LABEL: test_svrintm_2f16_z:801; STREAMING-SVE:       // %bb.0: // %entry802; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x0803; STREAMING-SVE-NEXT:    frintm z0.h, p0/m, z1.h804; STREAMING-SVE-NEXT:    ret805entry:806  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)807  ret <vscale x 2 x half> %0808}809 810define <vscale x 2 x float> @test_svrintm_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {811; CHECK-LABEL: test_svrintm_2f32_x_1:812; CHECK:       // %bb.0: // %entry813; CHECK-NEXT:    frintm z0.s, p0/m, z0.s814; CHECK-NEXT:    ret815;816; CHECK-2p2-LABEL: test_svrintm_2f32_x_1:817; CHECK-2p2:       // %bb.0: // %entry818; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z0.s819; CHECK-2p2-NEXT:    ret820entry:821  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)822  ret <vscale x 2 x float> %0823}824 825define <vscale x 2 x float> @test_svrintm_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {826; CHECK-LABEL: test_svrintm_2f32_x_2:827; CHECK:       // %bb.0: // %entry828; CHECK-NEXT:    movprfx z0, z1829; CHECK-NEXT:    frintm z0.s, p0/m, z1.s830; CHECK-NEXT:    ret831;832; CHECK-2p2-LABEL: test_svrintm_2f32_x_2:833; CHECK-2p2:       // %bb.0: // %entry834; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z1.s835; CHECK-2p2-NEXT:    ret836entry:837  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)838  ret <vscale x 2 x float> %0839}840 841define <vscale x 2 x float> @test_svrintm_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {842; SVE-LABEL: test_svrintm_2f32_z:843; SVE:       // %bb.0: // %entry844; SVE-NEXT:    movi v0.2d, #0000000000000000845; SVE-NEXT:    frintm z0.s, p0/m, z1.s846; SVE-NEXT:    ret847;848; CHECK-2p2-LABEL: test_svrintm_2f32_z:849; CHECK-2p2:       // %bb.0: // %entry850; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z1.s851; CHECK-2p2-NEXT:    ret852;853; STREAMING-SVE-LABEL: test_svrintm_2f32_z:854; STREAMING-SVE:       // %bb.0: // %entry855; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0856; STREAMING-SVE-NEXT:    frintm z0.s, p0/m, z1.s857; STREAMING-SVE-NEXT:    ret858entry:859  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)860  ret <vscale x 2 x float> %0861}862 863define <vscale x 4 x float> @test_svrintm_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {864; CHECK-LABEL: test_svrintm_f32_x_1:865; CHECK:       // %bb.0: // %entry866; CHECK-NEXT:    frintm z0.s, p0/m, z0.s867; CHECK-NEXT:    ret868;869; CHECK-2p2-LABEL: test_svrintm_f32_x_1:870; CHECK-2p2:       // %bb.0: // %entry871; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z0.s872; CHECK-2p2-NEXT:    ret873entry:874  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)875  ret <vscale x 4 x float> %0876}877 878define <vscale x 4 x float> @test_svrintm_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {879; CHECK-LABEL: test_svrintm_f32_x_2:880; CHECK:       // %bb.0: // %entry881; CHECK-NEXT:    movprfx z0, z1882; CHECK-NEXT:    frintm z0.s, p0/m, z1.s883; CHECK-NEXT:    ret884;885; CHECK-2p2-LABEL: test_svrintm_f32_x_2:886; CHECK-2p2:       // %bb.0: // %entry887; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z1.s888; CHECK-2p2-NEXT:    ret889entry:890  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)891  ret <vscale x 4 x float> %0892}893 894define <vscale x 4 x float> @test_svrintm_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {895; SVE-LABEL: test_svrintm_f32_z:896; SVE:       // %bb.0: // %entry897; SVE-NEXT:    movi v0.2d, #0000000000000000898; SVE-NEXT:    frintm z0.s, p0/m, z1.s899; SVE-NEXT:    ret900;901; CHECK-2p2-LABEL: test_svrintm_f32_z:902; CHECK-2p2:       // %bb.0: // %entry903; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z1.s904; CHECK-2p2-NEXT:    ret905;906; STREAMING-SVE-LABEL: test_svrintm_f32_z:907; STREAMING-SVE:       // %bb.0: // %entry908; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x0909; STREAMING-SVE-NEXT:    frintm z0.s, p0/m, z1.s910; STREAMING-SVE-NEXT:    ret911entry:912  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)913  ret <vscale x 4 x float> %0914}915 916define <vscale x 2 x double> @test_svrintm_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {917; CHECK-LABEL: test_svrintm_f64_x_1:918; CHECK:       // %bb.0: // %entry919; CHECK-NEXT:    frintm z0.d, p0/m, z0.d920; CHECK-NEXT:    ret921;922; CHECK-2p2-LABEL: test_svrintm_f64_x_1:923; CHECK-2p2:       // %bb.0: // %entry924; CHECK-2p2-NEXT:    frintm z0.d, p0/z, z0.d925; CHECK-2p2-NEXT:    ret926entry:927  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)928  ret <vscale x 2 x double> %0929}930 931define <vscale x 2 x double> @test_svrintm_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {932; CHECK-LABEL: test_svrintm_f64_x_2:933; CHECK:       // %bb.0: // %entry934; CHECK-NEXT:    movprfx z0, z1935; CHECK-NEXT:    frintm z0.d, p0/m, z1.d936; CHECK-NEXT:    ret937;938; CHECK-2p2-LABEL: test_svrintm_f64_x_2:939; CHECK-2p2:       // %bb.0: // %entry940; CHECK-2p2-NEXT:    frintm z0.d, p0/z, z1.d941; CHECK-2p2-NEXT:    ret942entry:943  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)944  ret <vscale x 2 x double> %0945}946 947define <vscale x 2 x double> @test_svrintm_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {948; SVE-LABEL: test_svrintm_f64_z:949; SVE:       // %bb.0: // %entry950; SVE-NEXT:    movi v0.2d, #0000000000000000951; SVE-NEXT:    frintm z0.d, p0/m, z1.d952; SVE-NEXT:    ret953;954; CHECK-2p2-LABEL: test_svrintm_f64_z:955; CHECK-2p2:       // %bb.0: // %entry956; CHECK-2p2-NEXT:    frintm z0.d, p0/z, z1.d957; CHECK-2p2-NEXT:    ret958;959; STREAMING-SVE-LABEL: test_svrintm_f64_z:960; STREAMING-SVE:       // %bb.0: // %entry961; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x0962; STREAMING-SVE-NEXT:    frintm z0.d, p0/m, z1.d963; STREAMING-SVE-NEXT:    ret964entry:965  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)966  ret <vscale x 2 x double> %0967}968 969define <vscale x 8 x half> @test_svrintn_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {970; CHECK-LABEL: test_svrintn_f16_x_1:971; CHECK:       // %bb.0: // %entry972; CHECK-NEXT:    frintn z0.h, p0/m, z0.h973; CHECK-NEXT:    ret974;975; CHECK-2p2-LABEL: test_svrintn_f16_x_1:976; CHECK-2p2:       // %bb.0: // %entry977; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z0.h978; CHECK-2p2-NEXT:    ret979entry:980  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)981  ret <vscale x 8 x half> %0982}983 984define <vscale x 8 x half> @test_svrintn_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {985; CHECK-LABEL: test_svrintn_f16_x_2:986; CHECK:       // %bb.0: // %entry987; CHECK-NEXT:    movprfx z0, z1988; CHECK-NEXT:    frintn z0.h, p0/m, z1.h989; CHECK-NEXT:    ret990;991; CHECK-2p2-LABEL: test_svrintn_f16_x_2:992; CHECK-2p2:       // %bb.0: // %entry993; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h994; CHECK-2p2-NEXT:    ret995entry:996  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)997  ret <vscale x 8 x half> %0998}999 1000define <vscale x 8 x half> @test_svrintn_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1001; SVE-LABEL: test_svrintn_f16_z:1002; SVE:       // %bb.0: // %entry1003; SVE-NEXT:    movi v0.2d, #00000000000000001004; SVE-NEXT:    frintn z0.h, p0/m, z1.h1005; SVE-NEXT:    ret1006;1007; CHECK-2p2-LABEL: test_svrintn_f16_z:1008; CHECK-2p2:       // %bb.0: // %entry1009; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h1010; CHECK-2p2-NEXT:    ret1011;1012; STREAMING-SVE-LABEL: test_svrintn_f16_z:1013; STREAMING-SVE:       // %bb.0: // %entry1014; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01015; STREAMING-SVE-NEXT:    frintn z0.h, p0/m, z1.h1016; STREAMING-SVE-NEXT:    ret1017entry:1018  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1019  ret <vscale x 8 x half> %01020}1021 1022define <vscale x 4 x half> @test_svrintn_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {1023; CHECK-LABEL: test_svrintn_4f16_x_1:1024; CHECK:       // %bb.0: // %entry1025; CHECK-NEXT:    frintn z0.h, p0/m, z0.h1026; CHECK-NEXT:    ret1027;1028; CHECK-2p2-LABEL: test_svrintn_4f16_x_1:1029; CHECK-2p2:       // %bb.0: // %entry1030; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z0.h1031; CHECK-2p2-NEXT:    ret1032entry:1033  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1034  ret <vscale x 4 x half> %01035}1036 1037define <vscale x 4 x half> @test_svrintn_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1038; CHECK-LABEL: test_svrintn_4f16_x_2:1039; CHECK:       // %bb.0: // %entry1040; CHECK-NEXT:    movprfx z0, z11041; CHECK-NEXT:    frintn z0.h, p0/m, z1.h1042; CHECK-NEXT:    ret1043;1044; CHECK-2p2-LABEL: test_svrintn_4f16_x_2:1045; CHECK-2p2:       // %bb.0: // %entry1046; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h1047; CHECK-2p2-NEXT:    ret1048entry:1049  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1050  ret <vscale x 4 x half> %01051}1052 1053define <vscale x 4 x half> @test_svrintn_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1054; SVE-LABEL: test_svrintn_4f16_z:1055; SVE:       // %bb.0: // %entry1056; SVE-NEXT:    movi v0.2d, #00000000000000001057; SVE-NEXT:    frintn z0.h, p0/m, z1.h1058; SVE-NEXT:    ret1059;1060; CHECK-2p2-LABEL: test_svrintn_4f16_z:1061; CHECK-2p2:       // %bb.0: // %entry1062; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h1063; CHECK-2p2-NEXT:    ret1064;1065; STREAMING-SVE-LABEL: test_svrintn_4f16_z:1066; STREAMING-SVE:       // %bb.0: // %entry1067; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01068; STREAMING-SVE-NEXT:    frintn z0.h, p0/m, z1.h1069; STREAMING-SVE-NEXT:    ret1070entry:1071  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1072  ret <vscale x 4 x half> %01073}1074 1075define <vscale x 2 x half> @test_svrintn_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {1076; CHECK-LABEL: test_svrintn_2f16_x_1:1077; CHECK:       // %bb.0: // %entry1078; CHECK-NEXT:    frintn z0.h, p0/m, z0.h1079; CHECK-NEXT:    ret1080;1081; CHECK-2p2-LABEL: test_svrintn_2f16_x_1:1082; CHECK-2p2:       // %bb.0: // %entry1083; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z0.h1084; CHECK-2p2-NEXT:    ret1085entry:1086  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1087  ret <vscale x 2 x half> %01088}1089 1090define <vscale x 2 x half> @test_svrintn_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {1091; CHECK-LABEL: test_svrintn_2f16_x_2:1092; CHECK:       // %bb.0: // %entry1093; CHECK-NEXT:    movprfx z0, z11094; CHECK-NEXT:    frintn z0.h, p0/m, z1.h1095; CHECK-NEXT:    ret1096;1097; CHECK-2p2-LABEL: test_svrintn_2f16_x_2:1098; CHECK-2p2:       // %bb.0: // %entry1099; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h1100; CHECK-2p2-NEXT:    ret1101entry:1102  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1103  ret <vscale x 2 x half> %01104}1105 1106define <vscale x 2 x half> @test_svrintn_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {1107; SVE-LABEL: test_svrintn_2f16_z:1108; SVE:       // %bb.0: // %entry1109; SVE-NEXT:    movi v0.2d, #00000000000000001110; SVE-NEXT:    frintn z0.h, p0/m, z1.h1111; SVE-NEXT:    ret1112;1113; CHECK-2p2-LABEL: test_svrintn_2f16_z:1114; CHECK-2p2:       // %bb.0: // %entry1115; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h1116; CHECK-2p2-NEXT:    ret1117;1118; STREAMING-SVE-LABEL: test_svrintn_2f16_z:1119; STREAMING-SVE:       // %bb.0: // %entry1120; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01121; STREAMING-SVE-NEXT:    frintn z0.h, p0/m, z1.h1122; STREAMING-SVE-NEXT:    ret1123entry:1124  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1125  ret <vscale x 2 x half> %01126}1127 1128define <vscale x 2 x float> @test_svrintn_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {1129; CHECK-LABEL: test_svrintn_2f32_x_1:1130; CHECK:       // %bb.0: // %entry1131; CHECK-NEXT:    frintn z0.s, p0/m, z0.s1132; CHECK-NEXT:    ret1133;1134; CHECK-2p2-LABEL: test_svrintn_2f32_x_1:1135; CHECK-2p2:       // %bb.0: // %entry1136; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z0.s1137; CHECK-2p2-NEXT:    ret1138entry:1139  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1140  ret <vscale x 2 x float> %01141}1142 1143define <vscale x 2 x float> @test_svrintn_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {1144; CHECK-LABEL: test_svrintn_2f32_x_2:1145; CHECK:       // %bb.0: // %entry1146; CHECK-NEXT:    movprfx z0, z11147; CHECK-NEXT:    frintn z0.s, p0/m, z1.s1148; CHECK-NEXT:    ret1149;1150; CHECK-2p2-LABEL: test_svrintn_2f32_x_2:1151; CHECK-2p2:       // %bb.0: // %entry1152; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z1.s1153; CHECK-2p2-NEXT:    ret1154entry:1155  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1156  ret <vscale x 2 x float> %01157}1158 1159define <vscale x 2 x float> @test_svrintn_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {1160; SVE-LABEL: test_svrintn_2f32_z:1161; SVE:       // %bb.0: // %entry1162; SVE-NEXT:    movi v0.2d, #00000000000000001163; SVE-NEXT:    frintn z0.s, p0/m, z1.s1164; SVE-NEXT:    ret1165;1166; CHECK-2p2-LABEL: test_svrintn_2f32_z:1167; CHECK-2p2:       // %bb.0: // %entry1168; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z1.s1169; CHECK-2p2-NEXT:    ret1170;1171; STREAMING-SVE-LABEL: test_svrintn_2f32_z:1172; STREAMING-SVE:       // %bb.0: // %entry1173; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x01174; STREAMING-SVE-NEXT:    frintn z0.s, p0/m, z1.s1175; STREAMING-SVE-NEXT:    ret1176entry:1177  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1178  ret <vscale x 2 x float> %01179}1180 1181define <vscale x 4 x float> @test_svrintn_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {1182; CHECK-LABEL: test_svrintn_f32_x_1:1183; CHECK:       // %bb.0: // %entry1184; CHECK-NEXT:    frintn z0.s, p0/m, z0.s1185; CHECK-NEXT:    ret1186;1187; CHECK-2p2-LABEL: test_svrintn_f32_x_1:1188; CHECK-2p2:       // %bb.0: // %entry1189; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z0.s1190; CHECK-2p2-NEXT:    ret1191entry:1192  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1193  ret <vscale x 4 x float> %01194}1195 1196define <vscale x 4 x float> @test_svrintn_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {1197; CHECK-LABEL: test_svrintn_f32_x_2:1198; CHECK:       // %bb.0: // %entry1199; CHECK-NEXT:    movprfx z0, z11200; CHECK-NEXT:    frintn z0.s, p0/m, z1.s1201; CHECK-NEXT:    ret1202;1203; CHECK-2p2-LABEL: test_svrintn_f32_x_2:1204; CHECK-2p2:       // %bb.0: // %entry1205; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z1.s1206; CHECK-2p2-NEXT:    ret1207entry:1208  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1209  ret <vscale x 4 x float> %01210}1211 1212define <vscale x 4 x float> @test_svrintn_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {1213; SVE-LABEL: test_svrintn_f32_z:1214; SVE:       // %bb.0: // %entry1215; SVE-NEXT:    movi v0.2d, #00000000000000001216; SVE-NEXT:    frintn z0.s, p0/m, z1.s1217; SVE-NEXT:    ret1218;1219; CHECK-2p2-LABEL: test_svrintn_f32_z:1220; CHECK-2p2:       // %bb.0: // %entry1221; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z1.s1222; CHECK-2p2-NEXT:    ret1223;1224; STREAMING-SVE-LABEL: test_svrintn_f32_z:1225; STREAMING-SVE:       // %bb.0: // %entry1226; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x01227; STREAMING-SVE-NEXT:    frintn z0.s, p0/m, z1.s1228; STREAMING-SVE-NEXT:    ret1229entry:1230  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1231  ret <vscale x 4 x float> %01232}1233 1234define <vscale x 2 x double> @test_svrintn_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {1235; CHECK-LABEL: test_svrintn_f64_x_1:1236; CHECK:       // %bb.0: // %entry1237; CHECK-NEXT:    frintn z0.d, p0/m, z0.d1238; CHECK-NEXT:    ret1239;1240; CHECK-2p2-LABEL: test_svrintn_f64_x_1:1241; CHECK-2p2:       // %bb.0: // %entry1242; CHECK-2p2-NEXT:    frintn z0.d, p0/z, z0.d1243; CHECK-2p2-NEXT:    ret1244entry:1245  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1246  ret <vscale x 2 x double> %01247}1248 1249define <vscale x 2 x double> @test_svrintn_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {1250; CHECK-LABEL: test_svrintn_f64_x_2:1251; CHECK:       // %bb.0: // %entry1252; CHECK-NEXT:    movprfx z0, z11253; CHECK-NEXT:    frintn z0.d, p0/m, z1.d1254; CHECK-NEXT:    ret1255;1256; CHECK-2p2-LABEL: test_svrintn_f64_x_2:1257; CHECK-2p2:       // %bb.0: // %entry1258; CHECK-2p2-NEXT:    frintn z0.d, p0/z, z1.d1259; CHECK-2p2-NEXT:    ret1260entry:1261  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1262  ret <vscale x 2 x double> %01263}1264 1265define <vscale x 2 x double> @test_svrintn_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {1266; SVE-LABEL: test_svrintn_f64_z:1267; SVE:       // %bb.0: // %entry1268; SVE-NEXT:    movi v0.2d, #00000000000000001269; SVE-NEXT:    frintn z0.d, p0/m, z1.d1270; SVE-NEXT:    ret1271;1272; CHECK-2p2-LABEL: test_svrintn_f64_z:1273; CHECK-2p2:       // %bb.0: // %entry1274; CHECK-2p2-NEXT:    frintn z0.d, p0/z, z1.d1275; CHECK-2p2-NEXT:    ret1276;1277; STREAMING-SVE-LABEL: test_svrintn_f64_z:1278; STREAMING-SVE:       // %bb.0: // %entry1279; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x01280; STREAMING-SVE-NEXT:    frintn z0.d, p0/m, z1.d1281; STREAMING-SVE-NEXT:    ret1282entry:1283  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1284  ret <vscale x 2 x double> %01285}1286 1287define <vscale x 8 x half> @test_svrintp_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {1288; CHECK-LABEL: test_svrintp_f16_x_1:1289; CHECK:       // %bb.0: // %entry1290; CHECK-NEXT:    frintp z0.h, p0/m, z0.h1291; CHECK-NEXT:    ret1292;1293; CHECK-2p2-LABEL: test_svrintp_f16_x_1:1294; CHECK-2p2:       // %bb.0: // %entry1295; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z0.h1296; CHECK-2p2-NEXT:    ret1297entry:1298  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1299  ret <vscale x 8 x half> %01300}1301 1302define <vscale x 8 x half> @test_svrintp_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1303; CHECK-LABEL: test_svrintp_f16_x_2:1304; CHECK:       // %bb.0: // %entry1305; CHECK-NEXT:    movprfx z0, z11306; CHECK-NEXT:    frintp z0.h, p0/m, z1.h1307; CHECK-NEXT:    ret1308;1309; CHECK-2p2-LABEL: test_svrintp_f16_x_2:1310; CHECK-2p2:       // %bb.0: // %entry1311; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h1312; CHECK-2p2-NEXT:    ret1313entry:1314  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1315  ret <vscale x 8 x half> %01316}1317 1318define <vscale x 8 x half> @test_svrintp_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1319; SVE-LABEL: test_svrintp_f16_z:1320; SVE:       // %bb.0: // %entry1321; SVE-NEXT:    movi v0.2d, #00000000000000001322; SVE-NEXT:    frintp z0.h, p0/m, z1.h1323; SVE-NEXT:    ret1324;1325; CHECK-2p2-LABEL: test_svrintp_f16_z:1326; CHECK-2p2:       // %bb.0: // %entry1327; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h1328; CHECK-2p2-NEXT:    ret1329;1330; STREAMING-SVE-LABEL: test_svrintp_f16_z:1331; STREAMING-SVE:       // %bb.0: // %entry1332; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01333; STREAMING-SVE-NEXT:    frintp z0.h, p0/m, z1.h1334; STREAMING-SVE-NEXT:    ret1335entry:1336  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1337  ret <vscale x 8 x half> %01338}1339 1340define <vscale x 4 x half> @test_svrintp_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {1341; CHECK-LABEL: test_svrintp_4f16_x_1:1342; CHECK:       // %bb.0: // %entry1343; CHECK-NEXT:    frintp z0.h, p0/m, z0.h1344; CHECK-NEXT:    ret1345;1346; CHECK-2p2-LABEL: test_svrintp_4f16_x_1:1347; CHECK-2p2:       // %bb.0: // %entry1348; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z0.h1349; CHECK-2p2-NEXT:    ret1350entry:1351  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1352  ret <vscale x 4 x half> %01353}1354 1355define <vscale x 4 x half> @test_svrintp_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1356; CHECK-LABEL: test_svrintp_4f16_x_2:1357; CHECK:       // %bb.0: // %entry1358; CHECK-NEXT:    movprfx z0, z11359; CHECK-NEXT:    frintp z0.h, p0/m, z1.h1360; CHECK-NEXT:    ret1361;1362; CHECK-2p2-LABEL: test_svrintp_4f16_x_2:1363; CHECK-2p2:       // %bb.0: // %entry1364; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h1365; CHECK-2p2-NEXT:    ret1366entry:1367  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1368  ret <vscale x 4 x half> %01369}1370 1371define <vscale x 4 x half> @test_svrintp_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1372; SVE-LABEL: test_svrintp_4f16_z:1373; SVE:       // %bb.0: // %entry1374; SVE-NEXT:    movi v0.2d, #00000000000000001375; SVE-NEXT:    frintp z0.h, p0/m, z1.h1376; SVE-NEXT:    ret1377;1378; CHECK-2p2-LABEL: test_svrintp_4f16_z:1379; CHECK-2p2:       // %bb.0: // %entry1380; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h1381; CHECK-2p2-NEXT:    ret1382;1383; STREAMING-SVE-LABEL: test_svrintp_4f16_z:1384; STREAMING-SVE:       // %bb.0: // %entry1385; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01386; STREAMING-SVE-NEXT:    frintp z0.h, p0/m, z1.h1387; STREAMING-SVE-NEXT:    ret1388entry:1389  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1390  ret <vscale x 4 x half> %01391}1392 1393define <vscale x 2 x half> @test_svrintp_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {1394; CHECK-LABEL: test_svrintp_2f16_x_1:1395; CHECK:       // %bb.0: // %entry1396; CHECK-NEXT:    frintp z0.h, p0/m, z0.h1397; CHECK-NEXT:    ret1398;1399; CHECK-2p2-LABEL: test_svrintp_2f16_x_1:1400; CHECK-2p2:       // %bb.0: // %entry1401; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z0.h1402; CHECK-2p2-NEXT:    ret1403entry:1404  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1405  ret <vscale x 2 x half> %01406}1407 1408define <vscale x 2 x half> @test_svrintp_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {1409; CHECK-LABEL: test_svrintp_2f16_x_2:1410; CHECK:       // %bb.0: // %entry1411; CHECK-NEXT:    movprfx z0, z11412; CHECK-NEXT:    frintp z0.h, p0/m, z1.h1413; CHECK-NEXT:    ret1414;1415; CHECK-2p2-LABEL: test_svrintp_2f16_x_2:1416; CHECK-2p2:       // %bb.0: // %entry1417; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h1418; CHECK-2p2-NEXT:    ret1419entry:1420  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1421  ret <vscale x 2 x half> %01422}1423 1424define <vscale x 2 x half> @test_svrintp_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {1425; SVE-LABEL: test_svrintp_2f16_z:1426; SVE:       // %bb.0: // %entry1427; SVE-NEXT:    movi v0.2d, #00000000000000001428; SVE-NEXT:    frintp z0.h, p0/m, z1.h1429; SVE-NEXT:    ret1430;1431; CHECK-2p2-LABEL: test_svrintp_2f16_z:1432; CHECK-2p2:       // %bb.0: // %entry1433; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h1434; CHECK-2p2-NEXT:    ret1435;1436; STREAMING-SVE-LABEL: test_svrintp_2f16_z:1437; STREAMING-SVE:       // %bb.0: // %entry1438; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01439; STREAMING-SVE-NEXT:    frintp z0.h, p0/m, z1.h1440; STREAMING-SVE-NEXT:    ret1441entry:1442  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1443  ret <vscale x 2 x half> %01444}1445 1446define <vscale x 2 x float> @test_svrintp_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {1447; CHECK-LABEL: test_svrintp_2f32_x_1:1448; CHECK:       // %bb.0: // %entry1449; CHECK-NEXT:    frintp z0.s, p0/m, z0.s1450; CHECK-NEXT:    ret1451;1452; CHECK-2p2-LABEL: test_svrintp_2f32_x_1:1453; CHECK-2p2:       // %bb.0: // %entry1454; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z0.s1455; CHECK-2p2-NEXT:    ret1456entry:1457  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1458  ret <vscale x 2 x float> %01459}1460 1461define <vscale x 2 x float> @test_svrintp_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {1462; CHECK-LABEL: test_svrintp_2f32_x_2:1463; CHECK:       // %bb.0: // %entry1464; CHECK-NEXT:    movprfx z0, z11465; CHECK-NEXT:    frintp z0.s, p0/m, z1.s1466; CHECK-NEXT:    ret1467;1468; CHECK-2p2-LABEL: test_svrintp_2f32_x_2:1469; CHECK-2p2:       // %bb.0: // %entry1470; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z1.s1471; CHECK-2p2-NEXT:    ret1472entry:1473  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1474  ret <vscale x 2 x float> %01475}1476 1477define <vscale x 2 x float> @test_svrintp_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {1478; SVE-LABEL: test_svrintp_2f32_z:1479; SVE:       // %bb.0: // %entry1480; SVE-NEXT:    movi v0.2d, #00000000000000001481; SVE-NEXT:    frintp z0.s, p0/m, z1.s1482; SVE-NEXT:    ret1483;1484; CHECK-2p2-LABEL: test_svrintp_2f32_z:1485; CHECK-2p2:       // %bb.0: // %entry1486; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z1.s1487; CHECK-2p2-NEXT:    ret1488;1489; STREAMING-SVE-LABEL: test_svrintp_2f32_z:1490; STREAMING-SVE:       // %bb.0: // %entry1491; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x01492; STREAMING-SVE-NEXT:    frintp z0.s, p0/m, z1.s1493; STREAMING-SVE-NEXT:    ret1494entry:1495  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1496  ret <vscale x 2 x float> %01497}1498 1499define <vscale x 4 x float> @test_svrintp_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {1500; CHECK-LABEL: test_svrintp_f32_x_1:1501; CHECK:       // %bb.0: // %entry1502; CHECK-NEXT:    frintp z0.s, p0/m, z0.s1503; CHECK-NEXT:    ret1504;1505; CHECK-2p2-LABEL: test_svrintp_f32_x_1:1506; CHECK-2p2:       // %bb.0: // %entry1507; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z0.s1508; CHECK-2p2-NEXT:    ret1509entry:1510  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1511  ret <vscale x 4 x float> %01512}1513 1514define <vscale x 4 x float> @test_svrintp_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {1515; CHECK-LABEL: test_svrintp_f32_x_2:1516; CHECK:       // %bb.0: // %entry1517; CHECK-NEXT:    movprfx z0, z11518; CHECK-NEXT:    frintp z0.s, p0/m, z1.s1519; CHECK-NEXT:    ret1520;1521; CHECK-2p2-LABEL: test_svrintp_f32_x_2:1522; CHECK-2p2:       // %bb.0: // %entry1523; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z1.s1524; CHECK-2p2-NEXT:    ret1525entry:1526  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1527  ret <vscale x 4 x float> %01528}1529 1530define <vscale x 4 x float> @test_svrintp_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {1531; SVE-LABEL: test_svrintp_f32_z:1532; SVE:       // %bb.0: // %entry1533; SVE-NEXT:    movi v0.2d, #00000000000000001534; SVE-NEXT:    frintp z0.s, p0/m, z1.s1535; SVE-NEXT:    ret1536;1537; CHECK-2p2-LABEL: test_svrintp_f32_z:1538; CHECK-2p2:       // %bb.0: // %entry1539; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z1.s1540; CHECK-2p2-NEXT:    ret1541;1542; STREAMING-SVE-LABEL: test_svrintp_f32_z:1543; STREAMING-SVE:       // %bb.0: // %entry1544; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x01545; STREAMING-SVE-NEXT:    frintp z0.s, p0/m, z1.s1546; STREAMING-SVE-NEXT:    ret1547entry:1548  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1549  ret <vscale x 4 x float> %01550}1551 1552define <vscale x 2 x double> @test_svrintp_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {1553; CHECK-LABEL: test_svrintp_f64_x_1:1554; CHECK:       // %bb.0: // %entry1555; CHECK-NEXT:    frintp z0.d, p0/m, z0.d1556; CHECK-NEXT:    ret1557;1558; CHECK-2p2-LABEL: test_svrintp_f64_x_1:1559; CHECK-2p2:       // %bb.0: // %entry1560; CHECK-2p2-NEXT:    frintp z0.d, p0/z, z0.d1561; CHECK-2p2-NEXT:    ret1562entry:1563  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1564  ret <vscale x 2 x double> %01565}1566 1567define <vscale x 2 x double> @test_svrintp_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {1568; CHECK-LABEL: test_svrintp_f64_x_2:1569; CHECK:       // %bb.0: // %entry1570; CHECK-NEXT:    movprfx z0, z11571; CHECK-NEXT:    frintp z0.d, p0/m, z1.d1572; CHECK-NEXT:    ret1573;1574; CHECK-2p2-LABEL: test_svrintp_f64_x_2:1575; CHECK-2p2:       // %bb.0: // %entry1576; CHECK-2p2-NEXT:    frintp z0.d, p0/z, z1.d1577; CHECK-2p2-NEXT:    ret1578entry:1579  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1580  ret <vscale x 2 x double> %01581}1582 1583 1584define <vscale x 2 x double> @test_svrintp_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {1585; SVE-LABEL: test_svrintp_f64_z:1586; SVE:       // %bb.0: // %entry1587; SVE-NEXT:    movi v0.2d, #00000000000000001588; SVE-NEXT:    frintp z0.d, p0/m, z1.d1589; SVE-NEXT:    ret1590;1591; CHECK-2p2-LABEL: test_svrintp_f64_z:1592; CHECK-2p2:       // %bb.0: // %entry1593; CHECK-2p2-NEXT:    frintp z0.d, p0/z, z1.d1594; CHECK-2p2-NEXT:    ret1595;1596; STREAMING-SVE-LABEL: test_svrintp_f64_z:1597; STREAMING-SVE:       // %bb.0: // %entry1598; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x01599; STREAMING-SVE-NEXT:    frintp z0.d, p0/m, z1.d1600; STREAMING-SVE-NEXT:    ret1601entry:1602  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1603  ret <vscale x 2 x double> %01604}1605 1606define <vscale x 8 x half> @test_svrintx_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {1607; CHECK-LABEL: test_svrintx_f16_x_1:1608; CHECK:       // %bb.0: // %entry1609; CHECK-NEXT:    frintx z0.h, p0/m, z0.h1610; CHECK-NEXT:    ret1611;1612; CHECK-2p2-LABEL: test_svrintx_f16_x_1:1613; CHECK-2p2:       // %bb.0: // %entry1614; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z0.h1615; CHECK-2p2-NEXT:    ret1616entry:1617  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1618  ret <vscale x 8 x half> %01619}1620 1621define <vscale x 8 x half> @test_svrintx_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1622; CHECK-LABEL: test_svrintx_f16_x_2:1623; CHECK:       // %bb.0: // %entry1624; CHECK-NEXT:    movprfx z0, z11625; CHECK-NEXT:    frintx z0.h, p0/m, z1.h1626; CHECK-NEXT:    ret1627;1628; CHECK-2p2-LABEL: test_svrintx_f16_x_2:1629; CHECK-2p2:       // %bb.0: // %entry1630; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h1631; CHECK-2p2-NEXT:    ret1632entry:1633  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1634  ret <vscale x 8 x half> %01635}1636 1637define <vscale x 8 x half> @test_svrintx_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1638; SVE-LABEL: test_svrintx_f16_z:1639; SVE:       // %bb.0: // %entry1640; SVE-NEXT:    movi v0.2d, #00000000000000001641; SVE-NEXT:    frintx z0.h, p0/m, z1.h1642; SVE-NEXT:    ret1643;1644; CHECK-2p2-LABEL: test_svrintx_f16_z:1645; CHECK-2p2:       // %bb.0: // %entry1646; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h1647; CHECK-2p2-NEXT:    ret1648;1649; STREAMING-SVE-LABEL: test_svrintx_f16_z:1650; STREAMING-SVE:       // %bb.0: // %entry1651; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01652; STREAMING-SVE-NEXT:    frintx z0.h, p0/m, z1.h1653; STREAMING-SVE-NEXT:    ret1654entry:1655  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1656  ret <vscale x 8 x half> %01657}1658 1659define <vscale x 4 x half> @test_svrintx_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {1660; CHECK-LABEL: test_svrintx_4f16_x_1:1661; CHECK:       // %bb.0: // %entry1662; CHECK-NEXT:    frintx z0.h, p0/m, z0.h1663; CHECK-NEXT:    ret1664;1665; CHECK-2p2-LABEL: test_svrintx_4f16_x_1:1666; CHECK-2p2:       // %bb.0: // %entry1667; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z0.h1668; CHECK-2p2-NEXT:    ret1669entry:1670  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1671  ret <vscale x 4 x half> %01672}1673 1674define <vscale x 4 x half> @test_svrintx_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1675; CHECK-LABEL: test_svrintx_4f16_x_2:1676; CHECK:       // %bb.0: // %entry1677; CHECK-NEXT:    movprfx z0, z11678; CHECK-NEXT:    frintx z0.h, p0/m, z1.h1679; CHECK-NEXT:    ret1680;1681; CHECK-2p2-LABEL: test_svrintx_4f16_x_2:1682; CHECK-2p2:       // %bb.0: // %entry1683; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h1684; CHECK-2p2-NEXT:    ret1685entry:1686  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1687  ret <vscale x 4 x half> %01688}1689 1690define <vscale x 4 x half> @test_svrintx_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1691; SVE-LABEL: test_svrintx_4f16_z:1692; SVE:       // %bb.0: // %entry1693; SVE-NEXT:    movi v0.2d, #00000000000000001694; SVE-NEXT:    frintx z0.h, p0/m, z1.h1695; SVE-NEXT:    ret1696;1697; CHECK-2p2-LABEL: test_svrintx_4f16_z:1698; CHECK-2p2:       // %bb.0: // %entry1699; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h1700; CHECK-2p2-NEXT:    ret1701;1702; STREAMING-SVE-LABEL: test_svrintx_4f16_z:1703; STREAMING-SVE:       // %bb.0: // %entry1704; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01705; STREAMING-SVE-NEXT:    frintx z0.h, p0/m, z1.h1706; STREAMING-SVE-NEXT:    ret1707entry:1708  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1709  ret <vscale x 4 x half> %01710}1711 1712define <vscale x 2 x half> @test_svrintx_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {1713; CHECK-LABEL: test_svrintx_2f16_x_1:1714; CHECK:       // %bb.0: // %entry1715; CHECK-NEXT:    frintx z0.h, p0/m, z0.h1716; CHECK-NEXT:    ret1717;1718; CHECK-2p2-LABEL: test_svrintx_2f16_x_1:1719; CHECK-2p2:       // %bb.0: // %entry1720; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z0.h1721; CHECK-2p2-NEXT:    ret1722entry:1723  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1724  ret <vscale x 2 x half> %01725}1726 1727define <vscale x 2 x half> @test_svrintx_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {1728; CHECK-LABEL: test_svrintx_2f16_x_2:1729; CHECK:       // %bb.0: // %entry1730; CHECK-NEXT:    movprfx z0, z11731; CHECK-NEXT:    frintx z0.h, p0/m, z1.h1732; CHECK-NEXT:    ret1733;1734; CHECK-2p2-LABEL: test_svrintx_2f16_x_2:1735; CHECK-2p2:       // %bb.0: // %entry1736; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h1737; CHECK-2p2-NEXT:    ret1738entry:1739  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1740  ret <vscale x 2 x half> %01741}1742 1743define <vscale x 2 x half> @test_svrintx_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {1744; SVE-LABEL: test_svrintx_2f16_z:1745; SVE:       // %bb.0: // %entry1746; SVE-NEXT:    movi v0.2d, #00000000000000001747; SVE-NEXT:    frintx z0.h, p0/m, z1.h1748; SVE-NEXT:    ret1749;1750; CHECK-2p2-LABEL: test_svrintx_2f16_z:1751; CHECK-2p2:       // %bb.0: // %entry1752; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h1753; CHECK-2p2-NEXT:    ret1754;1755; STREAMING-SVE-LABEL: test_svrintx_2f16_z:1756; STREAMING-SVE:       // %bb.0: // %entry1757; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01758; STREAMING-SVE-NEXT:    frintx z0.h, p0/m, z1.h1759; STREAMING-SVE-NEXT:    ret1760entry:1761  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)1762  ret <vscale x 2 x half> %01763}1764 1765define <vscale x 2 x float> @test_svrintx_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {1766; CHECK-LABEL: test_svrintx_2f32_x_1:1767; CHECK:       // %bb.0: // %entry1768; CHECK-NEXT:    frintx z0.s, p0/m, z0.s1769; CHECK-NEXT:    ret1770;1771; CHECK-2p2-LABEL: test_svrintx_2f32_x_1:1772; CHECK-2p2:       // %bb.0: // %entry1773; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z0.s1774; CHECK-2p2-NEXT:    ret1775entry:1776  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1777  ret <vscale x 2 x float> %01778}1779 1780define <vscale x 2 x float> @test_svrintx_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {1781; CHECK-LABEL: test_svrintx_2f32_x_2:1782; CHECK:       // %bb.0: // %entry1783; CHECK-NEXT:    movprfx z0, z11784; CHECK-NEXT:    frintx z0.s, p0/m, z1.s1785; CHECK-NEXT:    ret1786;1787; CHECK-2p2-LABEL: test_svrintx_2f32_x_2:1788; CHECK-2p2:       // %bb.0: // %entry1789; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z1.s1790; CHECK-2p2-NEXT:    ret1791entry:1792  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1793  ret <vscale x 2 x float> %01794}1795 1796define <vscale x 2 x float> @test_svrintx_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {1797; SVE-LABEL: test_svrintx_2f32_z:1798; SVE:       // %bb.0: // %entry1799; SVE-NEXT:    movi v0.2d, #00000000000000001800; SVE-NEXT:    frintx z0.s, p0/m, z1.s1801; SVE-NEXT:    ret1802;1803; CHECK-2p2-LABEL: test_svrintx_2f32_z:1804; CHECK-2p2:       // %bb.0: // %entry1805; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z1.s1806; CHECK-2p2-NEXT:    ret1807;1808; STREAMING-SVE-LABEL: test_svrintx_2f32_z:1809; STREAMING-SVE:       // %bb.0: // %entry1810; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x01811; STREAMING-SVE-NEXT:    frintx z0.s, p0/m, z1.s1812; STREAMING-SVE-NEXT:    ret1813entry:1814  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)1815  ret <vscale x 2 x float> %01816}1817 1818define <vscale x 4 x float> @test_svrintx_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {1819; CHECK-LABEL: test_svrintx_f32_x_1:1820; CHECK:       // %bb.0: // %entry1821; CHECK-NEXT:    frintx z0.s, p0/m, z0.s1822; CHECK-NEXT:    ret1823;1824; CHECK-2p2-LABEL: test_svrintx_f32_x_1:1825; CHECK-2p2:       // %bb.0: // %entry1826; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z0.s1827; CHECK-2p2-NEXT:    ret1828entry:1829  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1830  ret <vscale x 4 x float> %01831}1832 1833define <vscale x 4 x float> @test_svrintx_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {1834; CHECK-LABEL: test_svrintx_f32_x_2:1835; CHECK:       // %bb.0: // %entry1836; CHECK-NEXT:    movprfx z0, z11837; CHECK-NEXT:    frintx z0.s, p0/m, z1.s1838; CHECK-NEXT:    ret1839;1840; CHECK-2p2-LABEL: test_svrintx_f32_x_2:1841; CHECK-2p2:       // %bb.0: // %entry1842; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z1.s1843; CHECK-2p2-NEXT:    ret1844entry:1845  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1846  ret <vscale x 4 x float> %01847}1848 1849define <vscale x 4 x float> @test_svrintx_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {1850; SVE-LABEL: test_svrintx_f32_z:1851; SVE:       // %bb.0: // %entry1852; SVE-NEXT:    movi v0.2d, #00000000000000001853; SVE-NEXT:    frintx z0.s, p0/m, z1.s1854; SVE-NEXT:    ret1855;1856; CHECK-2p2-LABEL: test_svrintx_f32_z:1857; CHECK-2p2:       // %bb.0: // %entry1858; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z1.s1859; CHECK-2p2-NEXT:    ret1860;1861; STREAMING-SVE-LABEL: test_svrintx_f32_z:1862; STREAMING-SVE:       // %bb.0: // %entry1863; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x01864; STREAMING-SVE-NEXT:    frintx z0.s, p0/m, z1.s1865; STREAMING-SVE-NEXT:    ret1866entry:1867  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1868  ret <vscale x 4 x float> %01869}1870 1871define <vscale x 2 x double> @test_svrintx_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {1872; CHECK-LABEL: test_svrintx_f64_x_1:1873; CHECK:       // %bb.0: // %entry1874; CHECK-NEXT:    frintx z0.d, p0/m, z0.d1875; CHECK-NEXT:    ret1876;1877; CHECK-2p2-LABEL: test_svrintx_f64_x_1:1878; CHECK-2p2:       // %bb.0: // %entry1879; CHECK-2p2-NEXT:    frintx z0.d, p0/z, z0.d1880; CHECK-2p2-NEXT:    ret1881entry:1882  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1883  ret <vscale x 2 x double> %01884}1885 1886define <vscale x 2 x double> @test_svrintx_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {1887; CHECK-LABEL: test_svrintx_f64_x_2:1888; CHECK:       // %bb.0: // %entry1889; CHECK-NEXT:    movprfx z0, z11890; CHECK-NEXT:    frintx z0.d, p0/m, z1.d1891; CHECK-NEXT:    ret1892;1893; CHECK-2p2-LABEL: test_svrintx_f64_x_2:1894; CHECK-2p2:       // %bb.0: // %entry1895; CHECK-2p2-NEXT:    frintx z0.d, p0/z, z1.d1896; CHECK-2p2-NEXT:    ret1897entry:1898  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1899  ret <vscale x 2 x double> %01900}1901 1902define <vscale x 2 x double> @test_svrintx_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {1903; SVE-LABEL: test_svrintx_f64_z:1904; SVE:       // %bb.0: // %entry1905; SVE-NEXT:    movi v0.2d, #00000000000000001906; SVE-NEXT:    frintx z0.d, p0/m, z1.d1907; SVE-NEXT:    ret1908;1909; CHECK-2p2-LABEL: test_svrintx_f64_z:1910; CHECK-2p2:       // %bb.0: // %entry1911; CHECK-2p2-NEXT:    frintx z0.d, p0/z, z1.d1912; CHECK-2p2-NEXT:    ret1913;1914; STREAMING-SVE-LABEL: test_svrintx_f64_z:1915; STREAMING-SVE:       // %bb.0: // %entry1916; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x01917; STREAMING-SVE-NEXT:    frintx z0.d, p0/m, z1.d1918; STREAMING-SVE-NEXT:    ret1919entry:1920  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1921  ret <vscale x 2 x double> %01922}1923 1924define <vscale x 8 x half> @test_svrintz_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {1925; CHECK-LABEL: test_svrintz_f16_x_1:1926; CHECK:       // %bb.0: // %entry1927; CHECK-NEXT:    frintz z0.h, p0/m, z0.h1928; CHECK-NEXT:    ret1929;1930; CHECK-2p2-LABEL: test_svrintz_f16_x_1:1931; CHECK-2p2:       // %bb.0: // %entry1932; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z0.h1933; CHECK-2p2-NEXT:    ret1934entry:1935  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1936  ret <vscale x 8 x half> %01937}1938 1939define <vscale x 8 x half> @test_svrintz_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1940; CHECK-LABEL: test_svrintz_f16_x_2:1941; CHECK:       // %bb.0: // %entry1942; CHECK-NEXT:    movprfx z0, z11943; CHECK-NEXT:    frintz z0.h, p0/m, z1.h1944; CHECK-NEXT:    ret1945;1946; CHECK-2p2-LABEL: test_svrintz_f16_x_2:1947; CHECK-2p2:       // %bb.0: // %entry1948; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h1949; CHECK-2p2-NEXT:    ret1950entry:1951  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1952  ret <vscale x 8 x half> %01953}1954 1955define <vscale x 8 x half> @test_svrintz_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {1956; SVE-LABEL: test_svrintz_f16_z:1957; SVE:       // %bb.0: // %entry1958; SVE-NEXT:    movi v0.2d, #00000000000000001959; SVE-NEXT:    frintz z0.h, p0/m, z1.h1960; SVE-NEXT:    ret1961;1962; CHECK-2p2-LABEL: test_svrintz_f16_z:1963; CHECK-2p2:       // %bb.0: // %entry1964; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h1965; CHECK-2p2-NEXT:    ret1966;1967; STREAMING-SVE-LABEL: test_svrintz_f16_z:1968; STREAMING-SVE:       // %bb.0: // %entry1969; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x01970; STREAMING-SVE-NEXT:    frintz z0.h, p0/m, z1.h1971; STREAMING-SVE-NEXT:    ret1972entry:1973  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1974  ret <vscale x 8 x half> %01975}1976 1977define <vscale x 4 x half> @test_svrintz_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {1978; CHECK-LABEL: test_svrintz_4f16_x_1:1979; CHECK:       // %bb.0: // %entry1980; CHECK-NEXT:    frintz z0.h, p0/m, z0.h1981; CHECK-NEXT:    ret1982;1983; CHECK-2p2-LABEL: test_svrintz_4f16_x_1:1984; CHECK-2p2:       // %bb.0: // %entry1985; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z0.h1986; CHECK-2p2-NEXT:    ret1987entry:1988  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)1989  ret <vscale x 4 x half> %01990}1991 1992define <vscale x 4 x half> @test_svrintz_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {1993; CHECK-LABEL: test_svrintz_4f16_x_2:1994; CHECK:       // %bb.0: // %entry1995; CHECK-NEXT:    movprfx z0, z11996; CHECK-NEXT:    frintz z0.h, p0/m, z1.h1997; CHECK-NEXT:    ret1998;1999; CHECK-2p2-LABEL: test_svrintz_4f16_x_2:2000; CHECK-2p2:       // %bb.0: // %entry2001; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h2002; CHECK-2p2-NEXT:    ret2003entry:2004  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2005  ret <vscale x 4 x half> %02006}2007 2008define <vscale x 4 x half> @test_svrintz_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {2009; SVE-LABEL: test_svrintz_4f16_z:2010; SVE:       // %bb.0: // %entry2011; SVE-NEXT:    movi v0.2d, #00000000000000002012; SVE-NEXT:    frintz z0.h, p0/m, z1.h2013; SVE-NEXT:    ret2014;2015; CHECK-2p2-LABEL: test_svrintz_4f16_z:2016; CHECK-2p2:       // %bb.0: // %entry2017; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h2018; CHECK-2p2-NEXT:    ret2019;2020; STREAMING-SVE-LABEL: test_svrintz_4f16_z:2021; STREAMING-SVE:       // %bb.0: // %entry2022; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02023; STREAMING-SVE-NEXT:    frintz z0.h, p0/m, z1.h2024; STREAMING-SVE-NEXT:    ret2025entry:2026  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2027  ret <vscale x 4 x half> %02028}2029 2030define <vscale x 2 x half> @test_svrintz_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {2031; CHECK-LABEL: test_svrintz_2f16_x_1:2032; CHECK:       // %bb.0: // %entry2033; CHECK-NEXT:    frintz z0.h, p0/m, z0.h2034; CHECK-NEXT:    ret2035;2036; CHECK-2p2-LABEL: test_svrintz_2f16_x_1:2037; CHECK-2p2:       // %bb.0: // %entry2038; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z0.h2039; CHECK-2p2-NEXT:    ret2040entry:2041  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2042  ret <vscale x 2 x half> %02043}2044 2045define <vscale x 2 x half> @test_svrintz_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {2046; CHECK-LABEL: test_svrintz_2f16_x_2:2047; CHECK:       // %bb.0: // %entry2048; CHECK-NEXT:    movprfx z0, z12049; CHECK-NEXT:    frintz z0.h, p0/m, z1.h2050; CHECK-NEXT:    ret2051;2052; CHECK-2p2-LABEL: test_svrintz_2f16_x_2:2053; CHECK-2p2:       // %bb.0: // %entry2054; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h2055; CHECK-2p2-NEXT:    ret2056entry:2057  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2058  ret <vscale x 2 x half> %02059}2060 2061define <vscale x 2 x half> @test_svrintz_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {2062; SVE-LABEL: test_svrintz_2f16_z:2063; SVE:       // %bb.0: // %entry2064; SVE-NEXT:    movi v0.2d, #00000000000000002065; SVE-NEXT:    frintz z0.h, p0/m, z1.h2066; SVE-NEXT:    ret2067;2068; CHECK-2p2-LABEL: test_svrintz_2f16_z:2069; CHECK-2p2:       // %bb.0: // %entry2070; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h2071; CHECK-2p2-NEXT:    ret2072;2073; STREAMING-SVE-LABEL: test_svrintz_2f16_z:2074; STREAMING-SVE:       // %bb.0: // %entry2075; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02076; STREAMING-SVE-NEXT:    frintz z0.h, p0/m, z1.h2077; STREAMING-SVE-NEXT:    ret2078entry:2079  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2080  ret <vscale x 2 x half> %02081}2082 2083define <vscale x 2 x float> @test_svrintz_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {2084; CHECK-LABEL: test_svrintz_2f32_x_1:2085; CHECK:       // %bb.0: // %entry2086; CHECK-NEXT:    frintz z0.s, p0/m, z0.s2087; CHECK-NEXT:    ret2088;2089; CHECK-2p2-LABEL: test_svrintz_2f32_x_1:2090; CHECK-2p2:       // %bb.0: // %entry2091; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z0.s2092; CHECK-2p2-NEXT:    ret2093entry:2094  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2095  ret <vscale x 2 x float> %02096}2097 2098define <vscale x 2 x float> @test_svrintz_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {2099; CHECK-LABEL: test_svrintz_2f32_x_2:2100; CHECK:       // %bb.0: // %entry2101; CHECK-NEXT:    movprfx z0, z12102; CHECK-NEXT:    frintz z0.s, p0/m, z1.s2103; CHECK-NEXT:    ret2104;2105; CHECK-2p2-LABEL: test_svrintz_2f32_x_2:2106; CHECK-2p2:       // %bb.0: // %entry2107; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z1.s2108; CHECK-2p2-NEXT:    ret2109entry:2110  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2111  ret <vscale x 2 x float> %02112}2113 2114define <vscale x 2 x float> @test_svrintz_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {2115; SVE-LABEL: test_svrintz_2f32_z:2116; SVE:       // %bb.0: // %entry2117; SVE-NEXT:    movi v0.2d, #00000000000000002118; SVE-NEXT:    frintz z0.s, p0/m, z1.s2119; SVE-NEXT:    ret2120;2121; CHECK-2p2-LABEL: test_svrintz_2f32_z:2122; CHECK-2p2:       // %bb.0: // %entry2123; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z1.s2124; CHECK-2p2-NEXT:    ret2125;2126; STREAMING-SVE-LABEL: test_svrintz_2f32_z:2127; STREAMING-SVE:       // %bb.0: // %entry2128; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x02129; STREAMING-SVE-NEXT:    frintz z0.s, p0/m, z1.s2130; STREAMING-SVE-NEXT:    ret2131entry:2132  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2133  ret <vscale x 2 x float> %02134}2135 2136define <vscale x 4 x float> @test_svrintz_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {2137; CHECK-LABEL: test_svrintz_f32_x_1:2138; CHECK:       // %bb.0: // %entry2139; CHECK-NEXT:    frintz z0.s, p0/m, z0.s2140; CHECK-NEXT:    ret2141;2142; CHECK-2p2-LABEL: test_svrintz_f32_x_1:2143; CHECK-2p2:       // %bb.0: // %entry2144; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z0.s2145; CHECK-2p2-NEXT:    ret2146entry:2147  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2148  ret <vscale x 4 x float> %02149}2150 2151define <vscale x 4 x float> @test_svrintz_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {2152; CHECK-LABEL: test_svrintz_f32_x_2:2153; CHECK:       // %bb.0: // %entry2154; CHECK-NEXT:    movprfx z0, z12155; CHECK-NEXT:    frintz z0.s, p0/m, z1.s2156; CHECK-NEXT:    ret2157;2158; CHECK-2p2-LABEL: test_svrintz_f32_x_2:2159; CHECK-2p2:       // %bb.0: // %entry2160; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z1.s2161; CHECK-2p2-NEXT:    ret2162entry:2163  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2164  ret <vscale x 4 x float> %02165}2166 2167define <vscale x 4 x float> @test_svrintz_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {2168; SVE-LABEL: test_svrintz_f32_z:2169; SVE:       // %bb.0: // %entry2170; SVE-NEXT:    movi v0.2d, #00000000000000002171; SVE-NEXT:    frintz z0.s, p0/m, z1.s2172; SVE-NEXT:    ret2173;2174; CHECK-2p2-LABEL: test_svrintz_f32_z:2175; CHECK-2p2:       // %bb.0: // %entry2176; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z1.s2177; CHECK-2p2-NEXT:    ret2178;2179; STREAMING-SVE-LABEL: test_svrintz_f32_z:2180; STREAMING-SVE:       // %bb.0: // %entry2181; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x02182; STREAMING-SVE-NEXT:    frintz z0.s, p0/m, z1.s2183; STREAMING-SVE-NEXT:    ret2184entry:2185  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2186  ret <vscale x 4 x float> %02187}2188 2189define <vscale x 2 x double> @test_svrintz_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {2190; CHECK-LABEL: test_svrintz_f64_x_1:2191; CHECK:       // %bb.0: // %entry2192; CHECK-NEXT:    frintz z0.d, p0/m, z0.d2193; CHECK-NEXT:    ret2194;2195; CHECK-2p2-LABEL: test_svrintz_f64_x_1:2196; CHECK-2p2:       // %bb.0: // %entry2197; CHECK-2p2-NEXT:    frintz z0.d, p0/z, z0.d2198; CHECK-2p2-NEXT:    ret2199entry:2200  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2201  ret <vscale x 2 x double> %02202}2203 2204define <vscale x 2 x double> @test_svrintz_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {2205; CHECK-LABEL: test_svrintz_f64_x_2:2206; CHECK:       // %bb.0: // %entry2207; CHECK-NEXT:    movprfx z0, z12208; CHECK-NEXT:    frintz z0.d, p0/m, z1.d2209; CHECK-NEXT:    ret2210;2211; CHECK-2p2-LABEL: test_svrintz_f64_x_2:2212; CHECK-2p2:       // %bb.0: // %entry2213; CHECK-2p2-NEXT:    frintz z0.d, p0/z, z1.d2214; CHECK-2p2-NEXT:    ret2215entry:2216  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2217  ret <vscale x 2 x double> %02218}2219 2220define <vscale x 2 x double> @test_svrintz_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {2221; SVE-LABEL: test_svrintz_f64_z:2222; SVE:       // %bb.0: // %entry2223; SVE-NEXT:    movi v0.2d, #00000000000000002224; SVE-NEXT:    frintz z0.d, p0/m, z1.d2225; SVE-NEXT:    ret2226;2227; CHECK-2p2-LABEL: test_svrintz_f64_z:2228; CHECK-2p2:       // %bb.0: // %entry2229; CHECK-2p2-NEXT:    frintz z0.d, p0/z, z1.d2230; CHECK-2p2-NEXT:    ret2231;2232; STREAMING-SVE-LABEL: test_svrintz_f64_z:2233; STREAMING-SVE:       // %bb.0: // %entry2234; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x02235; STREAMING-SVE-NEXT:    frintz z0.d, p0/m, z1.d2236; STREAMING-SVE-NEXT:    ret2237entry:2238  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2239  ret <vscale x 2 x double> %02240}2241 2242define <vscale x 8 x half> @test_svrecpx_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {2243; CHECK-LABEL: test_svrecpx_f16_x_1:2244; CHECK:       // %bb.0: // %entry2245; CHECK-NEXT:    frecpx z0.h, p0/m, z0.h2246; CHECK-NEXT:    ret2247;2248; CHECK-2p2-LABEL: test_svrecpx_f16_x_1:2249; CHECK-2p2:       // %bb.0: // %entry2250; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z0.h2251; CHECK-2p2-NEXT:    ret2252entry:2253  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2254  ret <vscale x 8 x half> %02255}2256 2257define <vscale x 8 x half> @test_svrecpx_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {2258; CHECK-LABEL: test_svrecpx_f16_x_2:2259; CHECK:       // %bb.0: // %entry2260; CHECK-NEXT:    movprfx z0, z12261; CHECK-NEXT:    frecpx z0.h, p0/m, z1.h2262; CHECK-NEXT:    ret2263;2264; CHECK-2p2-LABEL: test_svrecpx_f16_x_2:2265; CHECK-2p2:       // %bb.0: // %entry2266; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h2267; CHECK-2p2-NEXT:    ret2268entry:2269  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2270  ret <vscale x 8 x half> %02271}2272 2273define <vscale x 8 x half> @test_svrecpx_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {2274; SVE-LABEL: test_svrecpx_f16_z:2275; SVE:       // %bb.0: // %entry2276; SVE-NEXT:    movi v0.2d, #00000000000000002277; SVE-NEXT:    frecpx z0.h, p0/m, z1.h2278; SVE-NEXT:    ret2279;2280; CHECK-2p2-LABEL: test_svrecpx_f16_z:2281; CHECK-2p2:       // %bb.0: // %entry2282; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h2283; CHECK-2p2-NEXT:    ret2284;2285; STREAMING-SVE-LABEL: test_svrecpx_f16_z:2286; STREAMING-SVE:       // %bb.0: // %entry2287; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02288; STREAMING-SVE-NEXT:    frecpx z0.h, p0/m, z1.h2289; STREAMING-SVE-NEXT:    ret2290entry:2291  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2292  ret <vscale x 8 x half> %02293}2294 2295define <vscale x 4 x half> @test_svrecpx_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {2296; CHECK-LABEL: test_svrecpx_4f16_x_1:2297; CHECK:       // %bb.0: // %entry2298; CHECK-NEXT:    frecpx z0.h, p0/m, z0.h2299; CHECK-NEXT:    ret2300;2301; CHECK-2p2-LABEL: test_svrecpx_4f16_x_1:2302; CHECK-2p2:       // %bb.0: // %entry2303; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z0.h2304; CHECK-2p2-NEXT:    ret2305entry:2306  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2307  ret <vscale x 4 x half> %02308}2309 2310define <vscale x 4 x half> @test_svrecpx_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {2311; CHECK-LABEL: test_svrecpx_4f16_x_2:2312; CHECK:       // %bb.0: // %entry2313; CHECK-NEXT:    movprfx z0, z12314; CHECK-NEXT:    frecpx z0.h, p0/m, z1.h2315; CHECK-NEXT:    ret2316;2317; CHECK-2p2-LABEL: test_svrecpx_4f16_x_2:2318; CHECK-2p2:       // %bb.0: // %entry2319; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h2320; CHECK-2p2-NEXT:    ret2321entry:2322  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2323  ret <vscale x 4 x half> %02324}2325 2326define <vscale x 4 x half> @test_svrecpx_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {2327; SVE-LABEL: test_svrecpx_4f16_z:2328; SVE:       // %bb.0: // %entry2329; SVE-NEXT:    movi v0.2d, #00000000000000002330; SVE-NEXT:    frecpx z0.h, p0/m, z1.h2331; SVE-NEXT:    ret2332;2333; CHECK-2p2-LABEL: test_svrecpx_4f16_z:2334; CHECK-2p2:       // %bb.0: // %entry2335; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h2336; CHECK-2p2-NEXT:    ret2337;2338; STREAMING-SVE-LABEL: test_svrecpx_4f16_z:2339; STREAMING-SVE:       // %bb.0: // %entry2340; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02341; STREAMING-SVE-NEXT:    frecpx z0.h, p0/m, z1.h2342; STREAMING-SVE-NEXT:    ret2343entry:2344  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2345  ret <vscale x 4 x half> %02346}2347 2348define <vscale x 2 x half> @test_svrecpx_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {2349; CHECK-LABEL: test_svrecpx_2f16_x_1:2350; CHECK:       // %bb.0: // %entry2351; CHECK-NEXT:    frecpx z0.h, p0/m, z0.h2352; CHECK-NEXT:    ret2353;2354; CHECK-2p2-LABEL: test_svrecpx_2f16_x_1:2355; CHECK-2p2:       // %bb.0: // %entry2356; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z0.h2357; CHECK-2p2-NEXT:    ret2358entry:2359  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2360  ret <vscale x 2 x half> %02361}2362 2363define <vscale x 2 x half> @test_svrecpx_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {2364; CHECK-LABEL: test_svrecpx_2f16_x_2:2365; CHECK:       // %bb.0: // %entry2366; CHECK-NEXT:    movprfx z0, z12367; CHECK-NEXT:    frecpx z0.h, p0/m, z1.h2368; CHECK-NEXT:    ret2369;2370; CHECK-2p2-LABEL: test_svrecpx_2f16_x_2:2371; CHECK-2p2:       // %bb.0: // %entry2372; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h2373; CHECK-2p2-NEXT:    ret2374entry:2375  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2376  ret <vscale x 2 x half> %02377}2378 2379define <vscale x 2 x half> @test_svrecpx_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {2380; SVE-LABEL: test_svrecpx_2f16_z:2381; SVE:       // %bb.0: // %entry2382; SVE-NEXT:    movi v0.2d, #00000000000000002383; SVE-NEXT:    frecpx z0.h, p0/m, z1.h2384; SVE-NEXT:    ret2385;2386; CHECK-2p2-LABEL: test_svrecpx_2f16_z:2387; CHECK-2p2:       // %bb.0: // %entry2388; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h2389; CHECK-2p2-NEXT:    ret2390;2391; STREAMING-SVE-LABEL: test_svrecpx_2f16_z:2392; STREAMING-SVE:       // %bb.0: // %entry2393; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02394; STREAMING-SVE-NEXT:    frecpx z0.h, p0/m, z1.h2395; STREAMING-SVE-NEXT:    ret2396entry:2397  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2398  ret <vscale x 2 x half> %02399}2400 2401define <vscale x 2 x float> @test_svrecpx_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {2402; CHECK-LABEL: test_svrecpx_2f32_x_1:2403; CHECK:       // %bb.0: // %entry2404; CHECK-NEXT:    frecpx z0.s, p0/m, z0.s2405; CHECK-NEXT:    ret2406;2407; CHECK-2p2-LABEL: test_svrecpx_2f32_x_1:2408; CHECK-2p2:       // %bb.0: // %entry2409; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z0.s2410; CHECK-2p2-NEXT:    ret2411entry:2412  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2413  ret <vscale x 2 x float> %02414}2415 2416define <vscale x 2 x float> @test_svrecpx_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {2417; CHECK-LABEL: test_svrecpx_2f32_x_2:2418; CHECK:       // %bb.0: // %entry2419; CHECK-NEXT:    movprfx z0, z12420; CHECK-NEXT:    frecpx z0.s, p0/m, z1.s2421; CHECK-NEXT:    ret2422;2423; CHECK-2p2-LABEL: test_svrecpx_2f32_x_2:2424; CHECK-2p2:       // %bb.0: // %entry2425; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z1.s2426; CHECK-2p2-NEXT:    ret2427entry:2428  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2429  ret <vscale x 2 x float> %02430}2431 2432define <vscale x 2 x float> @test_svrecpx_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {2433; SVE-LABEL: test_svrecpx_2f32_z:2434; SVE:       // %bb.0: // %entry2435; SVE-NEXT:    movi v0.2d, #00000000000000002436; SVE-NEXT:    frecpx z0.s, p0/m, z1.s2437; SVE-NEXT:    ret2438;2439; CHECK-2p2-LABEL: test_svrecpx_2f32_z:2440; CHECK-2p2:       // %bb.0: // %entry2441; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z1.s2442; CHECK-2p2-NEXT:    ret2443;2444; STREAMING-SVE-LABEL: test_svrecpx_2f32_z:2445; STREAMING-SVE:       // %bb.0: // %entry2446; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x02447; STREAMING-SVE-NEXT:    frecpx z0.s, p0/m, z1.s2448; STREAMING-SVE-NEXT:    ret2449entry:2450  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2451  ret <vscale x 2 x float> %02452}2453 2454define <vscale x 4 x float> @test_svrecpx_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {2455; CHECK-LABEL: test_svrecpx_f32_x_1:2456; CHECK:       // %bb.0: // %entry2457; CHECK-NEXT:    frecpx z0.s, p0/m, z0.s2458; CHECK-NEXT:    ret2459;2460; CHECK-2p2-LABEL: test_svrecpx_f32_x_1:2461; CHECK-2p2:       // %bb.0: // %entry2462; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z0.s2463; CHECK-2p2-NEXT:    ret2464entry:2465  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2466  ret <vscale x 4 x float> %02467}2468 2469define <vscale x 4 x float> @test_svrecpx_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {2470; CHECK-LABEL: test_svrecpx_f32_x_2:2471; CHECK:       // %bb.0: // %entry2472; CHECK-NEXT:    movprfx z0, z12473; CHECK-NEXT:    frecpx z0.s, p0/m, z1.s2474; CHECK-NEXT:    ret2475;2476; CHECK-2p2-LABEL: test_svrecpx_f32_x_2:2477; CHECK-2p2:       // %bb.0: // %entry2478; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z1.s2479; CHECK-2p2-NEXT:    ret2480entry:2481  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2482  ret <vscale x 4 x float> %02483}2484 2485define <vscale x 4 x float> @test_svrecpx_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {2486; SVE-LABEL: test_svrecpx_f32_z:2487; SVE:       // %bb.0: // %entry2488; SVE-NEXT:    movi v0.2d, #00000000000000002489; SVE-NEXT:    frecpx z0.s, p0/m, z1.s2490; SVE-NEXT:    ret2491;2492; CHECK-2p2-LABEL: test_svrecpx_f32_z:2493; CHECK-2p2:       // %bb.0: // %entry2494; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z1.s2495; CHECK-2p2-NEXT:    ret2496;2497; STREAMING-SVE-LABEL: test_svrecpx_f32_z:2498; STREAMING-SVE:       // %bb.0: // %entry2499; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x02500; STREAMING-SVE-NEXT:    frecpx z0.s, p0/m, z1.s2501; STREAMING-SVE-NEXT:    ret2502entry:2503  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2504  ret <vscale x 4 x float> %02505}2506 2507define <vscale x 2 x double> @test_svrecpx_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {2508; CHECK-LABEL: test_svrecpx_f64_x_1:2509; CHECK:       // %bb.0: // %entry2510; CHECK-NEXT:    frecpx z0.d, p0/m, z0.d2511; CHECK-NEXT:    ret2512;2513; CHECK-2p2-LABEL: test_svrecpx_f64_x_1:2514; CHECK-2p2:       // %bb.0: // %entry2515; CHECK-2p2-NEXT:    frecpx z0.d, p0/z, z0.d2516; CHECK-2p2-NEXT:    ret2517entry:2518  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2519  ret <vscale x 2 x double> %02520}2521 2522define <vscale x 2 x double> @test_svrecpx_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {2523; CHECK-LABEL: test_svrecpx_f64_x_2:2524; CHECK:       // %bb.0: // %entry2525; CHECK-NEXT:    movprfx z0, z12526; CHECK-NEXT:    frecpx z0.d, p0/m, z1.d2527; CHECK-NEXT:    ret2528;2529; CHECK-2p2-LABEL: test_svrecpx_f64_x_2:2530; CHECK-2p2:       // %bb.0: // %entry2531; CHECK-2p2-NEXT:    frecpx z0.d, p0/z, z1.d2532; CHECK-2p2-NEXT:    ret2533entry:2534  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2535  ret <vscale x 2 x double> %02536}2537 2538define <vscale x 2 x double> @test_svrecpx_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {2539; SVE-LABEL: test_svrecpx_f64_z:2540; SVE:       // %bb.0: // %entry2541; SVE-NEXT:    movi v0.2d, #00000000000000002542; SVE-NEXT:    frecpx z0.d, p0/m, z1.d2543; SVE-NEXT:    ret2544;2545; CHECK-2p2-LABEL: test_svrecpx_f64_z:2546; CHECK-2p2:       // %bb.0: // %entry2547; CHECK-2p2-NEXT:    frecpx z0.d, p0/z, z1.d2548; CHECK-2p2-NEXT:    ret2549;2550; STREAMING-SVE-LABEL: test_svrecpx_f64_z:2551; STREAMING-SVE:       // %bb.0: // %entry2552; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x02553; STREAMING-SVE-NEXT:    frecpx z0.d, p0/m, z1.d2554; STREAMING-SVE-NEXT:    ret2555entry:2556  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2557  ret <vscale x 2 x double> %02558}2559 2560define <vscale x 8 x half> @test_svsqrt_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {2561; CHECK-LABEL: test_svsqrt_f16_x_1:2562; CHECK:       // %bb.0: // %entry2563; CHECK-NEXT:    fsqrt z0.h, p0/m, z0.h2564; CHECK-NEXT:    ret2565;2566; CHECK-2p2-LABEL: test_svsqrt_f16_x_1:2567; CHECK-2p2:       // %bb.0: // %entry2568; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z0.h2569; CHECK-2p2-NEXT:    ret2570entry:2571  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2572  ret <vscale x 8 x half> %02573}2574 2575define <vscale x 8 x half> @test_svsqrt_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {2576; CHECK-LABEL: test_svsqrt_f16_x_2:2577; CHECK:       // %bb.0: // %entry2578; CHECK-NEXT:    movprfx z0, z12579; CHECK-NEXT:    fsqrt z0.h, p0/m, z1.h2580; CHECK-NEXT:    ret2581;2582; CHECK-2p2-LABEL: test_svsqrt_f16_x_2:2583; CHECK-2p2:       // %bb.0: // %entry2584; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h2585; CHECK-2p2-NEXT:    ret2586entry:2587  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2588  ret <vscale x 8 x half> %02589}2590 2591define <vscale x 8 x half> @test_svsqrt_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {2592; SVE-LABEL: test_svsqrt_f16_z:2593; SVE:       // %bb.0: // %entry2594; SVE-NEXT:    movi v0.2d, #00000000000000002595; SVE-NEXT:    fsqrt z0.h, p0/m, z1.h2596; SVE-NEXT:    ret2597;2598; CHECK-2p2-LABEL: test_svsqrt_f16_z:2599; CHECK-2p2:       // %bb.0: // %entry2600; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h2601; CHECK-2p2-NEXT:    ret2602;2603; STREAMING-SVE-LABEL: test_svsqrt_f16_z:2604; STREAMING-SVE:       // %bb.0: // %entry2605; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02606; STREAMING-SVE-NEXT:    fsqrt z0.h, p0/m, z1.h2607; STREAMING-SVE-NEXT:    ret2608entry:2609  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2610  ret <vscale x 8 x half> %02611}2612 2613define <vscale x 4 x half> @test_svsqrt_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {2614; CHECK-LABEL: test_svsqrt_4f16_x_1:2615; CHECK:       // %bb.0: // %entry2616; CHECK-NEXT:    fsqrt z0.h, p0/m, z0.h2617; CHECK-NEXT:    ret2618;2619; CHECK-2p2-LABEL: test_svsqrt_4f16_x_1:2620; CHECK-2p2:       // %bb.0: // %entry2621; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z0.h2622; CHECK-2p2-NEXT:    ret2623entry:2624  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2625  ret <vscale x 4 x half> %02626}2627 2628define <vscale x 4 x half> @test_svsqrt_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {2629; CHECK-LABEL: test_svsqrt_4f16_x_2:2630; CHECK:       // %bb.0: // %entry2631; CHECK-NEXT:    movprfx z0, z12632; CHECK-NEXT:    fsqrt z0.h, p0/m, z1.h2633; CHECK-NEXT:    ret2634;2635; CHECK-2p2-LABEL: test_svsqrt_4f16_x_2:2636; CHECK-2p2:       // %bb.0: // %entry2637; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h2638; CHECK-2p2-NEXT:    ret2639entry:2640  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2641  ret <vscale x 4 x half> %02642}2643 2644define <vscale x 4 x half> @test_svsqrt_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {2645; SVE-LABEL: test_svsqrt_4f16_z:2646; SVE:       // %bb.0: // %entry2647; SVE-NEXT:    movi v0.2d, #00000000000000002648; SVE-NEXT:    fsqrt z0.h, p0/m, z1.h2649; SVE-NEXT:    ret2650;2651; CHECK-2p2-LABEL: test_svsqrt_4f16_z:2652; CHECK-2p2:       // %bb.0: // %entry2653; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h2654; CHECK-2p2-NEXT:    ret2655;2656; STREAMING-SVE-LABEL: test_svsqrt_4f16_z:2657; STREAMING-SVE:       // %bb.0: // %entry2658; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02659; STREAMING-SVE-NEXT:    fsqrt z0.h, p0/m, z1.h2660; STREAMING-SVE-NEXT:    ret2661entry:2662  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2663  ret <vscale x 4 x half> %02664}2665 2666define <vscale x 2 x half> @test_svsqrt_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {2667; CHECK-LABEL: test_svsqrt_2f16_x_1:2668; CHECK:       // %bb.0: // %entry2669; CHECK-NEXT:    fsqrt z0.h, p0/m, z0.h2670; CHECK-NEXT:    ret2671;2672; CHECK-2p2-LABEL: test_svsqrt_2f16_x_1:2673; CHECK-2p2:       // %bb.0: // %entry2674; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z0.h2675; CHECK-2p2-NEXT:    ret2676entry:2677  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2678  ret <vscale x 2 x half> %02679}2680 2681define <vscale x 2 x half> @test_svsqrt_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {2682; CHECK-LABEL: test_svsqrt_2f16_x_2:2683; CHECK:       // %bb.0: // %entry2684; CHECK-NEXT:    movprfx z0, z12685; CHECK-NEXT:    fsqrt z0.h, p0/m, z1.h2686; CHECK-NEXT:    ret2687;2688; CHECK-2p2-LABEL: test_svsqrt_2f16_x_2:2689; CHECK-2p2:       // %bb.0: // %entry2690; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h2691; CHECK-2p2-NEXT:    ret2692entry:2693  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2694  ret <vscale x 2 x half> %02695}2696 2697define <vscale x 2 x half> @test_svsqrt_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {2698; SVE-LABEL: test_svsqrt_2f16_z:2699; SVE:       // %bb.0: // %entry2700; SVE-NEXT:    movi v0.2d, #00000000000000002701; SVE-NEXT:    fsqrt z0.h, p0/m, z1.h2702; SVE-NEXT:    ret2703;2704; CHECK-2p2-LABEL: test_svsqrt_2f16_z:2705; CHECK-2p2:       // %bb.0: // %entry2706; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h2707; CHECK-2p2-NEXT:    ret2708;2709; STREAMING-SVE-LABEL: test_svsqrt_2f16_z:2710; STREAMING-SVE:       // %bb.0: // %entry2711; STREAMING-SVE-NEXT:    mov z0.h, #0 // =0x02712; STREAMING-SVE-NEXT:    fsqrt z0.h, p0/m, z1.h2713; STREAMING-SVE-NEXT:    ret2714entry:2715  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2716  ret <vscale x 2 x half> %02717}2718 2719define <vscale x 2 x float> @test_svsqrt_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {2720; CHECK-LABEL: test_svsqrt_2f32_x_1:2721; CHECK:       // %bb.0: // %entry2722; CHECK-NEXT:    fsqrt z0.s, p0/m, z0.s2723; CHECK-NEXT:    ret2724;2725; CHECK-2p2-LABEL: test_svsqrt_2f32_x_1:2726; CHECK-2p2:       // %bb.0: // %entry2727; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z0.s2728; CHECK-2p2-NEXT:    ret2729entry:2730  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2731  ret <vscale x 2 x float> %02732}2733 2734define <vscale x 2 x float> @test_svsqrt_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {2735; CHECK-LABEL: test_svsqrt_2f32_x_2:2736; CHECK:       // %bb.0: // %entry2737; CHECK-NEXT:    movprfx z0, z12738; CHECK-NEXT:    fsqrt z0.s, p0/m, z1.s2739; CHECK-NEXT:    ret2740;2741; CHECK-2p2-LABEL: test_svsqrt_2f32_x_2:2742; CHECK-2p2:       // %bb.0: // %entry2743; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z1.s2744; CHECK-2p2-NEXT:    ret2745entry:2746  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2747  ret <vscale x 2 x float> %02748}2749 2750define <vscale x 2 x float> @test_svsqrt_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {2751; SVE-LABEL: test_svsqrt_2f32_z:2752; SVE:       // %bb.0: // %entry2753; SVE-NEXT:    movi v0.2d, #00000000000000002754; SVE-NEXT:    fsqrt z0.s, p0/m, z1.s2755; SVE-NEXT:    ret2756;2757; CHECK-2p2-LABEL: test_svsqrt_2f32_z:2758; CHECK-2p2:       // %bb.0: // %entry2759; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z1.s2760; CHECK-2p2-NEXT:    ret2761;2762; STREAMING-SVE-LABEL: test_svsqrt_2f32_z:2763; STREAMING-SVE:       // %bb.0: // %entry2764; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x02765; STREAMING-SVE-NEXT:    fsqrt z0.s, p0/m, z1.s2766; STREAMING-SVE-NEXT:    ret2767entry:2768  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)2769  ret <vscale x 2 x float> %02770}2771 2772define <vscale x 4 x float> @test_svsqrt_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {2773; CHECK-LABEL: test_svsqrt_f32_x_1:2774; CHECK:       // %bb.0: // %entry2775; CHECK-NEXT:    fsqrt z0.s, p0/m, z0.s2776; CHECK-NEXT:    ret2777;2778; CHECK-2p2-LABEL: test_svsqrt_f32_x_1:2779; CHECK-2p2:       // %bb.0: // %entry2780; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z0.s2781; CHECK-2p2-NEXT:    ret2782entry:2783  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2784  ret <vscale x 4 x float> %02785}2786 2787define <vscale x 4 x float> @test_svsqrt_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {2788; CHECK-LABEL: test_svsqrt_f32_x_2:2789; CHECK:       // %bb.0: // %entry2790; CHECK-NEXT:    movprfx z0, z12791; CHECK-NEXT:    fsqrt z0.s, p0/m, z1.s2792; CHECK-NEXT:    ret2793;2794; CHECK-2p2-LABEL: test_svsqrt_f32_x_2:2795; CHECK-2p2:       // %bb.0: // %entry2796; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z1.s2797; CHECK-2p2-NEXT:    ret2798entry:2799  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2800  ret <vscale x 4 x float> %02801}2802 2803define <vscale x 4 x float> @test_svsqrt_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {2804; SVE-LABEL: test_svsqrt_f32_z:2805; SVE:       // %bb.0: // %entry2806; SVE-NEXT:    movi v0.2d, #00000000000000002807; SVE-NEXT:    fsqrt z0.s, p0/m, z1.s2808; SVE-NEXT:    ret2809;2810; CHECK-2p2-LABEL: test_svsqrt_f32_z:2811; CHECK-2p2:       // %bb.0: // %entry2812; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z1.s2813; CHECK-2p2-NEXT:    ret2814;2815; STREAMING-SVE-LABEL: test_svsqrt_f32_z:2816; STREAMING-SVE:       // %bb.0: // %entry2817; STREAMING-SVE-NEXT:    mov z0.s, #0 // =0x02818; STREAMING-SVE-NEXT:    fsqrt z0.s, p0/m, z1.s2819; STREAMING-SVE-NEXT:    ret2820entry:2821  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)2822  ret <vscale x 4 x float> %02823}2824 2825define <vscale x 2 x double> @test_svsqrt_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {2826; CHECK-LABEL: test_svsqrt_f64_x_1:2827; CHECK:       // %bb.0: // %entry2828; CHECK-NEXT:    fsqrt z0.d, p0/m, z0.d2829; CHECK-NEXT:    ret2830;2831; CHECK-2p2-LABEL: test_svsqrt_f64_x_1:2832; CHECK-2p2:       // %bb.0: // %entry2833; CHECK-2p2-NEXT:    fsqrt z0.d, p0/z, z0.d2834; CHECK-2p2-NEXT:    ret2835entry:2836  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2837  ret <vscale x 2 x double> %02838}2839 2840define <vscale x 2 x double> @test_svsqrt_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {2841; CHECK-LABEL: test_svsqrt_f64_x_2:2842; CHECK:       // %bb.0: // %entry2843; CHECK-NEXT:    movprfx z0, z12844; CHECK-NEXT:    fsqrt z0.d, p0/m, z1.d2845; CHECK-NEXT:    ret2846;2847; CHECK-2p2-LABEL: test_svsqrt_f64_x_2:2848; CHECK-2p2:       // %bb.0: // %entry2849; CHECK-2p2-NEXT:    fsqrt z0.d, p0/z, z1.d2850; CHECK-2p2-NEXT:    ret2851entry:2852  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2853  ret <vscale x 2 x double> %02854}2855 2856define <vscale x 2 x double> @test_svsqrt_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {2857; SVE-LABEL: test_svsqrt_f64_z:2858; SVE:       // %bb.0: // %entry2859; SVE-NEXT:    movi v0.2d, #00000000000000002860; SVE-NEXT:    fsqrt z0.d, p0/m, z1.d2861; SVE-NEXT:    ret2862;2863; CHECK-2p2-LABEL: test_svsqrt_f64_z:2864; CHECK-2p2:       // %bb.0: // %entry2865; CHECK-2p2-NEXT:    fsqrt z0.d, p0/z, z1.d2866; CHECK-2p2-NEXT:    ret2867;2868; STREAMING-SVE-LABEL: test_svsqrt_f64_z:2869; STREAMING-SVE:       // %bb.0: // %entry2870; STREAMING-SVE-NEXT:    mov z0.d, #0 // =0x02871; STREAMING-SVE-NEXT:    fsqrt z0.d, p0/m, z1.d2872; STREAMING-SVE-NEXT:    ret2873entry:2874  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)2875  ret <vscale x 2 x double> %02876}2877 2878define <vscale x 8 x half> @test_svfrinta_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {2879; CHECK-LABEL: test_svfrinta_nxv8f16_ptrue_u:2880; CHECK:       // %bb.0: // %entry2881; CHECK-NEXT:    ptrue p0.h2882; CHECK-NEXT:    movprfx z0, z12883; CHECK-NEXT:    frinta z0.h, p0/m, z1.h2884; CHECK-NEXT:    ret2885;2886; CHECK-2p2-LABEL: test_svfrinta_nxv8f16_ptrue_u:2887; CHECK-2p2:       // %bb.0: // %entry2888; CHECK-2p2-NEXT:    ptrue p0.h2889; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h2890; CHECK-2p2-NEXT:    ret2891entry:2892  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)2893  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)2894  ret <vscale x 8 x half> %02895}2896 2897define <vscale x 8 x half> @test_svfrinta_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {2898; CHECK-LABEL: test_svfrinta_nxv8f16_ptrue:2899; CHECK:       // %bb.0: // %entry2900; CHECK-NEXT:    ptrue p0.h2901; CHECK-NEXT:    movprfx z0, z22902; CHECK-NEXT:    frinta z0.h, p0/m, z2.h2903; CHECK-NEXT:    ret2904;2905; CHECK-2p2-LABEL: test_svfrinta_nxv8f16_ptrue:2906; CHECK-2p2:       // %bb.0: // %entry2907; CHECK-2p2-NEXT:    ptrue p0.h2908; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z2.h2909; CHECK-2p2-NEXT:    ret2910entry:2911  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)2912  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)2913  ret <vscale x 8 x half> %02914}2915 2916 2917define <vscale x 4 x half> @test_svfrinta_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {2918; CHECK-LABEL: test_svfrinta_nxv4f16_ptrue_u:2919; CHECK:       // %bb.0: // %entry2920; CHECK-NEXT:    ptrue p0.s2921; CHECK-NEXT:    movprfx z0, z12922; CHECK-NEXT:    frinta z0.h, p0/m, z1.h2923; CHECK-NEXT:    ret2924;2925; CHECK-2p2-LABEL: test_svfrinta_nxv4f16_ptrue_u:2926; CHECK-2p2:       // %bb.0: // %entry2927; CHECK-2p2-NEXT:    ptrue p0.s2928; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h2929; CHECK-2p2-NEXT:    ret2930entry:2931  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)2932  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)2933  ret <vscale x 4 x half> %02934}2935 2936define <vscale x 4 x half> @test_svfrinta_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {2937; CHECK-LABEL: test_svfrinta_nxv4f16_ptrue:2938; CHECK:       // %bb.0: // %entry2939; CHECK-NEXT:    ptrue p0.s2940; CHECK-NEXT:    movprfx z0, z22941; CHECK-NEXT:    frinta z0.h, p0/m, z2.h2942; CHECK-NEXT:    ret2943;2944; CHECK-2p2-LABEL: test_svfrinta_nxv4f16_ptrue:2945; CHECK-2p2:       // %bb.0: // %entry2946; CHECK-2p2-NEXT:    ptrue p0.s2947; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z2.h2948; CHECK-2p2-NEXT:    ret2949entry:2950  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)2951  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)2952  ret <vscale x 4 x half> %02953}2954 2955 2956define <vscale x 2 x half> @test_svfrinta_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {2957; CHECK-LABEL: test_svfrinta_nxv2f16_ptrue_u:2958; CHECK:       // %bb.0: // %entry2959; CHECK-NEXT:    ptrue p0.d2960; CHECK-NEXT:    movprfx z0, z12961; CHECK-NEXT:    frinta z0.h, p0/m, z1.h2962; CHECK-NEXT:    ret2963;2964; CHECK-2p2-LABEL: test_svfrinta_nxv2f16_ptrue_u:2965; CHECK-2p2:       // %bb.0: // %entry2966; CHECK-2p2-NEXT:    ptrue p0.d2967; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z1.h2968; CHECK-2p2-NEXT:    ret2969entry:2970  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)2971  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)2972  ret <vscale x 2 x half> %02973}2974 2975define <vscale x 2 x half> @test_svfrinta_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {2976; CHECK-LABEL: test_svfrinta_nxv2f16_ptrue:2977; CHECK:       // %bb.0: // %entry2978; CHECK-NEXT:    ptrue p0.d2979; CHECK-NEXT:    movprfx z0, z22980; CHECK-NEXT:    frinta z0.h, p0/m, z2.h2981; CHECK-NEXT:    ret2982;2983; CHECK-2p2-LABEL: test_svfrinta_nxv2f16_ptrue:2984; CHECK-2p2:       // %bb.0: // %entry2985; CHECK-2p2-NEXT:    ptrue p0.d2986; CHECK-2p2-NEXT:    frinta z0.h, p0/z, z2.h2987; CHECK-2p2-NEXT:    ret2988entry:2989  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)2990  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)2991  ret <vscale x 2 x half> %02992}2993 2994 2995define <vscale x 2 x float> @test_svfrinta_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {2996; CHECK-LABEL: test_svfrinta_nxv2f32_ptrue_u:2997; CHECK:       // %bb.0: // %entry2998; CHECK-NEXT:    ptrue p0.d2999; CHECK-NEXT:    movprfx z0, z13000; CHECK-NEXT:    frinta z0.s, p0/m, z1.s3001; CHECK-NEXT:    ret3002;3003; CHECK-2p2-LABEL: test_svfrinta_nxv2f32_ptrue_u:3004; CHECK-2p2:       // %bb.0: // %entry3005; CHECK-2p2-NEXT:    ptrue p0.d3006; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z1.s3007; CHECK-2p2-NEXT:    ret3008entry:3009  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3010  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)3011  ret <vscale x 2 x float> %03012}3013 3014define <vscale x 2 x float> @test_svfrinta_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {3015; CHECK-LABEL: test_svfrinta_nxv2f32_ptrue:3016; CHECK:       // %bb.0: // %entry3017; CHECK-NEXT:    ptrue p0.d3018; CHECK-NEXT:    movprfx z0, z23019; CHECK-NEXT:    frinta z0.s, p0/m, z2.s3020; CHECK-NEXT:    ret3021;3022; CHECK-2p2-LABEL: test_svfrinta_nxv2f32_ptrue:3023; CHECK-2p2:       // %bb.0: // %entry3024; CHECK-2p2-NEXT:    ptrue p0.d3025; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z2.s3026; CHECK-2p2-NEXT:    ret3027entry:3028  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3029  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)3030  ret <vscale x 2 x float> %03031}3032 3033 3034define <vscale x 4 x float> @test_svfrinta_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {3035; CHECK-LABEL: test_svfrinta_nxv4f32_ptrue_u:3036; CHECK:       // %bb.0: // %entry3037; CHECK-NEXT:    ptrue p0.s3038; CHECK-NEXT:    movprfx z0, z13039; CHECK-NEXT:    frinta z0.s, p0/m, z1.s3040; CHECK-NEXT:    ret3041;3042; CHECK-2p2-LABEL: test_svfrinta_nxv4f32_ptrue_u:3043; CHECK-2p2:       // %bb.0: // %entry3044; CHECK-2p2-NEXT:    ptrue p0.s3045; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z1.s3046; CHECK-2p2-NEXT:    ret3047entry:3048  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3049  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)3050  ret <vscale x 4 x float> %03051}3052 3053define <vscale x 4 x float> @test_svfrinta_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {3054; CHECK-LABEL: test_svfrinta_nxv4f32_ptrue:3055; CHECK:       // %bb.0: // %entry3056; CHECK-NEXT:    ptrue p0.s3057; CHECK-NEXT:    movprfx z0, z23058; CHECK-NEXT:    frinta z0.s, p0/m, z2.s3059; CHECK-NEXT:    ret3060;3061; CHECK-2p2-LABEL: test_svfrinta_nxv4f32_ptrue:3062; CHECK-2p2:       // %bb.0: // %entry3063; CHECK-2p2-NEXT:    ptrue p0.s3064; CHECK-2p2-NEXT:    frinta z0.s, p0/z, z2.s3065; CHECK-2p2-NEXT:    ret3066entry:3067  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3068  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)3069  ret <vscale x 4 x float> %03070}3071 3072 3073define <vscale x 2 x double> @test_svfrinta_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {3074; CHECK-LABEL: test_svfrinta_nxv2f64_ptrue_u:3075; CHECK:       // %bb.0: // %entry3076; CHECK-NEXT:    ptrue p0.d3077; CHECK-NEXT:    movprfx z0, z13078; CHECK-NEXT:    frinta z0.d, p0/m, z1.d3079; CHECK-NEXT:    ret3080;3081; CHECK-2p2-LABEL: test_svfrinta_nxv2f64_ptrue_u:3082; CHECK-2p2:       // %bb.0: // %entry3083; CHECK-2p2-NEXT:    ptrue p0.d3084; CHECK-2p2-NEXT:    frinta z0.d, p0/z, z1.d3085; CHECK-2p2-NEXT:    ret3086entry:3087  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3088  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)3089  ret <vscale x 2 x double> %03090}3091 3092define <vscale x 2 x double> @test_svfrinta_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {3093; CHECK-LABEL: test_svfrinta_nxv2f64_ptrue:3094; CHECK:       // %bb.0: // %entry3095; CHECK-NEXT:    ptrue p0.d3096; CHECK-NEXT:    movprfx z0, z23097; CHECK-NEXT:    frinta z0.d, p0/m, z2.d3098; CHECK-NEXT:    ret3099;3100; CHECK-2p2-LABEL: test_svfrinta_nxv2f64_ptrue:3101; CHECK-2p2:       // %bb.0: // %entry3102; CHECK-2p2-NEXT:    ptrue p0.d3103; CHECK-2p2-NEXT:    frinta z0.d, p0/z, z2.d3104; CHECK-2p2-NEXT:    ret3105entry:3106  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3107  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)3108  ret <vscale x 2 x double> %03109}3110 3111 3112define <vscale x 8 x half> @test_svfrinti_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {3113; CHECK-LABEL: test_svfrinti_nxv8f16_ptrue_u:3114; CHECK:       // %bb.0: // %entry3115; CHECK-NEXT:    ptrue p0.h3116; CHECK-NEXT:    movprfx z0, z13117; CHECK-NEXT:    frinti z0.h, p0/m, z1.h3118; CHECK-NEXT:    ret3119;3120; CHECK-2p2-LABEL: test_svfrinti_nxv8f16_ptrue_u:3121; CHECK-2p2:       // %bb.0: // %entry3122; CHECK-2p2-NEXT:    ptrue p0.h3123; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h3124; CHECK-2p2-NEXT:    ret3125entry:3126  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3127  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)3128  ret <vscale x 8 x half> %03129}3130 3131define <vscale x 8 x half> @test_svfrinti_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {3132; CHECK-LABEL: test_svfrinti_nxv8f16_ptrue:3133; CHECK:       // %bb.0: // %entry3134; CHECK-NEXT:    ptrue p0.h3135; CHECK-NEXT:    movprfx z0, z23136; CHECK-NEXT:    frinti z0.h, p0/m, z2.h3137; CHECK-NEXT:    ret3138;3139; CHECK-2p2-LABEL: test_svfrinti_nxv8f16_ptrue:3140; CHECK-2p2:       // %bb.0: // %entry3141; CHECK-2p2-NEXT:    ptrue p0.h3142; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z2.h3143; CHECK-2p2-NEXT:    ret3144entry:3145  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3146  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)3147  ret <vscale x 8 x half> %03148}3149 3150 3151define <vscale x 4 x half> @test_svfrinti_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {3152; CHECK-LABEL: test_svfrinti_nxv4f16_ptrue_u:3153; CHECK:       // %bb.0: // %entry3154; CHECK-NEXT:    ptrue p0.s3155; CHECK-NEXT:    movprfx z0, z13156; CHECK-NEXT:    frinti z0.h, p0/m, z1.h3157; CHECK-NEXT:    ret3158;3159; CHECK-2p2-LABEL: test_svfrinti_nxv4f16_ptrue_u:3160; CHECK-2p2:       // %bb.0: // %entry3161; CHECK-2p2-NEXT:    ptrue p0.s3162; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h3163; CHECK-2p2-NEXT:    ret3164entry:3165  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3166  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)3167  ret <vscale x 4 x half> %03168}3169 3170define <vscale x 4 x half> @test_svfrinti_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {3171; CHECK-LABEL: test_svfrinti_nxv4f16_ptrue:3172; CHECK:       // %bb.0: // %entry3173; CHECK-NEXT:    ptrue p0.s3174; CHECK-NEXT:    movprfx z0, z23175; CHECK-NEXT:    frinti z0.h, p0/m, z2.h3176; CHECK-NEXT:    ret3177;3178; CHECK-2p2-LABEL: test_svfrinti_nxv4f16_ptrue:3179; CHECK-2p2:       // %bb.0: // %entry3180; CHECK-2p2-NEXT:    ptrue p0.s3181; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z2.h3182; CHECK-2p2-NEXT:    ret3183entry:3184  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3185  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)3186  ret <vscale x 4 x half> %03187}3188 3189 3190define <vscale x 2 x half> @test_svfrinti_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {3191; CHECK-LABEL: test_svfrinti_nxv2f16_ptrue_u:3192; CHECK:       // %bb.0: // %entry3193; CHECK-NEXT:    ptrue p0.d3194; CHECK-NEXT:    movprfx z0, z13195; CHECK-NEXT:    frinti z0.h, p0/m, z1.h3196; CHECK-NEXT:    ret3197;3198; CHECK-2p2-LABEL: test_svfrinti_nxv2f16_ptrue_u:3199; CHECK-2p2:       // %bb.0: // %entry3200; CHECK-2p2-NEXT:    ptrue p0.d3201; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z1.h3202; CHECK-2p2-NEXT:    ret3203entry:3204  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3205  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)3206  ret <vscale x 2 x half> %03207}3208 3209define <vscale x 2 x half> @test_svfrinti_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {3210; CHECK-LABEL: test_svfrinti_nxv2f16_ptrue:3211; CHECK:       // %bb.0: // %entry3212; CHECK-NEXT:    ptrue p0.d3213; CHECK-NEXT:    movprfx z0, z23214; CHECK-NEXT:    frinti z0.h, p0/m, z2.h3215; CHECK-NEXT:    ret3216;3217; CHECK-2p2-LABEL: test_svfrinti_nxv2f16_ptrue:3218; CHECK-2p2:       // %bb.0: // %entry3219; CHECK-2p2-NEXT:    ptrue p0.d3220; CHECK-2p2-NEXT:    frinti z0.h, p0/z, z2.h3221; CHECK-2p2-NEXT:    ret3222entry:3223  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3224  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)3225  ret <vscale x 2 x half> %03226}3227 3228 3229define <vscale x 2 x float> @test_svfrinti_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {3230; CHECK-LABEL: test_svfrinti_nxv2f32_ptrue_u:3231; CHECK:       // %bb.0: // %entry3232; CHECK-NEXT:    ptrue p0.d3233; CHECK-NEXT:    movprfx z0, z13234; CHECK-NEXT:    frinti z0.s, p0/m, z1.s3235; CHECK-NEXT:    ret3236;3237; CHECK-2p2-LABEL: test_svfrinti_nxv2f32_ptrue_u:3238; CHECK-2p2:       // %bb.0: // %entry3239; CHECK-2p2-NEXT:    ptrue p0.d3240; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z1.s3241; CHECK-2p2-NEXT:    ret3242entry:3243  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3244  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)3245  ret <vscale x 2 x float> %03246}3247 3248define <vscale x 2 x float> @test_svfrinti_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {3249; CHECK-LABEL: test_svfrinti_nxv2f32_ptrue:3250; CHECK:       // %bb.0: // %entry3251; CHECK-NEXT:    ptrue p0.d3252; CHECK-NEXT:    movprfx z0, z23253; CHECK-NEXT:    frinti z0.s, p0/m, z2.s3254; CHECK-NEXT:    ret3255;3256; CHECK-2p2-LABEL: test_svfrinti_nxv2f32_ptrue:3257; CHECK-2p2:       // %bb.0: // %entry3258; CHECK-2p2-NEXT:    ptrue p0.d3259; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z2.s3260; CHECK-2p2-NEXT:    ret3261entry:3262  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3263  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)3264  ret <vscale x 2 x float> %03265}3266 3267 3268define <vscale x 4 x float> @test_svfrinti_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {3269; CHECK-LABEL: test_svfrinti_nxv4f32_ptrue_u:3270; CHECK:       // %bb.0: // %entry3271; CHECK-NEXT:    ptrue p0.s3272; CHECK-NEXT:    movprfx z0, z13273; CHECK-NEXT:    frinti z0.s, p0/m, z1.s3274; CHECK-NEXT:    ret3275;3276; CHECK-2p2-LABEL: test_svfrinti_nxv4f32_ptrue_u:3277; CHECK-2p2:       // %bb.0: // %entry3278; CHECK-2p2-NEXT:    ptrue p0.s3279; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z1.s3280; CHECK-2p2-NEXT:    ret3281entry:3282  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3283  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)3284  ret <vscale x 4 x float> %03285}3286 3287define <vscale x 4 x float> @test_svfrinti_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {3288; CHECK-LABEL: test_svfrinti_nxv4f32_ptrue:3289; CHECK:       // %bb.0: // %entry3290; CHECK-NEXT:    ptrue p0.s3291; CHECK-NEXT:    movprfx z0, z23292; CHECK-NEXT:    frinti z0.s, p0/m, z2.s3293; CHECK-NEXT:    ret3294;3295; CHECK-2p2-LABEL: test_svfrinti_nxv4f32_ptrue:3296; CHECK-2p2:       // %bb.0: // %entry3297; CHECK-2p2-NEXT:    ptrue p0.s3298; CHECK-2p2-NEXT:    frinti z0.s, p0/z, z2.s3299; CHECK-2p2-NEXT:    ret3300entry:3301  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3302  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)3303  ret <vscale x 4 x float> %03304}3305 3306 3307define <vscale x 2 x double> @test_svfrinti_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {3308; CHECK-LABEL: test_svfrinti_nxv2f64_ptrue_u:3309; CHECK:       // %bb.0: // %entry3310; CHECK-NEXT:    ptrue p0.d3311; CHECK-NEXT:    movprfx z0, z13312; CHECK-NEXT:    frinti z0.d, p0/m, z1.d3313; CHECK-NEXT:    ret3314;3315; CHECK-2p2-LABEL: test_svfrinti_nxv2f64_ptrue_u:3316; CHECK-2p2:       // %bb.0: // %entry3317; CHECK-2p2-NEXT:    ptrue p0.d3318; CHECK-2p2-NEXT:    frinti z0.d, p0/z, z1.d3319; CHECK-2p2-NEXT:    ret3320entry:3321  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3322  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)3323  ret <vscale x 2 x double> %03324}3325 3326define <vscale x 2 x double> @test_svfrinti_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {3327; CHECK-LABEL: test_svfrinti_nxv2f64_ptrue:3328; CHECK:       // %bb.0: // %entry3329; CHECK-NEXT:    ptrue p0.d3330; CHECK-NEXT:    movprfx z0, z23331; CHECK-NEXT:    frinti z0.d, p0/m, z2.d3332; CHECK-NEXT:    ret3333;3334; CHECK-2p2-LABEL: test_svfrinti_nxv2f64_ptrue:3335; CHECK-2p2:       // %bb.0: // %entry3336; CHECK-2p2-NEXT:    ptrue p0.d3337; CHECK-2p2-NEXT:    frinti z0.d, p0/z, z2.d3338; CHECK-2p2-NEXT:    ret3339entry:3340  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3341  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)3342  ret <vscale x 2 x double> %03343}3344 3345 3346define <vscale x 8 x half> @test_svfrintm_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {3347; CHECK-LABEL: test_svfrintm_nxv8f16_ptrue_u:3348; CHECK:       // %bb.0: // %entry3349; CHECK-NEXT:    ptrue p0.h3350; CHECK-NEXT:    movprfx z0, z13351; CHECK-NEXT:    frintm z0.h, p0/m, z1.h3352; CHECK-NEXT:    ret3353;3354; CHECK-2p2-LABEL: test_svfrintm_nxv8f16_ptrue_u:3355; CHECK-2p2:       // %bb.0: // %entry3356; CHECK-2p2-NEXT:    ptrue p0.h3357; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h3358; CHECK-2p2-NEXT:    ret3359entry:3360  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3361  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)3362  ret <vscale x 8 x half> %03363}3364 3365define <vscale x 8 x half> @test_svfrintm_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {3366; CHECK-LABEL: test_svfrintm_nxv8f16_ptrue:3367; CHECK:       // %bb.0: // %entry3368; CHECK-NEXT:    ptrue p0.h3369; CHECK-NEXT:    movprfx z0, z23370; CHECK-NEXT:    frintm z0.h, p0/m, z2.h3371; CHECK-NEXT:    ret3372;3373; CHECK-2p2-LABEL: test_svfrintm_nxv8f16_ptrue:3374; CHECK-2p2:       // %bb.0: // %entry3375; CHECK-2p2-NEXT:    ptrue p0.h3376; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z2.h3377; CHECK-2p2-NEXT:    ret3378entry:3379  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3380  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)3381  ret <vscale x 8 x half> %03382}3383 3384 3385define <vscale x 4 x half> @test_svfrintm_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {3386; CHECK-LABEL: test_svfrintm_nxv4f16_ptrue_u:3387; CHECK:       // %bb.0: // %entry3388; CHECK-NEXT:    ptrue p0.s3389; CHECK-NEXT:    movprfx z0, z13390; CHECK-NEXT:    frintm z0.h, p0/m, z1.h3391; CHECK-NEXT:    ret3392;3393; CHECK-2p2-LABEL: test_svfrintm_nxv4f16_ptrue_u:3394; CHECK-2p2:       // %bb.0: // %entry3395; CHECK-2p2-NEXT:    ptrue p0.s3396; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h3397; CHECK-2p2-NEXT:    ret3398entry:3399  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3400  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)3401  ret <vscale x 4 x half> %03402}3403 3404define <vscale x 4 x half> @test_svfrintm_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {3405; CHECK-LABEL: test_svfrintm_nxv4f16_ptrue:3406; CHECK:       // %bb.0: // %entry3407; CHECK-NEXT:    ptrue p0.s3408; CHECK-NEXT:    movprfx z0, z23409; CHECK-NEXT:    frintm z0.h, p0/m, z2.h3410; CHECK-NEXT:    ret3411;3412; CHECK-2p2-LABEL: test_svfrintm_nxv4f16_ptrue:3413; CHECK-2p2:       // %bb.0: // %entry3414; CHECK-2p2-NEXT:    ptrue p0.s3415; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z2.h3416; CHECK-2p2-NEXT:    ret3417entry:3418  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3419  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)3420  ret <vscale x 4 x half> %03421}3422 3423 3424define <vscale x 2 x half> @test_svfrintm_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {3425; CHECK-LABEL: test_svfrintm_nxv2f16_ptrue_u:3426; CHECK:       // %bb.0: // %entry3427; CHECK-NEXT:    ptrue p0.d3428; CHECK-NEXT:    movprfx z0, z13429; CHECK-NEXT:    frintm z0.h, p0/m, z1.h3430; CHECK-NEXT:    ret3431;3432; CHECK-2p2-LABEL: test_svfrintm_nxv2f16_ptrue_u:3433; CHECK-2p2:       // %bb.0: // %entry3434; CHECK-2p2-NEXT:    ptrue p0.d3435; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z1.h3436; CHECK-2p2-NEXT:    ret3437entry:3438  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3439  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)3440  ret <vscale x 2 x half> %03441}3442 3443define <vscale x 2 x half> @test_svfrintm_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {3444; CHECK-LABEL: test_svfrintm_nxv2f16_ptrue:3445; CHECK:       // %bb.0: // %entry3446; CHECK-NEXT:    ptrue p0.d3447; CHECK-NEXT:    movprfx z0, z23448; CHECK-NEXT:    frintm z0.h, p0/m, z2.h3449; CHECK-NEXT:    ret3450;3451; CHECK-2p2-LABEL: test_svfrintm_nxv2f16_ptrue:3452; CHECK-2p2:       // %bb.0: // %entry3453; CHECK-2p2-NEXT:    ptrue p0.d3454; CHECK-2p2-NEXT:    frintm z0.h, p0/z, z2.h3455; CHECK-2p2-NEXT:    ret3456entry:3457  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3458  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)3459  ret <vscale x 2 x half> %03460}3461 3462 3463define <vscale x 2 x float> @test_svfrintm_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {3464; CHECK-LABEL: test_svfrintm_nxv2f32_ptrue_u:3465; CHECK:       // %bb.0: // %entry3466; CHECK-NEXT:    ptrue p0.d3467; CHECK-NEXT:    movprfx z0, z13468; CHECK-NEXT:    frintm z0.s, p0/m, z1.s3469; CHECK-NEXT:    ret3470;3471; CHECK-2p2-LABEL: test_svfrintm_nxv2f32_ptrue_u:3472; CHECK-2p2:       // %bb.0: // %entry3473; CHECK-2p2-NEXT:    ptrue p0.d3474; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z1.s3475; CHECK-2p2-NEXT:    ret3476entry:3477  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3478  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)3479  ret <vscale x 2 x float> %03480}3481 3482define <vscale x 2 x float> @test_svfrintm_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {3483; CHECK-LABEL: test_svfrintm_nxv2f32_ptrue:3484; CHECK:       // %bb.0: // %entry3485; CHECK-NEXT:    ptrue p0.d3486; CHECK-NEXT:    movprfx z0, z23487; CHECK-NEXT:    frintm z0.s, p0/m, z2.s3488; CHECK-NEXT:    ret3489;3490; CHECK-2p2-LABEL: test_svfrintm_nxv2f32_ptrue:3491; CHECK-2p2:       // %bb.0: // %entry3492; CHECK-2p2-NEXT:    ptrue p0.d3493; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z2.s3494; CHECK-2p2-NEXT:    ret3495entry:3496  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3497  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)3498  ret <vscale x 2 x float> %03499}3500 3501 3502define <vscale x 4 x float> @test_svfrintm_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {3503; CHECK-LABEL: test_svfrintm_nxv4f32_ptrue_u:3504; CHECK:       // %bb.0: // %entry3505; CHECK-NEXT:    ptrue p0.s3506; CHECK-NEXT:    movprfx z0, z13507; CHECK-NEXT:    frintm z0.s, p0/m, z1.s3508; CHECK-NEXT:    ret3509;3510; CHECK-2p2-LABEL: test_svfrintm_nxv4f32_ptrue_u:3511; CHECK-2p2:       // %bb.0: // %entry3512; CHECK-2p2-NEXT:    ptrue p0.s3513; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z1.s3514; CHECK-2p2-NEXT:    ret3515entry:3516  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3517  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)3518  ret <vscale x 4 x float> %03519}3520 3521define <vscale x 4 x float> @test_svfrintm_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {3522; CHECK-LABEL: test_svfrintm_nxv4f32_ptrue:3523; CHECK:       // %bb.0: // %entry3524; CHECK-NEXT:    ptrue p0.s3525; CHECK-NEXT:    movprfx z0, z23526; CHECK-NEXT:    frintm z0.s, p0/m, z2.s3527; CHECK-NEXT:    ret3528;3529; CHECK-2p2-LABEL: test_svfrintm_nxv4f32_ptrue:3530; CHECK-2p2:       // %bb.0: // %entry3531; CHECK-2p2-NEXT:    ptrue p0.s3532; CHECK-2p2-NEXT:    frintm z0.s, p0/z, z2.s3533; CHECK-2p2-NEXT:    ret3534entry:3535  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3536  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)3537  ret <vscale x 4 x float> %03538}3539 3540 3541define <vscale x 2 x double> @test_svfrintm_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {3542; CHECK-LABEL: test_svfrintm_nxv2f64_ptrue_u:3543; CHECK:       // %bb.0: // %entry3544; CHECK-NEXT:    ptrue p0.d3545; CHECK-NEXT:    movprfx z0, z13546; CHECK-NEXT:    frintm z0.d, p0/m, z1.d3547; CHECK-NEXT:    ret3548;3549; CHECK-2p2-LABEL: test_svfrintm_nxv2f64_ptrue_u:3550; CHECK-2p2:       // %bb.0: // %entry3551; CHECK-2p2-NEXT:    ptrue p0.d3552; CHECK-2p2-NEXT:    frintm z0.d, p0/z, z1.d3553; CHECK-2p2-NEXT:    ret3554entry:3555  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3556  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)3557  ret <vscale x 2 x double> %03558}3559 3560define <vscale x 2 x double> @test_svfrintm_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {3561; CHECK-LABEL: test_svfrintm_nxv2f64_ptrue:3562; CHECK:       // %bb.0: // %entry3563; CHECK-NEXT:    ptrue p0.d3564; CHECK-NEXT:    movprfx z0, z23565; CHECK-NEXT:    frintm z0.d, p0/m, z2.d3566; CHECK-NEXT:    ret3567;3568; CHECK-2p2-LABEL: test_svfrintm_nxv2f64_ptrue:3569; CHECK-2p2:       // %bb.0: // %entry3570; CHECK-2p2-NEXT:    ptrue p0.d3571; CHECK-2p2-NEXT:    frintm z0.d, p0/z, z2.d3572; CHECK-2p2-NEXT:    ret3573entry:3574  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3575  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)3576  ret <vscale x 2 x double> %03577}3578 3579 3580define <vscale x 8 x half> @test_svfrintn_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {3581; CHECK-LABEL: test_svfrintn_nxv8f16_ptrue_u:3582; CHECK:       // %bb.0: // %entry3583; CHECK-NEXT:    ptrue p0.h3584; CHECK-NEXT:    movprfx z0, z13585; CHECK-NEXT:    frintn z0.h, p0/m, z1.h3586; CHECK-NEXT:    ret3587;3588; CHECK-2p2-LABEL: test_svfrintn_nxv8f16_ptrue_u:3589; CHECK-2p2:       // %bb.0: // %entry3590; CHECK-2p2-NEXT:    ptrue p0.h3591; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h3592; CHECK-2p2-NEXT:    ret3593entry:3594  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3595  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)3596  ret <vscale x 8 x half> %03597}3598 3599define <vscale x 8 x half> @test_svfrintn_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {3600; CHECK-LABEL: test_svfrintn_nxv8f16_ptrue:3601; CHECK:       // %bb.0: // %entry3602; CHECK-NEXT:    ptrue p0.h3603; CHECK-NEXT:    movprfx z0, z23604; CHECK-NEXT:    frintn z0.h, p0/m, z2.h3605; CHECK-NEXT:    ret3606;3607; CHECK-2p2-LABEL: test_svfrintn_nxv8f16_ptrue:3608; CHECK-2p2:       // %bb.0: // %entry3609; CHECK-2p2-NEXT:    ptrue p0.h3610; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z2.h3611; CHECK-2p2-NEXT:    ret3612entry:3613  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3614  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)3615  ret <vscale x 8 x half> %03616}3617 3618 3619define <vscale x 4 x half> @test_svfrintn_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {3620; CHECK-LABEL: test_svfrintn_nxv4f16_ptrue_u:3621; CHECK:       // %bb.0: // %entry3622; CHECK-NEXT:    ptrue p0.s3623; CHECK-NEXT:    movprfx z0, z13624; CHECK-NEXT:    frintn z0.h, p0/m, z1.h3625; CHECK-NEXT:    ret3626;3627; CHECK-2p2-LABEL: test_svfrintn_nxv4f16_ptrue_u:3628; CHECK-2p2:       // %bb.0: // %entry3629; CHECK-2p2-NEXT:    ptrue p0.s3630; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h3631; CHECK-2p2-NEXT:    ret3632entry:3633  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3634  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)3635  ret <vscale x 4 x half> %03636}3637 3638define <vscale x 4 x half> @test_svfrintn_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {3639; CHECK-LABEL: test_svfrintn_nxv4f16_ptrue:3640; CHECK:       // %bb.0: // %entry3641; CHECK-NEXT:    ptrue p0.s3642; CHECK-NEXT:    movprfx z0, z23643; CHECK-NEXT:    frintn z0.h, p0/m, z2.h3644; CHECK-NEXT:    ret3645;3646; CHECK-2p2-LABEL: test_svfrintn_nxv4f16_ptrue:3647; CHECK-2p2:       // %bb.0: // %entry3648; CHECK-2p2-NEXT:    ptrue p0.s3649; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z2.h3650; CHECK-2p2-NEXT:    ret3651entry:3652  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3653  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)3654  ret <vscale x 4 x half> %03655}3656 3657 3658define <vscale x 2 x half> @test_svfrintn_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {3659; CHECK-LABEL: test_svfrintn_nxv2f16_ptrue_u:3660; CHECK:       // %bb.0: // %entry3661; CHECK-NEXT:    ptrue p0.d3662; CHECK-NEXT:    movprfx z0, z13663; CHECK-NEXT:    frintn z0.h, p0/m, z1.h3664; CHECK-NEXT:    ret3665;3666; CHECK-2p2-LABEL: test_svfrintn_nxv2f16_ptrue_u:3667; CHECK-2p2:       // %bb.0: // %entry3668; CHECK-2p2-NEXT:    ptrue p0.d3669; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z1.h3670; CHECK-2p2-NEXT:    ret3671entry:3672  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3673  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)3674  ret <vscale x 2 x half> %03675}3676 3677define <vscale x 2 x half> @test_svfrintn_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {3678; CHECK-LABEL: test_svfrintn_nxv2f16_ptrue:3679; CHECK:       // %bb.0: // %entry3680; CHECK-NEXT:    ptrue p0.d3681; CHECK-NEXT:    movprfx z0, z23682; CHECK-NEXT:    frintn z0.h, p0/m, z2.h3683; CHECK-NEXT:    ret3684;3685; CHECK-2p2-LABEL: test_svfrintn_nxv2f16_ptrue:3686; CHECK-2p2:       // %bb.0: // %entry3687; CHECK-2p2-NEXT:    ptrue p0.d3688; CHECK-2p2-NEXT:    frintn z0.h, p0/z, z2.h3689; CHECK-2p2-NEXT:    ret3690entry:3691  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3692  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)3693  ret <vscale x 2 x half> %03694}3695 3696 3697define <vscale x 2 x float> @test_svfrintn_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {3698; CHECK-LABEL: test_svfrintn_nxv2f32_ptrue_u:3699; CHECK:       // %bb.0: // %entry3700; CHECK-NEXT:    ptrue p0.d3701; CHECK-NEXT:    movprfx z0, z13702; CHECK-NEXT:    frintn z0.s, p0/m, z1.s3703; CHECK-NEXT:    ret3704;3705; CHECK-2p2-LABEL: test_svfrintn_nxv2f32_ptrue_u:3706; CHECK-2p2:       // %bb.0: // %entry3707; CHECK-2p2-NEXT:    ptrue p0.d3708; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z1.s3709; CHECK-2p2-NEXT:    ret3710entry:3711  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3712  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)3713  ret <vscale x 2 x float> %03714}3715 3716define <vscale x 2 x float> @test_svfrintn_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {3717; CHECK-LABEL: test_svfrintn_nxv2f32_ptrue:3718; CHECK:       // %bb.0: // %entry3719; CHECK-NEXT:    ptrue p0.d3720; CHECK-NEXT:    movprfx z0, z23721; CHECK-NEXT:    frintn z0.s, p0/m, z2.s3722; CHECK-NEXT:    ret3723;3724; CHECK-2p2-LABEL: test_svfrintn_nxv2f32_ptrue:3725; CHECK-2p2:       // %bb.0: // %entry3726; CHECK-2p2-NEXT:    ptrue p0.d3727; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z2.s3728; CHECK-2p2-NEXT:    ret3729entry:3730  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3731  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)3732  ret <vscale x 2 x float> %03733}3734 3735 3736define <vscale x 4 x float> @test_svfrintn_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {3737; CHECK-LABEL: test_svfrintn_nxv4f32_ptrue_u:3738; CHECK:       // %bb.0: // %entry3739; CHECK-NEXT:    ptrue p0.s3740; CHECK-NEXT:    movprfx z0, z13741; CHECK-NEXT:    frintn z0.s, p0/m, z1.s3742; CHECK-NEXT:    ret3743;3744; CHECK-2p2-LABEL: test_svfrintn_nxv4f32_ptrue_u:3745; CHECK-2p2:       // %bb.0: // %entry3746; CHECK-2p2-NEXT:    ptrue p0.s3747; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z1.s3748; CHECK-2p2-NEXT:    ret3749entry:3750  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3751  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)3752  ret <vscale x 4 x float> %03753}3754 3755define <vscale x 4 x float> @test_svfrintn_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {3756; CHECK-LABEL: test_svfrintn_nxv4f32_ptrue:3757; CHECK:       // %bb.0: // %entry3758; CHECK-NEXT:    ptrue p0.s3759; CHECK-NEXT:    movprfx z0, z23760; CHECK-NEXT:    frintn z0.s, p0/m, z2.s3761; CHECK-NEXT:    ret3762;3763; CHECK-2p2-LABEL: test_svfrintn_nxv4f32_ptrue:3764; CHECK-2p2:       // %bb.0: // %entry3765; CHECK-2p2-NEXT:    ptrue p0.s3766; CHECK-2p2-NEXT:    frintn z0.s, p0/z, z2.s3767; CHECK-2p2-NEXT:    ret3768entry:3769  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3770  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)3771  ret <vscale x 4 x float> %03772}3773 3774 3775define <vscale x 2 x double> @test_svfrintn_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {3776; CHECK-LABEL: test_svfrintn_nxv2f64_ptrue_u:3777; CHECK:       // %bb.0: // %entry3778; CHECK-NEXT:    ptrue p0.d3779; CHECK-NEXT:    movprfx z0, z13780; CHECK-NEXT:    frintn z0.d, p0/m, z1.d3781; CHECK-NEXT:    ret3782;3783; CHECK-2p2-LABEL: test_svfrintn_nxv2f64_ptrue_u:3784; CHECK-2p2:       // %bb.0: // %entry3785; CHECK-2p2-NEXT:    ptrue p0.d3786; CHECK-2p2-NEXT:    frintn z0.d, p0/z, z1.d3787; CHECK-2p2-NEXT:    ret3788entry:3789  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3790  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)3791  ret <vscale x 2 x double> %03792}3793 3794define <vscale x 2 x double> @test_svfrintn_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {3795; CHECK-LABEL: test_svfrintn_nxv2f64_ptrue:3796; CHECK:       // %bb.0: // %entry3797; CHECK-NEXT:    ptrue p0.d3798; CHECK-NEXT:    movprfx z0, z23799; CHECK-NEXT:    frintn z0.d, p0/m, z2.d3800; CHECK-NEXT:    ret3801;3802; CHECK-2p2-LABEL: test_svfrintn_nxv2f64_ptrue:3803; CHECK-2p2:       // %bb.0: // %entry3804; CHECK-2p2-NEXT:    ptrue p0.d3805; CHECK-2p2-NEXT:    frintn z0.d, p0/z, z2.d3806; CHECK-2p2-NEXT:    ret3807entry:3808  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3809  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)3810  ret <vscale x 2 x double> %03811}3812 3813 3814define <vscale x 8 x half> @test_svfrintp_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {3815; CHECK-LABEL: test_svfrintp_nxv8f16_ptrue_u:3816; CHECK:       // %bb.0: // %entry3817; CHECK-NEXT:    ptrue p0.h3818; CHECK-NEXT:    movprfx z0, z13819; CHECK-NEXT:    frintp z0.h, p0/m, z1.h3820; CHECK-NEXT:    ret3821;3822; CHECK-2p2-LABEL: test_svfrintp_nxv8f16_ptrue_u:3823; CHECK-2p2:       // %bb.0: // %entry3824; CHECK-2p2-NEXT:    ptrue p0.h3825; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h3826; CHECK-2p2-NEXT:    ret3827entry:3828  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3829  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)3830  ret <vscale x 8 x half> %03831}3832 3833define <vscale x 8 x half> @test_svfrintp_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {3834; CHECK-LABEL: test_svfrintp_nxv8f16_ptrue:3835; CHECK:       // %bb.0: // %entry3836; CHECK-NEXT:    ptrue p0.h3837; CHECK-NEXT:    movprfx z0, z23838; CHECK-NEXT:    frintp z0.h, p0/m, z2.h3839; CHECK-NEXT:    ret3840;3841; CHECK-2p2-LABEL: test_svfrintp_nxv8f16_ptrue:3842; CHECK-2p2:       // %bb.0: // %entry3843; CHECK-2p2-NEXT:    ptrue p0.h3844; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z2.h3845; CHECK-2p2-NEXT:    ret3846entry:3847  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)3848  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)3849  ret <vscale x 8 x half> %03850}3851 3852 3853define <vscale x 4 x half> @test_svfrintp_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {3854; CHECK-LABEL: test_svfrintp_nxv4f16_ptrue_u:3855; CHECK:       // %bb.0: // %entry3856; CHECK-NEXT:    ptrue p0.s3857; CHECK-NEXT:    movprfx z0, z13858; CHECK-NEXT:    frintp z0.h, p0/m, z1.h3859; CHECK-NEXT:    ret3860;3861; CHECK-2p2-LABEL: test_svfrintp_nxv4f16_ptrue_u:3862; CHECK-2p2:       // %bb.0: // %entry3863; CHECK-2p2-NEXT:    ptrue p0.s3864; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h3865; CHECK-2p2-NEXT:    ret3866entry:3867  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3868  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)3869  ret <vscale x 4 x half> %03870}3871 3872define <vscale x 4 x half> @test_svfrintp_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {3873; CHECK-LABEL: test_svfrintp_nxv4f16_ptrue:3874; CHECK:       // %bb.0: // %entry3875; CHECK-NEXT:    ptrue p0.s3876; CHECK-NEXT:    movprfx z0, z23877; CHECK-NEXT:    frintp z0.h, p0/m, z2.h3878; CHECK-NEXT:    ret3879;3880; CHECK-2p2-LABEL: test_svfrintp_nxv4f16_ptrue:3881; CHECK-2p2:       // %bb.0: // %entry3882; CHECK-2p2-NEXT:    ptrue p0.s3883; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z2.h3884; CHECK-2p2-NEXT:    ret3885entry:3886  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3887  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)3888  ret <vscale x 4 x half> %03889}3890 3891 3892define <vscale x 2 x half> @test_svfrintp_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {3893; CHECK-LABEL: test_svfrintp_nxv2f16_ptrue_u:3894; CHECK:       // %bb.0: // %entry3895; CHECK-NEXT:    ptrue p0.d3896; CHECK-NEXT:    movprfx z0, z13897; CHECK-NEXT:    frintp z0.h, p0/m, z1.h3898; CHECK-NEXT:    ret3899;3900; CHECK-2p2-LABEL: test_svfrintp_nxv2f16_ptrue_u:3901; CHECK-2p2:       // %bb.0: // %entry3902; CHECK-2p2-NEXT:    ptrue p0.d3903; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z1.h3904; CHECK-2p2-NEXT:    ret3905entry:3906  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3907  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)3908  ret <vscale x 2 x half> %03909}3910 3911define <vscale x 2 x half> @test_svfrintp_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {3912; CHECK-LABEL: test_svfrintp_nxv2f16_ptrue:3913; CHECK:       // %bb.0: // %entry3914; CHECK-NEXT:    ptrue p0.d3915; CHECK-NEXT:    movprfx z0, z23916; CHECK-NEXT:    frintp z0.h, p0/m, z2.h3917; CHECK-NEXT:    ret3918;3919; CHECK-2p2-LABEL: test_svfrintp_nxv2f16_ptrue:3920; CHECK-2p2:       // %bb.0: // %entry3921; CHECK-2p2-NEXT:    ptrue p0.d3922; CHECK-2p2-NEXT:    frintp z0.h, p0/z, z2.h3923; CHECK-2p2-NEXT:    ret3924entry:3925  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3926  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)3927  ret <vscale x 2 x half> %03928}3929 3930 3931define <vscale x 2 x float> @test_svfrintp_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {3932; CHECK-LABEL: test_svfrintp_nxv2f32_ptrue_u:3933; CHECK:       // %bb.0: // %entry3934; CHECK-NEXT:    ptrue p0.d3935; CHECK-NEXT:    movprfx z0, z13936; CHECK-NEXT:    frintp z0.s, p0/m, z1.s3937; CHECK-NEXT:    ret3938;3939; CHECK-2p2-LABEL: test_svfrintp_nxv2f32_ptrue_u:3940; CHECK-2p2:       // %bb.0: // %entry3941; CHECK-2p2-NEXT:    ptrue p0.d3942; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z1.s3943; CHECK-2p2-NEXT:    ret3944entry:3945  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3946  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)3947  ret <vscale x 2 x float> %03948}3949 3950define <vscale x 2 x float> @test_svfrintp_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {3951; CHECK-LABEL: test_svfrintp_nxv2f32_ptrue:3952; CHECK:       // %bb.0: // %entry3953; CHECK-NEXT:    ptrue p0.d3954; CHECK-NEXT:    movprfx z0, z23955; CHECK-NEXT:    frintp z0.s, p0/m, z2.s3956; CHECK-NEXT:    ret3957;3958; CHECK-2p2-LABEL: test_svfrintp_nxv2f32_ptrue:3959; CHECK-2p2:       // %bb.0: // %entry3960; CHECK-2p2-NEXT:    ptrue p0.d3961; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z2.s3962; CHECK-2p2-NEXT:    ret3963entry:3964  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)3965  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)3966  ret <vscale x 2 x float> %03967}3968 3969 3970define <vscale x 4 x float> @test_svfrintp_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {3971; CHECK-LABEL: test_svfrintp_nxv4f32_ptrue_u:3972; CHECK:       // %bb.0: // %entry3973; CHECK-NEXT:    ptrue p0.s3974; CHECK-NEXT:    movprfx z0, z13975; CHECK-NEXT:    frintp z0.s, p0/m, z1.s3976; CHECK-NEXT:    ret3977;3978; CHECK-2p2-LABEL: test_svfrintp_nxv4f32_ptrue_u:3979; CHECK-2p2:       // %bb.0: // %entry3980; CHECK-2p2-NEXT:    ptrue p0.s3981; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z1.s3982; CHECK-2p2-NEXT:    ret3983entry:3984  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)3985  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)3986  ret <vscale x 4 x float> %03987}3988 3989define <vscale x 4 x float> @test_svfrintp_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {3990; CHECK-LABEL: test_svfrintp_nxv4f32_ptrue:3991; CHECK:       // %bb.0: // %entry3992; CHECK-NEXT:    ptrue p0.s3993; CHECK-NEXT:    movprfx z0, z23994; CHECK-NEXT:    frintp z0.s, p0/m, z2.s3995; CHECK-NEXT:    ret3996;3997; CHECK-2p2-LABEL: test_svfrintp_nxv4f32_ptrue:3998; CHECK-2p2:       // %bb.0: // %entry3999; CHECK-2p2-NEXT:    ptrue p0.s4000; CHECK-2p2-NEXT:    frintp z0.s, p0/z, z2.s4001; CHECK-2p2-NEXT:    ret4002entry:4003  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4004  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)4005  ret <vscale x 4 x float> %04006}4007 4008 4009define <vscale x 2 x double> @test_svfrintp_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {4010; CHECK-LABEL: test_svfrintp_nxv2f64_ptrue_u:4011; CHECK:       // %bb.0: // %entry4012; CHECK-NEXT:    ptrue p0.d4013; CHECK-NEXT:    movprfx z0, z14014; CHECK-NEXT:    frintp z0.d, p0/m, z1.d4015; CHECK-NEXT:    ret4016;4017; CHECK-2p2-LABEL: test_svfrintp_nxv2f64_ptrue_u:4018; CHECK-2p2:       // %bb.0: // %entry4019; CHECK-2p2-NEXT:    ptrue p0.d4020; CHECK-2p2-NEXT:    frintp z0.d, p0/z, z1.d4021; CHECK-2p2-NEXT:    ret4022entry:4023  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4024  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)4025  ret <vscale x 2 x double> %04026}4027 4028define <vscale x 2 x double> @test_svfrintp_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {4029; CHECK-LABEL: test_svfrintp_nxv2f64_ptrue:4030; CHECK:       // %bb.0: // %entry4031; CHECK-NEXT:    ptrue p0.d4032; CHECK-NEXT:    movprfx z0, z24033; CHECK-NEXT:    frintp z0.d, p0/m, z2.d4034; CHECK-NEXT:    ret4035;4036; CHECK-2p2-LABEL: test_svfrintp_nxv2f64_ptrue:4037; CHECK-2p2:       // %bb.0: // %entry4038; CHECK-2p2-NEXT:    ptrue p0.d4039; CHECK-2p2-NEXT:    frintp z0.d, p0/z, z2.d4040; CHECK-2p2-NEXT:    ret4041entry:4042  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4043  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)4044  ret <vscale x 2 x double> %04045}4046 4047 4048define <vscale x 8 x half> @test_svfrintx_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {4049; CHECK-LABEL: test_svfrintx_nxv8f16_ptrue_u:4050; CHECK:       // %bb.0: // %entry4051; CHECK-NEXT:    ptrue p0.h4052; CHECK-NEXT:    movprfx z0, z14053; CHECK-NEXT:    frintx z0.h, p0/m, z1.h4054; CHECK-NEXT:    ret4055;4056; CHECK-2p2-LABEL: test_svfrintx_nxv8f16_ptrue_u:4057; CHECK-2p2:       // %bb.0: // %entry4058; CHECK-2p2-NEXT:    ptrue p0.h4059; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h4060; CHECK-2p2-NEXT:    ret4061entry:4062  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4063  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)4064  ret <vscale x 8 x half> %04065}4066 4067define <vscale x 8 x half> @test_svfrintx_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {4068; CHECK-LABEL: test_svfrintx_nxv8f16_ptrue:4069; CHECK:       // %bb.0: // %entry4070; CHECK-NEXT:    ptrue p0.h4071; CHECK-NEXT:    movprfx z0, z24072; CHECK-NEXT:    frintx z0.h, p0/m, z2.h4073; CHECK-NEXT:    ret4074;4075; CHECK-2p2-LABEL: test_svfrintx_nxv8f16_ptrue:4076; CHECK-2p2:       // %bb.0: // %entry4077; CHECK-2p2-NEXT:    ptrue p0.h4078; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z2.h4079; CHECK-2p2-NEXT:    ret4080entry:4081  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4082  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)4083  ret <vscale x 8 x half> %04084}4085 4086 4087define <vscale x 4 x half> @test_svfrintx_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {4088; CHECK-LABEL: test_svfrintx_nxv4f16_ptrue_u:4089; CHECK:       // %bb.0: // %entry4090; CHECK-NEXT:    ptrue p0.s4091; CHECK-NEXT:    movprfx z0, z14092; CHECK-NEXT:    frintx z0.h, p0/m, z1.h4093; CHECK-NEXT:    ret4094;4095; CHECK-2p2-LABEL: test_svfrintx_nxv4f16_ptrue_u:4096; CHECK-2p2:       // %bb.0: // %entry4097; CHECK-2p2-NEXT:    ptrue p0.s4098; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h4099; CHECK-2p2-NEXT:    ret4100entry:4101  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4102  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)4103  ret <vscale x 4 x half> %04104}4105 4106define <vscale x 4 x half> @test_svfrintx_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {4107; CHECK-LABEL: test_svfrintx_nxv4f16_ptrue:4108; CHECK:       // %bb.0: // %entry4109; CHECK-NEXT:    ptrue p0.s4110; CHECK-NEXT:    movprfx z0, z24111; CHECK-NEXT:    frintx z0.h, p0/m, z2.h4112; CHECK-NEXT:    ret4113;4114; CHECK-2p2-LABEL: test_svfrintx_nxv4f16_ptrue:4115; CHECK-2p2:       // %bb.0: // %entry4116; CHECK-2p2-NEXT:    ptrue p0.s4117; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z2.h4118; CHECK-2p2-NEXT:    ret4119entry:4120  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4121  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)4122  ret <vscale x 4 x half> %04123}4124 4125 4126define <vscale x 2 x half> @test_svfrintx_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {4127; CHECK-LABEL: test_svfrintx_nxv2f16_ptrue_u:4128; CHECK:       // %bb.0: // %entry4129; CHECK-NEXT:    ptrue p0.d4130; CHECK-NEXT:    movprfx z0, z14131; CHECK-NEXT:    frintx z0.h, p0/m, z1.h4132; CHECK-NEXT:    ret4133;4134; CHECK-2p2-LABEL: test_svfrintx_nxv2f16_ptrue_u:4135; CHECK-2p2:       // %bb.0: // %entry4136; CHECK-2p2-NEXT:    ptrue p0.d4137; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z1.h4138; CHECK-2p2-NEXT:    ret4139entry:4140  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4141  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)4142  ret <vscale x 2 x half> %04143}4144 4145define <vscale x 2 x half> @test_svfrintx_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {4146; CHECK-LABEL: test_svfrintx_nxv2f16_ptrue:4147; CHECK:       // %bb.0: // %entry4148; CHECK-NEXT:    ptrue p0.d4149; CHECK-NEXT:    movprfx z0, z24150; CHECK-NEXT:    frintx z0.h, p0/m, z2.h4151; CHECK-NEXT:    ret4152;4153; CHECK-2p2-LABEL: test_svfrintx_nxv2f16_ptrue:4154; CHECK-2p2:       // %bb.0: // %entry4155; CHECK-2p2-NEXT:    ptrue p0.d4156; CHECK-2p2-NEXT:    frintx z0.h, p0/z, z2.h4157; CHECK-2p2-NEXT:    ret4158entry:4159  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4160  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)4161  ret <vscale x 2 x half> %04162}4163 4164 4165define <vscale x 2 x float> @test_svfrintx_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {4166; CHECK-LABEL: test_svfrintx_nxv2f32_ptrue_u:4167; CHECK:       // %bb.0: // %entry4168; CHECK-NEXT:    ptrue p0.d4169; CHECK-NEXT:    movprfx z0, z14170; CHECK-NEXT:    frintx z0.s, p0/m, z1.s4171; CHECK-NEXT:    ret4172;4173; CHECK-2p2-LABEL: test_svfrintx_nxv2f32_ptrue_u:4174; CHECK-2p2:       // %bb.0: // %entry4175; CHECK-2p2-NEXT:    ptrue p0.d4176; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z1.s4177; CHECK-2p2-NEXT:    ret4178entry:4179  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4180  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)4181  ret <vscale x 2 x float> %04182}4183 4184define <vscale x 2 x float> @test_svfrintx_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {4185; CHECK-LABEL: test_svfrintx_nxv2f32_ptrue:4186; CHECK:       // %bb.0: // %entry4187; CHECK-NEXT:    ptrue p0.d4188; CHECK-NEXT:    movprfx z0, z24189; CHECK-NEXT:    frintx z0.s, p0/m, z2.s4190; CHECK-NEXT:    ret4191;4192; CHECK-2p2-LABEL: test_svfrintx_nxv2f32_ptrue:4193; CHECK-2p2:       // %bb.0: // %entry4194; CHECK-2p2-NEXT:    ptrue p0.d4195; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z2.s4196; CHECK-2p2-NEXT:    ret4197entry:4198  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4199  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)4200  ret <vscale x 2 x float> %04201}4202 4203 4204define <vscale x 4 x float> @test_svfrintx_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {4205; CHECK-LABEL: test_svfrintx_nxv4f32_ptrue_u:4206; CHECK:       // %bb.0: // %entry4207; CHECK-NEXT:    ptrue p0.s4208; CHECK-NEXT:    movprfx z0, z14209; CHECK-NEXT:    frintx z0.s, p0/m, z1.s4210; CHECK-NEXT:    ret4211;4212; CHECK-2p2-LABEL: test_svfrintx_nxv4f32_ptrue_u:4213; CHECK-2p2:       // %bb.0: // %entry4214; CHECK-2p2-NEXT:    ptrue p0.s4215; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z1.s4216; CHECK-2p2-NEXT:    ret4217entry:4218  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4219  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)4220  ret <vscale x 4 x float> %04221}4222 4223define <vscale x 4 x float> @test_svfrintx_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {4224; CHECK-LABEL: test_svfrintx_nxv4f32_ptrue:4225; CHECK:       // %bb.0: // %entry4226; CHECK-NEXT:    ptrue p0.s4227; CHECK-NEXT:    movprfx z0, z24228; CHECK-NEXT:    frintx z0.s, p0/m, z2.s4229; CHECK-NEXT:    ret4230;4231; CHECK-2p2-LABEL: test_svfrintx_nxv4f32_ptrue:4232; CHECK-2p2:       // %bb.0: // %entry4233; CHECK-2p2-NEXT:    ptrue p0.s4234; CHECK-2p2-NEXT:    frintx z0.s, p0/z, z2.s4235; CHECK-2p2-NEXT:    ret4236entry:4237  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4238  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)4239  ret <vscale x 4 x float> %04240}4241 4242 4243define <vscale x 2 x double> @test_svfrintx_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {4244; CHECK-LABEL: test_svfrintx_nxv2f64_ptrue_u:4245; CHECK:       // %bb.0: // %entry4246; CHECK-NEXT:    ptrue p0.d4247; CHECK-NEXT:    movprfx z0, z14248; CHECK-NEXT:    frintx z0.d, p0/m, z1.d4249; CHECK-NEXT:    ret4250;4251; CHECK-2p2-LABEL: test_svfrintx_nxv2f64_ptrue_u:4252; CHECK-2p2:       // %bb.0: // %entry4253; CHECK-2p2-NEXT:    ptrue p0.d4254; CHECK-2p2-NEXT:    frintx z0.d, p0/z, z1.d4255; CHECK-2p2-NEXT:    ret4256entry:4257  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4258  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)4259  ret <vscale x 2 x double> %04260}4261 4262define <vscale x 2 x double> @test_svfrintx_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {4263; CHECK-LABEL: test_svfrintx_nxv2f64_ptrue:4264; CHECK:       // %bb.0: // %entry4265; CHECK-NEXT:    ptrue p0.d4266; CHECK-NEXT:    movprfx z0, z24267; CHECK-NEXT:    frintx z0.d, p0/m, z2.d4268; CHECK-NEXT:    ret4269;4270; CHECK-2p2-LABEL: test_svfrintx_nxv2f64_ptrue:4271; CHECK-2p2:       // %bb.0: // %entry4272; CHECK-2p2-NEXT:    ptrue p0.d4273; CHECK-2p2-NEXT:    frintx z0.d, p0/z, z2.d4274; CHECK-2p2-NEXT:    ret4275entry:4276  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4277  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)4278  ret <vscale x 2 x double> %04279}4280 4281 4282define <vscale x 8 x half> @test_svfrintz_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {4283; CHECK-LABEL: test_svfrintz_nxv8f16_ptrue_u:4284; CHECK:       // %bb.0: // %entry4285; CHECK-NEXT:    ptrue p0.h4286; CHECK-NEXT:    movprfx z0, z14287; CHECK-NEXT:    frintz z0.h, p0/m, z1.h4288; CHECK-NEXT:    ret4289;4290; CHECK-2p2-LABEL: test_svfrintz_nxv8f16_ptrue_u:4291; CHECK-2p2:       // %bb.0: // %entry4292; CHECK-2p2-NEXT:    ptrue p0.h4293; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h4294; CHECK-2p2-NEXT:    ret4295entry:4296  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4297  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)4298  ret <vscale x 8 x half> %04299}4300 4301define <vscale x 8 x half> @test_svfrintz_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {4302; CHECK-LABEL: test_svfrintz_nxv8f16_ptrue:4303; CHECK:       // %bb.0: // %entry4304; CHECK-NEXT:    ptrue p0.h4305; CHECK-NEXT:    movprfx z0, z24306; CHECK-NEXT:    frintz z0.h, p0/m, z2.h4307; CHECK-NEXT:    ret4308;4309; CHECK-2p2-LABEL: test_svfrintz_nxv8f16_ptrue:4310; CHECK-2p2:       // %bb.0: // %entry4311; CHECK-2p2-NEXT:    ptrue p0.h4312; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z2.h4313; CHECK-2p2-NEXT:    ret4314entry:4315  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4316  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)4317  ret <vscale x 8 x half> %04318}4319 4320 4321define <vscale x 4 x half> @test_svfrintz_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {4322; CHECK-LABEL: test_svfrintz_nxv4f16_ptrue_u:4323; CHECK:       // %bb.0: // %entry4324; CHECK-NEXT:    ptrue p0.s4325; CHECK-NEXT:    movprfx z0, z14326; CHECK-NEXT:    frintz z0.h, p0/m, z1.h4327; CHECK-NEXT:    ret4328;4329; CHECK-2p2-LABEL: test_svfrintz_nxv4f16_ptrue_u:4330; CHECK-2p2:       // %bb.0: // %entry4331; CHECK-2p2-NEXT:    ptrue p0.s4332; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h4333; CHECK-2p2-NEXT:    ret4334entry:4335  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4336  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)4337  ret <vscale x 4 x half> %04338}4339 4340define <vscale x 4 x half> @test_svfrintz_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {4341; CHECK-LABEL: test_svfrintz_nxv4f16_ptrue:4342; CHECK:       // %bb.0: // %entry4343; CHECK-NEXT:    ptrue p0.s4344; CHECK-NEXT:    movprfx z0, z24345; CHECK-NEXT:    frintz z0.h, p0/m, z2.h4346; CHECK-NEXT:    ret4347;4348; CHECK-2p2-LABEL: test_svfrintz_nxv4f16_ptrue:4349; CHECK-2p2:       // %bb.0: // %entry4350; CHECK-2p2-NEXT:    ptrue p0.s4351; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z2.h4352; CHECK-2p2-NEXT:    ret4353entry:4354  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4355  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)4356  ret <vscale x 4 x half> %04357}4358 4359 4360define <vscale x 2 x half> @test_svfrintz_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {4361; CHECK-LABEL: test_svfrintz_nxv2f16_ptrue_u:4362; CHECK:       // %bb.0: // %entry4363; CHECK-NEXT:    ptrue p0.d4364; CHECK-NEXT:    movprfx z0, z14365; CHECK-NEXT:    frintz z0.h, p0/m, z1.h4366; CHECK-NEXT:    ret4367;4368; CHECK-2p2-LABEL: test_svfrintz_nxv2f16_ptrue_u:4369; CHECK-2p2:       // %bb.0: // %entry4370; CHECK-2p2-NEXT:    ptrue p0.d4371; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z1.h4372; CHECK-2p2-NEXT:    ret4373entry:4374  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4375  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)4376  ret <vscale x 2 x half> %04377}4378 4379define <vscale x 2 x half> @test_svfrintz_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {4380; CHECK-LABEL: test_svfrintz_nxv2f16_ptrue:4381; CHECK:       // %bb.0: // %entry4382; CHECK-NEXT:    ptrue p0.d4383; CHECK-NEXT:    movprfx z0, z24384; CHECK-NEXT:    frintz z0.h, p0/m, z2.h4385; CHECK-NEXT:    ret4386;4387; CHECK-2p2-LABEL: test_svfrintz_nxv2f16_ptrue:4388; CHECK-2p2:       // %bb.0: // %entry4389; CHECK-2p2-NEXT:    ptrue p0.d4390; CHECK-2p2-NEXT:    frintz z0.h, p0/z, z2.h4391; CHECK-2p2-NEXT:    ret4392entry:4393  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4394  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)4395  ret <vscale x 2 x half> %04396}4397 4398 4399define <vscale x 2 x float> @test_svfrintz_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {4400; CHECK-LABEL: test_svfrintz_nxv2f32_ptrue_u:4401; CHECK:       // %bb.0: // %entry4402; CHECK-NEXT:    ptrue p0.d4403; CHECK-NEXT:    movprfx z0, z14404; CHECK-NEXT:    frintz z0.s, p0/m, z1.s4405; CHECK-NEXT:    ret4406;4407; CHECK-2p2-LABEL: test_svfrintz_nxv2f32_ptrue_u:4408; CHECK-2p2:       // %bb.0: // %entry4409; CHECK-2p2-NEXT:    ptrue p0.d4410; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z1.s4411; CHECK-2p2-NEXT:    ret4412entry:4413  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4414  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)4415  ret <vscale x 2 x float> %04416}4417 4418define <vscale x 2 x float> @test_svfrintz_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {4419; CHECK-LABEL: test_svfrintz_nxv2f32_ptrue:4420; CHECK:       // %bb.0: // %entry4421; CHECK-NEXT:    ptrue p0.d4422; CHECK-NEXT:    movprfx z0, z24423; CHECK-NEXT:    frintz z0.s, p0/m, z2.s4424; CHECK-NEXT:    ret4425;4426; CHECK-2p2-LABEL: test_svfrintz_nxv2f32_ptrue:4427; CHECK-2p2:       // %bb.0: // %entry4428; CHECK-2p2-NEXT:    ptrue p0.d4429; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z2.s4430; CHECK-2p2-NEXT:    ret4431entry:4432  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4433  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)4434  ret <vscale x 2 x float> %04435}4436 4437 4438define <vscale x 4 x float> @test_svfrintz_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {4439; CHECK-LABEL: test_svfrintz_nxv4f32_ptrue_u:4440; CHECK:       // %bb.0: // %entry4441; CHECK-NEXT:    ptrue p0.s4442; CHECK-NEXT:    movprfx z0, z14443; CHECK-NEXT:    frintz z0.s, p0/m, z1.s4444; CHECK-NEXT:    ret4445;4446; CHECK-2p2-LABEL: test_svfrintz_nxv4f32_ptrue_u:4447; CHECK-2p2:       // %bb.0: // %entry4448; CHECK-2p2-NEXT:    ptrue p0.s4449; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z1.s4450; CHECK-2p2-NEXT:    ret4451entry:4452  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4453  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)4454  ret <vscale x 4 x float> %04455}4456 4457define <vscale x 4 x float> @test_svfrintz_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {4458; CHECK-LABEL: test_svfrintz_nxv4f32_ptrue:4459; CHECK:       // %bb.0: // %entry4460; CHECK-NEXT:    ptrue p0.s4461; CHECK-NEXT:    movprfx z0, z24462; CHECK-NEXT:    frintz z0.s, p0/m, z2.s4463; CHECK-NEXT:    ret4464;4465; CHECK-2p2-LABEL: test_svfrintz_nxv4f32_ptrue:4466; CHECK-2p2:       // %bb.0: // %entry4467; CHECK-2p2-NEXT:    ptrue p0.s4468; CHECK-2p2-NEXT:    frintz z0.s, p0/z, z2.s4469; CHECK-2p2-NEXT:    ret4470entry:4471  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4472  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)4473  ret <vscale x 4 x float> %04474}4475 4476 4477define <vscale x 2 x double> @test_svfrintz_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {4478; CHECK-LABEL: test_svfrintz_nxv2f64_ptrue_u:4479; CHECK:       // %bb.0: // %entry4480; CHECK-NEXT:    ptrue p0.d4481; CHECK-NEXT:    movprfx z0, z14482; CHECK-NEXT:    frintz z0.d, p0/m, z1.d4483; CHECK-NEXT:    ret4484;4485; CHECK-2p2-LABEL: test_svfrintz_nxv2f64_ptrue_u:4486; CHECK-2p2:       // %bb.0: // %entry4487; CHECK-2p2-NEXT:    ptrue p0.d4488; CHECK-2p2-NEXT:    frintz z0.d, p0/z, z1.d4489; CHECK-2p2-NEXT:    ret4490entry:4491  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4492  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)4493  ret <vscale x 2 x double> %04494}4495 4496define <vscale x 2 x double> @test_svfrintz_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {4497; CHECK-LABEL: test_svfrintz_nxv2f64_ptrue:4498; CHECK:       // %bb.0: // %entry4499; CHECK-NEXT:    ptrue p0.d4500; CHECK-NEXT:    movprfx z0, z24501; CHECK-NEXT:    frintz z0.d, p0/m, z2.d4502; CHECK-NEXT:    ret4503;4504; CHECK-2p2-LABEL: test_svfrintz_nxv2f64_ptrue:4505; CHECK-2p2:       // %bb.0: // %entry4506; CHECK-2p2-NEXT:    ptrue p0.d4507; CHECK-2p2-NEXT:    frintz z0.d, p0/z, z2.d4508; CHECK-2p2-NEXT:    ret4509entry:4510  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4511  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)4512  ret <vscale x 2 x double> %04513}4514 4515 4516define <vscale x 8 x half> @test_svfrecpx_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {4517; CHECK-LABEL: test_svfrecpx_nxv8f16_ptrue_u:4518; CHECK:       // %bb.0: // %entry4519; CHECK-NEXT:    ptrue p0.h4520; CHECK-NEXT:    movprfx z0, z14521; CHECK-NEXT:    frecpx z0.h, p0/m, z1.h4522; CHECK-NEXT:    ret4523;4524; CHECK-2p2-LABEL: test_svfrecpx_nxv8f16_ptrue_u:4525; CHECK-2p2:       // %bb.0: // %entry4526; CHECK-2p2-NEXT:    ptrue p0.h4527; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h4528; CHECK-2p2-NEXT:    ret4529entry:4530  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4531  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)4532  ret <vscale x 8 x half> %04533}4534 4535define <vscale x 8 x half> @test_svfrecpx_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {4536; CHECK-LABEL: test_svfrecpx_nxv8f16_ptrue:4537; CHECK:       // %bb.0: // %entry4538; CHECK-NEXT:    ptrue p0.h4539; CHECK-NEXT:    movprfx z0, z24540; CHECK-NEXT:    frecpx z0.h, p0/m, z2.h4541; CHECK-NEXT:    ret4542;4543; CHECK-2p2-LABEL: test_svfrecpx_nxv8f16_ptrue:4544; CHECK-2p2:       // %bb.0: // %entry4545; CHECK-2p2-NEXT:    ptrue p0.h4546; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z2.h4547; CHECK-2p2-NEXT:    ret4548entry:4549  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4550  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)4551  ret <vscale x 8 x half> %04552}4553 4554 4555define <vscale x 4 x half> @test_svfrecpx_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {4556; CHECK-LABEL: test_svfrecpx_nxv4f16_ptrue_u:4557; CHECK:       // %bb.0: // %entry4558; CHECK-NEXT:    ptrue p0.s4559; CHECK-NEXT:    movprfx z0, z14560; CHECK-NEXT:    frecpx z0.h, p0/m, z1.h4561; CHECK-NEXT:    ret4562;4563; CHECK-2p2-LABEL: test_svfrecpx_nxv4f16_ptrue_u:4564; CHECK-2p2:       // %bb.0: // %entry4565; CHECK-2p2-NEXT:    ptrue p0.s4566; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h4567; CHECK-2p2-NEXT:    ret4568entry:4569  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4570  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)4571  ret <vscale x 4 x half> %04572}4573 4574define <vscale x 4 x half> @test_svfrecpx_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {4575; CHECK-LABEL: test_svfrecpx_nxv4f16_ptrue:4576; CHECK:       // %bb.0: // %entry4577; CHECK-NEXT:    ptrue p0.s4578; CHECK-NEXT:    movprfx z0, z24579; CHECK-NEXT:    frecpx z0.h, p0/m, z2.h4580; CHECK-NEXT:    ret4581;4582; CHECK-2p2-LABEL: test_svfrecpx_nxv4f16_ptrue:4583; CHECK-2p2:       // %bb.0: // %entry4584; CHECK-2p2-NEXT:    ptrue p0.s4585; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z2.h4586; CHECK-2p2-NEXT:    ret4587entry:4588  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4589  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)4590  ret <vscale x 4 x half> %04591}4592 4593 4594define <vscale x 2 x half> @test_svfrecpx_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {4595; CHECK-LABEL: test_svfrecpx_nxv2f16_ptrue_u:4596; CHECK:       // %bb.0: // %entry4597; CHECK-NEXT:    ptrue p0.d4598; CHECK-NEXT:    movprfx z0, z14599; CHECK-NEXT:    frecpx z0.h, p0/m, z1.h4600; CHECK-NEXT:    ret4601;4602; CHECK-2p2-LABEL: test_svfrecpx_nxv2f16_ptrue_u:4603; CHECK-2p2:       // %bb.0: // %entry4604; CHECK-2p2-NEXT:    ptrue p0.d4605; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z1.h4606; CHECK-2p2-NEXT:    ret4607entry:4608  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4609  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)4610  ret <vscale x 2 x half> %04611}4612 4613define <vscale x 2 x half> @test_svfrecpx_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {4614; CHECK-LABEL: test_svfrecpx_nxv2f16_ptrue:4615; CHECK:       // %bb.0: // %entry4616; CHECK-NEXT:    ptrue p0.d4617; CHECK-NEXT:    movprfx z0, z24618; CHECK-NEXT:    frecpx z0.h, p0/m, z2.h4619; CHECK-NEXT:    ret4620;4621; CHECK-2p2-LABEL: test_svfrecpx_nxv2f16_ptrue:4622; CHECK-2p2:       // %bb.0: // %entry4623; CHECK-2p2-NEXT:    ptrue p0.d4624; CHECK-2p2-NEXT:    frecpx z0.h, p0/z, z2.h4625; CHECK-2p2-NEXT:    ret4626entry:4627  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4628  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)4629  ret <vscale x 2 x half> %04630}4631 4632 4633define <vscale x 2 x float> @test_svfrecpx_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {4634; CHECK-LABEL: test_svfrecpx_nxv2f32_ptrue_u:4635; CHECK:       // %bb.0: // %entry4636; CHECK-NEXT:    ptrue p0.d4637; CHECK-NEXT:    movprfx z0, z14638; CHECK-NEXT:    frecpx z0.s, p0/m, z1.s4639; CHECK-NEXT:    ret4640;4641; CHECK-2p2-LABEL: test_svfrecpx_nxv2f32_ptrue_u:4642; CHECK-2p2:       // %bb.0: // %entry4643; CHECK-2p2-NEXT:    ptrue p0.d4644; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z1.s4645; CHECK-2p2-NEXT:    ret4646entry:4647  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4648  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)4649  ret <vscale x 2 x float> %04650}4651 4652define <vscale x 2 x float> @test_svfrecpx_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {4653; CHECK-LABEL: test_svfrecpx_nxv2f32_ptrue:4654; CHECK:       // %bb.0: // %entry4655; CHECK-NEXT:    ptrue p0.d4656; CHECK-NEXT:    movprfx z0, z24657; CHECK-NEXT:    frecpx z0.s, p0/m, z2.s4658; CHECK-NEXT:    ret4659;4660; CHECK-2p2-LABEL: test_svfrecpx_nxv2f32_ptrue:4661; CHECK-2p2:       // %bb.0: // %entry4662; CHECK-2p2-NEXT:    ptrue p0.d4663; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z2.s4664; CHECK-2p2-NEXT:    ret4665entry:4666  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4667  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)4668  ret <vscale x 2 x float> %04669}4670 4671 4672define <vscale x 4 x float> @test_svfrecpx_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {4673; CHECK-LABEL: test_svfrecpx_nxv4f32_ptrue_u:4674; CHECK:       // %bb.0: // %entry4675; CHECK-NEXT:    ptrue p0.s4676; CHECK-NEXT:    movprfx z0, z14677; CHECK-NEXT:    frecpx z0.s, p0/m, z1.s4678; CHECK-NEXT:    ret4679;4680; CHECK-2p2-LABEL: test_svfrecpx_nxv4f32_ptrue_u:4681; CHECK-2p2:       // %bb.0: // %entry4682; CHECK-2p2-NEXT:    ptrue p0.s4683; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z1.s4684; CHECK-2p2-NEXT:    ret4685entry:4686  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4687  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)4688  ret <vscale x 4 x float> %04689}4690 4691define <vscale x 4 x float> @test_svfrecpx_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {4692; CHECK-LABEL: test_svfrecpx_nxv4f32_ptrue:4693; CHECK:       // %bb.0: // %entry4694; CHECK-NEXT:    ptrue p0.s4695; CHECK-NEXT:    movprfx z0, z24696; CHECK-NEXT:    frecpx z0.s, p0/m, z2.s4697; CHECK-NEXT:    ret4698;4699; CHECK-2p2-LABEL: test_svfrecpx_nxv4f32_ptrue:4700; CHECK-2p2:       // %bb.0: // %entry4701; CHECK-2p2-NEXT:    ptrue p0.s4702; CHECK-2p2-NEXT:    frecpx z0.s, p0/z, z2.s4703; CHECK-2p2-NEXT:    ret4704entry:4705  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4706  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)4707  ret <vscale x 4 x float> %04708}4709 4710 4711define <vscale x 2 x double> @test_svfrecpx_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {4712; CHECK-LABEL: test_svfrecpx_nxv2f64_ptrue_u:4713; CHECK:       // %bb.0: // %entry4714; CHECK-NEXT:    ptrue p0.d4715; CHECK-NEXT:    movprfx z0, z14716; CHECK-NEXT:    frecpx z0.d, p0/m, z1.d4717; CHECK-NEXT:    ret4718;4719; CHECK-2p2-LABEL: test_svfrecpx_nxv2f64_ptrue_u:4720; CHECK-2p2:       // %bb.0: // %entry4721; CHECK-2p2-NEXT:    ptrue p0.d4722; CHECK-2p2-NEXT:    frecpx z0.d, p0/z, z1.d4723; CHECK-2p2-NEXT:    ret4724entry:4725  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4726  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)4727  ret <vscale x 2 x double> %04728}4729 4730define <vscale x 2 x double> @test_svfrecpx_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {4731; CHECK-LABEL: test_svfrecpx_nxv2f64_ptrue:4732; CHECK:       // %bb.0: // %entry4733; CHECK-NEXT:    ptrue p0.d4734; CHECK-NEXT:    movprfx z0, z24735; CHECK-NEXT:    frecpx z0.d, p0/m, z2.d4736; CHECK-NEXT:    ret4737;4738; CHECK-2p2-LABEL: test_svfrecpx_nxv2f64_ptrue:4739; CHECK-2p2:       // %bb.0: // %entry4740; CHECK-2p2-NEXT:    ptrue p0.d4741; CHECK-2p2-NEXT:    frecpx z0.d, p0/z, z2.d4742; CHECK-2p2-NEXT:    ret4743entry:4744  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4745  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)4746  ret <vscale x 2 x double> %04747}4748 4749 4750define <vscale x 8 x half> @test_svfsqrt_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {4751; CHECK-LABEL: test_svfsqrt_nxv8f16_ptrue_u:4752; CHECK:       // %bb.0: // %entry4753; CHECK-NEXT:    ptrue p0.h4754; CHECK-NEXT:    movprfx z0, z14755; CHECK-NEXT:    fsqrt z0.h, p0/m, z1.h4756; CHECK-NEXT:    ret4757;4758; CHECK-2p2-LABEL: test_svfsqrt_nxv8f16_ptrue_u:4759; CHECK-2p2:       // %bb.0: // %entry4760; CHECK-2p2-NEXT:    ptrue p0.h4761; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h4762; CHECK-2p2-NEXT:    ret4763entry:4764  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4765  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> poison,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)4766  ret <vscale x 8 x half> %04767}4768 4769define <vscale x 8 x half> @test_svfsqrt_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {4770; CHECK-LABEL: test_svfsqrt_nxv8f16_ptrue:4771; CHECK:       // %bb.0: // %entry4772; CHECK-NEXT:    ptrue p0.h4773; CHECK-NEXT:    movprfx z0, z24774; CHECK-NEXT:    fsqrt z0.h, p0/m, z2.h4775; CHECK-NEXT:    ret4776;4777; CHECK-2p2-LABEL: test_svfsqrt_nxv8f16_ptrue:4778; CHECK-2p2:       // %bb.0: // %entry4779; CHECK-2p2-NEXT:    ptrue p0.h4780; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z2.h4781; CHECK-2p2-NEXT:    ret4782entry:4783  %pg = call  <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)4784  %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> %x,  <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)4785  ret <vscale x 8 x half> %04786}4787 4788 4789define <vscale x 4 x half> @test_svfsqrt_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {4790; CHECK-LABEL: test_svfsqrt_nxv4f16_ptrue_u:4791; CHECK:       // %bb.0: // %entry4792; CHECK-NEXT:    ptrue p0.s4793; CHECK-NEXT:    movprfx z0, z14794; CHECK-NEXT:    fsqrt z0.h, p0/m, z1.h4795; CHECK-NEXT:    ret4796;4797; CHECK-2p2-LABEL: test_svfsqrt_nxv4f16_ptrue_u:4798; CHECK-2p2:       // %bb.0: // %entry4799; CHECK-2p2-NEXT:    ptrue p0.s4800; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h4801; CHECK-2p2-NEXT:    ret4802entry:4803  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4804  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)4805  ret <vscale x 4 x half> %04806}4807 4808define <vscale x 4 x half> @test_svfsqrt_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {4809; CHECK-LABEL: test_svfsqrt_nxv4f16_ptrue:4810; CHECK:       // %bb.0: // %entry4811; CHECK-NEXT:    ptrue p0.s4812; CHECK-NEXT:    movprfx z0, z24813; CHECK-NEXT:    fsqrt z0.h, p0/m, z2.h4814; CHECK-NEXT:    ret4815;4816; CHECK-2p2-LABEL: test_svfsqrt_nxv4f16_ptrue:4817; CHECK-2p2:       // %bb.0: // %entry4818; CHECK-2p2-NEXT:    ptrue p0.s4819; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z2.h4820; CHECK-2p2-NEXT:    ret4821entry:4822  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4823  %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)4824  ret <vscale x 4 x half> %04825}4826 4827 4828define <vscale x 2 x half> @test_svfsqrt_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {4829; CHECK-LABEL: test_svfsqrt_nxv2f16_ptrue_u:4830; CHECK:       // %bb.0: // %entry4831; CHECK-NEXT:    ptrue p0.d4832; CHECK-NEXT:    movprfx z0, z14833; CHECK-NEXT:    fsqrt z0.h, p0/m, z1.h4834; CHECK-NEXT:    ret4835;4836; CHECK-2p2-LABEL: test_svfsqrt_nxv2f16_ptrue_u:4837; CHECK-2p2:       // %bb.0: // %entry4838; CHECK-2p2-NEXT:    ptrue p0.d4839; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z1.h4840; CHECK-2p2-NEXT:    ret4841entry:4842  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4843  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)4844  ret <vscale x 2 x half> %04845}4846 4847define <vscale x 2 x half> @test_svfsqrt_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {4848; CHECK-LABEL: test_svfsqrt_nxv2f16_ptrue:4849; CHECK:       // %bb.0: // %entry4850; CHECK-NEXT:    ptrue p0.d4851; CHECK-NEXT:    movprfx z0, z24852; CHECK-NEXT:    fsqrt z0.h, p0/m, z2.h4853; CHECK-NEXT:    ret4854;4855; CHECK-2p2-LABEL: test_svfsqrt_nxv2f16_ptrue:4856; CHECK-2p2:       // %bb.0: // %entry4857; CHECK-2p2-NEXT:    ptrue p0.d4858; CHECK-2p2-NEXT:    fsqrt z0.h, p0/z, z2.h4859; CHECK-2p2-NEXT:    ret4860entry:4861  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4862  %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)4863  ret <vscale x 2 x half> %04864}4865 4866 4867define <vscale x 2 x float> @test_svfsqrt_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {4868; CHECK-LABEL: test_svfsqrt_nxv2f32_ptrue_u:4869; CHECK:       // %bb.0: // %entry4870; CHECK-NEXT:    ptrue p0.d4871; CHECK-NEXT:    movprfx z0, z14872; CHECK-NEXT:    fsqrt z0.s, p0/m, z1.s4873; CHECK-NEXT:    ret4874;4875; CHECK-2p2-LABEL: test_svfsqrt_nxv2f32_ptrue_u:4876; CHECK-2p2:       // %bb.0: // %entry4877; CHECK-2p2-NEXT:    ptrue p0.d4878; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z1.s4879; CHECK-2p2-NEXT:    ret4880entry:4881  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4882  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)4883  ret <vscale x 2 x float> %04884}4885 4886define <vscale x 2 x float> @test_svfsqrt_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {4887; CHECK-LABEL: test_svfsqrt_nxv2f32_ptrue:4888; CHECK:       // %bb.0: // %entry4889; CHECK-NEXT:    ptrue p0.d4890; CHECK-NEXT:    movprfx z0, z24891; CHECK-NEXT:    fsqrt z0.s, p0/m, z2.s4892; CHECK-NEXT:    ret4893;4894; CHECK-2p2-LABEL: test_svfsqrt_nxv2f32_ptrue:4895; CHECK-2p2:       // %bb.0: // %entry4896; CHECK-2p2-NEXT:    ptrue p0.d4897; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z2.s4898; CHECK-2p2-NEXT:    ret4899entry:4900  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4901  %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)4902  ret <vscale x 2 x float> %04903}4904 4905 4906define <vscale x 4 x float> @test_svfsqrt_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {4907; CHECK-LABEL: test_svfsqrt_nxv4f32_ptrue_u:4908; CHECK:       // %bb.0: // %entry4909; CHECK-NEXT:    ptrue p0.s4910; CHECK-NEXT:    movprfx z0, z14911; CHECK-NEXT:    fsqrt z0.s, p0/m, z1.s4912; CHECK-NEXT:    ret4913;4914; CHECK-2p2-LABEL: test_svfsqrt_nxv4f32_ptrue_u:4915; CHECK-2p2:       // %bb.0: // %entry4916; CHECK-2p2-NEXT:    ptrue p0.s4917; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z1.s4918; CHECK-2p2-NEXT:    ret4919entry:4920  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4921  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> poison,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)4922  ret <vscale x 4 x float> %04923}4924 4925define <vscale x 4 x float> @test_svfsqrt_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {4926; CHECK-LABEL: test_svfsqrt_nxv4f32_ptrue:4927; CHECK:       // %bb.0: // %entry4928; CHECK-NEXT:    ptrue p0.s4929; CHECK-NEXT:    movprfx z0, z24930; CHECK-NEXT:    fsqrt z0.s, p0/m, z2.s4931; CHECK-NEXT:    ret4932;4933; CHECK-2p2-LABEL: test_svfsqrt_nxv4f32_ptrue:4934; CHECK-2p2:       // %bb.0: // %entry4935; CHECK-2p2-NEXT:    ptrue p0.s4936; CHECK-2p2-NEXT:    fsqrt z0.s, p0/z, z2.s4937; CHECK-2p2-NEXT:    ret4938entry:4939  %pg = call  <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)4940  %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> %x,  <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)4941  ret <vscale x 4 x float> %04942}4943 4944 4945define <vscale x 2 x double> @test_svfsqrt_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {4946; CHECK-LABEL: test_svfsqrt_nxv2f64_ptrue_u:4947; CHECK:       // %bb.0: // %entry4948; CHECK-NEXT:    ptrue p0.d4949; CHECK-NEXT:    movprfx z0, z14950; CHECK-NEXT:    fsqrt z0.d, p0/m, z1.d4951; CHECK-NEXT:    ret4952;4953; CHECK-2p2-LABEL: test_svfsqrt_nxv2f64_ptrue_u:4954; CHECK-2p2:       // %bb.0: // %entry4955; CHECK-2p2-NEXT:    ptrue p0.d4956; CHECK-2p2-NEXT:    fsqrt z0.d, p0/z, z1.d4957; CHECK-2p2-NEXT:    ret4958entry:4959  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4960  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> poison,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)4961  ret <vscale x 2 x double> %04962}4963 4964define <vscale x 2 x double> @test_svfsqrt_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {4965; CHECK-LABEL: test_svfsqrt_nxv2f64_ptrue:4966; CHECK:       // %bb.0: // %entry4967; CHECK-NEXT:    ptrue p0.d4968; CHECK-NEXT:    movprfx z0, z24969; CHECK-NEXT:    fsqrt z0.d, p0/m, z2.d4970; CHECK-NEXT:    ret4971;4972; CHECK-2p2-LABEL: test_svfsqrt_nxv2f64_ptrue:4973; CHECK-2p2:       // %bb.0: // %entry4974; CHECK-2p2-NEXT:    ptrue p0.d4975; CHECK-2p2-NEXT:    fsqrt z0.d, p0/z, z2.d4976; CHECK-2p2-NEXT:    ret4977entry:4978  %pg = call  <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)4979  %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> %x,  <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)4980  ret <vscale x 2 x double> %04981}4982 4983