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 float> @test_scvtf_f32_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {13; CHECK-LABEL: test_scvtf_f32_s64_x_1:14; CHECK: // %bb.0: // %entry15; CHECK-NEXT: scvtf z0.s, p0/m, z0.d16; CHECK-NEXT: ret17;18; CHECK-2p2-LABEL: test_scvtf_f32_s64_x_1:19; CHECK-2p2: // %bb.0: // %entry20; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z0.d21; CHECK-2p2-NEXT: ret22entry:23 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.f32i64(<vscale x 4 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)24 ret <vscale x 4 x float> %025}26 27define <vscale x 4 x float> @test_scvtf_f32_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {28; CHECK-LABEL: test_scvtf_f32_s64_x_2:29; CHECK: // %bb.0: // %entry30; CHECK-NEXT: scvtf z0.s, p0/m, z1.d31; CHECK-NEXT: ret32;33; CHECK-2p2-LABEL: test_scvtf_f32_s64_x_2:34; CHECK-2p2: // %bb.0: // %entry35; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z1.d36; CHECK-2p2-NEXT: ret37entry:38 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.f32i64(<vscale x 4 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)39 ret <vscale x 4 x float> %040}41 42define <vscale x 4 x float> @test_scvtf_f32_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {43; SVE-LABEL: test_scvtf_f32_s64_z:44; SVE: // %bb.0: // %entry45; SVE-NEXT: movi v0.2d, #000000000000000046; SVE-NEXT: scvtf z0.s, p0/m, z1.d47; SVE-NEXT: ret48;49; CHECK-2p2-LABEL: test_scvtf_f32_s64_z:50; CHECK-2p2: // %bb.0: // %entry51; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z1.d52; CHECK-2p2-NEXT: ret53;54; STREAMING-SVE-LABEL: test_scvtf_f32_s64_z:55; STREAMING-SVE: // %bb.0: // %entry56; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x057; STREAMING-SVE-NEXT: scvtf z0.s, p0/m, z1.d58; STREAMING-SVE-NEXT: ret59entry:60 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.f32i64(<vscale x 4 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)61 ret <vscale x 4 x float> %062}63 64define <vscale x 2 x double> @test_scvtf_f64_s32_x_1(<vscale x 2 x i1> %pg, <vscale x 4 x i32> %x) {65; CHECK-LABEL: test_scvtf_f64_s32_x_1:66; CHECK: // %bb.0: // %entry67; CHECK-NEXT: scvtf z0.d, p0/m, z0.s68; CHECK-NEXT: ret69;70; CHECK-2p2-LABEL: test_scvtf_f64_s32_x_1:71; CHECK-2p2: // %bb.0: // %entry72; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z0.s73; CHECK-2p2-NEXT: ret74entry:75 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.f64i32(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)76 ret <vscale x 2 x double> %077}78 79define <vscale x 2 x double> @test_scvtf_f64_s32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {80; CHECK-LABEL: test_scvtf_f64_s32_x_2:81; CHECK: // %bb.0: // %entry82; CHECK-NEXT: scvtf z0.d, p0/m, z1.s83; CHECK-NEXT: ret84;85; CHECK-2p2-LABEL: test_scvtf_f64_s32_x_2:86; CHECK-2p2: // %bb.0: // %entry87; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z1.s88; CHECK-2p2-NEXT: ret89entry:90 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.f64i32(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)91 ret <vscale x 2 x double> %092}93 94define <vscale x 2 x double> @test_scvtf_f64_s32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {95; SVE-LABEL: test_scvtf_f64_s32_z:96; SVE: // %bb.0: // %entry97; SVE-NEXT: movi v0.2d, #000000000000000098; SVE-NEXT: scvtf z0.d, p0/m, z1.s99; SVE-NEXT: ret100;101; CHECK-2p2-LABEL: test_scvtf_f64_s32_z:102; CHECK-2p2: // %bb.0: // %entry103; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z1.s104; CHECK-2p2-NEXT: ret105;106; STREAMING-SVE-LABEL: test_scvtf_f64_s32_z:107; STREAMING-SVE: // %bb.0: // %entry108; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0109; STREAMING-SVE-NEXT: scvtf z0.d, p0/m, z1.s110; STREAMING-SVE-NEXT: ret111entry:112 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.f64i32(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)113 ret <vscale x 2 x double> %0114}115 116define <vscale x 8 x half> @test_scvtf_f16_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {117; CHECK-LABEL: test_scvtf_f16_s32_x_1:118; CHECK: // %bb.0: // %entry119; CHECK-NEXT: scvtf z0.h, p0/m, z0.s120; CHECK-NEXT: ret121;122; CHECK-2p2-LABEL: test_scvtf_f16_s32_x_1:123; CHECK-2p2: // %bb.0: // %entry124; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z0.s125; CHECK-2p2-NEXT: ret126entry:127 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i32(<vscale x 8 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)128 ret <vscale x 8 x half> %0129}130 131define <vscale x 8 x half> @test_scvtf_f16_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {132; CHECK-LABEL: test_scvtf_f16_s32_x_2:133; CHECK: // %bb.0: // %entry134; CHECK-NEXT: scvtf z0.h, p0/m, z1.s135; CHECK-NEXT: ret136;137; CHECK-2p2-LABEL: test_scvtf_f16_s32_x_2:138; CHECK-2p2: // %bb.0: // %entry139; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.s140; CHECK-2p2-NEXT: ret141entry:142 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i32(<vscale x 8 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)143 ret <vscale x 8 x half> %0144}145 146define <vscale x 8 x half> @test_scvtf_f16_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {147; SVE-LABEL: test_scvtf_f16_s32_z:148; SVE: // %bb.0: // %entry149; SVE-NEXT: movi v0.2d, #0000000000000000150; SVE-NEXT: scvtf z0.h, p0/m, z1.s151; SVE-NEXT: ret152;153; CHECK-2p2-LABEL: test_scvtf_f16_s32_z:154; CHECK-2p2: // %bb.0: // %entry155; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.s156; CHECK-2p2-NEXT: ret157;158; STREAMING-SVE-LABEL: test_scvtf_f16_s32_z:159; STREAMING-SVE: // %bb.0: // %entry160; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0161; STREAMING-SVE-NEXT: scvtf z0.h, p0/m, z1.s162; STREAMING-SVE-NEXT: ret163entry:164 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i32(<vscale x 8 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)165 ret <vscale x 8 x half> %0166}167 168define <vscale x 8 x half> @test_scvtf_f16_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {169; CHECK-LABEL: test_scvtf_f16_s64_x_1:170; CHECK: // %bb.0: // %entry171; CHECK-NEXT: scvtf z0.h, p0/m, z0.d172; CHECK-NEXT: ret173;174; CHECK-2p2-LABEL: test_scvtf_f16_s64_x_1:175; CHECK-2p2: // %bb.0: // %entry176; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z0.d177; CHECK-2p2-NEXT: ret178entry:179 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i64(<vscale x 8 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)180 ret <vscale x 8 x half> %0181}182 183define <vscale x 8 x half> @test_scvtf_f16_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {184; CHECK-LABEL: test_scvtf_f16_s64_x_2:185; CHECK: // %bb.0: // %entry186; CHECK-NEXT: scvtf z0.h, p0/m, z1.d187; CHECK-NEXT: ret188;189; CHECK-2p2-LABEL: test_scvtf_f16_s64_x_2:190; CHECK-2p2: // %bb.0: // %entry191; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.d192; CHECK-2p2-NEXT: ret193entry:194 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i64(<vscale x 8 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)195 ret <vscale x 8 x half> %0196}197 198define <vscale x 8 x half> @test_scvtf_f16_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {199; SVE-LABEL: test_scvtf_f16_s64_z:200; SVE: // %bb.0: // %entry201; SVE-NEXT: movi v0.2d, #0000000000000000202; SVE-NEXT: scvtf z0.h, p0/m, z1.d203; SVE-NEXT: ret204;205; CHECK-2p2-LABEL: test_scvtf_f16_s64_z:206; CHECK-2p2: // %bb.0: // %entry207; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.d208; CHECK-2p2-NEXT: ret209;210; STREAMING-SVE-LABEL: test_scvtf_f16_s64_z:211; STREAMING-SVE: // %bb.0: // %entry212; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0213; STREAMING-SVE-NEXT: scvtf z0.h, p0/m, z1.d214; STREAMING-SVE-NEXT: ret215entry:216 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i64(<vscale x 8 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)217 ret <vscale x 8 x half> %0218}219 220define <vscale x 4 x float> @test_ucvtf_f32_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {221; CHECK-LABEL: test_ucvtf_f32_u64_x_1:222; CHECK: // %bb.0: // %entry223; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d224; CHECK-NEXT: ret225;226; CHECK-2p2-LABEL: test_ucvtf_f32_u64_x_1:227; CHECK-2p2: // %bb.0: // %entry228; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z0.d229; CHECK-2p2-NEXT: ret230entry:231 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.f32i64(<vscale x 4 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)232 ret <vscale x 4 x float> %0233}234 235define <vscale x 4 x float> @test_ucvtf_f32_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {236; CHECK-LABEL: test_ucvtf_f32_u64_x_2:237; CHECK: // %bb.0: // %entry238; CHECK-NEXT: ucvtf z0.s, p0/m, z1.d239; CHECK-NEXT: ret240;241; CHECK-2p2-LABEL: test_ucvtf_f32_u64_x_2:242; CHECK-2p2: // %bb.0: // %entry243; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z1.d244; CHECK-2p2-NEXT: ret245entry:246 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.f32i64(<vscale x 4 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)247 ret <vscale x 4 x float> %0248}249 250define <vscale x 4 x float> @test_ucvtf_f32_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {251; SVE-LABEL: test_ucvtf_f32_u64_z:252; SVE: // %bb.0: // %entry253; SVE-NEXT: movi v0.2d, #0000000000000000254; SVE-NEXT: ucvtf z0.s, p0/m, z1.d255; SVE-NEXT: ret256;257; CHECK-2p2-LABEL: test_ucvtf_f32_u64_z:258; CHECK-2p2: // %bb.0: // %entry259; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z1.d260; CHECK-2p2-NEXT: ret261;262; STREAMING-SVE-LABEL: test_ucvtf_f32_u64_z:263; STREAMING-SVE: // %bb.0: // %entry264; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0265; STREAMING-SVE-NEXT: ucvtf z0.s, p0/m, z1.d266; STREAMING-SVE-NEXT: ret267entry:268 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.f32i64(<vscale x 4 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)269 ret <vscale x 4 x float> %0270}271 272define <vscale x 2 x double> @test_ucvtf_f64_u32_x_1(<vscale x 2 x i1> %pg, <vscale x 4 x i32> %x) {273; CHECK-LABEL: test_ucvtf_f64_u32_x_1:274; CHECK: // %bb.0: // %entry275; CHECK-NEXT: ucvtf z0.d, p0/m, z0.s276; CHECK-NEXT: ret277;278; CHECK-2p2-LABEL: test_ucvtf_f64_u32_x_1:279; CHECK-2p2: // %bb.0: // %entry280; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z0.s281; CHECK-2p2-NEXT: ret282entry:283 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.f64i32(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)284 ret <vscale x 2 x double> %0285}286 287define <vscale x 2 x double> @test_ucvtf_f64_u32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {288; CHECK-LABEL: test_ucvtf_f64_u32_x_2:289; CHECK: // %bb.0: // %entry290; CHECK-NEXT: ucvtf z0.d, p0/m, z1.s291; CHECK-NEXT: ret292;293; CHECK-2p2-LABEL: test_ucvtf_f64_u32_x_2:294; CHECK-2p2: // %bb.0: // %entry295; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z1.s296; CHECK-2p2-NEXT: ret297entry:298 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.f64i32(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)299 ret <vscale x 2 x double> %0300}301 302define <vscale x 2 x double> @test_ucvtf_f64_u32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {303; SVE-LABEL: test_ucvtf_f64_u32_z:304; SVE: // %bb.0: // %entry305; SVE-NEXT: movi v0.2d, #0000000000000000306; SVE-NEXT: ucvtf z0.d, p0/m, z1.s307; SVE-NEXT: ret308;309; CHECK-2p2-LABEL: test_ucvtf_f64_u32_z:310; CHECK-2p2: // %bb.0: // %entry311; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z1.s312; CHECK-2p2-NEXT: ret313;314; STREAMING-SVE-LABEL: test_ucvtf_f64_u32_z:315; STREAMING-SVE: // %bb.0: // %entry316; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0317; STREAMING-SVE-NEXT: ucvtf z0.d, p0/m, z1.s318; STREAMING-SVE-NEXT: ret319entry:320 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.f64i32(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)321 ret <vscale x 2 x double> %0322}323 324define <vscale x 8 x half> @test_ucvtf_f16_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {325; CHECK-LABEL: test_ucvtf_f16_u32_x_1:326; CHECK: // %bb.0: // %entry327; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s328; CHECK-NEXT: ret329;330; CHECK-2p2-LABEL: test_ucvtf_f16_u32_x_1:331; CHECK-2p2: // %bb.0: // %entry332; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z0.s333; CHECK-2p2-NEXT: ret334entry:335 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i32(<vscale x 8 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)336 ret <vscale x 8 x half> %0337}338 339define <vscale x 8 x half> @test_ucvtf_f16_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {340; CHECK-LABEL: test_ucvtf_f16_u32_x_2:341; CHECK: // %bb.0: // %entry342; CHECK-NEXT: ucvtf z0.h, p0/m, z1.s343; CHECK-NEXT: ret344;345; CHECK-2p2-LABEL: test_ucvtf_f16_u32_x_2:346; CHECK-2p2: // %bb.0: // %entry347; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.s348; CHECK-2p2-NEXT: ret349entry:350 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i32(<vscale x 8 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)351 ret <vscale x 8 x half> %0352}353 354define <vscale x 8 x half> @test_ucvtf_f16_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {355; SVE-LABEL: test_ucvtf_f16_u32_z:356; SVE: // %bb.0: // %entry357; SVE-NEXT: movi v0.2d, #0000000000000000358; SVE-NEXT: ucvtf z0.h, p0/m, z1.s359; SVE-NEXT: ret360;361; CHECK-2p2-LABEL: test_ucvtf_f16_u32_z:362; CHECK-2p2: // %bb.0: // %entry363; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.s364; CHECK-2p2-NEXT: ret365;366; STREAMING-SVE-LABEL: test_ucvtf_f16_u32_z:367; STREAMING-SVE: // %bb.0: // %entry368; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0369; STREAMING-SVE-NEXT: ucvtf z0.h, p0/m, z1.s370; STREAMING-SVE-NEXT: ret371entry:372 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i32(<vscale x 8 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)373 ret <vscale x 8 x half> %0374}375 376define <vscale x 8 x half> @test_ucvtf_f16_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {377; CHECK-LABEL: test_ucvtf_f16_u64_x_1:378; CHECK: // %bb.0: // %entry379; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d380; CHECK-NEXT: ret381;382; CHECK-2p2-LABEL: test_ucvtf_f16_u64_x_1:383; CHECK-2p2: // %bb.0: // %entry384; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z0.d385; CHECK-2p2-NEXT: ret386entry:387 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i64(<vscale x 8 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)388 ret <vscale x 8 x half> %0389}390 391define <vscale x 8 x half> @test_ucvtf_f16_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {392; CHECK-LABEL: test_ucvtf_f16_u64_x_2:393; CHECK: // %bb.0: // %entry394; CHECK-NEXT: ucvtf z0.h, p0/m, z1.d395; CHECK-NEXT: ret396;397; CHECK-2p2-LABEL: test_ucvtf_f16_u64_x_2:398; CHECK-2p2: // %bb.0: // %entry399; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.d400; CHECK-2p2-NEXT: ret401entry:402 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i64(<vscale x 8 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)403 ret <vscale x 8 x half> %0404}405 406define <vscale x 8 x half> @test_ucvtf_f16_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {407; SVE-LABEL: test_ucvtf_f16_u64_z:408; SVE: // %bb.0: // %entry409; SVE-NEXT: movi v0.2d, #0000000000000000410; SVE-NEXT: ucvtf z0.h, p0/m, z1.d411; SVE-NEXT: ret412;413; CHECK-2p2-LABEL: test_ucvtf_f16_u64_z:414; CHECK-2p2: // %bb.0: // %entry415; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.d416; CHECK-2p2-NEXT: ret417;418; STREAMING-SVE-LABEL: test_ucvtf_f16_u64_z:419; STREAMING-SVE: // %bb.0: // %entry420; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0421; STREAMING-SVE-NEXT: ucvtf z0.h, p0/m, z1.d422; STREAMING-SVE-NEXT: ret423entry:424 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i64(<vscale x 8 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)425 ret <vscale x 8 x half> %0426}427 428define <vscale x 8 x half> @test_svcvt_f16_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {429; CHECK-LABEL: test_svcvt_f16_s16_x_1:430; CHECK: // %bb.0: // %entry431; CHECK-NEXT: scvtf z0.h, p0/m, z0.h432; CHECK-NEXT: ret433;434; CHECK-2p2-LABEL: test_svcvt_f16_s16_x_1:435; CHECK-2p2: // %bb.0: // %entry436; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z0.h437; CHECK-2p2-NEXT: ret438entry:439 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)440 ret <vscale x 8 x half> %0441}442 443define <vscale x 8 x half> @test_svcvt_f16_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {444; CHECK-LABEL: test_svcvt_f16_s16_x_2:445; CHECK: // %bb.0: // %entry446; CHECK-NEXT: movprfx z0, z1447; CHECK-NEXT: scvtf z0.h, p0/m, z1.h448; CHECK-NEXT: ret449;450; CHECK-2p2-LABEL: test_svcvt_f16_s16_x_2:451; CHECK-2p2: // %bb.0: // %entry452; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.h453; CHECK-2p2-NEXT: ret454entry:455 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)456 ret <vscale x 8 x half> %0457}458 459define <vscale x 8 x half> @test_svcvt_f16_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {460; SVE-LABEL: test_svcvt_f16_s16_z:461; SVE: // %bb.0: // %entry462; SVE-NEXT: movi v0.2d, #0000000000000000463; SVE-NEXT: scvtf z0.h, p0/m, z1.h464; SVE-NEXT: ret465;466; CHECK-2p2-LABEL: test_svcvt_f16_s16_z:467; CHECK-2p2: // %bb.0: // %entry468; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.h469; CHECK-2p2-NEXT: ret470;471; STREAMING-SVE-LABEL: test_svcvt_f16_s16_z:472; STREAMING-SVE: // %bb.0: // %entry473; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0474; STREAMING-SVE-NEXT: scvtf z0.h, p0/m, z1.h475; STREAMING-SVE-NEXT: ret476entry:477 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)478 ret <vscale x 8 x half> %0479}480 481define <vscale x 8 x half> @test_svcvt_f16_u16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) {482; CHECK-LABEL: test_svcvt_f16_u16_x_1:483; CHECK: // %bb.0: // %entry484; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h485; CHECK-NEXT: ret486;487; CHECK-2p2-LABEL: test_svcvt_f16_u16_x_1:488; CHECK-2p2: // %bb.0: // %entry489; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z0.h490; CHECK-2p2-NEXT: ret491entry:492 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)493 ret <vscale x 8 x half> %0494}495 496define <vscale x 8 x half> @test_svcvt_f16_u16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {497; CHECK-LABEL: test_svcvt_f16_u16_x_2:498; CHECK: // %bb.0: // %entry499; CHECK-NEXT: movprfx z0, z1500; CHECK-NEXT: ucvtf z0.h, p0/m, z1.h501; CHECK-NEXT: ret502;503; CHECK-2p2-LABEL: test_svcvt_f16_u16_x_2:504; CHECK-2p2: // %bb.0: // %entry505; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.h506; CHECK-2p2-NEXT: ret507entry:508 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)509 ret <vscale x 8 x half> %0510}511 512define <vscale x 8 x half> @test_svcvt_f16_u16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) {513; SVE-LABEL: test_svcvt_f16_u16_z:514; SVE: // %bb.0: // %entry515; SVE-NEXT: movi v0.2d, #0000000000000000516; SVE-NEXT: ucvtf z0.h, p0/m, z1.h517; SVE-NEXT: ret518;519; CHECK-2p2-LABEL: test_svcvt_f16_u16_z:520; CHECK-2p2: // %bb.0: // %entry521; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.h522; CHECK-2p2-NEXT: ret523;524; STREAMING-SVE-LABEL: test_svcvt_f16_u16_z:525; STREAMING-SVE: // %bb.0: // %entry526; STREAMING-SVE-NEXT: mov z0.h, #0 // =0x0527; STREAMING-SVE-NEXT: ucvtf z0.h, p0/m, z1.h528; STREAMING-SVE-NEXT: ret529entry:530 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)531 ret <vscale x 8 x half> %0532}533 534define <vscale x 4 x float> @test_svcvt_f32_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {535; CHECK-LABEL: test_svcvt_f32_s32_x_1:536; CHECK: // %bb.0: // %entry537; CHECK-NEXT: scvtf z0.s, p0/m, z0.s538; CHECK-NEXT: ret539;540; CHECK-2p2-LABEL: test_svcvt_f32_s32_x_1:541; CHECK-2p2: // %bb.0: // %entry542; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z0.s543; CHECK-2p2-NEXT: ret544entry:545 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.nxv4f32.nxv4i32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)546 ret <vscale x 4 x float> %0547}548 549define <vscale x 4 x float> @test_svcvt_f32_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {550; CHECK-LABEL: test_svcvt_f32_s32_x_2:551; CHECK: // %bb.0: // %entry552; CHECK-NEXT: movprfx z0, z1553; CHECK-NEXT: scvtf z0.s, p0/m, z1.s554; CHECK-NEXT: ret555;556; CHECK-2p2-LABEL: test_svcvt_f32_s32_x_2:557; CHECK-2p2: // %bb.0: // %entry558; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z1.s559; CHECK-2p2-NEXT: ret560entry:561 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.nxv4f32.nxv4i32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)562 ret <vscale x 4 x float> %0563}564 565define <vscale x 4 x float> @test_svcvt_f32_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {566; SVE-LABEL: test_svcvt_f32_s32_z:567; SVE: // %bb.0: // %entry568; SVE-NEXT: movi v0.2d, #0000000000000000569; SVE-NEXT: scvtf z0.s, p0/m, z1.s570; SVE-NEXT: ret571;572; CHECK-2p2-LABEL: test_svcvt_f32_s32_z:573; CHECK-2p2: // %bb.0: // %entry574; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z1.s575; CHECK-2p2-NEXT: ret576;577; STREAMING-SVE-LABEL: test_svcvt_f32_s32_z:578; STREAMING-SVE: // %bb.0: // %entry579; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0580; STREAMING-SVE-NEXT: scvtf z0.s, p0/m, z1.s581; STREAMING-SVE-NEXT: ret582entry:583 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.nxv4f32.nxv4i32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)584 ret <vscale x 4 x float> %0585}586 587define <vscale x 4 x float> @test_svcvt_f32_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) {588; CHECK-LABEL: test_svcvt_f32_u32_x_1:589; CHECK: // %bb.0: // %entry590; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s591; CHECK-NEXT: ret592;593; CHECK-2p2-LABEL: test_svcvt_f32_u32_x_1:594; CHECK-2p2: // %bb.0: // %entry595; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z0.s596; CHECK-2p2-NEXT: ret597entry:598 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.nxv4f32.nxv4i32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)599 ret <vscale x 4 x float> %0600}601 602define <vscale x 4 x float> @test_svcvt_f32_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {603; CHECK-LABEL: test_svcvt_f32_u32_x_2:604; CHECK: // %bb.0: // %entry605; CHECK-NEXT: movprfx z0, z1606; CHECK-NEXT: ucvtf z0.s, p0/m, z1.s607; CHECK-NEXT: ret608;609; CHECK-2p2-LABEL: test_svcvt_f32_u32_x_2:610; CHECK-2p2: // %bb.0: // %entry611; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z1.s612; CHECK-2p2-NEXT: ret613entry:614 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.nxv4f32.nxv4i32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)615 ret <vscale x 4 x float> %0616}617 618define <vscale x 4 x float> @test_svcvt_f32_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) {619; SVE-LABEL: test_svcvt_f32_u32_z:620; SVE: // %bb.0: // %entry621; SVE-NEXT: movi v0.2d, #0000000000000000622; SVE-NEXT: ucvtf z0.s, p0/m, z1.s623; SVE-NEXT: ret624;625; CHECK-2p2-LABEL: test_svcvt_f32_u32_z:626; CHECK-2p2: // %bb.0: // %entry627; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z1.s628; CHECK-2p2-NEXT: ret629;630; STREAMING-SVE-LABEL: test_svcvt_f32_u32_z:631; STREAMING-SVE: // %bb.0: // %entry632; STREAMING-SVE-NEXT: mov z0.s, #0 // =0x0633; STREAMING-SVE-NEXT: ucvtf z0.s, p0/m, z1.s634; STREAMING-SVE-NEXT: ret635entry:636 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.nxv4f32.nxv4i32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)637 ret <vscale x 4 x float> %0638}639 640define <vscale x 2 x double> @test_svcvt_f64_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {641; CHECK-LABEL: test_svcvt_f64_s64_x_1:642; CHECK: // %bb.0: // %entry643; CHECK-NEXT: scvtf z0.d, p0/m, z0.d644; CHECK-NEXT: ret645;646; CHECK-2p2-LABEL: test_svcvt_f64_s64_x_1:647; CHECK-2p2: // %bb.0: // %entry648; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z0.d649; CHECK-2p2-NEXT: ret650entry:651 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.nxv2f64.nxv2i64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)652 ret <vscale x 2 x double> %0653}654 655define <vscale x 2 x double> @test_svcvt_f64_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {656; CHECK-LABEL: test_svcvt_f64_s64_x_2:657; CHECK: // %bb.0: // %entry658; CHECK-NEXT: movprfx z0, z1659; CHECK-NEXT: scvtf z0.d, p0/m, z1.d660; CHECK-NEXT: ret661;662; CHECK-2p2-LABEL: test_svcvt_f64_s64_x_2:663; CHECK-2p2: // %bb.0: // %entry664; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z1.d665; CHECK-2p2-NEXT: ret666entry:667 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.nxv2f64.nxv2i64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)668 ret <vscale x 2 x double> %0669}670 671define <vscale x 2 x double> @test_svcvt_f64_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {672; SVE-LABEL: test_svcvt_f64_s64_z:673; SVE: // %bb.0: // %entry674; SVE-NEXT: movi v0.2d, #0000000000000000675; SVE-NEXT: scvtf z0.d, p0/m, z1.d676; SVE-NEXT: ret677;678; CHECK-2p2-LABEL: test_svcvt_f64_s64_z:679; CHECK-2p2: // %bb.0: // %entry680; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z1.d681; CHECK-2p2-NEXT: ret682;683; STREAMING-SVE-LABEL: test_svcvt_f64_s64_z:684; STREAMING-SVE: // %bb.0: // %entry685; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0686; STREAMING-SVE-NEXT: scvtf z0.d, p0/m, z1.d687; STREAMING-SVE-NEXT: ret688entry:689 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.nxv2f64.nxv2i64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)690 ret <vscale x 2 x double> %0691}692 693define <vscale x 2 x double> @test_svcvt_f64_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) {694; CHECK-LABEL: test_svcvt_f64_u64_x_1:695; CHECK: // %bb.0: // %entry696; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d697; CHECK-NEXT: ret698;699; CHECK-2p2-LABEL: test_svcvt_f64_u64_x_1:700; CHECK-2p2: // %bb.0: // %entry701; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z0.d702; CHECK-2p2-NEXT: ret703entry:704 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.nxv2f64.nxv2i64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)705 ret <vscale x 2 x double> %0706}707 708define <vscale x 2 x double> @test_svcvt_f64_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {709; CHECK-LABEL: test_svcvt_f64_u64_x_2:710; CHECK: // %bb.0: // %entry711; CHECK-NEXT: movprfx z0, z1712; CHECK-NEXT: ucvtf z0.d, p0/m, z1.d713; CHECK-NEXT: ret714;715; CHECK-2p2-LABEL: test_svcvt_f64_u64_x_2:716; CHECK-2p2: // %bb.0: // %entry717; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z1.d718; CHECK-2p2-NEXT: ret719entry:720 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.nxv2f64.nxv2i64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)721 ret <vscale x 2 x double> %0722}723 724define <vscale x 2 x double> @test_svcvt_f64_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) {725; SVE-LABEL: test_svcvt_f64_u64_z:726; SVE: // %bb.0: // %entry727; SVE-NEXT: movi v0.2d, #0000000000000000728; SVE-NEXT: ucvtf z0.d, p0/m, z1.d729; SVE-NEXT: ret730;731; CHECK-2p2-LABEL: test_svcvt_f64_u64_z:732; CHECK-2p2: // %bb.0: // %entry733; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z1.d734; CHECK-2p2-NEXT: ret735;736; STREAMING-SVE-LABEL: test_svcvt_f64_u64_z:737; STREAMING-SVE: // %bb.0: // %entry738; STREAMING-SVE-NEXT: mov z0.d, #0 // =0x0739; STREAMING-SVE-NEXT: ucvtf z0.d, p0/m, z1.d740; STREAMING-SVE-NEXT: ret741entry:742 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.nxv2f64.nxv2i64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)743 ret <vscale x 2 x double> %0744}745 746define <vscale x 4 x float> @test_scvtf_f32_i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {747; CHECK-LABEL: test_scvtf_f32_i64_ptrue_u:748; CHECK: // %bb.0: // %entry749; CHECK-NEXT: ptrue p0.d750; CHECK-NEXT: scvtf z0.s, p0/m, z1.d751; CHECK-NEXT: ret752;753; CHECK-2p2-LABEL: test_scvtf_f32_i64_ptrue_u:754; CHECK-2p2: // %bb.0: // %entry755; CHECK-2p2-NEXT: ptrue p0.d756; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z1.d757; CHECK-2p2-NEXT: ret758entry:759 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)760 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.f32i64(<vscale x 4 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)761 ret <vscale x 4 x float> %0762}763 764define <vscale x 4 x float> @test_scvtf_f32_i64_ptrue(double %z0,<vscale x 4 x float> %x, <vscale x 2 x i64> %y) {765; CHECK-LABEL: test_scvtf_f32_i64_ptrue:766; CHECK: // %bb.0: // %entry767; CHECK-NEXT: mov z0.d, z1.d768; CHECK-NEXT: ptrue p0.d769; CHECK-NEXT: scvtf z0.s, p0/m, z2.d770; CHECK-NEXT: ret771;772; CHECK-2p2-LABEL: test_scvtf_f32_i64_ptrue:773; CHECK-2p2: // %bb.0: // %entry774; CHECK-2p2-NEXT: ptrue p0.d775; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z2.d776; CHECK-2p2-NEXT: ret777entry:778 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)779 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.f32i64(<vscale x 4 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)780 ret <vscale x 4 x float> %0781}782 783define <vscale x 2 x double> @test_scvtf_f64_i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {784; CHECK-LABEL: test_scvtf_f64_i32_ptrue_u:785; CHECK: // %bb.0: // %entry786; CHECK-NEXT: ptrue p0.d787; CHECK-NEXT: scvtf z0.d, p0/m, z1.s788; CHECK-NEXT: ret789;790; CHECK-2p2-LABEL: test_scvtf_f64_i32_ptrue_u:791; CHECK-2p2: // %bb.0: // %entry792; CHECK-2p2-NEXT: ptrue p0.d793; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z1.s794; CHECK-2p2-NEXT: ret795entry:796 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)797 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.f64i32(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)798 ret <vscale x 2 x double> %0799}800 801define <vscale x 2 x double> @test_scvtf_f64_i32_ptrue(double %z0,<vscale x 2 x double> %x, <vscale x 4 x i32> %y) {802; CHECK-LABEL: test_scvtf_f64_i32_ptrue:803; CHECK: // %bb.0: // %entry804; CHECK-NEXT: mov z0.d, z1.d805; CHECK-NEXT: ptrue p0.d806; CHECK-NEXT: scvtf z0.d, p0/m, z2.s807; CHECK-NEXT: ret808;809; CHECK-2p2-LABEL: test_scvtf_f64_i32_ptrue:810; CHECK-2p2: // %bb.0: // %entry811; CHECK-2p2-NEXT: ptrue p0.d812; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z2.s813; CHECK-2p2-NEXT: ret814entry:815 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)816 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.f64i32(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %y)817 ret <vscale x 2 x double> %0818}819 820define <vscale x 8 x half> @test_scvtf_f16_i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {821; CHECK-LABEL: test_scvtf_f16_i32_ptrue_u:822; CHECK: // %bb.0: // %entry823; CHECK-NEXT: ptrue p0.s824; CHECK-NEXT: scvtf z0.h, p0/m, z1.s825; CHECK-NEXT: ret826;827; CHECK-2p2-LABEL: test_scvtf_f16_i32_ptrue_u:828; CHECK-2p2: // %bb.0: // %entry829; CHECK-2p2-NEXT: ptrue p0.s830; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.s831; CHECK-2p2-NEXT: ret832entry:833 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)834 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i32(<vscale x 8 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)835 ret <vscale x 8 x half> %0836}837 838define <vscale x 8 x half> @test_scvtf_f16_i32_ptrue(double %z0,<vscale x 8 x half> %x, <vscale x 4 x i32> %y) {839; CHECK-LABEL: test_scvtf_f16_i32_ptrue:840; CHECK: // %bb.0: // %entry841; CHECK-NEXT: mov z0.d, z1.d842; CHECK-NEXT: ptrue p0.s843; CHECK-NEXT: scvtf z0.h, p0/m, z2.s844; CHECK-NEXT: ret845;846; CHECK-2p2-LABEL: test_scvtf_f16_i32_ptrue:847; CHECK-2p2: // %bb.0: // %entry848; CHECK-2p2-NEXT: ptrue p0.s849; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z2.s850; CHECK-2p2-NEXT: ret851entry:852 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)853 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i32(<vscale x 8 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)854 ret <vscale x 8 x half> %0855}856 857define <vscale x 8 x half> @test_scvtf_f16_i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {858; CHECK-LABEL: test_scvtf_f16_i64_ptrue_u:859; CHECK: // %bb.0: // %entry860; CHECK-NEXT: ptrue p0.d861; CHECK-NEXT: scvtf z0.h, p0/m, z1.d862; CHECK-NEXT: ret863;864; CHECK-2p2-LABEL: test_scvtf_f16_i64_ptrue_u:865; CHECK-2p2: // %bb.0: // %entry866; CHECK-2p2-NEXT: ptrue p0.d867; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.d868; CHECK-2p2-NEXT: ret869entry:870 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)871 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i64(<vscale x 8 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)872 ret <vscale x 8 x half> %0873}874 875define <vscale x 8 x half> @test_scvtf_f16_i64_ptrue(double %z0,<vscale x 8 x half> %x, <vscale x 2 x i64> %y) {876; CHECK-LABEL: test_scvtf_f16_i64_ptrue:877; CHECK: // %bb.0: // %entry878; CHECK-NEXT: mov z0.d, z1.d879; CHECK-NEXT: ptrue p0.d880; CHECK-NEXT: scvtf z0.h, p0/m, z2.d881; CHECK-NEXT: ret882;883; CHECK-2p2-LABEL: test_scvtf_f16_i64_ptrue:884; CHECK-2p2: // %bb.0: // %entry885; CHECK-2p2-NEXT: ptrue p0.d886; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z2.d887; CHECK-2p2-NEXT: ret888entry:889 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)890 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.f16i64(<vscale x 8 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)891 ret <vscale x 8 x half> %0892}893 894define <vscale x 4 x float> @test_ucvtf_f32_i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {895; CHECK-LABEL: test_ucvtf_f32_i64_ptrue_u:896; CHECK: // %bb.0: // %entry897; CHECK-NEXT: ptrue p0.d898; CHECK-NEXT: ucvtf z0.s, p0/m, z1.d899; CHECK-NEXT: ret900;901; CHECK-2p2-LABEL: test_ucvtf_f32_i64_ptrue_u:902; CHECK-2p2: // %bb.0: // %entry903; CHECK-2p2-NEXT: ptrue p0.d904; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z1.d905; CHECK-2p2-NEXT: ret906entry:907 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)908 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.f32i64(<vscale x 4 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)909 ret <vscale x 4 x float> %0910}911 912define <vscale x 4 x float> @test_ucvtf_f32_i64_ptrue(double %z0,<vscale x 4 x float> %x, <vscale x 2 x i64> %y) {913; CHECK-LABEL: test_ucvtf_f32_i64_ptrue:914; CHECK: // %bb.0: // %entry915; CHECK-NEXT: mov z0.d, z1.d916; CHECK-NEXT: ptrue p0.d917; CHECK-NEXT: ucvtf z0.s, p0/m, z2.d918; CHECK-NEXT: ret919;920; CHECK-2p2-LABEL: test_ucvtf_f32_i64_ptrue:921; CHECK-2p2: // %bb.0: // %entry922; CHECK-2p2-NEXT: ptrue p0.d923; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z2.d924; CHECK-2p2-NEXT: ret925entry:926 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)927 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.f32i64(<vscale x 4 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)928 ret <vscale x 4 x float> %0929}930 931define <vscale x 2 x double> @test_ucvtf_f64_i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {932; CHECK-LABEL: test_ucvtf_f64_i32_ptrue_u:933; CHECK: // %bb.0: // %entry934; CHECK-NEXT: ptrue p0.d935; CHECK-NEXT: ucvtf z0.d, p0/m, z1.s936; CHECK-NEXT: ret937;938; CHECK-2p2-LABEL: test_ucvtf_f64_i32_ptrue_u:939; CHECK-2p2: // %bb.0: // %entry940; CHECK-2p2-NEXT: ptrue p0.d941; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z1.s942; CHECK-2p2-NEXT: ret943entry:944 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)945 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.f64i32(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %x)946 ret <vscale x 2 x double> %0947}948 949define <vscale x 2 x double> @test_ucvtf_f64_i32_ptrue(double %z0,<vscale x 2 x double> %x, <vscale x 4 x i32> %y) {950; CHECK-LABEL: test_ucvtf_f64_i32_ptrue:951; CHECK: // %bb.0: // %entry952; CHECK-NEXT: mov z0.d, z1.d953; CHECK-NEXT: ptrue p0.d954; CHECK-NEXT: ucvtf z0.d, p0/m, z2.s955; CHECK-NEXT: ret956;957; CHECK-2p2-LABEL: test_ucvtf_f64_i32_ptrue:958; CHECK-2p2: // %bb.0: // %entry959; CHECK-2p2-NEXT: ptrue p0.d960; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z2.s961; CHECK-2p2-NEXT: ret962entry:963 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)964 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.f64i32(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 4 x i32> %y)965 ret <vscale x 2 x double> %0966}967 968define <vscale x 8 x half> @test_ucvtf_f16_i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {969; CHECK-LABEL: test_ucvtf_f16_i32_ptrue_u:970; CHECK: // %bb.0: // %entry971; CHECK-NEXT: ptrue p0.s972; CHECK-NEXT: ucvtf z0.h, p0/m, z1.s973; CHECK-NEXT: ret974;975; CHECK-2p2-LABEL: test_ucvtf_f16_i32_ptrue_u:976; CHECK-2p2: // %bb.0: // %entry977; CHECK-2p2-NEXT: ptrue p0.s978; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.s979; CHECK-2p2-NEXT: ret980entry:981 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)982 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i32(<vscale x 8 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)983 ret <vscale x 8 x half> %0984}985 986define <vscale x 8 x half> @test_ucvtf_f16_i32_ptrue(double %z0,<vscale x 8 x half> %x, <vscale x 4 x i32> %y) {987; CHECK-LABEL: test_ucvtf_f16_i32_ptrue:988; CHECK: // %bb.0: // %entry989; CHECK-NEXT: mov z0.d, z1.d990; CHECK-NEXT: ptrue p0.s991; CHECK-NEXT: ucvtf z0.h, p0/m, z2.s992; CHECK-NEXT: ret993;994; CHECK-2p2-LABEL: test_ucvtf_f16_i32_ptrue:995; CHECK-2p2: // %bb.0: // %entry996; CHECK-2p2-NEXT: ptrue p0.s997; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z2.s998; CHECK-2p2-NEXT: ret999entry:1000 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1001 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i32(<vscale x 8 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1002 ret <vscale x 8 x half> %01003}1004 1005define <vscale x 8 x half> @test_ucvtf_f16_i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1006; CHECK-LABEL: test_ucvtf_f16_i64_ptrue_u:1007; CHECK: // %bb.0: // %entry1008; CHECK-NEXT: ptrue p0.d1009; CHECK-NEXT: ucvtf z0.h, p0/m, z1.d1010; CHECK-NEXT: ret1011;1012; CHECK-2p2-LABEL: test_ucvtf_f16_i64_ptrue_u:1013; CHECK-2p2: // %bb.0: // %entry1014; CHECK-2p2-NEXT: ptrue p0.d1015; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.d1016; CHECK-2p2-NEXT: ret1017entry:1018 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1019 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i64(<vscale x 8 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1020 ret <vscale x 8 x half> %01021}1022 1023define <vscale x 8 x half> @test_ucvtf_f16_i64_ptrue(double %z0,<vscale x 8 x half> %x, <vscale x 2 x i64> %y) {1024; CHECK-LABEL: test_ucvtf_f16_i64_ptrue:1025; CHECK: // %bb.0: // %entry1026; CHECK-NEXT: mov z0.d, z1.d1027; CHECK-NEXT: ptrue p0.d1028; CHECK-NEXT: ucvtf z0.h, p0/m, z2.d1029; CHECK-NEXT: ret1030;1031; CHECK-2p2-LABEL: test_ucvtf_f16_i64_ptrue:1032; CHECK-2p2: // %bb.0: // %entry1033; CHECK-2p2-NEXT: ptrue p0.d1034; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z2.d1035; CHECK-2p2-NEXT: ret1036entry:1037 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1038 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.f16i64(<vscale x 8 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1039 ret <vscale x 8 x half> %01040}1041 1042define <vscale x 8 x half> @test_scvtf_nxv8f16_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1043; CHECK-LABEL: test_scvtf_nxv8f16_nxv8i16_ptrue_u:1044; CHECK: // %bb.0: // %entry1045; CHECK-NEXT: ptrue p0.h1046; CHECK-NEXT: movprfx z0, z11047; CHECK-NEXT: scvtf z0.h, p0/m, z1.h1048; CHECK-NEXT: ret1049;1050; CHECK-2p2-LABEL: test_scvtf_nxv8f16_nxv8i16_ptrue_u:1051; CHECK-2p2: // %bb.0: // %entry1052; CHECK-2p2-NEXT: ptrue p0.h1053; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z1.h1054; CHECK-2p2-NEXT: ret1055entry:1056 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1057 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1058 ret <vscale x 8 x half> %01059}1060 1061define <vscale x 8 x half> @test_scvtf_nxv8f16_nxv8i16_ptrue(double %z0,<vscale x 8 x half> %x, <vscale x 8 x i16> %y) {1062; CHECK-LABEL: test_scvtf_nxv8f16_nxv8i16_ptrue:1063; CHECK: // %bb.0: // %entry1064; CHECK-NEXT: ptrue p0.h1065; CHECK-NEXT: movprfx z0, z21066; CHECK-NEXT: scvtf z0.h, p0/m, z2.h1067; CHECK-NEXT: ret1068;1069; CHECK-2p2-LABEL: test_scvtf_nxv8f16_nxv8i16_ptrue:1070; CHECK-2p2: // %bb.0: // %entry1071; CHECK-2p2-NEXT: ptrue p0.h1072; CHECK-2p2-NEXT: scvtf z0.h, p0/z, z2.h1073; CHECK-2p2-NEXT: ret1074entry:1075 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1076 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1077 ret <vscale x 8 x half> %01078}1079 1080define <vscale x 8 x half> @test_ucvtf_nxv8f16_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) {1081; CHECK-LABEL: test_ucvtf_nxv8f16_nxv8i16_ptrue_u:1082; CHECK: // %bb.0: // %entry1083; CHECK-NEXT: ptrue p0.h1084; CHECK-NEXT: movprfx z0, z11085; CHECK-NEXT: ucvtf z0.h, p0/m, z1.h1086; CHECK-NEXT: ret1087;1088; CHECK-2p2-LABEL: test_ucvtf_nxv8f16_nxv8i16_ptrue_u:1089; CHECK-2p2: // %bb.0: // %entry1090; CHECK-2p2-NEXT: ptrue p0.h1091; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z1.h1092; CHECK-2p2-NEXT: ret1093entry:1094 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1095 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x)1096 ret <vscale x 8 x half> %01097}1098 1099define <vscale x 8 x half> @test_ucvtf_nxv8f16_nxv8i16_ptrue(double %z0,<vscale x 8 x half> %x, <vscale x 8 x i16> %y) {1100; CHECK-LABEL: test_ucvtf_nxv8f16_nxv8i16_ptrue:1101; CHECK: // %bb.0: // %entry1102; CHECK-NEXT: ptrue p0.h1103; CHECK-NEXT: movprfx z0, z21104; CHECK-NEXT: ucvtf z0.h, p0/m, z2.h1105; CHECK-NEXT: ret1106;1107; CHECK-2p2-LABEL: test_ucvtf_nxv8f16_nxv8i16_ptrue:1108; CHECK-2p2: // %bb.0: // %entry1109; CHECK-2p2-NEXT: ptrue p0.h1110; CHECK-2p2-NEXT: ucvtf z0.h, p0/z, z2.h1111; CHECK-2p2-NEXT: ret1112entry:1113 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)1114 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y)1115 ret <vscale x 8 x half> %01116}1117 1118define <vscale x 4 x float> @test_scvtf_nxv4f32_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1119; CHECK-LABEL: test_scvtf_nxv4f32_nxv4i32_ptrue_u:1120; CHECK: // %bb.0: // %entry1121; CHECK-NEXT: ptrue p0.s1122; CHECK-NEXT: movprfx z0, z11123; CHECK-NEXT: scvtf z0.s, p0/m, z1.s1124; CHECK-NEXT: ret1125;1126; CHECK-2p2-LABEL: test_scvtf_nxv4f32_nxv4i32_ptrue_u:1127; CHECK-2p2: // %bb.0: // %entry1128; CHECK-2p2-NEXT: ptrue p0.s1129; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z1.s1130; CHECK-2p2-NEXT: ret1131entry:1132 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1133 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.nxv4f32.nxv4i32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1134 ret <vscale x 4 x float> %01135}1136 1137define <vscale x 4 x float> @test_scvtf_nxv4f32_nxv4i32_ptrue(double %z0,<vscale x 4 x float> %x, <vscale x 4 x i32> %y) {1138; CHECK-LABEL: test_scvtf_nxv4f32_nxv4i32_ptrue:1139; CHECK: // %bb.0: // %entry1140; CHECK-NEXT: ptrue p0.s1141; CHECK-NEXT: movprfx z0, z21142; CHECK-NEXT: scvtf z0.s, p0/m, z2.s1143; CHECK-NEXT: ret1144;1145; CHECK-2p2-LABEL: test_scvtf_nxv4f32_nxv4i32_ptrue:1146; CHECK-2p2: // %bb.0: // %entry1147; CHECK-2p2-NEXT: ptrue p0.s1148; CHECK-2p2-NEXT: scvtf z0.s, p0/z, z2.s1149; CHECK-2p2-NEXT: ret1150entry:1151 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1152 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.scvtf.nxv4f32.nxv4i32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1153 ret <vscale x 4 x float> %01154}1155 1156define <vscale x 4 x float> @test_ucvtf_nxv4f32_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) {1157; CHECK-LABEL: test_ucvtf_nxv4f32_nxv4i32_ptrue_u:1158; CHECK: // %bb.0: // %entry1159; CHECK-NEXT: ptrue p0.s1160; CHECK-NEXT: movprfx z0, z11161; CHECK-NEXT: ucvtf z0.s, p0/m, z1.s1162; CHECK-NEXT: ret1163;1164; CHECK-2p2-LABEL: test_ucvtf_nxv4f32_nxv4i32_ptrue_u:1165; CHECK-2p2: // %bb.0: // %entry1166; CHECK-2p2-NEXT: ptrue p0.s1167; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z1.s1168; CHECK-2p2-NEXT: ret1169entry:1170 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1171 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.nxv4f32.nxv4i32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x)1172 ret <vscale x 4 x float> %01173}1174 1175define <vscale x 4 x float> @test_ucvtf_nxv4f32_nxv4i32_ptrue(double %z0,<vscale x 4 x float> %x, <vscale x 4 x i32> %y) {1176; CHECK-LABEL: test_ucvtf_nxv4f32_nxv4i32_ptrue:1177; CHECK: // %bb.0: // %entry1178; CHECK-NEXT: ptrue p0.s1179; CHECK-NEXT: movprfx z0, z21180; CHECK-NEXT: ucvtf z0.s, p0/m, z2.s1181; CHECK-NEXT: ret1182;1183; CHECK-2p2-LABEL: test_ucvtf_nxv4f32_nxv4i32_ptrue:1184; CHECK-2p2: // %bb.0: // %entry1185; CHECK-2p2-NEXT: ptrue p0.s1186; CHECK-2p2-NEXT: ucvtf z0.s, p0/z, z2.s1187; CHECK-2p2-NEXT: ret1188entry:1189 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)1190 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.ucvtf.nxv4f32.nxv4i32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y)1191 ret <vscale x 4 x float> %01192}1193 1194define <vscale x 2 x double> @test_scvtf_nxv2f64_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1195; CHECK-LABEL: test_scvtf_nxv2f64_nxv2i64_ptrue_u:1196; CHECK: // %bb.0: // %entry1197; CHECK-NEXT: ptrue p0.d1198; CHECK-NEXT: movprfx z0, z11199; CHECK-NEXT: scvtf z0.d, p0/m, z1.d1200; CHECK-NEXT: ret1201;1202; CHECK-2p2-LABEL: test_scvtf_nxv2f64_nxv2i64_ptrue_u:1203; CHECK-2p2: // %bb.0: // %entry1204; CHECK-2p2-NEXT: ptrue p0.d1205; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z1.d1206; CHECK-2p2-NEXT: ret1207entry:1208 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1209 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.nxv2f64.nxv2i64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1210 ret <vscale x 2 x double> %01211}1212 1213define <vscale x 2 x double> @test_scvtf_nxv2f64_nxv2i64_ptrue(double %z0,<vscale x 2 x double> %x, <vscale x 2 x i64> %y) {1214; CHECK-LABEL: test_scvtf_nxv2f64_nxv2i64_ptrue:1215; CHECK: // %bb.0: // %entry1216; CHECK-NEXT: ptrue p0.d1217; CHECK-NEXT: movprfx z0, z21218; CHECK-NEXT: scvtf z0.d, p0/m, z2.d1219; CHECK-NEXT: ret1220;1221; CHECK-2p2-LABEL: test_scvtf_nxv2f64_nxv2i64_ptrue:1222; CHECK-2p2: // %bb.0: // %entry1223; CHECK-2p2-NEXT: ptrue p0.d1224; CHECK-2p2-NEXT: scvtf z0.d, p0/z, z2.d1225; CHECK-2p2-NEXT: ret1226entry:1227 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1228 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.scvtf.nxv2f64.nxv2i64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1229 ret <vscale x 2 x double> %01230}1231 1232define <vscale x 2 x double> @test_ucvtf_nxv2f64_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) {1233; CHECK-LABEL: test_ucvtf_nxv2f64_nxv2i64_ptrue_u:1234; CHECK: // %bb.0: // %entry1235; CHECK-NEXT: ptrue p0.d1236; CHECK-NEXT: movprfx z0, z11237; CHECK-NEXT: ucvtf z0.d, p0/m, z1.d1238; CHECK-NEXT: ret1239;1240; CHECK-2p2-LABEL: test_ucvtf_nxv2f64_nxv2i64_ptrue_u:1241; CHECK-2p2: // %bb.0: // %entry1242; CHECK-2p2-NEXT: ptrue p0.d1243; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z1.d1244; CHECK-2p2-NEXT: ret1245entry:1246 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1247 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.nxv2f64.nxv2i64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x)1248 ret <vscale x 2 x double> %01249}1250 1251define <vscale x 2 x double> @test_ucvtf_nxv2f64_nxv2i64_ptrue(double %z0,<vscale x 2 x double> %x, <vscale x 2 x i64> %y) {1252; CHECK-LABEL: test_ucvtf_nxv2f64_nxv2i64_ptrue:1253; CHECK: // %bb.0: // %entry1254; CHECK-NEXT: ptrue p0.d1255; CHECK-NEXT: movprfx z0, z21256; CHECK-NEXT: ucvtf z0.d, p0/m, z2.d1257; CHECK-NEXT: ret1258;1259; CHECK-2p2-LABEL: test_ucvtf_nxv2f64_nxv2i64_ptrue:1260; CHECK-2p2: // %bb.0: // %entry1261; CHECK-2p2-NEXT: ptrue p0.d1262; CHECK-2p2-NEXT: ucvtf z0.d, p0/z, z2.d1263; CHECK-2p2-NEXT: ret1264entry:1265 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)1266 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.ucvtf.nxv2f64.nxv2i64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y)1267 ret <vscale x 2 x double> %01268}1269 1270