brintos

brintos / llvm-project-archived public Read only

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