1270 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 4 x i32> @test_fcvtzs_s32_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {13; CHECK-LABEL: test_fcvtzs_s32_f64_x_1:14; CHECK: // %bb.0: // %entry15; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.d16; CHECK-NEXT: ret17;18; CHECK-2p2-LABEL: test_fcvtzs_s32_f64_x_1:19; CHECK-2p2: // %bb.0: // %entry20; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z0.d21; CHECK-2p2-NEXT: ret22entry:23 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)24 ret <vscale x 4 x i32> %025}26 27define <vscale x 4 x i32> @test_fcvtzs_s32_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {28; CHECK-LABEL: test_fcvtzs_s32_f64_x_2:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.d31; CHECK-NEXT: ret32;33; CHECK-2p2-LABEL: test_fcvtzs_s32_f64_x_2:34; CHECK-2p2: // %bb.0: // %entry35; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.d36; CHECK-2p2-NEXT: ret37entry:38 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)39 ret <vscale x 4 x i32> %040}41 42define <vscale x 4 x i32> @test_fcvtzs_s32_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {43; SVE-LABEL: test_fcvtzs_s32_f64_z:44; SVE: // %bb.0: // %entry45; SVE-NEXT: movi v0.2d, #000000000000000046; SVE-NEXT: fcvtzs z0.s, p0/m, z1.d47; SVE-NEXT: ret48;49; CHECK-2p2-LABEL: test_fcvtzs_s32_f64_z:50; CHECK-2p2: // %bb.0: // %entry51; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.d52; CHECK-2p2-NEXT: ret53;54; STREAMING-SVE-LABEL: test_fcvtzs_s32_f64_z:55; STREAMING-SVE: // %bb.0: // %entry56; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x057; STREAMING-SVE-NEXT: fcvtzs z0.s, p0/m, z1.d58; STREAMING-SVE-NEXT: ret59entry:60 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)61 ret <vscale x 4 x i32> %062}63 64define <vscale x 2 x i64> @test_fcvtzs_s64_f32_x_1(<vscale x 2 x i1> %pg, <vscale x 4 x float> %x) {65; CHECK-LABEL: test_fcvtzs_s64_f32_x_1:66; CHECK: // %bb.0: // %entry67; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s68; CHECK-NEXT: ret69;70; CHECK-2p2-LABEL: test_fcvtzs_s64_f32_x_1:71; CHECK-2p2: // %bb.0: // %entry72; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z0.s73; CHECK-2p2-NEXT: ret74entry:75 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)76 ret <vscale x 2 x i64> %077}78 79define <vscale x 2 x i64> @test_fcvtzs_s64_f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {80; CHECK-LABEL: test_fcvtzs_s64_f32_x_2:81; CHECK: // %bb.0: // %entry82; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.s83; CHECK-NEXT: ret84;85; CHECK-2p2-LABEL: test_fcvtzs_s64_f32_x_2:86; CHECK-2p2: // %bb.0: // %entry87; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.s88; CHECK-2p2-NEXT: ret89entry:90 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)91 ret <vscale x 2 x i64> %092}93 94define <vscale x 2 x i64> @test_fcvtzs_s64_f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {95; SVE-LABEL: test_fcvtzs_s64_f32_z:96; SVE: // %bb.0: // %entry97; SVE-NEXT: movi v0.2d, #000000000000000098; SVE-NEXT: fcvtzs z0.d, p0/m, z1.s99; SVE-NEXT: ret100;101; CHECK-2p2-LABEL: test_fcvtzs_s64_f32_z:102; CHECK-2p2: // %bb.0: // %entry103; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.s104; CHECK-2p2-NEXT: ret105;106; STREAMING-SVE-LABEL: test_fcvtzs_s64_f32_z:107; STREAMING-SVE: // %bb.0: // %entry108; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0109; STREAMING-SVE-NEXT: fcvtzs z0.d, p0/m, z1.s110; STREAMING-SVE-NEXT: ret111entry:112 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)113 ret <vscale x 2 x i64> %0114}115 116define <vscale x 4 x i32> @test_fcvtzs_s32_f16_x_1(<vscale x 4 x i1> %pg, <vscale x 8 x half> %x) {117; CHECK-LABEL: test_fcvtzs_s32_f16_x_1:118; CHECK: // %bb.0: // %entry119; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h120; CHECK-NEXT: ret121;122; CHECK-2p2-LABEL: test_fcvtzs_s32_f16_x_1:123; CHECK-2p2: // %bb.0: // %entry124; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z0.h125; CHECK-2p2-NEXT: ret126entry:127 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)128 ret <vscale x 4 x i32> %0129}130 131define <vscale x 4 x i32> @test_fcvtzs_s32_f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {132; CHECK-LABEL: test_fcvtzs_s32_f16_x_2:133; CHECK: // %bb.0: // %entry134; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.h135; CHECK-NEXT: ret136;137; CHECK-2p2-LABEL: test_fcvtzs_s32_f16_x_2:138; CHECK-2p2: // %bb.0: // %entry139; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.h140; CHECK-2p2-NEXT: ret141entry:142 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)143 ret <vscale x 4 x i32> %0144}145 146define <vscale x 4 x i32> @test_fcvtzs_s32_f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {147; SVE-LABEL: test_fcvtzs_s32_f16_z:148; SVE: // %bb.0: // %entry149; SVE-NEXT: movi v0.2d, #0000000000000000150; SVE-NEXT: fcvtzs z0.s, p0/m, z1.h151; SVE-NEXT: ret152;153; CHECK-2p2-LABEL: test_fcvtzs_s32_f16_z:154; CHECK-2p2: // %bb.0: // %entry155; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.h156; CHECK-2p2-NEXT: ret157;158; STREAMING-SVE-LABEL: test_fcvtzs_s32_f16_z:159; STREAMING-SVE: // %bb.0: // %entry160; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0161; STREAMING-SVE-NEXT: fcvtzs z0.s, p0/m, z1.h162; STREAMING-SVE-NEXT: ret163entry:164 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)165 ret <vscale x 4 x i32> %0166}167 168define <vscale x 2 x i64> @test_fcvtzs_s64_f16_x_1(<vscale x 2 x i1> %pg, <vscale x 8 x half> %x) {169; CHECK-LABEL: test_fcvtzs_s64_f16_x_1:170; CHECK: // %bb.0: // %entry171; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h172; CHECK-NEXT: ret173;174; CHECK-2p2-LABEL: test_fcvtzs_s64_f16_x_1:175; CHECK-2p2: // %bb.0: // %entry176; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z0.h177; CHECK-2p2-NEXT: ret178entry:179 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)180 ret <vscale x 2 x i64> %0181}182 183define <vscale x 2 x i64> @test_fcvtzs_s64_f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {184; CHECK-LABEL: test_fcvtzs_s64_f16_x_2:185; CHECK: // %bb.0: // %entry186; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.h187; CHECK-NEXT: ret188;189; CHECK-2p2-LABEL: test_fcvtzs_s64_f16_x_2:190; CHECK-2p2: // %bb.0: // %entry191; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.h192; CHECK-2p2-NEXT: ret193entry:194 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)195 ret <vscale x 2 x i64> %0196}197 198define <vscale x 2 x i64> @test_fcvtzs_s64_f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {199; SVE-LABEL: test_fcvtzs_s64_f16_z:200; SVE: // %bb.0: // %entry201; SVE-NEXT: movi v0.2d, #0000000000000000202; SVE-NEXT: fcvtzs z0.d, p0/m, z1.h203; SVE-NEXT: ret204;205; CHECK-2p2-LABEL: test_fcvtzs_s64_f16_z:206; CHECK-2p2: // %bb.0: // %entry207; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.h208; CHECK-2p2-NEXT: ret209;210; STREAMING-SVE-LABEL: test_fcvtzs_s64_f16_z:211; STREAMING-SVE: // %bb.0: // %entry212; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0213; STREAMING-SVE-NEXT: fcvtzs z0.d, p0/m, z1.h214; STREAMING-SVE-NEXT: ret215entry:216 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)217 ret <vscale x 2 x i64> %0218}219 220define <vscale x 4 x i32> @test_fcvtzu_u32_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {221; CHECK-LABEL: test_fcvtzu_u32_f64_x_1:222; CHECK: // %bb.0: // %entry223; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.d224; CHECK-NEXT: ret225;226; CHECK-2p2-LABEL: test_fcvtzu_u32_f64_x_1:227; CHECK-2p2: // %bb.0: // %entry228; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z0.d229; CHECK-2p2-NEXT: ret230entry:231 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)232 ret <vscale x 4 x i32> %0233}234 235define <vscale x 4 x i32> @test_fcvtzu_u32_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {236; CHECK-LABEL: test_fcvtzu_u32_f64_x_2:237; CHECK: // %bb.0: // %entry238; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.d239; CHECK-NEXT: ret240;241; CHECK-2p2-LABEL: test_fcvtzu_u32_f64_x_2:242; CHECK-2p2: // %bb.0: // %entry243; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.d244; CHECK-2p2-NEXT: ret245entry:246 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)247 ret <vscale x 4 x i32> %0248}249 250define <vscale x 4 x i32> @test_fcvtzu_u32_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {251; SVE-LABEL: test_fcvtzu_u32_f64_z:252; SVE: // %bb.0: // %entry253; SVE-NEXT: movi v0.2d, #0000000000000000254; SVE-NEXT: fcvtzu z0.s, p0/m, z1.d255; SVE-NEXT: ret256;257; CHECK-2p2-LABEL: test_fcvtzu_u32_f64_z:258; CHECK-2p2: // %bb.0: // %entry259; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.d260; CHECK-2p2-NEXT: ret261;262; STREAMING-SVE-LABEL: test_fcvtzu_u32_f64_z:263; STREAMING-SVE: // %bb.0: // %entry264; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0265; STREAMING-SVE-NEXT: fcvtzu z0.s, p0/m, z1.d266; STREAMING-SVE-NEXT: ret267entry:268 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)269 ret <vscale x 4 x i32> %0270}271 272define <vscale x 2 x i64> @test_fcvtzu_u64_f32_x_1(<vscale x 2 x i1> %pg, <vscale x 4 x float> %x) {273; CHECK-LABEL: test_fcvtzu_u64_f32_x_1:274; CHECK: // %bb.0: // %entry275; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.s276; CHECK-NEXT: ret277;278; CHECK-2p2-LABEL: test_fcvtzu_u64_f32_x_1:279; CHECK-2p2: // %bb.0: // %entry280; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z0.s281; CHECK-2p2-NEXT: ret282entry:283 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)284 ret <vscale x 2 x i64> %0285}286 287define <vscale x 2 x i64> @test_fcvtzu_u64_f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {288; CHECK-LABEL: test_fcvtzu_u64_f32_x_2:289; CHECK: // %bb.0: // %entry290; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.s291; CHECK-NEXT: ret292;293; CHECK-2p2-LABEL: test_fcvtzu_u64_f32_x_2:294; CHECK-2p2: // %bb.0: // %entry295; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.s296; CHECK-2p2-NEXT: ret297entry:298 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)299 ret <vscale x 2 x i64> %0300}301 302define <vscale x 2 x i64> @test_fcvtzu_u64_f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {303; SVE-LABEL: test_fcvtzu_u64_f32_z:304; SVE: // %bb.0: // %entry305; SVE-NEXT: movi v0.2d, #0000000000000000306; SVE-NEXT: fcvtzu z0.d, p0/m, z1.s307; SVE-NEXT: ret308;309; CHECK-2p2-LABEL: test_fcvtzu_u64_f32_z:310; CHECK-2p2: // %bb.0: // %entry311; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.s312; CHECK-2p2-NEXT: ret313;314; STREAMING-SVE-LABEL: test_fcvtzu_u64_f32_z:315; STREAMING-SVE: // %bb.0: // %entry316; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0317; STREAMING-SVE-NEXT: fcvtzu z0.d, p0/m, z1.s318; STREAMING-SVE-NEXT: ret319entry:320 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)321 ret <vscale x 2 x i64> %0322}323 324define <vscale x 4 x i32> @test_fcvtzu_u32_f16_x_1(<vscale x 4 x i1> %pg, <vscale x 8 x half> %x) {325; CHECK-LABEL: test_fcvtzu_u32_f16_x_1:326; CHECK: // %bb.0: // %entry327; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h328; CHECK-NEXT: ret329;330; CHECK-2p2-LABEL: test_fcvtzu_u32_f16_x_1:331; CHECK-2p2: // %bb.0: // %entry332; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z0.h333; CHECK-2p2-NEXT: ret334entry:335 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)336 ret <vscale x 4 x i32> %0337}338 339define <vscale x 4 x i32> @test_fcvtzu_u32_f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {340; CHECK-LABEL: test_fcvtzu_u32_f16_x_2:341; CHECK: // %bb.0: // %entry342; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.h343; CHECK-NEXT: ret344;345; CHECK-2p2-LABEL: test_fcvtzu_u32_f16_x_2:346; CHECK-2p2: // %bb.0: // %entry347; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.h348; CHECK-2p2-NEXT: ret349entry:350 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)351 ret <vscale x 4 x i32> %0352}353 354define <vscale x 4 x i32> @test_fcvtzu_u32_f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {355; SVE-LABEL: test_fcvtzu_u32_f16_z:356; SVE: // %bb.0: // %entry357; SVE-NEXT: movi v0.2d, #0000000000000000358; SVE-NEXT: fcvtzu z0.s, p0/m, z1.h359; SVE-NEXT: ret360;361; CHECK-2p2-LABEL: test_fcvtzu_u32_f16_z:362; CHECK-2p2: // %bb.0: // %entry363; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.h364; CHECK-2p2-NEXT: ret365;366; STREAMING-SVE-LABEL: test_fcvtzu_u32_f16_z:367; STREAMING-SVE: // %bb.0: // %entry368; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0369; STREAMING-SVE-NEXT: fcvtzu z0.s, p0/m, z1.h370; STREAMING-SVE-NEXT: ret371entry:372 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)373 ret <vscale x 4 x i32> %0374}375 376define <vscale x 2 x i64> @test_fcvtzu_u64_f16_x_1(<vscale x 2 x i1> %pg, <vscale x 8 x half> %x) {377; CHECK-LABEL: test_fcvtzu_u64_f16_x_1:378; CHECK: // %bb.0: // %entry379; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.h380; CHECK-NEXT: ret381;382; CHECK-2p2-LABEL: test_fcvtzu_u64_f16_x_1:383; CHECK-2p2: // %bb.0: // %entry384; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z0.h385; CHECK-2p2-NEXT: ret386entry:387 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)388 ret <vscale x 2 x i64> %0389}390 391define <vscale x 2 x i64> @test_fcvtzu_u64_f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {392; CHECK-LABEL: test_fcvtzu_u64_f16_x_2:393; CHECK: // %bb.0: // %entry394; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.h395; CHECK-NEXT: ret396;397; CHECK-2p2-LABEL: test_fcvtzu_u64_f16_x_2:398; CHECK-2p2: // %bb.0: // %entry399; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.h400; CHECK-2p2-NEXT: ret401entry:402 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)403 ret <vscale x 2 x i64> %0404}405 406define <vscale x 2 x i64> @test_fcvtzu_u64_f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {407; SVE-LABEL: test_fcvtzu_u64_f16_z:408; SVE: // %bb.0: // %entry409; SVE-NEXT: movi v0.2d, #0000000000000000410; SVE-NEXT: fcvtzu z0.d, p0/m, z1.h411; SVE-NEXT: ret412;413; CHECK-2p2-LABEL: test_fcvtzu_u64_f16_z:414; CHECK-2p2: // %bb.0: // %entry415; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.h416; CHECK-2p2-NEXT: ret417;418; STREAMING-SVE-LABEL: test_fcvtzu_u64_f16_z:419; STREAMING-SVE: // %bb.0: // %entry420; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0421; STREAMING-SVE-NEXT: fcvtzu z0.d, p0/m, z1.h422; STREAMING-SVE-NEXT: ret423entry:424 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)425 ret <vscale x 2 x i64> %0426}427 428 429define <vscale x 8 x i16> @test_svcvt_s16_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {430; CHECK-LABEL: test_svcvt_s16_f16_x_1:431; CHECK: // %bb.0: // %entry432; CHECK-NEXT: fcvtzs z0.h, p0/m, z0.h433; CHECK-NEXT: ret434;435; CHECK-2p2-LABEL: test_svcvt_s16_f16_x_1:436; CHECK-2p2: // %bb.0: // %entry437; CHECK-2p2-NEXT: fcvtzs z0.h, p0/z, z0.h438; CHECK-2p2-NEXT: ret439entry:440 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)441 ret <vscale x 8 x i16> %0442}443 444define <vscale x 8 x i16> @test_svcvt_s16_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {445; CHECK-LABEL: test_svcvt_s16_f16_x_2:446; CHECK: // %bb.0: // %entry447; CHECK-NEXT: movprfx z0, z1448; CHECK-NEXT: fcvtzs z0.h, p0/m, z1.h449; CHECK-NEXT: ret450;451; CHECK-2p2-LABEL: test_svcvt_s16_f16_x_2:452; CHECK-2p2: // %bb.0: // %entry453; CHECK-2p2-NEXT: fcvtzs z0.h, p0/z, z1.h454; CHECK-2p2-NEXT: ret455entry:456 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)457 ret <vscale x 8 x i16> %0458}459 460define <vscale x 8 x i16> @test_svcvt_s16_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {461; SVE-LABEL: test_svcvt_s16_f16_z:462; SVE: // %bb.0: // %entry463; SVE-NEXT: movi v0.2d, #0000000000000000464; SVE-NEXT: fcvtzs z0.h, p0/m, z1.h465; SVE-NEXT: ret466;467; CHECK-2p2-LABEL: test_svcvt_s16_f16_z:468; CHECK-2p2: // %bb.0: // %entry469; CHECK-2p2-NEXT: fcvtzs z0.h, p0/z, z1.h470; CHECK-2p2-NEXT: ret471;472; STREAMING-SVE-LABEL: test_svcvt_s16_f16_z:473; STREAMING-SVE: // %bb.0: // %entry474; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0475; STREAMING-SVE-NEXT: fcvtzs z0.h, p0/m, z1.h476; STREAMING-SVE-NEXT: ret477entry:478 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)479 ret <vscale x 8 x i16> %0480}481 482define <vscale x 8 x i16> @test_svcvt_u16_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {483; CHECK-LABEL: test_svcvt_u16_f16_x_1:484; CHECK: // %bb.0: // %entry485; CHECK-NEXT: fcvtzu z0.h, p0/m, z0.h486; CHECK-NEXT: ret487;488; CHECK-2p2-LABEL: test_svcvt_u16_f16_x_1:489; CHECK-2p2: // %bb.0: // %entry490; CHECK-2p2-NEXT: fcvtzu z0.h, p0/z, z0.h491; CHECK-2p2-NEXT: ret492entry:493 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)494 ret <vscale x 8 x i16> %0495}496 497define <vscale x 8 x i16> @test_svcvt_u16_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {498; CHECK-LABEL: test_svcvt_u16_f16_x_2:499; CHECK: // %bb.0: // %entry500; CHECK-NEXT: movprfx z0, z1501; CHECK-NEXT: fcvtzu z0.h, p0/m, z1.h502; CHECK-NEXT: ret503;504; CHECK-2p2-LABEL: test_svcvt_u16_f16_x_2:505; CHECK-2p2: // %bb.0: // %entry506; CHECK-2p2-NEXT: fcvtzu z0.h, p0/z, z1.h507; CHECK-2p2-NEXT: ret508entry:509 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)510 ret <vscale x 8 x i16> %0511}512 513define <vscale x 8 x i16> @test_svcvt_u16_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {514; SVE-LABEL: test_svcvt_u16_f16_z:515; SVE: // %bb.0: // %entry516; SVE-NEXT: movi v0.2d, #0000000000000000517; SVE-NEXT: fcvtzu z0.h, p0/m, z1.h518; SVE-NEXT: ret519;520; CHECK-2p2-LABEL: test_svcvt_u16_f16_z:521; CHECK-2p2: // %bb.0: // %entry522; CHECK-2p2-NEXT: fcvtzu z0.h, p0/z, z1.h523; CHECK-2p2-NEXT: ret524;525; STREAMING-SVE-LABEL: test_svcvt_u16_f16_z:526; STREAMING-SVE: // %bb.0: // %entry527; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0528; STREAMING-SVE-NEXT: fcvtzu z0.h, p0/m, z1.h529; STREAMING-SVE-NEXT: ret530entry:531 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)532 ret <vscale x 8 x i16> %0533}534 535define <vscale x 4 x i32> @test_svcvt_s32_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {536; CHECK-LABEL: test_svcvt_s32_f32_x_1:537; CHECK: // %bb.0: // %entry538; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s539; CHECK-NEXT: ret540;541; CHECK-2p2-LABEL: test_svcvt_s32_f32_x_1:542; CHECK-2p2: // %bb.0: // %entry543; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z0.s544; CHECK-2p2-NEXT: ret545entry:546 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)547 ret <vscale x 4 x i32> %0548}549 550define <vscale x 4 x i32> @test_svcvt_s32_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {551; CHECK-LABEL: test_svcvt_s32_f32_x_2:552; CHECK: // %bb.0: // %entry553; CHECK-NEXT: movprfx z0, z1554; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.s555; CHECK-NEXT: ret556;557; CHECK-2p2-LABEL: test_svcvt_s32_f32_x_2:558; CHECK-2p2: // %bb.0: // %entry559; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.s560; CHECK-2p2-NEXT: ret561entry:562 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)563 ret <vscale x 4 x i32> %0564}565 566define <vscale x 4 x i32> @test_svcvt_s32_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {567; SVE-LABEL: test_svcvt_s32_f32_z:568; SVE: // %bb.0: // %entry569; SVE-NEXT: movi v0.2d, #0000000000000000570; SVE-NEXT: fcvtzs z0.s, p0/m, z1.s571; SVE-NEXT: ret572;573; CHECK-2p2-LABEL: test_svcvt_s32_f32_z:574; CHECK-2p2: // %bb.0: // %entry575; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.s576; CHECK-2p2-NEXT: ret577;578; STREAMING-SVE-LABEL: test_svcvt_s32_f32_z:579; STREAMING-SVE: // %bb.0: // %entry580; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0581; STREAMING-SVE-NEXT: fcvtzs z0.s, p0/m, z1.s582; STREAMING-SVE-NEXT: ret583entry:584 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)585 ret <vscale x 4 x i32> %0586}587 588define <vscale x 4 x i32> @test_svcvt_u32_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {589; CHECK-LABEL: test_svcvt_u32_f32_x_1:590; CHECK: // %bb.0: // %entry591; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s592; CHECK-NEXT: ret593;594; CHECK-2p2-LABEL: test_svcvt_u32_f32_x_1:595; CHECK-2p2: // %bb.0: // %entry596; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z0.s597; CHECK-2p2-NEXT: ret598entry:599 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)600 ret <vscale x 4 x i32> %0601}602 603define <vscale x 4 x i32> @test_svcvt_u32_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {604; CHECK-LABEL: test_svcvt_u32_f32_x_2:605; CHECK: // %bb.0: // %entry606; CHECK-NEXT: movprfx z0, z1607; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.s608; CHECK-NEXT: ret609;610; CHECK-2p2-LABEL: test_svcvt_u32_f32_x_2:611; CHECK-2p2: // %bb.0: // %entry612; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.s613; CHECK-2p2-NEXT: ret614entry:615 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)616 ret <vscale x 4 x i32> %0617}618 619define <vscale x 4 x i32> @test_svcvt_u32_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {620; SVE-LABEL: test_svcvt_u32_f32_z:621; SVE: // %bb.0: // %entry622; SVE-NEXT: movi v0.2d, #0000000000000000623; SVE-NEXT: fcvtzu z0.s, p0/m, z1.s624; SVE-NEXT: ret625;626; CHECK-2p2-LABEL: test_svcvt_u32_f32_z:627; CHECK-2p2: // %bb.0: // %entry628; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.s629; CHECK-2p2-NEXT: ret630;631; STREAMING-SVE-LABEL: test_svcvt_u32_f32_z:632; STREAMING-SVE: // %bb.0: // %entry633; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0634; STREAMING-SVE-NEXT: fcvtzu z0.s, p0/m, z1.s635; STREAMING-SVE-NEXT: ret636entry:637 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)638 ret <vscale x 4 x i32> %0639}640 641define <vscale x 2 x i64> @test_svcvt_s64_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {642; CHECK-LABEL: test_svcvt_s64_f64_x_1:643; CHECK: // %bb.0: // %entry644; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d645; CHECK-NEXT: ret646;647; CHECK-2p2-LABEL: test_svcvt_s64_f64_x_1:648; CHECK-2p2: // %bb.0: // %entry649; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z0.d650; CHECK-2p2-NEXT: ret651entry:652 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)653 ret <vscale x 2 x i64> %0654}655 656define <vscale x 2 x i64> @test_svcvt_s64_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {657; CHECK-LABEL: test_svcvt_s64_f64_x_2:658; CHECK: // %bb.0: // %entry659; CHECK-NEXT: movprfx z0, z1660; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d661; CHECK-NEXT: ret662;663; CHECK-2p2-LABEL: test_svcvt_s64_f64_x_2:664; CHECK-2p2: // %bb.0: // %entry665; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.d666; CHECK-2p2-NEXT: ret667entry:668 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)669 ret <vscale x 2 x i64> %0670}671 672define <vscale x 2 x i64> @test_svcvt_s64_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {673; SVE-LABEL: test_svcvt_s64_f64_z:674; SVE: // %bb.0: // %entry675; SVE-NEXT: movi v0.2d, #0000000000000000676; SVE-NEXT: fcvtzs z0.d, p0/m, z1.d677; SVE-NEXT: ret678;679; CHECK-2p2-LABEL: test_svcvt_s64_f64_z:680; CHECK-2p2: // %bb.0: // %entry681; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.d682; CHECK-2p2-NEXT: ret683;684; STREAMING-SVE-LABEL: test_svcvt_s64_f64_z:685; STREAMING-SVE: // %bb.0: // %entry686; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0687; STREAMING-SVE-NEXT: fcvtzs z0.d, p0/m, z1.d688; STREAMING-SVE-NEXT: ret689entry:690 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)691 ret <vscale x 2 x i64> %0692}693 694define <vscale x 2 x i64> @test_svcvt_u64_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {695; CHECK-LABEL: test_svcvt_u64_f64_x_1:696; CHECK: // %bb.0: // %entry697; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d698; CHECK-NEXT: ret699;700; CHECK-2p2-LABEL: test_svcvt_u64_f64_x_1:701; CHECK-2p2: // %bb.0: // %entry702; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z0.d703; CHECK-2p2-NEXT: ret704entry:705 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)706 ret <vscale x 2 x i64> %0707}708 709define <vscale x 2 x i64> @test_svcvt_u64_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {710; CHECK-LABEL: test_svcvt_u64_f64_x_2:711; CHECK: // %bb.0: // %entry712; CHECK-NEXT: movprfx z0, z1713; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.d714; CHECK-NEXT: ret715;716; CHECK-2p2-LABEL: test_svcvt_u64_f64_x_2:717; CHECK-2p2: // %bb.0: // %entry718; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.d719; CHECK-2p2-NEXT: ret720entry:721 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)722 ret <vscale x 2 x i64> %0723}724 725define <vscale x 2 x i64> @test_svcvt_u64_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {726; SVE-LABEL: test_svcvt_u64_f64_z:727; SVE: // %bb.0: // %entry728; SVE-NEXT: movi v0.2d, #0000000000000000729; SVE-NEXT: fcvtzu z0.d, p0/m, z1.d730; SVE-NEXT: ret731;732; CHECK-2p2-LABEL: test_svcvt_u64_f64_z:733; CHECK-2p2: // %bb.0: // %entry734; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.d735; CHECK-2p2-NEXT: ret736;737; STREAMING-SVE-LABEL: test_svcvt_u64_f64_z:738; STREAMING-SVE: // %bb.0: // %entry739; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0740; STREAMING-SVE-NEXT: fcvtzu z0.d, p0/m, z1.d741; STREAMING-SVE-NEXT: ret742entry:743 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)744 ret <vscale x 2 x i64> %0745}746 747define <vscale x 4 x i32> @test_fcvtzs_i32_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {748; CHECK-LABEL: test_fcvtzs_i32_f64_ptrue_u:749; CHECK: // %bb.0: // %entry750; CHECK-NEXT: ptrue p0.d751; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.d752; CHECK-NEXT: ret753;754; CHECK-2p2-LABEL: test_fcvtzs_i32_f64_ptrue_u:755; CHECK-2p2: // %bb.0: // %entry756; CHECK-2p2-NEXT: ptrue p0.d757; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.d758; CHECK-2p2-NEXT: ret759entry:760 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)761 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)762 ret <vscale x 4 x i32> %0763}764 765define <vscale x 4 x i32> @test_fcvtzs_i32_f64_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 2 x double> %y) {766; CHECK-LABEL: test_fcvtzs_i32_f64_ptrue:767; CHECK: // %bb.0: // %entry768; CHECK-NEXT: mov z0.d, z1.d769; CHECK-NEXT: ptrue p0.d770; CHECK-NEXT: fcvtzs z0.s, p0/m, z2.d771; CHECK-NEXT: ret772;773; CHECK-2p2-LABEL: test_fcvtzs_i32_f64_ptrue:774; CHECK-2p2: // %bb.0: // %entry775; CHECK-2p2-NEXT: ptrue p0.d776; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z2.d777; CHECK-2p2-NEXT: ret778entry:779 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)780 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)781 ret <vscale x 4 x i32> %0782}783 784define <vscale x 4 x i32> @test_fcvtzu_i32_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {785; CHECK-LABEL: test_fcvtzu_i32_f64_ptrue_u:786; CHECK: // %bb.0: // %entry787; CHECK-NEXT: ptrue p0.d788; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.d789; CHECK-NEXT: ret790;791; CHECK-2p2-LABEL: test_fcvtzu_i32_f64_ptrue_u:792; CHECK-2p2: // %bb.0: // %entry793; CHECK-2p2-NEXT: ptrue p0.d794; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.d795; CHECK-2p2-NEXT: ret796entry:797 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)798 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)799 ret <vscale x 4 x i32> %0800}801 802define <vscale x 4 x i32> @test_fcvtzu_i32_f64_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 2 x double> %y) {803; CHECK-LABEL: test_fcvtzu_i32_f64_ptrue:804; CHECK: // %bb.0: // %entry805; CHECK-NEXT: mov z0.d, z1.d806; CHECK-NEXT: ptrue p0.d807; CHECK-NEXT: fcvtzu z0.s, p0/m, z2.d808; CHECK-NEXT: ret809;810; CHECK-2p2-LABEL: test_fcvtzu_i32_f64_ptrue:811; CHECK-2p2: // %bb.0: // %entry812; CHECK-2p2-NEXT: ptrue p0.d813; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z2.d814; CHECK-2p2-NEXT: ret815entry:816 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)817 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)818 ret <vscale x 4 x i32> %0819}820 821define <vscale x 2 x i64> @test_fcvtzs_i64_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {822; CHECK-LABEL: test_fcvtzs_i64_f32_ptrue_u:823; CHECK: // %bb.0: // %entry824; CHECK-NEXT: ptrue p0.d825; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.s826; CHECK-NEXT: ret827;828; CHECK-2p2-LABEL: test_fcvtzs_i64_f32_ptrue_u:829; CHECK-2p2: // %bb.0: // %entry830; CHECK-2p2-NEXT: ptrue p0.d831; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.s832; CHECK-2p2-NEXT: ret833entry:834 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)835 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)836 ret <vscale x 2 x i64> %0837}838 839define <vscale x 2 x i64> @test_fcvtzs_i64_f32_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 4 x float> %y) {840; CHECK-LABEL: test_fcvtzs_i64_f32_ptrue:841; CHECK: // %bb.0: // %entry842; CHECK-NEXT: mov z0.d, z1.d843; CHECK-NEXT: ptrue p0.d844; CHECK-NEXT: fcvtzs z0.d, p0/m, z2.s845; CHECK-NEXT: ret846;847; CHECK-2p2-LABEL: test_fcvtzs_i64_f32_ptrue:848; CHECK-2p2: // %bb.0: // %entry849; CHECK-2p2-NEXT: ptrue p0.d850; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z2.s851; CHECK-2p2-NEXT: ret852entry:853 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)854 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 4 x float> %y)855 ret <vscale x 2 x i64> %0856}857 858define <vscale x 2 x i64> @test_fcvtzu_i64_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {859; CHECK-LABEL: test_fcvtzu_i64_f32_ptrue_u:860; CHECK: // %bb.0: // %entry861; CHECK-NEXT: ptrue p0.d862; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.s863; CHECK-NEXT: ret864;865; CHECK-2p2-LABEL: test_fcvtzu_i64_f32_ptrue_u:866; CHECK-2p2: // %bb.0: // %entry867; CHECK-2p2-NEXT: ptrue p0.d868; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.s869; CHECK-2p2-NEXT: ret870entry:871 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)872 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)873 ret <vscale x 2 x i64> %0874}875 876define <vscale x 2 x i64> @test_fcvtzu_i64_f32_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 4 x float> %y) {877; CHECK-LABEL: test_fcvtzu_i64_f32_ptrue:878; CHECK: // %bb.0: // %entry879; CHECK-NEXT: mov z0.d, z1.d880; CHECK-NEXT: ptrue p0.d881; CHECK-NEXT: fcvtzu z0.d, p0/m, z2.s882; CHECK-NEXT: ret883;884; CHECK-2p2-LABEL: test_fcvtzu_i64_f32_ptrue:885; CHECK-2p2: // %bb.0: // %entry886; CHECK-2p2-NEXT: ptrue p0.d887; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z2.s888; CHECK-2p2-NEXT: ret889entry:890 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)891 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 4 x float> %y)892 ret <vscale x 2 x i64> %0893}894 895define <vscale x 4 x i32> @test_fcvtzs_i32_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {896; CHECK-LABEL: test_fcvtzs_i32_f16_ptrue_u:897; CHECK: // %bb.0: // %entry898; CHECK-NEXT: ptrue p0.s899; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.h900; CHECK-NEXT: ret901;902; CHECK-2p2-LABEL: test_fcvtzs_i32_f16_ptrue_u:903; CHECK-2p2: // %bb.0: // %entry904; CHECK-2p2-NEXT: ptrue p0.s905; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.h906; CHECK-2p2-NEXT: ret907entry:908 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)909 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)910 ret <vscale x 4 x i32> %0911}912 913define <vscale x 4 x i32> @test_fcvtzs_i32_f16_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 8 x half> %y) {914; CHECK-LABEL: test_fcvtzs_i32_f16_ptrue:915; CHECK: // %bb.0: // %entry916; CHECK-NEXT: mov z0.d, z1.d917; CHECK-NEXT: ptrue p0.s918; CHECK-NEXT: fcvtzs z0.s, p0/m, z2.h919; CHECK-NEXT: ret920;921; CHECK-2p2-LABEL: test_fcvtzs_i32_f16_ptrue:922; CHECK-2p2: // %bb.0: // %entry923; CHECK-2p2-NEXT: ptrue p0.s924; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z2.h925; CHECK-2p2-NEXT: ret926entry:927 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)928 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 8 x half> %y)929 ret <vscale x 4 x i32> %0930}931 932define <vscale x 4 x i32> @test_fcvtzu_i32_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {933; CHECK-LABEL: test_fcvtzu_i32_f16_ptrue_u:934; CHECK: // %bb.0: // %entry935; CHECK-NEXT: ptrue p0.s936; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.h937; CHECK-NEXT: ret938;939; CHECK-2p2-LABEL: test_fcvtzu_i32_f16_ptrue_u:940; CHECK-2p2: // %bb.0: // %entry941; CHECK-2p2-NEXT: ptrue p0.s942; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.h943; CHECK-2p2-NEXT: ret944entry:945 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)946 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)947 ret <vscale x 4 x i32> %0948}949 950define <vscale x 4 x i32> @test_fcvtzu_i32_f16_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 8 x half> %y) {951; CHECK-LABEL: test_fcvtzu_i32_f16_ptrue:952; CHECK: // %bb.0: // %entry953; CHECK-NEXT: mov z0.d, z1.d954; CHECK-NEXT: ptrue p0.s955; CHECK-NEXT: fcvtzu z0.s, p0/m, z2.h956; CHECK-NEXT: ret957;958; CHECK-2p2-LABEL: test_fcvtzu_i32_f16_ptrue:959; CHECK-2p2: // %bb.0: // %entry960; CHECK-2p2-NEXT: ptrue p0.s961; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z2.h962; CHECK-2p2-NEXT: ret963entry:964 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)965 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 8 x half> %y)966 ret <vscale x 4 x i32> %0967}968 969define <vscale x 2 x i64> @test_fcvtzs_i64_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {970; CHECK-LABEL: test_fcvtzs_i64_f16_ptrue_u:971; CHECK: // %bb.0: // %entry972; CHECK-NEXT: ptrue p0.d973; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.h974; CHECK-NEXT: ret975;976; CHECK-2p2-LABEL: test_fcvtzs_i64_f16_ptrue_u:977; CHECK-2p2: // %bb.0: // %entry978; CHECK-2p2-NEXT: ptrue p0.d979; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.h980; CHECK-2p2-NEXT: ret981entry:982 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)983 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)984 ret <vscale x 2 x i64> %0985}986 987define <vscale x 2 x i64> @test_fcvtzs_i64_f16_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 8 x half> %y) {988; CHECK-LABEL: test_fcvtzs_i64_f16_ptrue:989; CHECK: // %bb.0: // %entry990; CHECK-NEXT: mov z0.d, z1.d991; CHECK-NEXT: ptrue p0.d992; CHECK-NEXT: fcvtzs z0.d, p0/m, z2.h993; CHECK-NEXT: ret994;995; CHECK-2p2-LABEL: test_fcvtzs_i64_f16_ptrue:996; CHECK-2p2: // %bb.0: // %entry997; CHECK-2p2-NEXT: ptrue p0.d998; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z2.h999; CHECK-2p2-NEXT: ret1000entry:1001 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1002 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 8 x half> %y)1003 ret <vscale x 2 x i64> %01004}1005 1006define <vscale x 2 x i64> @test_fcvtzu_i64_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {1007; CHECK-LABEL: test_fcvtzu_i64_f16_ptrue_u:1008; CHECK: // %bb.0: // %entry1009; CHECK-NEXT: ptrue p0.d1010; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.h1011; CHECK-NEXT: ret1012;1013; CHECK-2p2-LABEL: test_fcvtzu_i64_f16_ptrue_u:1014; CHECK-2p2: // %bb.0: // %entry1015; CHECK-2p2-NEXT: ptrue p0.d1016; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.h1017; CHECK-2p2-NEXT: ret1018entry:1019 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1020 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)1021 ret <vscale x 2 x i64> %01022}1023 1024define <vscale x 2 x i64> @test_fcvtzu_i64_f16_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 8 x half> %y) {1025; CHECK-LABEL: test_fcvtzu_i64_f16_ptrue:1026; CHECK: // %bb.0: // %entry1027; CHECK-NEXT: mov z0.d, z1.d1028; CHECK-NEXT: ptrue p0.d1029; CHECK-NEXT: fcvtzu z0.d, p0/m, z2.h1030; CHECK-NEXT: ret1031;1032; CHECK-2p2-LABEL: test_fcvtzu_i64_f16_ptrue:1033; CHECK-2p2: // %bb.0: // %entry1034; CHECK-2p2-NEXT: ptrue p0.d1035; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z2.h1036; CHECK-2p2-NEXT: ret1037entry:1038 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1039 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 8 x half> %y)1040 ret <vscale x 2 x i64> %01041}1042 1043define <vscale x 8 x i16> @test_fcvtzs_i16_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {1044; CHECK-LABEL: test_fcvtzs_i16_f16_ptrue_u:1045; CHECK: // %bb.0: // %entry1046; CHECK-NEXT: ptrue p0.h1047; CHECK-NEXT: movprfx z0, z11048; CHECK-NEXT: fcvtzs z0.h, p0/m, z1.h1049; CHECK-NEXT: ret1050;1051; CHECK-2p2-LABEL: test_fcvtzs_i16_f16_ptrue_u:1052; CHECK-2p2: // %bb.0: // %entry1053; CHECK-2p2-NEXT: ptrue p0.h1054; CHECK-2p2-NEXT: fcvtzs z0.h, p0/z, z1.h1055; CHECK-2p2-NEXT: ret1056entry:1057 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1058 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1059 ret <vscale x 8 x i16> %01060}1061 1062define <vscale x 8 x i16> @test_fcvtzs_i16_f16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x half> %y) {1063; CHECK-LABEL: test_fcvtzs_i16_f16_ptrue:1064; CHECK: // %bb.0: // %entry1065; CHECK-NEXT: ptrue p0.h1066; CHECK-NEXT: movprfx z0, z21067; CHECK-NEXT: fcvtzs z0.h, p0/m, z2.h1068; CHECK-NEXT: ret1069;1070; CHECK-2p2-LABEL: test_fcvtzs_i16_f16_ptrue:1071; CHECK-2p2: // %bb.0: // %entry1072; CHECK-2p2-NEXT: ptrue p0.h1073; CHECK-2p2-NEXT: fcvtzs z0.h, p0/z, z2.h1074; CHECK-2p2-NEXT: ret1075entry:1076 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1077 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)1078 ret <vscale x 8 x i16> %01079}1080 1081define <vscale x 8 x i16> @test_fcvtzu_i16_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {1082; CHECK-LABEL: test_fcvtzu_i16_f16_ptrue_u:1083; CHECK: // %bb.0: // %entry1084; CHECK-NEXT: ptrue p0.h1085; CHECK-NEXT: movprfx z0, z11086; CHECK-NEXT: fcvtzu z0.h, p0/m, z1.h1087; CHECK-NEXT: ret1088;1089; CHECK-2p2-LABEL: test_fcvtzu_i16_f16_ptrue_u:1090; CHECK-2p2: // %bb.0: // %entry1091; CHECK-2p2-NEXT: ptrue p0.h1092; CHECK-2p2-NEXT: fcvtzu z0.h, p0/z, z1.h1093; CHECK-2p2-NEXT: ret1094entry:1095 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1096 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)1097 ret <vscale x 8 x i16> %01098}1099 1100define <vscale x 8 x i16> @test_fcvtzu_i16_f16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x half> %y) {1101; CHECK-LABEL: test_fcvtzu_i16_f16_ptrue:1102; CHECK: // %bb.0: // %entry1103; CHECK-NEXT: ptrue p0.h1104; CHECK-NEXT: movprfx z0, z21105; CHECK-NEXT: fcvtzu z0.h, p0/m, z2.h1106; CHECK-NEXT: ret1107;1108; CHECK-2p2-LABEL: test_fcvtzu_i16_f16_ptrue:1109; CHECK-2p2: // %bb.0: // %entry1110; CHECK-2p2-NEXT: ptrue p0.h1111; CHECK-2p2-NEXT: fcvtzu z0.h, p0/z, z2.h1112; CHECK-2p2-NEXT: ret1113entry:1114 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1115 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)1116 ret <vscale x 8 x i16> %01117}1118 1119define <vscale x 4 x i32> @test_fcvtzs_i32_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {1120; CHECK-LABEL: test_fcvtzs_i32_f32_ptrue_u:1121; CHECK: // %bb.0: // %entry1122; CHECK-NEXT: ptrue p0.s1123; CHECK-NEXT: movprfx z0, z11124; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.s1125; CHECK-NEXT: ret1126;1127; CHECK-2p2-LABEL: test_fcvtzs_i32_f32_ptrue_u:1128; CHECK-2p2: // %bb.0: // %entry1129; CHECK-2p2-NEXT: ptrue p0.s1130; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z1.s1131; CHECK-2p2-NEXT: ret1132entry:1133 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1134 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1135 ret <vscale x 4 x i32> %01136}1137 1138define <vscale x 4 x i32> @test_fcvtzs_i32_f32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x float> %y) {1139; CHECK-LABEL: test_fcvtzs_i32_f32_ptrue:1140; CHECK: // %bb.0: // %entry1141; CHECK-NEXT: ptrue p0.s1142; CHECK-NEXT: movprfx z0, z21143; CHECK-NEXT: fcvtzs z0.s, p0/m, z2.s1144; CHECK-NEXT: ret1145;1146; CHECK-2p2-LABEL: test_fcvtzs_i32_f32_ptrue:1147; CHECK-2p2: // %bb.0: // %entry1148; CHECK-2p2-NEXT: ptrue p0.s1149; CHECK-2p2-NEXT: fcvtzs z0.s, p0/z, z2.s1150; CHECK-2p2-NEXT: ret1151entry:1152 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1153 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)1154 ret <vscale x 4 x i32> %01155}1156 1157define <vscale x 4 x i32> @test_fcvtzu_i32_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {1158; CHECK-LABEL: test_fcvtzu_i32_f32_ptrue_u:1159; CHECK: // %bb.0: // %entry1160; CHECK-NEXT: ptrue p0.s1161; CHECK-NEXT: movprfx z0, z11162; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.s1163; CHECK-NEXT: ret1164;1165; CHECK-2p2-LABEL: test_fcvtzu_i32_f32_ptrue_u:1166; CHECK-2p2: // %bb.0: // %entry1167; CHECK-2p2-NEXT: ptrue p0.s1168; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z1.s1169; CHECK-2p2-NEXT: ret1170entry:1171 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1172 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)1173 ret <vscale x 4 x i32> %01174}1175 1176define <vscale x 4 x i32> @test_fcvtzu_i32_f32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x float> %y) {1177; CHECK-LABEL: test_fcvtzu_i32_f32_ptrue:1178; CHECK: // %bb.0: // %entry1179; CHECK-NEXT: ptrue p0.s1180; CHECK-NEXT: movprfx z0, z21181; CHECK-NEXT: fcvtzu z0.s, p0/m, z2.s1182; CHECK-NEXT: ret1183;1184; CHECK-2p2-LABEL: test_fcvtzu_i32_f32_ptrue:1185; CHECK-2p2: // %bb.0: // %entry1186; CHECK-2p2-NEXT: ptrue p0.s1187; CHECK-2p2-NEXT: fcvtzu z0.s, p0/z, z2.s1188; CHECK-2p2-NEXT: ret1189entry:1190 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1191 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)1192 ret <vscale x 4 x i32> %01193}1194 1195define <vscale x 2 x i64> @test_fcvtzs_i64_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {1196; CHECK-LABEL: test_fcvtzs_i64_f64_ptrue_u:1197; CHECK: // %bb.0: // %entry1198; CHECK-NEXT: ptrue p0.d1199; CHECK-NEXT: movprfx z0, z11200; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d1201; CHECK-NEXT: ret1202;1203; CHECK-2p2-LABEL: test_fcvtzs_i64_f64_ptrue_u:1204; CHECK-2p2: // %bb.0: // %entry1205; CHECK-2p2-NEXT: ptrue p0.d1206; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z1.d1207; CHECK-2p2-NEXT: ret1208entry:1209 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1210 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1211 ret <vscale x 2 x i64> %01212}1213 1214define <vscale x 2 x i64> @test_fcvtzs_i64_f64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x double> %y) {1215; CHECK-LABEL: test_fcvtzs_i64_f64_ptrue:1216; CHECK: // %bb.0: // %entry1217; CHECK-NEXT: ptrue p0.d1218; CHECK-NEXT: movprfx z0, z21219; CHECK-NEXT: fcvtzs z0.d, p0/m, z2.d1220; CHECK-NEXT: ret1221;1222; CHECK-2p2-LABEL: test_fcvtzs_i64_f64_ptrue:1223; CHECK-2p2: // %bb.0: // %entry1224; CHECK-2p2-NEXT: ptrue p0.d1225; CHECK-2p2-NEXT: fcvtzs z0.d, p0/z, z2.d1226; CHECK-2p2-NEXT: ret1227entry:1228 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1229 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)1230 ret <vscale x 2 x i64> %01231}1232 1233define <vscale x 2 x i64> @test_fcvtzu_i64_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {1234; CHECK-LABEL: test_fcvtzu_i64_f64_ptrue_u:1235; CHECK: // %bb.0: // %entry1236; CHECK-NEXT: ptrue p0.d1237; CHECK-NEXT: movprfx z0, z11238; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.d1239; CHECK-NEXT: ret1240;1241; CHECK-2p2-LABEL: test_fcvtzu_i64_f64_ptrue_u:1242; CHECK-2p2: // %bb.0: // %entry1243; CHECK-2p2-NEXT: ptrue p0.d1244; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z1.d1245; CHECK-2p2-NEXT: ret1246entry:1247 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1248 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)1249 ret <vscale x 2 x i64> %01250}1251 1252define <vscale x 2 x i64> @test_fcvtzu_i64_f64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x double> %y) {1253; CHECK-LABEL: test_fcvtzu_i64_f64_ptrue:1254; CHECK: // %bb.0: // %entry1255; CHECK-NEXT: ptrue p0.d1256; CHECK-NEXT: movprfx z0, z21257; CHECK-NEXT: fcvtzu z0.d, p0/m, z2.d1258; CHECK-NEXT: ret1259;1260; CHECK-2p2-LABEL: test_fcvtzu_i64_f64_ptrue:1261; CHECK-2p2: // %bb.0: // %entry1262; CHECK-2p2-NEXT: ptrue p0.d1263; CHECK-2p2-NEXT: fcvtzu z0.d, p0/z, z2.d1264; CHECK-2p2-NEXT: ret1265entry:1266 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1267 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)1268 ret <vscale x 2 x i64> %01269}1270