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