brintos

brintos / llvm-project-archived public Read only

0
0
Text · 48.6 KiB · 2064d38 Raw
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