5308 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve,+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MVE3; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MVEFP4 5;6; Float to signed 32-bit -- Vector size variation7;8 9declare <1 x i32> @llvm.fptosi.sat.v1f32.v1i32 (<1 x float>)10declare <2 x i32> @llvm.fptosi.sat.v2f32.v2i32 (<2 x float>)11declare <3 x i32> @llvm.fptosi.sat.v3f32.v3i32 (<3 x float>)12declare <4 x i32> @llvm.fptosi.sat.v4f32.v4i32 (<4 x float>)13declare <5 x i32> @llvm.fptosi.sat.v5f32.v5i32 (<5 x float>)14declare <6 x i32> @llvm.fptosi.sat.v6f32.v6i32 (<6 x float>)15declare <7 x i32> @llvm.fptosi.sat.v7f32.v7i32 (<7 x float>)16declare <8 x i32> @llvm.fptosi.sat.v8f32.v8i32 (<8 x float>)17 18define arm_aapcs_vfpcc <1 x i32> @test_signed_v1f32_v1i32(<1 x float> %f) {19; CHECK-LABEL: test_signed_v1f32_v1i32:20; CHECK: @ %bb.0:21; CHECK-NEXT: vcvt.s32.f32 s0, s022; CHECK-NEXT: vmov r0, s023; CHECK-NEXT: bx lr24 %x = call <1 x i32> @llvm.fptosi.sat.v1f32.v1i32(<1 x float> %f)25 ret <1 x i32> %x26}27 28define arm_aapcs_vfpcc <2 x i32> @test_signed_v2f32_v2i32(<2 x float> %f) {29; CHECK-LABEL: test_signed_v2f32_v2i32:30; CHECK: @ %bb.0:31; CHECK-NEXT: .save {r4, r5, r7, lr}32; CHECK-NEXT: push {r4, r5, r7, lr}33; CHECK-NEXT: .vsave {d8, d9, d10}34; CHECK-NEXT: vpush {d8, d9, d10}35; CHECK-NEXT: vmov q4, q036; CHECK-NEXT: vmov r0, s1737; CHECK-NEXT: bl __aeabi_f2lz38; CHECK-NEXT: mov r5, r039; CHECK-NEXT: vmov r0, s1640; CHECK-NEXT: vldr s18, .LCPI1_041; CHECK-NEXT: mov r4, r142; CHECK-NEXT: vldr s20, .LCPI1_143; CHECK-NEXT: vcmp.f32 s17, s1844; CHECK-NEXT: vmrs APSR_nzcv, fpscr45; CHECK-NEXT: itt lt46; CHECK-NEXT: movlt.w r4, #-147; CHECK-NEXT: movlt.w r5, #-214748364848; CHECK-NEXT: vcmp.f32 s17, s2049; CHECK-NEXT: vmrs APSR_nzcv, fpscr50; CHECK-NEXT: itt gt51; CHECK-NEXT: mvngt r5, #-214748364852; CHECK-NEXT: movgt r4, #053; CHECK-NEXT: vcmp.f32 s17, s1754; CHECK-NEXT: vmrs APSR_nzcv, fpscr55; CHECK-NEXT: itt vs56; CHECK-NEXT: movvs r4, #057; CHECK-NEXT: movvs r5, #058; CHECK-NEXT: bl __aeabi_f2lz59; CHECK-NEXT: vcmp.f32 s16, s1860; CHECK-NEXT: vmrs APSR_nzcv, fpscr61; CHECK-NEXT: itt lt62; CHECK-NEXT: movlt.w r0, #-214748364863; CHECK-NEXT: movlt.w r1, #-164; CHECK-NEXT: vcmp.f32 s16, s2065; CHECK-NEXT: vmrs APSR_nzcv, fpscr66; CHECK-NEXT: itt gt67; CHECK-NEXT: movgt r1, #068; CHECK-NEXT: mvngt r0, #-214748364869; CHECK-NEXT: vcmp.f32 s16, s1670; CHECK-NEXT: vmrs APSR_nzcv, fpscr71; CHECK-NEXT: itt vs72; CHECK-NEXT: movvs r0, #073; CHECK-NEXT: movvs r1, #074; CHECK-NEXT: vmov q0[2], q0[0], r0, r575; CHECK-NEXT: vmov q0[3], q0[1], r1, r476; CHECK-NEXT: vpop {d8, d9, d10}77; CHECK-NEXT: pop {r4, r5, r7, pc}78; CHECK-NEXT: .p2align 279; CHECK-NEXT: @ %bb.1:80; CHECK-NEXT: .LCPI1_0:81; CHECK-NEXT: .long 0xcf000000 @ float -2.14748365E+982; CHECK-NEXT: .LCPI1_1:83; CHECK-NEXT: .long 0x4effffff @ float 2.14748352E+984 %x = call <2 x i32> @llvm.fptosi.sat.v2f32.v2i32(<2 x float> %f)85 ret <2 x i32> %x86}87 88define arm_aapcs_vfpcc <3 x i32> @test_signed_v3f32_v3i32(<3 x float> %f) {89; CHECK-MVE-LABEL: test_signed_v3f32_v3i32:90; CHECK-MVE: @ %bb.0:91; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s292; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s093; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s394; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s195; CHECK-MVE-NEXT: vmov r0, s296; CHECK-MVE-NEXT: vmov r1, s097; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r098; CHECK-MVE-NEXT: vmov r0, s499; CHECK-MVE-NEXT: vmov r1, s6100; CHECK-MVE-NEXT: vmov q0[3], q0[1], r1, r0101; CHECK-MVE-NEXT: bx lr102;103; CHECK-MVEFP-LABEL: test_signed_v3f32_v3i32:104; CHECK-MVEFP: @ %bb.0:105; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q0106; CHECK-MVEFP-NEXT: bx lr107 %x = call <3 x i32> @llvm.fptosi.sat.v3f32.v3i32(<3 x float> %f)108 ret <3 x i32> %x109}110 111define arm_aapcs_vfpcc <4 x i32> @test_signed_v4f32_v4i32(<4 x float> %f) {112; CHECK-MVE-LABEL: test_signed_v4f32_v4i32:113; CHECK-MVE: @ %bb.0:114; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s2115; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s0116; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s3117; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s1118; CHECK-MVE-NEXT: vmov r0, s2119; CHECK-MVE-NEXT: vmov r1, s0120; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r0121; CHECK-MVE-NEXT: vmov r0, s4122; CHECK-MVE-NEXT: vmov r1, s6123; CHECK-MVE-NEXT: vmov q0[3], q0[1], r1, r0124; CHECK-MVE-NEXT: bx lr125;126; CHECK-MVEFP-LABEL: test_signed_v4f32_v4i32:127; CHECK-MVEFP: @ %bb.0:128; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q0129; CHECK-MVEFP-NEXT: bx lr130 %x = call <4 x i32> @llvm.fptosi.sat.v4f32.v4i32(<4 x float> %f)131 ret <4 x i32> %x132}133 134define arm_aapcs_vfpcc <5 x i32> @test_signed_v5f32_v5i32(<5 x float> %f) {135; CHECK-MVE-LABEL: test_signed_v5f32_v5i32:136; CHECK-MVE: @ %bb.0:137; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s2138; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s0139; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s3140; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s1141; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s4142; CHECK-MVE-NEXT: vmov r1, s2143; CHECK-MVE-NEXT: vmov r2, s0144; CHECK-MVE-NEXT: vmov q0[2], q0[0], r2, r1145; CHECK-MVE-NEXT: vmov r1, s6146; CHECK-MVE-NEXT: vmov r2, s8147; CHECK-MVE-NEXT: vmov q0[3], q0[1], r2, r1148; CHECK-MVE-NEXT: vstrw.32 q0, [r0]149; CHECK-MVE-NEXT: vstr s4, [r0, #16]150; CHECK-MVE-NEXT: bx lr151;152; CHECK-MVEFP-LABEL: test_signed_v5f32_v5i32:153; CHECK-MVEFP: @ %bb.0:154; CHECK-MVEFP-NEXT: vcvt.s32.f32 q1, q1155; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q0156; CHECK-MVEFP-NEXT: vmov r1, s4157; CHECK-MVEFP-NEXT: str r1, [r0, #16]158; CHECK-MVEFP-NEXT: vstrw.32 q0, [r0]159; CHECK-MVEFP-NEXT: bx lr160 %x = call <5 x i32> @llvm.fptosi.sat.v5f32.v5i32(<5 x float> %f)161 ret <5 x i32> %x162}163 164define arm_aapcs_vfpcc <6 x i32> @test_signed_v6f32_v6i32(<6 x float> %f) {165; CHECK-MVE-LABEL: test_signed_v6f32_v6i32:166; CHECK-MVE: @ %bb.0:167; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s2168; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s0169; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s3170; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s1171; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s5172; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s4173; CHECK-MVE-NEXT: vmov r1, s2174; CHECK-MVE-NEXT: vmov r2, s0175; CHECK-MVE-NEXT: vmov q0[2], q0[0], r2, r1176; CHECK-MVE-NEXT: vmov r1, s8177; CHECK-MVE-NEXT: vmov r2, s10178; CHECK-MVE-NEXT: vmov q0[3], q0[1], r2, r1179; CHECK-MVE-NEXT: vstr s6, [r0, #20]180; CHECK-MVE-NEXT: vstrw.32 q0, [r0]181; CHECK-MVE-NEXT: vstr s4, [r0, #16]182; CHECK-MVE-NEXT: bx lr183;184; CHECK-MVEFP-LABEL: test_signed_v6f32_v6i32:185; CHECK-MVEFP: @ %bb.0:186; CHECK-MVEFP-NEXT: vcvt.s32.f32 q1, q1187; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q0188; CHECK-MVEFP-NEXT: vmov.f32 s6, s5189; CHECK-MVEFP-NEXT: vmov r2, s4190; CHECK-MVEFP-NEXT: vmov r1, s6191; CHECK-MVEFP-NEXT: strd r2, r1, [r0, #16]192; CHECK-MVEFP-NEXT: vstrw.32 q0, [r0]193; CHECK-MVEFP-NEXT: bx lr194 %x = call <6 x i32> @llvm.fptosi.sat.v6f32.v6i32(<6 x float> %f)195 ret <6 x i32> %x196}197 198define arm_aapcs_vfpcc <7 x i32> @test_signed_v7f32_v7i32(<7 x float> %f) {199; CHECK-MVE-LABEL: test_signed_v7f32_v7i32:200; CHECK-MVE: @ %bb.0:201; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s2202; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s0203; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s3204; CHECK-MVE-NEXT: vcvt.s32.f32 s12, s1205; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s5206; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s4207; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s6208; CHECK-MVE-NEXT: vmov r1, s2209; CHECK-MVE-NEXT: vmov r2, s0210; CHECK-MVE-NEXT: vmov q0[2], q0[0], r2, r1211; CHECK-MVE-NEXT: vmov r1, s10212; CHECK-MVE-NEXT: vmov r2, s12213; CHECK-MVE-NEXT: vmov q0[3], q0[1], r2, r1214; CHECK-MVE-NEXT: vstr s8, [r0, #20]215; CHECK-MVE-NEXT: vstr s4, [r0, #16]216; CHECK-MVE-NEXT: vstrw.32 q0, [r0]217; CHECK-MVE-NEXT: vstr s6, [r0, #24]218; CHECK-MVE-NEXT: bx lr219;220; CHECK-MVEFP-LABEL: test_signed_v7f32_v7i32:221; CHECK-MVEFP: @ %bb.0:222; CHECK-MVEFP-NEXT: vcvt.s32.f32 q1, q1223; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q0224; CHECK-MVEFP-NEXT: vmov.f32 s10, s5225; CHECK-MVEFP-NEXT: vmov r2, s4226; CHECK-MVEFP-NEXT: vmov r3, s6227; CHECK-MVEFP-NEXT: vmov r1, s10228; CHECK-MVEFP-NEXT: strd r2, r1, [r0, #16]229; CHECK-MVEFP-NEXT: str r3, [r0, #24]230; CHECK-MVEFP-NEXT: vstrw.32 q0, [r0]231; CHECK-MVEFP-NEXT: bx lr232 %x = call <7 x i32> @llvm.fptosi.sat.v7f32.v7i32(<7 x float> %f)233 ret <7 x i32> %x234}235 236define arm_aapcs_vfpcc <8 x i32> @test_signed_v8f32_v8i32(<8 x float> %f) {237; CHECK-MVE-LABEL: test_signed_v8f32_v8i32:238; CHECK-MVE: @ %bb.0:239; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s2240; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s0241; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s3242; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s1243; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s6244; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s4245; CHECK-MVE-NEXT: vcvt.s32.f32 s12, s7246; CHECK-MVE-NEXT: vcvt.s32.f32 s14, s5247; CHECK-MVE-NEXT: vmov r0, s2248; CHECK-MVE-NEXT: vmov r1, s0249; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r0250; CHECK-MVE-NEXT: vmov r0, s8251; CHECK-MVE-NEXT: vmov r1, s10252; CHECK-MVE-NEXT: vmov q0[3], q0[1], r1, r0253; CHECK-MVE-NEXT: vmov r0, s6254; CHECK-MVE-NEXT: vmov r1, s4255; CHECK-MVE-NEXT: vmov q1[2], q1[0], r1, r0256; CHECK-MVE-NEXT: vmov r0, s12257; CHECK-MVE-NEXT: vmov r1, s14258; CHECK-MVE-NEXT: vmov q1[3], q1[1], r1, r0259; CHECK-MVE-NEXT: bx lr260;261; CHECK-MVEFP-LABEL: test_signed_v8f32_v8i32:262; CHECK-MVEFP: @ %bb.0:263; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q0264; CHECK-MVEFP-NEXT: vcvt.s32.f32 q1, q1265; CHECK-MVEFP-NEXT: bx lr266 %x = call <8 x i32> @llvm.fptosi.sat.v8f32.v8i32(<8 x float> %f)267 ret <8 x i32> %x268}269 270;271; Double to signed 32-bit -- Vector size variation272;273 274declare <1 x i32> @llvm.fptosi.sat.v1f64.v1i32 (<1 x double>)275declare <2 x i32> @llvm.fptosi.sat.v2f64.v2i32 (<2 x double>)276declare <3 x i32> @llvm.fptosi.sat.v3f64.v3i32 (<3 x double>)277declare <4 x i32> @llvm.fptosi.sat.v4f64.v4i32 (<4 x double>)278declare <5 x i32> @llvm.fptosi.sat.v5f64.v5i32 (<5 x double>)279declare <6 x i32> @llvm.fptosi.sat.v6f64.v6i32 (<6 x double>)280 281define arm_aapcs_vfpcc <1 x i32> @test_signed_v1f64_v1i32(<1 x double> %f) {282; CHECK-LABEL: test_signed_v1f64_v1i32:283; CHECK: @ %bb.0:284; CHECK-NEXT: .save {r4, r5, r6, r7, lr}285; CHECK-NEXT: push {r4, r5, r6, r7, lr}286; CHECK-NEXT: .pad #4287; CHECK-NEXT: sub sp, #4288; CHECK-NEXT: vldr d1, .LCPI8_0289; CHECK-NEXT: vmov r5, r4, d0290; CHECK-NEXT: vmov r2, r3, d1291; CHECK-NEXT: mov r0, r5292; CHECK-NEXT: mov r1, r4293; CHECK-NEXT: bl __aeabi_dcmpge294; CHECK-NEXT: mov r6, r0295; CHECK-NEXT: mov r0, r5296; CHECK-NEXT: mov r1, r4297; CHECK-NEXT: bl __aeabi_d2iz298; CHECK-NEXT: vldr d0, .LCPI8_1299; CHECK-NEXT: mov r7, r0300; CHECK-NEXT: mov r0, r5301; CHECK-NEXT: mov r1, r4302; CHECK-NEXT: vmov r2, r3, d0303; CHECK-NEXT: cmp r6, #0304; CHECK-NEXT: it eq305; CHECK-NEXT: moveq.w r7, #-2147483648306; CHECK-NEXT: bl __aeabi_dcmpgt307; CHECK-NEXT: cmp r0, #0308; CHECK-NEXT: mov r0, r5309; CHECK-NEXT: mov r1, r4310; CHECK-NEXT: mov r2, r5311; CHECK-NEXT: mov r3, r4312; CHECK-NEXT: it ne313; CHECK-NEXT: mvnne r7, #-2147483648314; CHECK-NEXT: bl __aeabi_dcmpun315; CHECK-NEXT: cmp r0, #0316; CHECK-NEXT: it ne317; CHECK-NEXT: movne r7, #0318; CHECK-NEXT: mov r0, r7319; CHECK-NEXT: add sp, #4320; CHECK-NEXT: pop {r4, r5, r6, r7, pc}321; CHECK-NEXT: .p2align 3322; CHECK-NEXT: @ %bb.1:323; CHECK-NEXT: .LCPI8_0:324; CHECK-NEXT: .long 0 @ double -2147483648325; CHECK-NEXT: .long 3252682752326; CHECK-NEXT: .LCPI8_1:327; CHECK-NEXT: .long 4290772992 @ double 2147483647328; CHECK-NEXT: .long 1105199103329 %x = call <1 x i32> @llvm.fptosi.sat.v1f64.v1i32(<1 x double> %f)330 ret <1 x i32> %x331}332 333define arm_aapcs_vfpcc <2 x i32> @test_signed_v2f64_v2i32(<2 x double> %f) {334; CHECK-LABEL: test_signed_v2f64_v2i32:335; CHECK: @ %bb.0:336; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}337; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}338; CHECK-NEXT: .pad #4339; CHECK-NEXT: sub sp, #4340; CHECK-NEXT: .vsave {d8, d9}341; CHECK-NEXT: vpush {d8, d9}342; CHECK-NEXT: .pad #16343; CHECK-NEXT: sub sp, #16344; CHECK-NEXT: vmov q4, q0345; CHECK-NEXT: vldr d0, .LCPI9_0346; CHECK-NEXT: vmov r9, r8, d9347; CHECK-NEXT: vmov r7, r3, d0348; CHECK-NEXT: str r3, [sp, #12] @ 4-byte Spill349; CHECK-NEXT: mov r0, r9350; CHECK-NEXT: mov r1, r8351; CHECK-NEXT: mov r2, r7352; CHECK-NEXT: bl __aeabi_dcmpge353; CHECK-NEXT: mov r6, r0354; CHECK-NEXT: mov r0, r9355; CHECK-NEXT: mov r1, r8356; CHECK-NEXT: bl __aeabi_d2lz357; CHECK-NEXT: vldr d0, .LCPI9_1358; CHECK-NEXT: mov r5, r0359; CHECK-NEXT: mov r4, r1360; CHECK-NEXT: mov r0, r9361; CHECK-NEXT: vmov r2, r3, d0362; CHECK-NEXT: mov r1, r8363; CHECK-NEXT: vmov r11, r10, d8364; CHECK-NEXT: cmp r6, #0365; CHECK-NEXT: strd r2, r3, [sp, #4] @ 8-byte Folded Spill366; CHECK-NEXT: itt eq367; CHECK-NEXT: moveq.w r4, #-1368; CHECK-NEXT: moveq.w r5, #-2147483648369; CHECK-NEXT: bl __aeabi_dcmpgt370; CHECK-NEXT: cmp r0, #0371; CHECK-NEXT: mov r0, r9372; CHECK-NEXT: mov r1, r8373; CHECK-NEXT: mov r2, r9374; CHECK-NEXT: mov r3, r8375; CHECK-NEXT: itt ne376; CHECK-NEXT: mvnne r5, #-2147483648377; CHECK-NEXT: movne r4, #0378; CHECK-NEXT: bl __aeabi_dcmpun379; CHECK-NEXT: cmp r0, #0380; CHECK-NEXT: itt ne381; CHECK-NEXT: movne r4, #0382; CHECK-NEXT: movne r5, #0383; CHECK-NEXT: ldr r3, [sp, #12] @ 4-byte Reload384; CHECK-NEXT: mov r0, r11385; CHECK-NEXT: mov r1, r10386; CHECK-NEXT: mov r2, r7387; CHECK-NEXT: bl __aeabi_dcmpge388; CHECK-NEXT: mov r8, r0389; CHECK-NEXT: mov r0, r11390; CHECK-NEXT: mov r1, r10391; CHECK-NEXT: bl __aeabi_d2lz392; CHECK-NEXT: mov r7, r0393; CHECK-NEXT: mov r6, r1394; CHECK-NEXT: cmp.w r8, #0395; CHECK-NEXT: itt eq396; CHECK-NEXT: moveq.w r7, #-2147483648397; CHECK-NEXT: moveq.w r6, #-1398; CHECK-NEXT: ldrd r2, r3, [sp, #4] @ 8-byte Folded Reload399; CHECK-NEXT: mov r0, r11400; CHECK-NEXT: mov r1, r10401; CHECK-NEXT: bl __aeabi_dcmpgt402; CHECK-NEXT: cmp r0, #0403; CHECK-NEXT: mov r0, r11404; CHECK-NEXT: mov r1, r10405; CHECK-NEXT: mov r2, r11406; CHECK-NEXT: mov r3, r10407; CHECK-NEXT: itt ne408; CHECK-NEXT: movne r6, #0409; CHECK-NEXT: mvnne r7, #-2147483648410; CHECK-NEXT: bl __aeabi_dcmpun411; CHECK-NEXT: cmp r0, #0412; CHECK-NEXT: itt ne413; CHECK-NEXT: movne r7, #0414; CHECK-NEXT: movne r6, #0415; CHECK-NEXT: vmov q0[2], q0[0], r7, r5416; CHECK-NEXT: vmov q0[3], q0[1], r6, r4417; CHECK-NEXT: add sp, #16418; CHECK-NEXT: vpop {d8, d9}419; CHECK-NEXT: add sp, #4420; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}421; CHECK-NEXT: .p2align 3422; CHECK-NEXT: @ %bb.1:423; CHECK-NEXT: .LCPI9_0:424; CHECK-NEXT: .long 0 @ double -2147483648425; CHECK-NEXT: .long 3252682752426; CHECK-NEXT: .LCPI9_1:427; CHECK-NEXT: .long 4290772992 @ double 2147483647428; CHECK-NEXT: .long 1105199103429 %x = call <2 x i32> @llvm.fptosi.sat.v2f64.v2i32(<2 x double> %f)430 ret <2 x i32> %x431}432 433define arm_aapcs_vfpcc <3 x i32> @test_signed_v3f64_v3i32(<3 x double> %f) {434; CHECK-LABEL: test_signed_v3f64_v3i32:435; CHECK: @ %bb.0:436; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}437; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}438; CHECK-NEXT: .pad #4439; CHECK-NEXT: sub sp, #4440; CHECK-NEXT: .vsave {d8, d9}441; CHECK-NEXT: vpush {d8, d9}442; CHECK-NEXT: .pad #24443; CHECK-NEXT: sub sp, #24444; CHECK-NEXT: vmov.f32 s18, s0445; CHECK-NEXT: vmov.f32 s19, s1446; CHECK-NEXT: vldr d0, .LCPI10_0447; CHECK-NEXT: vmov r10, r7, d1448; CHECK-NEXT: vmov r6, r3, d0449; CHECK-NEXT: vmov.f32 s16, s4450; CHECK-NEXT: vmov.f32 s17, s5451; CHECK-NEXT: str r3, [sp, #8] @ 4-byte Spill452; CHECK-NEXT: mov r0, r10453; CHECK-NEXT: mov r1, r7454; CHECK-NEXT: mov r2, r6455; CHECK-NEXT: bl __aeabi_dcmpge456; CHECK-NEXT: mov r4, r0457; CHECK-NEXT: mov r0, r10458; CHECK-NEXT: mov r1, r7459; CHECK-NEXT: bl __aeabi_d2lz460; CHECK-NEXT: vldr d0, .LCPI10_1461; CHECK-NEXT: mov r11, r0462; CHECK-NEXT: vmov r1, r0, d9463; CHECK-NEXT: cmp r4, #0464; CHECK-NEXT: vmov r2, r3, d0465; CHECK-NEXT: vmov r9, r8, d8466; CHECK-NEXT: str r2, [sp, #20] @ 4-byte Spill467; CHECK-NEXT: strd r1, r0, [sp, #12] @ 8-byte Folded Spill468; CHECK-NEXT: mov r0, r10469; CHECK-NEXT: mov r1, r7470; CHECK-NEXT: it eq471; CHECK-NEXT: moveq.w r11, #-2147483648472; CHECK-NEXT: mov r4, r3473; CHECK-NEXT: str r3, [sp, #4] @ 4-byte Spill474; CHECK-NEXT: bl __aeabi_dcmpgt475; CHECK-NEXT: cmp r0, #0476; CHECK-NEXT: mov r0, r10477; CHECK-NEXT: mov r1, r7478; CHECK-NEXT: mov r2, r10479; CHECK-NEXT: mov r3, r7480; CHECK-NEXT: it ne481; CHECK-NEXT: mvnne r11, #-2147483648482; CHECK-NEXT: bl __aeabi_dcmpun483; CHECK-NEXT: cmp r0, #0484; CHECK-NEXT: it ne485; CHECK-NEXT: movne.w r11, #0486; CHECK-NEXT: ldr.w r10, [sp, #8] @ 4-byte Reload487; CHECK-NEXT: mov r0, r9488; CHECK-NEXT: mov r1, r8489; CHECK-NEXT: mov r2, r6490; CHECK-NEXT: mov r3, r10491; CHECK-NEXT: bl __aeabi_dcmpge492; CHECK-NEXT: mov r5, r0493; CHECK-NEXT: mov r0, r9494; CHECK-NEXT: mov r1, r8495; CHECK-NEXT: bl __aeabi_d2lz496; CHECK-NEXT: mov r7, r0497; CHECK-NEXT: cmp r5, #0498; CHECK-NEXT: it eq499; CHECK-NEXT: moveq.w r7, #-2147483648500; CHECK-NEXT: ldr r2, [sp, #20] @ 4-byte Reload501; CHECK-NEXT: mov r0, r9502; CHECK-NEXT: mov r1, r8503; CHECK-NEXT: mov r3, r4504; CHECK-NEXT: bl __aeabi_dcmpgt505; CHECK-NEXT: cmp r0, #0506; CHECK-NEXT: mov r0, r9507; CHECK-NEXT: mov r1, r8508; CHECK-NEXT: mov r2, r9509; CHECK-NEXT: mov r3, r8510; CHECK-NEXT: it ne511; CHECK-NEXT: mvnne r7, #-2147483648512; CHECK-NEXT: bl __aeabi_dcmpun513; CHECK-NEXT: cmp r0, #0514; CHECK-NEXT: it ne515; CHECK-NEXT: movne r7, #0516; CHECK-NEXT: ldr r5, [sp, #12] @ 4-byte Reload517; CHECK-NEXT: mov r2, r6518; CHECK-NEXT: ldr r4, [sp, #16] @ 4-byte Reload519; CHECK-NEXT: mov r3, r10520; CHECK-NEXT: mov r0, r5521; CHECK-NEXT: mov r1, r4522; CHECK-NEXT: bl __aeabi_dcmpge523; CHECK-NEXT: mov r8, r0524; CHECK-NEXT: mov r0, r5525; CHECK-NEXT: mov r1, r4526; CHECK-NEXT: bl __aeabi_d2lz527; CHECK-NEXT: mov r6, r0528; CHECK-NEXT: cmp.w r8, #0529; CHECK-NEXT: it eq530; CHECK-NEXT: moveq.w r6, #-2147483648531; CHECK-NEXT: ldr r2, [sp, #20] @ 4-byte Reload532; CHECK-NEXT: ldr r3, [sp, #4] @ 4-byte Reload533; CHECK-NEXT: mov r0, r5534; CHECK-NEXT: mov r1, r4535; CHECK-NEXT: bl __aeabi_dcmpgt536; CHECK-NEXT: cmp r0, #0537; CHECK-NEXT: mov r0, r5538; CHECK-NEXT: mov r1, r4539; CHECK-NEXT: mov r2, r5540; CHECK-NEXT: mov r3, r4541; CHECK-NEXT: it ne542; CHECK-NEXT: mvnne r6, #-2147483648543; CHECK-NEXT: bl __aeabi_dcmpun544; CHECK-NEXT: vmov.32 q0[1], r11545; CHECK-NEXT: cmp r0, #0546; CHECK-NEXT: it ne547; CHECK-NEXT: movne r6, #0548; CHECK-NEXT: vmov q0[2], q0[0], r6, r7549; CHECK-NEXT: add sp, #24550; CHECK-NEXT: vpop {d8, d9}551; CHECK-NEXT: add sp, #4552; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}553; CHECK-NEXT: .p2align 3554; CHECK-NEXT: @ %bb.1:555; CHECK-NEXT: .LCPI10_0:556; CHECK-NEXT: .long 0 @ double -2147483648557; CHECK-NEXT: .long 3252682752558; CHECK-NEXT: .LCPI10_1:559; CHECK-NEXT: .long 4290772992 @ double 2147483647560; CHECK-NEXT: .long 1105199103561 %x = call <3 x i32> @llvm.fptosi.sat.v3f64.v3i32(<3 x double> %f)562 ret <3 x i32> %x563}564 565define arm_aapcs_vfpcc <4 x i32> @test_signed_v4f64_v4i32(<4 x double> %f) {566; CHECK-LABEL: test_signed_v4f64_v4i32:567; CHECK: @ %bb.0:568; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}569; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}570; CHECK-NEXT: .pad #4571; CHECK-NEXT: sub sp, #4572; CHECK-NEXT: .vsave {d8, d9, d10, d11}573; CHECK-NEXT: vpush {d8, d9, d10, d11}574; CHECK-NEXT: .pad #24575; CHECK-NEXT: sub sp, #24576; CHECK-NEXT: vmov q5, q1577; CHECK-NEXT: vmov q4, q0578; CHECK-NEXT: vldr d0, .LCPI11_0579; CHECK-NEXT: vmov r5, r6, d10580; CHECK-NEXT: vmov r2, r3, d0581; CHECK-NEXT: mov r0, r5582; CHECK-NEXT: mov r1, r6583; CHECK-NEXT: str r2, [sp, #4] @ 4-byte Spill584; CHECK-NEXT: mov r9, r3585; CHECK-NEXT: bl __aeabi_dcmpge586; CHECK-NEXT: mov r8, r0587; CHECK-NEXT: mov r0, r5588; CHECK-NEXT: mov r1, r6589; CHECK-NEXT: bl __aeabi_d2lz590; CHECK-NEXT: vldr d0, .LCPI11_1591; CHECK-NEXT: mov r4, r0592; CHECK-NEXT: vmov r11, r0, d11593; CHECK-NEXT: mov r1, r6594; CHECK-NEXT: vmov r2, r3, d0595; CHECK-NEXT: cmp.w r8, #0596; CHECK-NEXT: vmov r7, r10, d8597; CHECK-NEXT: str r0, [sp, #8] @ 4-byte Spill598; CHECK-NEXT: mov r0, r5599; CHECK-NEXT: str r2, [sp, #16] @ 4-byte Spill600; CHECK-NEXT: it eq601; CHECK-NEXT: moveq.w r4, #-2147483648602; CHECK-NEXT: str r3, [sp, #20] @ 4-byte Spill603; CHECK-NEXT: mov r8, r3604; CHECK-NEXT: bl __aeabi_dcmpgt605; CHECK-NEXT: cmp r0, #0606; CHECK-NEXT: mov r0, r5607; CHECK-NEXT: mov r1, r6608; CHECK-NEXT: mov r2, r5609; CHECK-NEXT: mov r3, r6610; CHECK-NEXT: it ne611; CHECK-NEXT: mvnne r4, #-2147483648612; CHECK-NEXT: bl __aeabi_dcmpun613; CHECK-NEXT: cmp r0, #0614; CHECK-NEXT: it ne615; CHECK-NEXT: movne r4, #0616; CHECK-NEXT: ldr r6, [sp, #4] @ 4-byte Reload617; CHECK-NEXT: mov r0, r7618; CHECK-NEXT: mov r1, r10619; CHECK-NEXT: mov r3, r9620; CHECK-NEXT: str r4, [sp, #12] @ 4-byte Spill621; CHECK-NEXT: mov r4, r9622; CHECK-NEXT: mov r2, r6623; CHECK-NEXT: str.w r9, [sp] @ 4-byte Spill624; CHECK-NEXT: bl __aeabi_dcmpge625; CHECK-NEXT: mov r5, r0626; CHECK-NEXT: mov r0, r7627; CHECK-NEXT: mov r1, r10628; CHECK-NEXT: bl __aeabi_d2lz629; CHECK-NEXT: mov r9, r0630; CHECK-NEXT: cmp r5, #0631; CHECK-NEXT: it eq632; CHECK-NEXT: moveq.w r9, #-2147483648633; CHECK-NEXT: ldr r2, [sp, #16] @ 4-byte Reload634; CHECK-NEXT: mov r0, r7635; CHECK-NEXT: mov r1, r10636; CHECK-NEXT: mov r3, r8637; CHECK-NEXT: bl __aeabi_dcmpgt638; CHECK-NEXT: cmp r0, #0639; CHECK-NEXT: mov r0, r7640; CHECK-NEXT: mov r1, r10641; CHECK-NEXT: mov r2, r7642; CHECK-NEXT: mov r3, r10643; CHECK-NEXT: it ne644; CHECK-NEXT: mvnne r9, #-2147483648645; CHECK-NEXT: bl __aeabi_dcmpun646; CHECK-NEXT: cmp r0, #0647; CHECK-NEXT: it ne648; CHECK-NEXT: movne.w r9, #0649; CHECK-NEXT: ldr r5, [sp, #8] @ 4-byte Reload650; CHECK-NEXT: mov r0, r11651; CHECK-NEXT: mov r2, r6652; CHECK-NEXT: mov r3, r4653; CHECK-NEXT: mov r1, r5654; CHECK-NEXT: bl __aeabi_dcmpge655; CHECK-NEXT: mov r4, r0656; CHECK-NEXT: mov r0, r11657; CHECK-NEXT: mov r1, r5658; CHECK-NEXT: bl __aeabi_d2lz659; CHECK-NEXT: mov r8, r0660; CHECK-NEXT: cmp r4, #0661; CHECK-NEXT: it eq662; CHECK-NEXT: moveq.w r8, #-2147483648663; CHECK-NEXT: ldr.w r10, [sp, #16] @ 4-byte Reload664; CHECK-NEXT: ldr r3, [sp, #20] @ 4-byte Reload665; CHECK-NEXT: mov r0, r11666; CHECK-NEXT: mov r1, r5667; CHECK-NEXT: mov r2, r10668; CHECK-NEXT: bl __aeabi_dcmpgt669; CHECK-NEXT: cmp r0, #0670; CHECK-NEXT: mov r0, r11671; CHECK-NEXT: mov r1, r5672; CHECK-NEXT: mov r2, r11673; CHECK-NEXT: mov r3, r5674; CHECK-NEXT: vmov r7, r4, d9675; CHECK-NEXT: it ne676; CHECK-NEXT: mvnne r8, #-2147483648677; CHECK-NEXT: bl __aeabi_dcmpun678; CHECK-NEXT: cmp r0, #0679; CHECK-NEXT: it ne680; CHECK-NEXT: movne.w r8, #0681; CHECK-NEXT: ldr r3, [sp] @ 4-byte Reload682; CHECK-NEXT: mov r0, r7683; CHECK-NEXT: mov r1, r4684; CHECK-NEXT: mov r2, r6685; CHECK-NEXT: bl __aeabi_dcmpge686; CHECK-NEXT: mov r5, r0687; CHECK-NEXT: mov r0, r7688; CHECK-NEXT: mov r1, r4689; CHECK-NEXT: bl __aeabi_d2lz690; CHECK-NEXT: mov r6, r0691; CHECK-NEXT: cmp r5, #0692; CHECK-NEXT: it eq693; CHECK-NEXT: moveq.w r6, #-2147483648694; CHECK-NEXT: ldr r3, [sp, #20] @ 4-byte Reload695; CHECK-NEXT: mov r0, r7696; CHECK-NEXT: mov r1, r4697; CHECK-NEXT: mov r2, r10698; CHECK-NEXT: bl __aeabi_dcmpgt699; CHECK-NEXT: cmp r0, #0700; CHECK-NEXT: mov r0, r7701; CHECK-NEXT: mov r1, r4702; CHECK-NEXT: mov r2, r7703; CHECK-NEXT: mov r3, r4704; CHECK-NEXT: it ne705; CHECK-NEXT: mvnne r6, #-2147483648706; CHECK-NEXT: bl __aeabi_dcmpun707; CHECK-NEXT: cmp r0, #0708; CHECK-NEXT: it ne709; CHECK-NEXT: movne r6, #0710; CHECK-NEXT: ldr r0, [sp, #12] @ 4-byte Reload711; CHECK-NEXT: vmov q0[2], q0[0], r9, r0712; CHECK-NEXT: vmov q0[3], q0[1], r6, r8713; CHECK-NEXT: add sp, #24714; CHECK-NEXT: vpop {d8, d9, d10, d11}715; CHECK-NEXT: add sp, #4716; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}717; CHECK-NEXT: .p2align 3718; CHECK-NEXT: @ %bb.1:719; CHECK-NEXT: .LCPI11_0:720; CHECK-NEXT: .long 0 @ double -2147483648721; CHECK-NEXT: .long 3252682752722; CHECK-NEXT: .LCPI11_1:723; CHECK-NEXT: .long 4290772992 @ double 2147483647724; CHECK-NEXT: .long 1105199103725 %x = call <4 x i32> @llvm.fptosi.sat.v4f64.v4i32(<4 x double> %f)726 ret <4 x i32> %x727}728 729define arm_aapcs_vfpcc <5 x i32> @test_signed_v5f64_v5i32(<5 x double> %f) {730; CHECK-LABEL: test_signed_v5f64_v5i32:731; CHECK: @ %bb.0:732; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}733; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}734; CHECK-NEXT: .pad #4735; CHECK-NEXT: sub sp, #4736; CHECK-NEXT: .vsave {d8, d9, d10, d11}737; CHECK-NEXT: vpush {d8, d9, d10, d11}738; CHECK-NEXT: .pad #32739; CHECK-NEXT: sub sp, #32740; CHECK-NEXT: vmov.f32 s16, s0741; CHECK-NEXT: str r0, [sp, #24] @ 4-byte Spill742; CHECK-NEXT: vmov.f32 s17, s1743; CHECK-NEXT: vldr d0, .LCPI12_0744; CHECK-NEXT: vmov r7, r5, d4745; CHECK-NEXT: vmov r2, r3, d0746; CHECK-NEXT: vmov.f32 s18, s6747; CHECK-NEXT: vmov.f32 s20, s4748; CHECK-NEXT: vmov.f32 s22, s2749; CHECK-NEXT: vmov.f32 s19, s7750; CHECK-NEXT: vmov.f32 s21, s5751; CHECK-NEXT: vmov.f32 s23, s3752; CHECK-NEXT: str r2, [sp, #28] @ 4-byte Spill753; CHECK-NEXT: mov r0, r7754; CHECK-NEXT: mov r1, r5755; CHECK-NEXT: str r3, [sp, #20] @ 4-byte Spill756; CHECK-NEXT: bl __aeabi_dcmpge757; CHECK-NEXT: mov r11, r0758; CHECK-NEXT: mov r0, r7759; CHECK-NEXT: mov r1, r5760; CHECK-NEXT: bl __aeabi_d2lz761; CHECK-NEXT: mov r4, r0762; CHECK-NEXT: vmov r1, r0, d10763; CHECK-NEXT: vldr d0, .LCPI12_1764; CHECK-NEXT: vmov r6, r8, d9765; CHECK-NEXT: cmp.w r11, #0766; CHECK-NEXT: vmov r10, r3, d0767; CHECK-NEXT: strd r1, r0, [sp, #8] @ 8-byte Folded Spill768; CHECK-NEXT: vmov r9, r0, d11769; CHECK-NEXT: mov r1, r5770; CHECK-NEXT: mov r2, r10771; CHECK-NEXT: mov r11, r3772; CHECK-NEXT: str r0, [sp, #4] @ 4-byte Spill773; CHECK-NEXT: mov r0, r7774; CHECK-NEXT: it eq775; CHECK-NEXT: moveq.w r4, #-2147483648776; CHECK-NEXT: str.w r10, [sp] @ 4-byte Spill777; CHECK-NEXT: bl __aeabi_dcmpgt778; CHECK-NEXT: cmp r0, #0779; CHECK-NEXT: mov r0, r7780; CHECK-NEXT: mov r1, r5781; CHECK-NEXT: mov r2, r7782; CHECK-NEXT: mov r3, r5783; CHECK-NEXT: it ne784; CHECK-NEXT: mvnne r4, #-2147483648785; CHECK-NEXT: bl __aeabi_dcmpun786; CHECK-NEXT: cmp r0, #0787; CHECK-NEXT: it ne788; CHECK-NEXT: movne r4, #0789; CHECK-NEXT: ldr r0, [sp, #24] @ 4-byte Reload790; CHECK-NEXT: mov r1, r8791; CHECK-NEXT: str r4, [r0, #16]792; CHECK-NEXT: mov r0, r6793; CHECK-NEXT: ldr r7, [sp, #28] @ 4-byte Reload794; CHECK-NEXT: ldr r5, [sp, #20] @ 4-byte Reload795; CHECK-NEXT: mov r2, r7796; CHECK-NEXT: mov r3, r5797; CHECK-NEXT: bl __aeabi_dcmpge798; CHECK-NEXT: mov r4, r0799; CHECK-NEXT: mov r0, r6800; CHECK-NEXT: mov r1, r8801; CHECK-NEXT: bl __aeabi_d2lz802; CHECK-NEXT: cmp r4, #0803; CHECK-NEXT: it eq804; CHECK-NEXT: moveq.w r0, #-2147483648805; CHECK-NEXT: mov r4, r0806; CHECK-NEXT: mov r2, r10807; CHECK-NEXT: mov r0, r6808; CHECK-NEXT: mov r1, r8809; CHECK-NEXT: mov r3, r11810; CHECK-NEXT: mov r10, r11811; CHECK-NEXT: bl __aeabi_dcmpgt812; CHECK-NEXT: cmp r0, #0813; CHECK-NEXT: mov r0, r6814; CHECK-NEXT: mov r1, r8815; CHECK-NEXT: mov r2, r6816; CHECK-NEXT: mov r3, r8817; CHECK-NEXT: it ne818; CHECK-NEXT: mvnne r4, #-2147483648819; CHECK-NEXT: bl __aeabi_dcmpun820; CHECK-NEXT: cmp r0, #0821; CHECK-NEXT: it ne822; CHECK-NEXT: movne r4, #0823; CHECK-NEXT: ldr r6, [sp, #4] @ 4-byte Reload824; CHECK-NEXT: mov r0, r9825; CHECK-NEXT: mov r2, r7826; CHECK-NEXT: mov r3, r5827; CHECK-NEXT: str r4, [sp, #16] @ 4-byte Spill828; CHECK-NEXT: mov r1, r6829; CHECK-NEXT: bl __aeabi_dcmpge830; CHECK-NEXT: mov r4, r0831; CHECK-NEXT: mov r0, r9832; CHECK-NEXT: mov r1, r6833; CHECK-NEXT: bl __aeabi_d2lz834; CHECK-NEXT: mov r8, r0835; CHECK-NEXT: cmp r4, #0836; CHECK-NEXT: it eq837; CHECK-NEXT: moveq.w r8, #-2147483648838; CHECK-NEXT: ldr.w r11, [sp] @ 4-byte Reload839; CHECK-NEXT: mov r0, r9840; CHECK-NEXT: mov r1, r6841; CHECK-NEXT: mov r3, r10842; CHECK-NEXT: mov r2, r11843; CHECK-NEXT: bl __aeabi_dcmpgt844; CHECK-NEXT: cmp r0, #0845; CHECK-NEXT: mov r0, r9846; CHECK-NEXT: mov r1, r6847; CHECK-NEXT: mov r2, r9848; CHECK-NEXT: mov r3, r6849; CHECK-NEXT: it ne850; CHECK-NEXT: mvnne r8, #-2147483648851; CHECK-NEXT: bl __aeabi_dcmpun852; CHECK-NEXT: cmp r0, #0853; CHECK-NEXT: it ne854; CHECK-NEXT: movne.w r8, #0855; CHECK-NEXT: ldr r7, [sp, #8] @ 4-byte Reload856; CHECK-NEXT: ldr r5, [sp, #12] @ 4-byte Reload857; CHECK-NEXT: ldr.w r9, [sp, #20] @ 4-byte Reload858; CHECK-NEXT: ldr r2, [sp, #28] @ 4-byte Reload859; CHECK-NEXT: mov r0, r7860; CHECK-NEXT: mov r1, r5861; CHECK-NEXT: mov r3, r9862; CHECK-NEXT: bl __aeabi_dcmpge863; CHECK-NEXT: mov r6, r0864; CHECK-NEXT: mov r0, r7865; CHECK-NEXT: mov r1, r5866; CHECK-NEXT: bl __aeabi_d2lz867; CHECK-NEXT: mov r4, r0868; CHECK-NEXT: mov r0, r7869; CHECK-NEXT: mov r1, r5870; CHECK-NEXT: mov r2, r11871; CHECK-NEXT: mov r3, r10872; CHECK-NEXT: cmp r6, #0873; CHECK-NEXT: it eq874; CHECK-NEXT: moveq.w r4, #-2147483648875; CHECK-NEXT: bl __aeabi_dcmpgt876; CHECK-NEXT: cmp r0, #0877; CHECK-NEXT: mov r0, r7878; CHECK-NEXT: mov r1, r5879; CHECK-NEXT: mov r2, r7880; CHECK-NEXT: mov r3, r5881; CHECK-NEXT: it ne882; CHECK-NEXT: mvnne r4, #-2147483648883; CHECK-NEXT: bl __aeabi_dcmpun884; CHECK-NEXT: vmov r7, r6, d8885; CHECK-NEXT: cmp r0, #0886; CHECK-NEXT: it ne887; CHECK-NEXT: movne r4, #0888; CHECK-NEXT: ldr r2, [sp, #28] @ 4-byte Reload889; CHECK-NEXT: mov r3, r9890; CHECK-NEXT: mov r0, r7891; CHECK-NEXT: mov r1, r6892; CHECK-NEXT: bl __aeabi_dcmpge893; CHECK-NEXT: mov r9, r0894; CHECK-NEXT: mov r0, r7895; CHECK-NEXT: mov r1, r6896; CHECK-NEXT: bl __aeabi_d2lz897; CHECK-NEXT: mov r5, r0898; CHECK-NEXT: mov r0, r7899; CHECK-NEXT: mov r1, r6900; CHECK-NEXT: mov r2, r11901; CHECK-NEXT: mov r3, r10902; CHECK-NEXT: cmp.w r9, #0903; CHECK-NEXT: it eq904; CHECK-NEXT: moveq.w r5, #-2147483648905; CHECK-NEXT: bl __aeabi_dcmpgt906; CHECK-NEXT: cmp r0, #0907; CHECK-NEXT: mov r0, r7908; CHECK-NEXT: mov r1, r6909; CHECK-NEXT: mov r2, r7910; CHECK-NEXT: mov r3, r6911; CHECK-NEXT: it ne912; CHECK-NEXT: mvnne r5, #-2147483648913; CHECK-NEXT: bl __aeabi_dcmpun914; CHECK-NEXT: cmp r0, #0915; CHECK-NEXT: it ne916; CHECK-NEXT: movne r5, #0917; CHECK-NEXT: ldr r0, [sp, #16] @ 4-byte Reload918; CHECK-NEXT: vmov q0[2], q0[0], r5, r4919; CHECK-NEXT: vmov q0[3], q0[1], r8, r0920; CHECK-NEXT: ldr r0, [sp, #24] @ 4-byte Reload921; CHECK-NEXT: vstrw.32 q0, [r0]922; CHECK-NEXT: add sp, #32923; CHECK-NEXT: vpop {d8, d9, d10, d11}924; CHECK-NEXT: add sp, #4925; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}926; CHECK-NEXT: .p2align 3927; CHECK-NEXT: @ %bb.1:928; CHECK-NEXT: .LCPI12_0:929; CHECK-NEXT: .long 0 @ double -2147483648930; CHECK-NEXT: .long 3252682752931; CHECK-NEXT: .LCPI12_1:932; CHECK-NEXT: .long 4290772992 @ double 2147483647933; CHECK-NEXT: .long 1105199103934 %x = call <5 x i32> @llvm.fptosi.sat.v5f64.v5i32(<5 x double> %f)935 ret <5 x i32> %x936}937 938define arm_aapcs_vfpcc <6 x i32> @test_signed_v6f64_v6i32(<6 x double> %f) {939; CHECK-LABEL: test_signed_v6f64_v6i32:940; CHECK: @ %bb.0:941; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}942; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}943; CHECK-NEXT: .pad #4944; CHECK-NEXT: sub sp, #4945; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12}946; CHECK-NEXT: vpush {d8, d9, d10, d11, d12}947; CHECK-NEXT: .pad #40948; CHECK-NEXT: sub sp, #40949; CHECK-NEXT: vmov.f32 s16, s0950; CHECK-NEXT: str r0, [sp, #28] @ 4-byte Spill951; CHECK-NEXT: vmov.f32 s17, s1952; CHECK-NEXT: vldr d0, .LCPI13_0953; CHECK-NEXT: vmov r6, r4, d5954; CHECK-NEXT: vmov r2, r3, d0955; CHECK-NEXT: vmov.f32 s20, s8956; CHECK-NEXT: vmov.f32 s22, s6957; CHECK-NEXT: vmov.f32 s18, s4958; CHECK-NEXT: vmov.f32 s24, s2959; CHECK-NEXT: vmov.f32 s21, s9960; CHECK-NEXT: vmov.f32 s23, s7961; CHECK-NEXT: vmov.f32 s19, s5962; CHECK-NEXT: vmov.f32 s25, s3963; CHECK-NEXT: str r2, [sp, #36] @ 4-byte Spill964; CHECK-NEXT: mov r0, r6965; CHECK-NEXT: mov r1, r4966; CHECK-NEXT: str r3, [sp, #24] @ 4-byte Spill967; CHECK-NEXT: bl __aeabi_dcmpge968; CHECK-NEXT: mov r9, r0969; CHECK-NEXT: mov r0, r6970; CHECK-NEXT: mov r1, r4971; CHECK-NEXT: bl __aeabi_d2lz972; CHECK-NEXT: vldr d0, .LCPI13_1973; CHECK-NEXT: mov r5, r0974; CHECK-NEXT: vmov r1, r0, d12975; CHECK-NEXT: cmp.w r9, #0976; CHECK-NEXT: vmov r2, r3, d0977; CHECK-NEXT: vmov r7, r8, d10978; CHECK-NEXT: vmov r11, r10, d11979; CHECK-NEXT: str r3, [sp, #32] @ 4-byte Spill980; CHECK-NEXT: strd r1, r0, [sp, #8] @ 8-byte Folded Spill981; CHECK-NEXT: mov r0, r6982; CHECK-NEXT: mov r1, r4983; CHECK-NEXT: it eq984; CHECK-NEXT: moveq.w r5, #-2147483648985; CHECK-NEXT: mov r9, r2986; CHECK-NEXT: str r2, [sp, #20] @ 4-byte Spill987; CHECK-NEXT: bl __aeabi_dcmpgt988; CHECK-NEXT: cmp r0, #0989; CHECK-NEXT: mov r0, r6990; CHECK-NEXT: mov r1, r4991; CHECK-NEXT: mov r2, r6992; CHECK-NEXT: mov r3, r4993; CHECK-NEXT: it ne994; CHECK-NEXT: mvnne r5, #-2147483648995; CHECK-NEXT: bl __aeabi_dcmpun996; CHECK-NEXT: cmp r0, #0997; CHECK-NEXT: it ne998; CHECK-NEXT: movne r5, #0999; CHECK-NEXT: ldr r6, [sp, #28] @ 4-byte Reload1000; CHECK-NEXT: mov r0, r71001; CHECK-NEXT: mov r1, r81002; CHECK-NEXT: str r5, [r6, #20]1003; CHECK-NEXT: ldr r2, [sp, #36] @ 4-byte Reload1004; CHECK-NEXT: ldr r3, [sp, #24] @ 4-byte Reload1005; CHECK-NEXT: bl __aeabi_dcmpge1006; CHECK-NEXT: mov r4, r01007; CHECK-NEXT: mov r0, r71008; CHECK-NEXT: mov r1, r81009; CHECK-NEXT: bl __aeabi_d2lz1010; CHECK-NEXT: mov r5, r01011; CHECK-NEXT: cmp r4, #01012; CHECK-NEXT: it eq1013; CHECK-NEXT: moveq.w r5, #-21474836481014; CHECK-NEXT: ldr r3, [sp, #32] @ 4-byte Reload1015; CHECK-NEXT: mov r0, r71016; CHECK-NEXT: mov r1, r81017; CHECK-NEXT: mov r2, r91018; CHECK-NEXT: bl __aeabi_dcmpgt1019; CHECK-NEXT: vmov r2, r1, d91020; CHECK-NEXT: cmp r0, #01021; CHECK-NEXT: mov r0, r71022; CHECK-NEXT: mov r3, r81023; CHECK-NEXT: strd r2, r1, [sp] @ 8-byte Folded Spill1024; CHECK-NEXT: mov r1, r81025; CHECK-NEXT: mov r2, r71026; CHECK-NEXT: it ne1027; CHECK-NEXT: mvnne r5, #-21474836481028; CHECK-NEXT: bl __aeabi_dcmpun1029; CHECK-NEXT: cmp r0, #01030; CHECK-NEXT: it ne1031; CHECK-NEXT: movne r5, #01032; CHECK-NEXT: str r5, [r6, #16]1033; CHECK-NEXT: mov r0, r111034; CHECK-NEXT: ldr.w r8, [sp, #36] @ 4-byte Reload1035; CHECK-NEXT: mov r1, r101036; CHECK-NEXT: ldr.w r9, [sp, #24] @ 4-byte Reload1037; CHECK-NEXT: mov r2, r81038; CHECK-NEXT: mov r3, r91039; CHECK-NEXT: bl __aeabi_dcmpge1040; CHECK-NEXT: mov r4, r01041; CHECK-NEXT: mov r0, r111042; CHECK-NEXT: mov r1, r101043; CHECK-NEXT: bl __aeabi_d2lz1044; CHECK-NEXT: cmp r4, #01045; CHECK-NEXT: it eq1046; CHECK-NEXT: moveq.w r0, #-21474836481047; CHECK-NEXT: ldr r7, [sp, #32] @ 4-byte Reload1048; CHECK-NEXT: mov r4, r01049; CHECK-NEXT: ldr r2, [sp, #20] @ 4-byte Reload1050; CHECK-NEXT: mov r0, r111051; CHECK-NEXT: mov r1, r101052; CHECK-NEXT: mov r3, r71053; CHECK-NEXT: bl __aeabi_dcmpgt1054; CHECK-NEXT: cmp r0, #01055; CHECK-NEXT: mov r0, r111056; CHECK-NEXT: mov r1, r101057; CHECK-NEXT: mov r2, r111058; CHECK-NEXT: mov r3, r101059; CHECK-NEXT: it ne1060; CHECK-NEXT: mvnne r4, #-21474836481061; CHECK-NEXT: bl __aeabi_dcmpun1062; CHECK-NEXT: cmp r0, #01063; CHECK-NEXT: it ne1064; CHECK-NEXT: movne r4, #01065; CHECK-NEXT: ldr r6, [sp, #8] @ 4-byte Reload1066; CHECK-NEXT: mov r2, r81067; CHECK-NEXT: ldr r5, [sp, #12] @ 4-byte Reload1068; CHECK-NEXT: mov r3, r91069; CHECK-NEXT: str r4, [sp, #16] @ 4-byte Spill1070; CHECK-NEXT: mov r0, r61071; CHECK-NEXT: mov r1, r51072; CHECK-NEXT: bl __aeabi_dcmpge1073; CHECK-NEXT: mov r4, r01074; CHECK-NEXT: mov r0, r61075; CHECK-NEXT: mov r1, r51076; CHECK-NEXT: bl __aeabi_d2lz1077; CHECK-NEXT: mov r10, r01078; CHECK-NEXT: cmp r4, #01079; CHECK-NEXT: it eq1080; CHECK-NEXT: moveq.w r10, #-21474836481081; CHECK-NEXT: ldr.w r11, [sp, #20] @ 4-byte Reload1082; CHECK-NEXT: mov r0, r61083; CHECK-NEXT: mov r1, r51084; CHECK-NEXT: mov r3, r71085; CHECK-NEXT: mov r2, r111086; CHECK-NEXT: bl __aeabi_dcmpgt1087; CHECK-NEXT: cmp r0, #01088; CHECK-NEXT: mov r0, r61089; CHECK-NEXT: mov r1, r51090; CHECK-NEXT: mov r2, r61091; CHECK-NEXT: mov r3, r51092; CHECK-NEXT: it ne1093; CHECK-NEXT: mvnne r10, #-21474836481094; CHECK-NEXT: bl __aeabi_dcmpun1095; CHECK-NEXT: cmp r0, #01096; CHECK-NEXT: it ne1097; CHECK-NEXT: movne.w r10, #01098; CHECK-NEXT: ldr r5, [sp] @ 4-byte Reload1099; CHECK-NEXT: mov r2, r81100; CHECK-NEXT: ldr r6, [sp, #4] @ 4-byte Reload1101; CHECK-NEXT: mov r3, r91102; CHECK-NEXT: mov r0, r51103; CHECK-NEXT: mov r1, r61104; CHECK-NEXT: bl __aeabi_dcmpge1105; CHECK-NEXT: mov r7, r01106; CHECK-NEXT: mov r0, r51107; CHECK-NEXT: mov r1, r61108; CHECK-NEXT: bl __aeabi_d2lz1109; CHECK-NEXT: mov r4, r01110; CHECK-NEXT: cmp r7, #01111; CHECK-NEXT: it eq1112; CHECK-NEXT: moveq.w r4, #-21474836481113; CHECK-NEXT: ldr.w r8, [sp, #32] @ 4-byte Reload1114; CHECK-NEXT: mov r0, r51115; CHECK-NEXT: mov r1, r61116; CHECK-NEXT: mov r2, r111117; CHECK-NEXT: mov r3, r81118; CHECK-NEXT: bl __aeabi_dcmpgt1119; CHECK-NEXT: cmp r0, #01120; CHECK-NEXT: mov r0, r51121; CHECK-NEXT: mov r1, r61122; CHECK-NEXT: mov r2, r51123; CHECK-NEXT: mov r3, r61124; CHECK-NEXT: it ne1125; CHECK-NEXT: mvnne r4, #-21474836481126; CHECK-NEXT: bl __aeabi_dcmpun1127; CHECK-NEXT: vmov r7, r6, d81128; CHECK-NEXT: cmp r0, #01129; CHECK-NEXT: it ne1130; CHECK-NEXT: movne r4, #01131; CHECK-NEXT: ldr r2, [sp, #36] @ 4-byte Reload1132; CHECK-NEXT: mov r3, r91133; CHECK-NEXT: mov r0, r71134; CHECK-NEXT: mov r1, r61135; CHECK-NEXT: bl __aeabi_dcmpge1136; CHECK-NEXT: mov r9, r01137; CHECK-NEXT: mov r0, r71138; CHECK-NEXT: mov r1, r61139; CHECK-NEXT: bl __aeabi_d2lz1140; CHECK-NEXT: mov r5, r01141; CHECK-NEXT: mov r0, r71142; CHECK-NEXT: mov r1, r61143; CHECK-NEXT: mov r2, r111144; CHECK-NEXT: mov r3, r81145; CHECK-NEXT: cmp.w r9, #01146; CHECK-NEXT: it eq1147; CHECK-NEXT: moveq.w r5, #-21474836481148; CHECK-NEXT: bl __aeabi_dcmpgt1149; CHECK-NEXT: cmp r0, #01150; CHECK-NEXT: mov r0, r71151; CHECK-NEXT: mov r1, r61152; CHECK-NEXT: mov r2, r71153; CHECK-NEXT: mov r3, r61154; CHECK-NEXT: it ne1155; CHECK-NEXT: mvnne r5, #-21474836481156; CHECK-NEXT: bl __aeabi_dcmpun1157; CHECK-NEXT: cmp r0, #01158; CHECK-NEXT: it ne1159; CHECK-NEXT: movne r5, #01160; CHECK-NEXT: ldr r0, [sp, #16] @ 4-byte Reload1161; CHECK-NEXT: vmov q0[2], q0[0], r5, r41162; CHECK-NEXT: vmov q0[3], q0[1], r10, r01163; CHECK-NEXT: ldr r0, [sp, #28] @ 4-byte Reload1164; CHECK-NEXT: vstrw.32 q0, [r0]1165; CHECK-NEXT: add sp, #401166; CHECK-NEXT: vpop {d8, d9, d10, d11, d12}1167; CHECK-NEXT: add sp, #41168; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}1169; CHECK-NEXT: .p2align 31170; CHECK-NEXT: @ %bb.1:1171; CHECK-NEXT: .LCPI13_0:1172; CHECK-NEXT: .long 0 @ double -21474836481173; CHECK-NEXT: .long 32526827521174; CHECK-NEXT: .LCPI13_1:1175; CHECK-NEXT: .long 4290772992 @ double 21474836471176; CHECK-NEXT: .long 11051991031177 %x = call <6 x i32> @llvm.fptosi.sat.v6f64.v6i32(<6 x double> %f)1178 ret <6 x i32> %x1179}1180 1181;1182; FP16 to signed 32-bit -- Vector size variation1183;1184 1185declare <1 x i32> @llvm.fptosi.sat.v1f16.v1i32 (<1 x half>)1186declare <2 x i32> @llvm.fptosi.sat.v2f16.v2i32 (<2 x half>)1187declare <3 x i32> @llvm.fptosi.sat.v3f16.v3i32 (<3 x half>)1188declare <4 x i32> @llvm.fptosi.sat.v4f16.v4i32 (<4 x half>)1189declare <5 x i32> @llvm.fptosi.sat.v5f16.v5i32 (<5 x half>)1190declare <6 x i32> @llvm.fptosi.sat.v6f16.v6i32 (<6 x half>)1191declare <7 x i32> @llvm.fptosi.sat.v7f16.v7i32 (<7 x half>)1192declare <8 x i32> @llvm.fptosi.sat.v8f16.v8i32 (<8 x half>)1193 1194define arm_aapcs_vfpcc <1 x i32> @test_signed_v1f16_v1i32(<1 x half> %f) {1195; CHECK-LABEL: test_signed_v1f16_v1i32:1196; CHECK: @ %bb.0:1197; CHECK-NEXT: vcvt.s32.f16 s0, s01198; CHECK-NEXT: vmov r0, s01199; CHECK-NEXT: bx lr1200 %x = call <1 x i32> @llvm.fptosi.sat.v1f16.v1i32(<1 x half> %f)1201 ret <1 x i32> %x1202}1203 1204define arm_aapcs_vfpcc <2 x i32> @test_signed_v2f16_v2i32(<2 x half> %f) {1205; CHECK-LABEL: test_signed_v2f16_v2i32:1206; CHECK: @ %bb.0:1207; CHECK-NEXT: .save {r4, r5, r7, lr}1208; CHECK-NEXT: push {r4, r5, r7, lr}1209; CHECK-NEXT: .vsave {d8, d9, d10, d11}1210; CHECK-NEXT: vpush {d8, d9, d10, d11}1211; CHECK-NEXT: vmov q4, q01212; CHECK-NEXT: vcvtt.f32.f16 s18, s161213; CHECK-NEXT: vmov r0, s181214; CHECK-NEXT: bl __aeabi_f2lz1215; CHECK-NEXT: vcvtb.f32.f16 s16, s161216; CHECK-NEXT: mov r5, r01217; CHECK-NEXT: vmov r0, s161218; CHECK-NEXT: vldr s20, .LCPI15_01219; CHECK-NEXT: vldr s22, .LCPI15_11220; CHECK-NEXT: mov r4, r11221; CHECK-NEXT: vcmp.f32 s18, s201222; CHECK-NEXT: vmrs APSR_nzcv, fpscr1223; CHECK-NEXT: itt lt1224; CHECK-NEXT: movlt.w r4, #-11225; CHECK-NEXT: movlt.w r5, #-21474836481226; CHECK-NEXT: vcmp.f32 s18, s221227; CHECK-NEXT: vmrs APSR_nzcv, fpscr1228; CHECK-NEXT: itt gt1229; CHECK-NEXT: mvngt r5, #-21474836481230; CHECK-NEXT: movgt r4, #01231; CHECK-NEXT: vcmp.f32 s18, s181232; CHECK-NEXT: vmrs APSR_nzcv, fpscr1233; CHECK-NEXT: itt vs1234; CHECK-NEXT: movvs r4, #01235; CHECK-NEXT: movvs r5, #01236; CHECK-NEXT: bl __aeabi_f2lz1237; CHECK-NEXT: vcmp.f32 s16, s201238; CHECK-NEXT: vmrs APSR_nzcv, fpscr1239; CHECK-NEXT: itt lt1240; CHECK-NEXT: movlt.w r0, #-21474836481241; CHECK-NEXT: movlt.w r1, #-11242; CHECK-NEXT: vcmp.f32 s16, s221243; CHECK-NEXT: vmrs APSR_nzcv, fpscr1244; CHECK-NEXT: itt gt1245; CHECK-NEXT: movgt r1, #01246; CHECK-NEXT: mvngt r0, #-21474836481247; CHECK-NEXT: vcmp.f32 s16, s161248; CHECK-NEXT: vmrs APSR_nzcv, fpscr1249; CHECK-NEXT: itt vs1250; CHECK-NEXT: movvs r0, #01251; CHECK-NEXT: movvs r1, #01252; CHECK-NEXT: vmov q0[2], q0[0], r0, r51253; CHECK-NEXT: vmov q0[3], q0[1], r1, r41254; CHECK-NEXT: vpop {d8, d9, d10, d11}1255; CHECK-NEXT: pop {r4, r5, r7, pc}1256; CHECK-NEXT: .p2align 21257; CHECK-NEXT: @ %bb.1:1258; CHECK-NEXT: .LCPI15_0:1259; CHECK-NEXT: .long 0xcf000000 @ float -2.14748365E+91260; CHECK-NEXT: .LCPI15_1:1261; CHECK-NEXT: .long 0x4effffff @ float 2.14748352E+91262 %x = call <2 x i32> @llvm.fptosi.sat.v2f16.v2i32(<2 x half> %f)1263 ret <2 x i32> %x1264}1265 1266define arm_aapcs_vfpcc <3 x i32> @test_signed_v3f16_v3i32(<3 x half> %f) {1267; CHECK-LABEL: test_signed_v3f16_v3i32:1268; CHECK: @ %bb.0:1269; CHECK-NEXT: vcvt.s32.f16 s6, s01270; CHECK-NEXT: vcvt.s32.f16 s0, s11271; CHECK-NEXT: vcvt.s32.f16 s4, s21272; CHECK-NEXT: vmov r0, s01273; CHECK-NEXT: vmov.32 q0[1], r01274; CHECK-NEXT: vmov r0, s41275; CHECK-NEXT: vmov r1, s61276; CHECK-NEXT: vmov q0[2], q0[0], r1, r01277; CHECK-NEXT: bx lr1278 %x = call <3 x i32> @llvm.fptosi.sat.v3f16.v3i32(<3 x half> %f)1279 ret <3 x i32> %x1280}1281 1282define arm_aapcs_vfpcc <4 x i32> @test_signed_v4f16_v4i32(<4 x half> %f) {1283; CHECK-LABEL: test_signed_v4f16_v4i32:1284; CHECK: @ %bb.0:1285; CHECK-NEXT: vmovx.f16 s2, s11286; CHECK-NEXT: vcvt.s32.f16 s4, s21287; CHECK-NEXT: vmovx.f16 s2, s01288; CHECK-NEXT: vcvt.s32.f16 s6, s21289; CHECK-NEXT: vcvt.s32.f16 s2, s11290; CHECK-NEXT: vcvt.s32.f16 s0, s01291; CHECK-NEXT: vmov r0, s21292; CHECK-NEXT: vmov r1, s01293; CHECK-NEXT: vmov q0[2], q0[0], r1, r01294; CHECK-NEXT: vmov r0, s41295; CHECK-NEXT: vmov r1, s61296; CHECK-NEXT: vmov q0[3], q0[1], r1, r01297; CHECK-NEXT: bx lr1298 %x = call <4 x i32> @llvm.fptosi.sat.v4f16.v4i32(<4 x half> %f)1299 ret <4 x i32> %x1300}1301 1302define arm_aapcs_vfpcc <5 x i32> @test_signed_v5f16_v5i32(<5 x half> %f) {1303; CHECK-LABEL: test_signed_v5f16_v5i32:1304; CHECK: @ %bb.0:1305; CHECK-NEXT: vmovx.f16 s6, s01306; CHECK-NEXT: vmovx.f16 s4, s11307; CHECK-NEXT: vcvt.s32.f16 s8, s11308; CHECK-NEXT: vcvt.s32.f16 s0, s01309; CHECK-NEXT: vcvt.s32.f16 s4, s41310; CHECK-NEXT: vcvt.s32.f16 s6, s61311; CHECK-NEXT: vmov r1, s81312; CHECK-NEXT: vcvt.s32.f16 s2, s21313; CHECK-NEXT: vmov r2, s01314; CHECK-NEXT: vmov q2[2], q2[0], r2, r11315; CHECK-NEXT: vmov r1, s41316; CHECK-NEXT: vmov r2, s61317; CHECK-NEXT: vmov q2[3], q2[1], r2, r11318; CHECK-NEXT: vmov r1, s21319; CHECK-NEXT: str r1, [r0, #16]1320; CHECK-NEXT: vstrw.32 q2, [r0]1321; CHECK-NEXT: bx lr1322 %x = call <5 x i32> @llvm.fptosi.sat.v5f16.v5i32(<5 x half> %f)1323 ret <5 x i32> %x1324}1325 1326define arm_aapcs_vfpcc <6 x i32> @test_signed_v6f16_v6i32(<6 x half> %f) {1327; CHECK-LABEL: test_signed_v6f16_v6i32:1328; CHECK: @ %bb.0:1329; CHECK-NEXT: vmovx.f16 s8, s01330; CHECK-NEXT: vmovx.f16 s6, s11331; CHECK-NEXT: vcvt.s32.f16 s10, s11332; CHECK-NEXT: vcvt.s32.f16 s0, s01333; CHECK-NEXT: vcvt.s32.f16 s4, s21334; CHECK-NEXT: vmovx.f16 s2, s21335; CHECK-NEXT: vcvt.s32.f16 s6, s61336; CHECK-NEXT: vcvt.s32.f16 s8, s81337; CHECK-NEXT: vmov r1, s101338; CHECK-NEXT: vcvt.s32.f16 s2, s21339; CHECK-NEXT: vmov r2, s01340; CHECK-NEXT: vmov q3[2], q3[0], r2, r11341; CHECK-NEXT: vmov r1, s61342; CHECK-NEXT: vmov r2, s81343; CHECK-NEXT: vmov q3[3], q3[1], r2, r11344; CHECK-NEXT: vmov r1, s21345; CHECK-NEXT: vmov r2, s41346; CHECK-NEXT: strd r2, r1, [r0, #16]1347; CHECK-NEXT: vstrw.32 q3, [r0]1348; CHECK-NEXT: bx lr1349 %x = call <6 x i32> @llvm.fptosi.sat.v6f16.v6i32(<6 x half> %f)1350 ret <6 x i32> %x1351}1352 1353define arm_aapcs_vfpcc <7 x i32> @test_signed_v7f16_v7i32(<7 x half> %f) {1354; CHECK-LABEL: test_signed_v7f16_v7i32:1355; CHECK: @ %bb.0:1356; CHECK-NEXT: vmovx.f16 s10, s01357; CHECK-NEXT: vmovx.f16 s8, s11358; CHECK-NEXT: vcvt.s32.f16 s12, s11359; CHECK-NEXT: vcvt.s32.f16 s0, s01360; CHECK-NEXT: vcvt.s32.f16 s4, s21361; CHECK-NEXT: vmovx.f16 s2, s21362; CHECK-NEXT: vcvt.s32.f16 s8, s81363; CHECK-NEXT: vcvt.s32.f16 s10, s101364; CHECK-NEXT: vmov r1, s121365; CHECK-NEXT: vcvt.s32.f16 s2, s21366; CHECK-NEXT: vmov r2, s01367; CHECK-NEXT: vcvt.s32.f16 s6, s31368; CHECK-NEXT: vmov q3[2], q3[0], r2, r11369; CHECK-NEXT: vmov r1, s81370; CHECK-NEXT: vmov r2, s101371; CHECK-NEXT: vmov q3[3], q3[1], r2, r11372; CHECK-NEXT: vmov r1, s21373; CHECK-NEXT: vmov r2, s41374; CHECK-NEXT: vmov r3, s61375; CHECK-NEXT: strd r2, r1, [r0, #16]1376; CHECK-NEXT: str r3, [r0, #24]1377; CHECK-NEXT: vstrw.32 q3, [r0]1378; CHECK-NEXT: bx lr1379 %x = call <7 x i32> @llvm.fptosi.sat.v7f16.v7i32(<7 x half> %f)1380 ret <7 x i32> %x1381}1382 1383define arm_aapcs_vfpcc <8 x i32> @test_signed_v8f16_v8i32(<8 x half> %f) {1384; CHECK-LABEL: test_signed_v8f16_v8i32:1385; CHECK: @ %bb.0:1386; CHECK-NEXT: vmovx.f16 s4, s31387; CHECK-NEXT: vmovx.f16 s6, s01388; CHECK-NEXT: vcvt.s32.f16 s8, s41389; CHECK-NEXT: vmovx.f16 s4, s21390; CHECK-NEXT: vcvt.s32.f16 s10, s41391; CHECK-NEXT: vmovx.f16 s4, s11392; CHECK-NEXT: vcvt.s32.f16 s14, s21393; CHECK-NEXT: vcvt.s32.f16 s2, s11394; CHECK-NEXT: vcvt.s32.f16 s0, s01395; CHECK-NEXT: vcvt.s32.f16 s4, s41396; CHECK-NEXT: vcvt.s32.f16 s6, s61397; CHECK-NEXT: vmov r0, s21398; CHECK-NEXT: vmov r1, s01399; CHECK-NEXT: vcvt.s32.f16 s12, s31400; CHECK-NEXT: vmov q0[2], q0[0], r1, r01401; CHECK-NEXT: vmov r0, s41402; CHECK-NEXT: vmov r1, s61403; CHECK-NEXT: vmov q0[3], q0[1], r1, r01404; CHECK-NEXT: vmov r0, s121405; CHECK-NEXT: vmov r1, s141406; CHECK-NEXT: vmov q1[2], q1[0], r1, r01407; CHECK-NEXT: vmov r0, s81408; CHECK-NEXT: vmov r1, s101409; CHECK-NEXT: vmov q1[3], q1[1], r1, r01410; CHECK-NEXT: bx lr1411 %x = call <8 x i32> @llvm.fptosi.sat.v8f16.v8i32(<8 x half> %f)1412 ret <8 x i32> %x1413}1414 1415;1416; 2-Vector float to signed integer -- result size variation1417;1418 1419declare <4 x i1> @llvm.fptosi.sat.v4f32.v4i1 (<4 x float>)1420declare <4 x i8> @llvm.fptosi.sat.v4f32.v4i8 (<4 x float>)1421declare <4 x i13> @llvm.fptosi.sat.v4f32.v4i13 (<4 x float>)1422declare <4 x i16> @llvm.fptosi.sat.v4f32.v4i16 (<4 x float>)1423declare <4 x i19> @llvm.fptosi.sat.v4f32.v4i19 (<4 x float>)1424declare <4 x i50> @llvm.fptosi.sat.v4f32.v4i50 (<4 x float>)1425declare <4 x i64> @llvm.fptosi.sat.v4f32.v4i64 (<4 x float>)1426declare <4 x i100> @llvm.fptosi.sat.v4f32.v4i100(<4 x float>)1427declare <4 x i128> @llvm.fptosi.sat.v4f32.v4i128(<4 x float>)1428 1429define arm_aapcs_vfpcc <4 x i1> @test_signed_v4f32_v4i1(<4 x float> %f) {1430; CHECK-LABEL: test_signed_v4f32_v4i1:1431; CHECK: @ %bb.0:1432; CHECK-NEXT: vmov.f32 s4, #-1.000000e+001433; CHECK-NEXT: vldr s6, .LCPI22_01434; CHECK-NEXT: vmaxnm.f32 s12, s0, s41435; CHECK-NEXT: vmaxnm.f32 s8, s3, s41436; CHECK-NEXT: vminnm.f32 s12, s12, s61437; CHECK-NEXT: vmaxnm.f32 s10, s2, s41438; CHECK-NEXT: vcvt.s32.f32 s12, s121439; CHECK-NEXT: vmaxnm.f32 s4, s1, s41440; CHECK-NEXT: vminnm.f32 s4, s4, s61441; CHECK-NEXT: vminnm.f32 s10, s10, s61442; CHECK-NEXT: vcvt.s32.f32 s4, s41443; CHECK-NEXT: movs r1, #01444; CHECK-NEXT: vcmp.f32 s0, s01445; CHECK-NEXT: vminnm.f32 s8, s8, s61446; CHECK-NEXT: vmrs APSR_nzcv, fpscr1447; CHECK-NEXT: vcvt.s32.f32 s10, s101448; CHECK-NEXT: vcmp.f32 s1, s11449; CHECK-NEXT: vcvt.s32.f32 s8, s81450; CHECK-NEXT: vmov r2, s121451; CHECK-NEXT: it vs1452; CHECK-NEXT: movvs r2, #01453; CHECK-NEXT: vmrs APSR_nzcv, fpscr1454; CHECK-NEXT: and r2, r2, #11455; CHECK-NEXT: vcmp.f32 s2, s21456; CHECK-NEXT: rsb.w r2, r2, #01457; CHECK-NEXT: bfi r1, r2, #0, #11458; CHECK-NEXT: vmov r2, s41459; CHECK-NEXT: it vs1460; CHECK-NEXT: movvs r2, #01461; CHECK-NEXT: vmrs APSR_nzcv, fpscr1462; CHECK-NEXT: and r2, r2, #11463; CHECK-NEXT: vcmp.f32 s3, s31464; CHECK-NEXT: rsb.w r2, r2, #01465; CHECK-NEXT: bfi r1, r2, #1, #11466; CHECK-NEXT: vmov r2, s101467; CHECK-NEXT: it vs1468; CHECK-NEXT: movvs r2, #01469; CHECK-NEXT: vmrs APSR_nzcv, fpscr1470; CHECK-NEXT: and r2, r2, #11471; CHECK-NEXT: rsb.w r2, r2, #01472; CHECK-NEXT: bfi r1, r2, #2, #11473; CHECK-NEXT: vmov r2, s81474; CHECK-NEXT: it vs1475; CHECK-NEXT: movvs r2, #01476; CHECK-NEXT: and r2, r2, #11477; CHECK-NEXT: rsbs r2, r2, #01478; CHECK-NEXT: bfi r1, r2, #3, #11479; CHECK-NEXT: strb r1, [r0]1480; CHECK-NEXT: bx lr1481; CHECK-NEXT: .p2align 21482; CHECK-NEXT: @ %bb.1:1483; CHECK-NEXT: .LCPI22_0:1484; CHECK-NEXT: .long 0x00000000 @ float 01485 %x = call <4 x i1> @llvm.fptosi.sat.v4f32.v4i1(<4 x float> %f)1486 ret <4 x i1> %x1487}1488 1489define arm_aapcs_vfpcc <4 x i8> @test_signed_v4f32_v4i8(<4 x float> %f) {1490; CHECK-MVE-LABEL: test_signed_v4f32_v4i8:1491; CHECK-MVE: @ %bb.0:1492; CHECK-MVE-NEXT: vldr s4, .LCPI23_01493; CHECK-MVE-NEXT: vcmp.f32 s2, s21494; CHECK-MVE-NEXT: vldr s6, .LCPI23_11495; CHECK-MVE-NEXT: vmaxnm.f32 s12, s2, s41496; CHECK-MVE-NEXT: vmaxnm.f32 s10, s0, s41497; CHECK-MVE-NEXT: vminnm.f32 s12, s12, s61498; CHECK-MVE-NEXT: vmaxnm.f32 s8, s3, s41499; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s61500; CHECK-MVE-NEXT: vmaxnm.f32 s4, s1, s41501; CHECK-MVE-NEXT: vcvt.s32.f32 s12, s121502; CHECK-MVE-NEXT: vminnm.f32 s8, s8, s61503; CHECK-MVE-NEXT: vminnm.f32 s4, s4, s61504; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s101505; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s81506; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1507; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s41508; CHECK-MVE-NEXT: vcmp.f32 s0, s01509; CHECK-MVE-NEXT: vmov r0, s121510; CHECK-MVE-NEXT: it vs1511; CHECK-MVE-NEXT: movvs r0, #01512; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1513; CHECK-MVE-NEXT: vmov r1, s101514; CHECK-MVE-NEXT: vcmp.f32 s3, s31515; CHECK-MVE-NEXT: it vs1516; CHECK-MVE-NEXT: movvs r1, #01517; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1518; CHECK-MVE-NEXT: vmov r2, s81519; CHECK-MVE-NEXT: vcmp.f32 s1, s11520; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r01521; CHECK-MVE-NEXT: vmov r3, s41522; CHECK-MVE-NEXT: it vs1523; CHECK-MVE-NEXT: movvs r2, #01524; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1525; CHECK-MVE-NEXT: it vs1526; CHECK-MVE-NEXT: movvs r3, #01527; CHECK-MVE-NEXT: vmov q0[3], q0[1], r3, r21528; CHECK-MVE-NEXT: bx lr1529; CHECK-MVE-NEXT: .p2align 21530; CHECK-MVE-NEXT: @ %bb.1:1531; CHECK-MVE-NEXT: .LCPI23_0:1532; CHECK-MVE-NEXT: .long 0xc3000000 @ float -1281533; CHECK-MVE-NEXT: .LCPI23_1:1534; CHECK-MVE-NEXT: .long 0x42fe0000 @ float 1271535;1536; CHECK-MVEFP-LABEL: test_signed_v4f32_v4i8:1537; CHECK-MVEFP: @ %bb.0:1538; CHECK-MVEFP-NEXT: vmov.i32 q1, #0x7f1539; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q01540; CHECK-MVEFP-NEXT: vmvn.i32 q2, #0x7f1541; CHECK-MVEFP-NEXT: vmin.s32 q0, q0, q11542; CHECK-MVEFP-NEXT: vmax.s32 q0, q0, q21543; CHECK-MVEFP-NEXT: bx lr1544 %x = call <4 x i8> @llvm.fptosi.sat.v4f32.v4i8(<4 x float> %f)1545 ret <4 x i8> %x1546}1547 1548define arm_aapcs_vfpcc <4 x i13> @test_signed_v4f32_v4i13(<4 x float> %f) {1549; CHECK-MVE-LABEL: test_signed_v4f32_v4i13:1550; CHECK-MVE: @ %bb.0:1551; CHECK-MVE-NEXT: vldr s4, .LCPI24_01552; CHECK-MVE-NEXT: vcmp.f32 s2, s21553; CHECK-MVE-NEXT: vldr s6, .LCPI24_11554; CHECK-MVE-NEXT: vmaxnm.f32 s12, s2, s41555; CHECK-MVE-NEXT: vmaxnm.f32 s10, s0, s41556; CHECK-MVE-NEXT: vminnm.f32 s12, s12, s61557; CHECK-MVE-NEXT: vmaxnm.f32 s8, s3, s41558; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s61559; CHECK-MVE-NEXT: vmaxnm.f32 s4, s1, s41560; CHECK-MVE-NEXT: vcvt.s32.f32 s12, s121561; CHECK-MVE-NEXT: vminnm.f32 s8, s8, s61562; CHECK-MVE-NEXT: vminnm.f32 s4, s4, s61563; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s101564; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s81565; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1566; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s41567; CHECK-MVE-NEXT: vcmp.f32 s0, s01568; CHECK-MVE-NEXT: vmov r0, s121569; CHECK-MVE-NEXT: it vs1570; CHECK-MVE-NEXT: movvs r0, #01571; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1572; CHECK-MVE-NEXT: vmov r1, s101573; CHECK-MVE-NEXT: vcmp.f32 s3, s31574; CHECK-MVE-NEXT: it vs1575; CHECK-MVE-NEXT: movvs r1, #01576; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1577; CHECK-MVE-NEXT: vmov r2, s81578; CHECK-MVE-NEXT: vcmp.f32 s1, s11579; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r01580; CHECK-MVE-NEXT: vmov r3, s41581; CHECK-MVE-NEXT: it vs1582; CHECK-MVE-NEXT: movvs r2, #01583; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1584; CHECK-MVE-NEXT: it vs1585; CHECK-MVE-NEXT: movvs r3, #01586; CHECK-MVE-NEXT: vmov q0[3], q0[1], r3, r21587; CHECK-MVE-NEXT: bx lr1588; CHECK-MVE-NEXT: .p2align 21589; CHECK-MVE-NEXT: @ %bb.1:1590; CHECK-MVE-NEXT: .LCPI24_0:1591; CHECK-MVE-NEXT: .long 0xc5800000 @ float -40961592; CHECK-MVE-NEXT: .LCPI24_1:1593; CHECK-MVE-NEXT: .long 0x457ff000 @ float 40951594;1595; CHECK-MVEFP-LABEL: test_signed_v4f32_v4i13:1596; CHECK-MVEFP: @ %bb.0:1597; CHECK-MVEFP-NEXT: vmov.i32 q1, #0xfff1598; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q01599; CHECK-MVEFP-NEXT: vmvn.i32 q2, #0xfff1600; CHECK-MVEFP-NEXT: vmin.s32 q0, q0, q11601; CHECK-MVEFP-NEXT: vmax.s32 q0, q0, q21602; CHECK-MVEFP-NEXT: bx lr1603 %x = call <4 x i13> @llvm.fptosi.sat.v4f32.v4i13(<4 x float> %f)1604 ret <4 x i13> %x1605}1606 1607define arm_aapcs_vfpcc <4 x i16> @test_signed_v4f32_v4i16(<4 x float> %f) {1608; CHECK-MVE-LABEL: test_signed_v4f32_v4i16:1609; CHECK-MVE: @ %bb.0:1610; CHECK-MVE-NEXT: vldr s4, .LCPI25_01611; CHECK-MVE-NEXT: vcmp.f32 s2, s21612; CHECK-MVE-NEXT: vldr s6, .LCPI25_11613; CHECK-MVE-NEXT: vmaxnm.f32 s12, s2, s41614; CHECK-MVE-NEXT: vmaxnm.f32 s10, s0, s41615; CHECK-MVE-NEXT: vminnm.f32 s12, s12, s61616; CHECK-MVE-NEXT: vmaxnm.f32 s8, s3, s41617; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s61618; CHECK-MVE-NEXT: vmaxnm.f32 s4, s1, s41619; CHECK-MVE-NEXT: vcvt.s32.f32 s12, s121620; CHECK-MVE-NEXT: vminnm.f32 s8, s8, s61621; CHECK-MVE-NEXT: vminnm.f32 s4, s4, s61622; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s101623; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s81624; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1625; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s41626; CHECK-MVE-NEXT: vcmp.f32 s0, s01627; CHECK-MVE-NEXT: vmov r0, s121628; CHECK-MVE-NEXT: it vs1629; CHECK-MVE-NEXT: movvs r0, #01630; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1631; CHECK-MVE-NEXT: vmov r1, s101632; CHECK-MVE-NEXT: vcmp.f32 s3, s31633; CHECK-MVE-NEXT: it vs1634; CHECK-MVE-NEXT: movvs r1, #01635; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1636; CHECK-MVE-NEXT: vmov r2, s81637; CHECK-MVE-NEXT: vcmp.f32 s1, s11638; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r01639; CHECK-MVE-NEXT: vmov r3, s41640; CHECK-MVE-NEXT: it vs1641; CHECK-MVE-NEXT: movvs r2, #01642; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1643; CHECK-MVE-NEXT: it vs1644; CHECK-MVE-NEXT: movvs r3, #01645; CHECK-MVE-NEXT: vmov q0[3], q0[1], r3, r21646; CHECK-MVE-NEXT: bx lr1647; CHECK-MVE-NEXT: .p2align 21648; CHECK-MVE-NEXT: @ %bb.1:1649; CHECK-MVE-NEXT: .LCPI25_0:1650; CHECK-MVE-NEXT: .long 0xc7000000 @ float -327681651; CHECK-MVE-NEXT: .LCPI25_1:1652; CHECK-MVE-NEXT: .long 0x46fffe00 @ float 327671653;1654; CHECK-MVEFP-LABEL: test_signed_v4f32_v4i16:1655; CHECK-MVEFP: @ %bb.0:1656; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q01657; CHECK-MVEFP-NEXT: vqmovnb.s32 q0, q01658; CHECK-MVEFP-NEXT: vmovlb.s16 q0, q01659; CHECK-MVEFP-NEXT: bx lr1660 %x = call <4 x i16> @llvm.fptosi.sat.v4f32.v4i16(<4 x float> %f)1661 ret <4 x i16> %x1662}1663 1664define arm_aapcs_vfpcc <4 x i19> @test_signed_v4f32_v4i19(<4 x float> %f) {1665; CHECK-MVE-LABEL: test_signed_v4f32_v4i19:1666; CHECK-MVE: @ %bb.0:1667; CHECK-MVE-NEXT: vldr s4, .LCPI26_01668; CHECK-MVE-NEXT: vcmp.f32 s2, s21669; CHECK-MVE-NEXT: vldr s6, .LCPI26_11670; CHECK-MVE-NEXT: vmaxnm.f32 s12, s2, s41671; CHECK-MVE-NEXT: vmaxnm.f32 s10, s0, s41672; CHECK-MVE-NEXT: vminnm.f32 s12, s12, s61673; CHECK-MVE-NEXT: vmaxnm.f32 s8, s3, s41674; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s61675; CHECK-MVE-NEXT: vmaxnm.f32 s4, s1, s41676; CHECK-MVE-NEXT: vcvt.s32.f32 s12, s121677; CHECK-MVE-NEXT: vminnm.f32 s8, s8, s61678; CHECK-MVE-NEXT: vminnm.f32 s4, s4, s61679; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s101680; CHECK-MVE-NEXT: vcvt.s32.f32 s8, s81681; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1682; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s41683; CHECK-MVE-NEXT: vcmp.f32 s0, s01684; CHECK-MVE-NEXT: vmov r0, s121685; CHECK-MVE-NEXT: it vs1686; CHECK-MVE-NEXT: movvs r0, #01687; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1688; CHECK-MVE-NEXT: vmov r1, s101689; CHECK-MVE-NEXT: vcmp.f32 s3, s31690; CHECK-MVE-NEXT: it vs1691; CHECK-MVE-NEXT: movvs r1, #01692; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1693; CHECK-MVE-NEXT: vmov r2, s81694; CHECK-MVE-NEXT: vcmp.f32 s1, s11695; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r01696; CHECK-MVE-NEXT: vmov r3, s41697; CHECK-MVE-NEXT: it vs1698; CHECK-MVE-NEXT: movvs r2, #01699; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr1700; CHECK-MVE-NEXT: it vs1701; CHECK-MVE-NEXT: movvs r3, #01702; CHECK-MVE-NEXT: vmov q0[3], q0[1], r3, r21703; CHECK-MVE-NEXT: bx lr1704; CHECK-MVE-NEXT: .p2align 21705; CHECK-MVE-NEXT: @ %bb.1:1706; CHECK-MVE-NEXT: .LCPI26_0:1707; CHECK-MVE-NEXT: .long 0xc8800000 @ float -2621441708; CHECK-MVE-NEXT: .LCPI26_1:1709; CHECK-MVE-NEXT: .long 0x487fffc0 @ float 2621431710;1711; CHECK-MVEFP-LABEL: test_signed_v4f32_v4i19:1712; CHECK-MVEFP: @ %bb.0:1713; CHECK-MVEFP-NEXT: movs r0, #01714; CHECK-MVEFP-NEXT: vmov.i32 q1, #0x3ffff1715; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q01716; CHECK-MVEFP-NEXT: movt r0, #655321717; CHECK-MVEFP-NEXT: vmin.s32 q0, q0, q11718; CHECK-MVEFP-NEXT: vdup.32 q1, r01719; CHECK-MVEFP-NEXT: vmax.s32 q0, q0, q11720; CHECK-MVEFP-NEXT: bx lr1721 %x = call <4 x i19> @llvm.fptosi.sat.v4f32.v4i19(<4 x float> %f)1722 ret <4 x i19> %x1723}1724 1725define arm_aapcs_vfpcc <4 x i32> @test_signed_v4f32_v4i32_duplicate(<4 x float> %f) {1726; CHECK-MVE-LABEL: test_signed_v4f32_v4i32_duplicate:1727; CHECK-MVE: @ %bb.0:1728; CHECK-MVE-NEXT: vcvt.s32.f32 s2, s21729; CHECK-MVE-NEXT: vcvt.s32.f32 s0, s01730; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s31731; CHECK-MVE-NEXT: vcvt.s32.f32 s6, s11732; CHECK-MVE-NEXT: vmov r0, s21733; CHECK-MVE-NEXT: vmov r1, s01734; CHECK-MVE-NEXT: vmov q0[2], q0[0], r1, r01735; CHECK-MVE-NEXT: vmov r0, s41736; CHECK-MVE-NEXT: vmov r1, s61737; CHECK-MVE-NEXT: vmov q0[3], q0[1], r1, r01738; CHECK-MVE-NEXT: bx lr1739;1740; CHECK-MVEFP-LABEL: test_signed_v4f32_v4i32_duplicate:1741; CHECK-MVEFP: @ %bb.0:1742; CHECK-MVEFP-NEXT: vcvt.s32.f32 q0, q01743; CHECK-MVEFP-NEXT: bx lr1744 %x = call <4 x i32> @llvm.fptosi.sat.v4f32.v4i32(<4 x float> %f)1745 ret <4 x i32> %x1746}1747 1748define arm_aapcs_vfpcc <4 x i50> @test_signed_v4f32_v4i50(<4 x float> %f) {1749; CHECK-LABEL: test_signed_v4f32_v4i50:1750; CHECK: @ %bb.0:1751; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r11, lr}1752; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r11, lr}1753; CHECK-NEXT: .vsave {d8, d9, d10, d11}1754; CHECK-NEXT: vpush {d8, d9, d10, d11}1755; CHECK-NEXT: vmov q4, q01756; CHECK-NEXT: mov r8, r01757; CHECK-NEXT: vmov r0, s171758; CHECK-NEXT: bl __aeabi_f2lz1759; CHECK-NEXT: mov r9, r01760; CHECK-NEXT: vmov r0, s181761; CHECK-NEXT: vldr s22, .LCPI28_01762; CHECK-NEXT: mov r11, r11763; CHECK-NEXT: vldr s20, .LCPI28_11764; CHECK-NEXT: vcmp.f32 s17, s221765; CHECK-NEXT: vmrs APSR_nzcv, fpscr1766; CHECK-NEXT: itt lt1767; CHECK-NEXT: movwlt r11, #01768; CHECK-NEXT: movtlt r11, #655341769; CHECK-NEXT: it lt1770; CHECK-NEXT: movlt.w r9, #01771; CHECK-NEXT: vcmp.f32 s17, s201772; CHECK-NEXT: vmrs APSR_nzcv, fpscr1773; CHECK-NEXT: it gt1774; CHECK-NEXT: movgt.w r9, #-11775; CHECK-NEXT: vcmp.f32 s17, s171776; CHECK-NEXT: itt gt1777; CHECK-NEXT: movwgt r11, #655351778; CHECK-NEXT: movtgt r11, #11779; CHECK-NEXT: vmrs APSR_nzcv, fpscr1780; CHECK-NEXT: itt vs1781; CHECK-NEXT: movvs.w r9, #01782; CHECK-NEXT: movvs.w r11, #01783; CHECK-NEXT: bl __aeabi_f2lz1784; CHECK-NEXT: mov r6, r01785; CHECK-NEXT: vmov r0, s191786; CHECK-NEXT: vcmp.f32 s18, s221787; CHECK-NEXT: mov r5, r11788; CHECK-NEXT: vmrs APSR_nzcv, fpscr1789; CHECK-NEXT: itt lt1790; CHECK-NEXT: movlt r5, #01791; CHECK-NEXT: movtlt r5, #655341792; CHECK-NEXT: vcmp.f32 s18, s201793; CHECK-NEXT: it lt1794; CHECK-NEXT: movlt r6, #01795; CHECK-NEXT: vmrs APSR_nzcv, fpscr1796; CHECK-NEXT: itt gt1797; CHECK-NEXT: movwgt r5, #655351798; CHECK-NEXT: movtgt r5, #11799; CHECK-NEXT: it gt1800; CHECK-NEXT: movgt.w r6, #-11801; CHECK-NEXT: vcmp.f32 s18, s181802; CHECK-NEXT: vmrs APSR_nzcv, fpscr1803; CHECK-NEXT: itt vs1804; CHECK-NEXT: movvs r6, #01805; CHECK-NEXT: movvs r5, #01806; CHECK-NEXT: bl __aeabi_f2lz1807; CHECK-NEXT: mov r4, r01808; CHECK-NEXT: vmov r0, s161809; CHECK-NEXT: vcmp.f32 s19, s221810; CHECK-NEXT: mov r7, r11811; CHECK-NEXT: vmrs APSR_nzcv, fpscr1812; CHECK-NEXT: itt lt1813; CHECK-NEXT: movlt r7, #01814; CHECK-NEXT: movtlt r7, #655341815; CHECK-NEXT: vcmp.f32 s19, s201816; CHECK-NEXT: it lt1817; CHECK-NEXT: movlt r4, #01818; CHECK-NEXT: vmrs APSR_nzcv, fpscr1819; CHECK-NEXT: itt gt1820; CHECK-NEXT: movwgt r7, #655351821; CHECK-NEXT: movtgt r7, #11822; CHECK-NEXT: it gt1823; CHECK-NEXT: movgt.w r4, #-11824; CHECK-NEXT: vcmp.f32 s19, s191825; CHECK-NEXT: vmrs APSR_nzcv, fpscr1826; CHECK-NEXT: itt vs1827; CHECK-NEXT: movvs r4, #01828; CHECK-NEXT: movvs r7, #01829; CHECK-NEXT: bl __aeabi_f2lz1830; CHECK-NEXT: vcmp.f32 s16, s221831; CHECK-NEXT: bfc r5, #18, #141832; CHECK-NEXT: vmrs APSR_nzcv, fpscr1833; CHECK-NEXT: ittt lt1834; CHECK-NEXT: movlt r0, #01835; CHECK-NEXT: movlt r1, #01836; CHECK-NEXT: movtlt r1, #655341837; CHECK-NEXT: vcmp.f32 s16, s201838; CHECK-NEXT: mov r2, r61839; CHECK-NEXT: vmrs APSR_nzcv, fpscr1840; CHECK-NEXT: ittt gt1841; CHECK-NEXT: movwgt r1, #655351842; CHECK-NEXT: movtgt r1, #11843; CHECK-NEXT: movgt.w r0, #-11844; CHECK-NEXT: vcmp.f32 s16, s161845; CHECK-NEXT: lsrl r2, r5, #281846; CHECK-NEXT: vmrs APSR_nzcv, fpscr1847; CHECK-NEXT: it vs1848; CHECK-NEXT: movvs r0, #01849; CHECK-NEXT: str.w r0, [r8]1850; CHECK-NEXT: lsr.w r0, r7, #101851; CHECK-NEXT: bfc r7, #18, #141852; CHECK-NEXT: bfc r11, #18, #141853; CHECK-NEXT: lsll r4, r7, #221854; CHECK-NEXT: orr.w r3, r5, r71855; CHECK-NEXT: str.w r3, [r8, #20]1856; CHECK-NEXT: orr.w r2, r2, r41857; CHECK-NEXT: str.w r2, [r8, #16]1858; CHECK-NEXT: strb.w r0, [r8, #24]1859; CHECK-NEXT: mov r0, r91860; CHECK-NEXT: lsrl r0, r11, #141861; CHECK-NEXT: orr.w r2, r11, r6, lsl #41862; CHECK-NEXT: strd r0, r2, [r8, #8]1863; CHECK-NEXT: it vs1864; CHECK-NEXT: movvs r1, #01865; CHECK-NEXT: bfc r1, #18, #141866; CHECK-NEXT: orr.w r0, r1, r9, lsl #181867; CHECK-NEXT: str.w r0, [r8, #4]1868; CHECK-NEXT: vpop {d8, d9, d10, d11}1869; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r11, pc}1870; CHECK-NEXT: .p2align 21871; CHECK-NEXT: @ %bb.1:1872; CHECK-NEXT: .LCPI28_0:1873; CHECK-NEXT: .long 0xd8000000 @ float -5.62949953E+141874; CHECK-NEXT: .LCPI28_1:1875; CHECK-NEXT: .long 0x57ffffff @ float 5.6294992E+141876 %x = call <4 x i50> @llvm.fptosi.sat.v4f32.v4i50(<4 x float> %f)1877 ret <4 x i50> %x1878}1879 1880define arm_aapcs_vfpcc <4 x i64> @test_signed_v4f32_v4i64(<4 x float> %f) {1881; CHECK-LABEL: test_signed_v4f32_v4i64:1882; CHECK: @ %bb.0:1883; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1884; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}1885; CHECK-NEXT: .pad #41886; CHECK-NEXT: sub sp, #41887; CHECK-NEXT: .vsave {d8, d9, d10, d11}1888; CHECK-NEXT: vpush {d8, d9, d10, d11}1889; CHECK-NEXT: vmov q4, q01890; CHECK-NEXT: vmov r0, s191891; CHECK-NEXT: bl __aeabi_f2lz1892; CHECK-NEXT: mov r11, r01893; CHECK-NEXT: vmov r0, s181894; CHECK-NEXT: vldr s22, .LCPI29_01895; CHECK-NEXT: mov r10, r11896; CHECK-NEXT: vldr s20, .LCPI29_11897; CHECK-NEXT: vmov r9, s171898; CHECK-NEXT: vcmp.f32 s19, s221899; CHECK-NEXT: vmrs APSR_nzcv, fpscr1900; CHECK-NEXT: itt lt1901; CHECK-NEXT: movlt.w r10, #-21474836481902; CHECK-NEXT: movlt.w r11, #01903; CHECK-NEXT: vcmp.f32 s19, s201904; CHECK-NEXT: vmrs APSR_nzcv, fpscr1905; CHECK-NEXT: itt gt1906; CHECK-NEXT: movgt.w r11, #-11907; CHECK-NEXT: mvngt r10, #-21474836481908; CHECK-NEXT: vcmp.f32 s19, s191909; CHECK-NEXT: vmrs APSR_nzcv, fpscr1910; CHECK-NEXT: vmov r8, s161911; CHECK-NEXT: itt vs1912; CHECK-NEXT: movvs.w r10, #01913; CHECK-NEXT: movvs.w r11, #01914; CHECK-NEXT: bl __aeabi_f2lz1915; CHECK-NEXT: mov r7, r01916; CHECK-NEXT: vcmp.f32 s18, s221917; CHECK-NEXT: mov r6, r11918; CHECK-NEXT: vmrs APSR_nzcv, fpscr1919; CHECK-NEXT: itt lt1920; CHECK-NEXT: movlt r7, #01921; CHECK-NEXT: movlt.w r6, #-21474836481922; CHECK-NEXT: vcmp.f32 s18, s201923; CHECK-NEXT: vmrs APSR_nzcv, fpscr1924; CHECK-NEXT: mov r0, r91925; CHECK-NEXT: itt gt1926; CHECK-NEXT: mvngt r6, #-21474836481927; CHECK-NEXT: movgt.w r7, #-11928; CHECK-NEXT: vcmp.f32 s18, s181929; CHECK-NEXT: vmrs APSR_nzcv, fpscr1930; CHECK-NEXT: itt vs1931; CHECK-NEXT: movvs r7, #01932; CHECK-NEXT: movvs r6, #01933; CHECK-NEXT: bl __aeabi_f2lz1934; CHECK-NEXT: mov r5, r01935; CHECK-NEXT: vcmp.f32 s17, s221936; CHECK-NEXT: mov r4, r11937; CHECK-NEXT: vmrs APSR_nzcv, fpscr1938; CHECK-NEXT: itt lt1939; CHECK-NEXT: movlt.w r4, #-21474836481940; CHECK-NEXT: movlt r5, #01941; CHECK-NEXT: vcmp.f32 s17, s201942; CHECK-NEXT: vmrs APSR_nzcv, fpscr1943; CHECK-NEXT: mov r0, r81944; CHECK-NEXT: itt gt1945; CHECK-NEXT: movgt.w r5, #-11946; CHECK-NEXT: mvngt r4, #-21474836481947; CHECK-NEXT: vcmp.f32 s17, s171948; CHECK-NEXT: vmrs APSR_nzcv, fpscr1949; CHECK-NEXT: itt vs1950; CHECK-NEXT: movvs r4, #01951; CHECK-NEXT: movvs r5, #01952; CHECK-NEXT: bl __aeabi_f2lz1953; CHECK-NEXT: vcmp.f32 s16, s221954; CHECK-NEXT: vmov q1[2], q1[0], r7, r111955; CHECK-NEXT: vmrs APSR_nzcv, fpscr1956; CHECK-NEXT: itt lt1957; CHECK-NEXT: movlt r0, #01958; CHECK-NEXT: movlt.w r1, #-21474836481959; CHECK-NEXT: vcmp.f32 s16, s201960; CHECK-NEXT: vmov q1[3], q1[1], r6, r101961; CHECK-NEXT: vmrs APSR_nzcv, fpscr1962; CHECK-NEXT: itt gt1963; CHECK-NEXT: mvngt r1, #-21474836481964; CHECK-NEXT: movgt.w r0, #-11965; CHECK-NEXT: vcmp.f32 s16, s161966; CHECK-NEXT: vmrs APSR_nzcv, fpscr1967; CHECK-NEXT: itt vs1968; CHECK-NEXT: movvs r0, #01969; CHECK-NEXT: movvs r1, #01970; CHECK-NEXT: vmov q0[2], q0[0], r0, r51971; CHECK-NEXT: vmov q0[3], q0[1], r1, r41972; CHECK-NEXT: vpop {d8, d9, d10, d11}1973; CHECK-NEXT: add sp, #41974; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}1975; CHECK-NEXT: .p2align 21976; CHECK-NEXT: @ %bb.1:1977; CHECK-NEXT: .LCPI29_0:1978; CHECK-NEXT: .long 0xdf000000 @ float -9.22337203E+181979; CHECK-NEXT: .LCPI29_1:1980; CHECK-NEXT: .long 0x5effffff @ float 9.22337149E+181981 %x = call <4 x i64> @llvm.fptosi.sat.v4f32.v4i64(<4 x float> %f)1982 ret <4 x i64> %x1983}1984 1985define arm_aapcs_vfpcc <4 x i100> @test_signed_v4f32_v4i100(<4 x float> %f) {1986; CHECK-LABEL: test_signed_v4f32_v4i100:1987; CHECK: @ %bb.0:1988; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}1989; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}1990; CHECK-NEXT: .pad #41991; CHECK-NEXT: sub sp, #41992; CHECK-NEXT: .vsave {d8, d9, d10, d11}1993; CHECK-NEXT: vpush {d8, d9, d10, d11}1994; CHECK-NEXT: .pad #81995; CHECK-NEXT: sub sp, #81996; CHECK-NEXT: vmov q4, q01997; CHECK-NEXT: mov r4, r01998; CHECK-NEXT: vmov r0, s181999; CHECK-NEXT: bl __fixsfti2000; CHECK-NEXT: vmov r6, s172001; CHECK-NEXT: vldr s22, .LCPI30_02002; CHECK-NEXT: vldr s20, .LCPI30_12003; CHECK-NEXT: vmov r7, s192004; CHECK-NEXT: vcmp.f32 s18, s222005; CHECK-NEXT: vmrs APSR_nzcv, fpscr2006; CHECK-NEXT: itttt lt2007; CHECK-NEXT: movlt r2, #02008; CHECK-NEXT: movlt r1, #02009; CHECK-NEXT: movlt r0, #02010; CHECK-NEXT: mvnlt r3, #72011; CHECK-NEXT: vcmp.f32 s18, s202012; CHECK-NEXT: vmrs APSR_nzcv, fpscr2013; CHECK-NEXT: itttt gt2014; CHECK-NEXT: movgt r3, #72015; CHECK-NEXT: movgt.w r0, #-12016; CHECK-NEXT: movgt.w r1, #-12017; CHECK-NEXT: movgt.w r2, #-12018; CHECK-NEXT: vcmp.f32 s18, s182019; CHECK-NEXT: vmrs APSR_nzcv, fpscr2020; CHECK-NEXT: it vs2021; CHECK-NEXT: movvs r2, #02022; CHECK-NEXT: str.w r2, [r4, #33]2023; CHECK-NEXT: it vs2024; CHECK-NEXT: movvs r1, #02025; CHECK-NEXT: str.w r1, [r4, #29]2026; CHECK-NEXT: it vs2027; CHECK-NEXT: movvs r0, #02028; CHECK-NEXT: str.w r0, [r4, #25]2029; CHECK-NEXT: it vs2030; CHECK-NEXT: movvs r3, #02031; CHECK-NEXT: str r3, [sp, #4] @ 4-byte Spill2032; CHECK-NEXT: mov r0, r62033; CHECK-NEXT: bl __fixsfti2034; CHECK-NEXT: mov r10, r02035; CHECK-NEXT: vcmp.f32 s17, s222036; CHECK-NEXT: mov r5, r12037; CHECK-NEXT: mov r6, r22038; CHECK-NEXT: vmrs APSR_nzcv, fpscr2039; CHECK-NEXT: itttt lt2040; CHECK-NEXT: mvnlt r3, #72041; CHECK-NEXT: movlt r6, #02042; CHECK-NEXT: movlt.w r10, #02043; CHECK-NEXT: movlt r5, #02044; CHECK-NEXT: vcmp.f32 s17, s202045; CHECK-NEXT: mov r0, r72046; CHECK-NEXT: vmrs APSR_nzcv, fpscr2047; CHECK-NEXT: itttt gt2048; CHECK-NEXT: movgt.w r5, #-12049; CHECK-NEXT: movgt.w r10, #-12050; CHECK-NEXT: movgt.w r6, #-12051; CHECK-NEXT: movgt r3, #72052; CHECK-NEXT: vcmp.f32 s17, s172053; CHECK-NEXT: vmrs APSR_nzcv, fpscr2054; CHECK-NEXT: it vs2055; CHECK-NEXT: movvs r3, #02056; CHECK-NEXT: str r3, [sp] @ 4-byte Spill2057; CHECK-NEXT: ittt vs2058; CHECK-NEXT: movvs r6, #02059; CHECK-NEXT: movvs.w r10, #02060; CHECK-NEXT: movvs r5, #02061; CHECK-NEXT: bl __fixsfti2062; CHECK-NEXT: mov r7, r02063; CHECK-NEXT: vmov r0, s162064; CHECK-NEXT: vcmp.f32 s19, s222065; CHECK-NEXT: mov r11, r12066; CHECK-NEXT: mov r8, r22067; CHECK-NEXT: mov r9, r32068; CHECK-NEXT: vmrs APSR_nzcv, fpscr2069; CHECK-NEXT: itttt lt2070; CHECK-NEXT: mvnlt r9, #72071; CHECK-NEXT: movlt.w r8, #02072; CHECK-NEXT: movlt.w r11, #02073; CHECK-NEXT: movlt r7, #02074; CHECK-NEXT: vcmp.f32 s19, s202075; CHECK-NEXT: vmrs APSR_nzcv, fpscr2076; CHECK-NEXT: itttt gt2077; CHECK-NEXT: movgt.w r7, #-12078; CHECK-NEXT: movgt.w r11, #-12079; CHECK-NEXT: movgt.w r8, #-12080; CHECK-NEXT: movgt.w r9, #72081; CHECK-NEXT: vcmp.f32 s19, s192082; CHECK-NEXT: vmrs APSR_nzcv, fpscr2083; CHECK-NEXT: itttt vs2084; CHECK-NEXT: movvs.w r9, #02085; CHECK-NEXT: movvs.w r8, #02086; CHECK-NEXT: movvs.w r11, #02087; CHECK-NEXT: movvs r7, #02088; CHECK-NEXT: bl __fixsfti2089; CHECK-NEXT: vcmp.f32 s16, s222090; CHECK-NEXT: vmrs APSR_nzcv, fpscr2091; CHECK-NEXT: itttt lt2092; CHECK-NEXT: movlt r2, #02093; CHECK-NEXT: movlt r1, #02094; CHECK-NEXT: movlt r0, #02095; CHECK-NEXT: mvnlt r3, #72096; CHECK-NEXT: vcmp.f32 s16, s202097; CHECK-NEXT: vmrs APSR_nzcv, fpscr2098; CHECK-NEXT: itttt gt2099; CHECK-NEXT: movgt r3, #72100; CHECK-NEXT: movgt.w r0, #-12101; CHECK-NEXT: movgt.w r1, #-12102; CHECK-NEXT: movgt.w r2, #-12103; CHECK-NEXT: vcmp.f32 s16, s162104; CHECK-NEXT: vmrs APSR_nzcv, fpscr2105; CHECK-NEXT: it vs2106; CHECK-NEXT: movvs r2, #02107; CHECK-NEXT: str r2, [r4, #8]2108; CHECK-NEXT: it vs2109; CHECK-NEXT: movvs r1, #02110; CHECK-NEXT: str r1, [r4, #4]2111; CHECK-NEXT: it vs2112; CHECK-NEXT: movvs r0, #02113; CHECK-NEXT: str r0, [r4]2114; CHECK-NEXT: mov r0, r72115; CHECK-NEXT: lsrl r0, r11, #282116; CHECK-NEXT: and r1, r9, #152117; CHECK-NEXT: str.w r0, [r4, #41]2118; CHECK-NEXT: mov r0, r102119; CHECK-NEXT: lsrl r0, r5, #282120; CHECK-NEXT: str r0, [r4, #16]2121; CHECK-NEXT: orr.w r0, r11, r8, lsl #42122; CHECK-NEXT: lsrl r8, r1, #282123; CHECK-NEXT: str.w r0, [r4, #45]2124; CHECK-NEXT: strb.w r8, [r4, #49]2125; CHECK-NEXT: ldr r0, [sp, #4] @ 4-byte Reload2126; CHECK-NEXT: and r0, r0, #152127; CHECK-NEXT: orr.w r0, r0, r7, lsl #42128; CHECK-NEXT: str.w r0, [r4, #37]2129; CHECK-NEXT: orr.w r0, r5, r6, lsl #42130; CHECK-NEXT: str r0, [r4, #20]2131; CHECK-NEXT: ldr r0, [sp] @ 4-byte Reload2132; CHECK-NEXT: and r1, r0, #152133; CHECK-NEXT: lsrl r6, r1, #282134; CHECK-NEXT: strb r6, [r4, #24]2135; CHECK-NEXT: it vs2136; CHECK-NEXT: movvs r3, #02137; CHECK-NEXT: and r0, r3, #152138; CHECK-NEXT: orr.w r0, r0, r10, lsl #42139; CHECK-NEXT: str r0, [r4, #12]2140; CHECK-NEXT: add sp, #82141; CHECK-NEXT: vpop {d8, d9, d10, d11}2142; CHECK-NEXT: add sp, #42143; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2144; CHECK-NEXT: .p2align 22145; CHECK-NEXT: @ %bb.1:2146; CHECK-NEXT: .LCPI30_0:2147; CHECK-NEXT: .long 0xf1000000 @ float -6.338253E+292148; CHECK-NEXT: .LCPI30_1:2149; CHECK-NEXT: .long 0x70ffffff @ float 6.33825262E+292150 %x = call <4 x i100> @llvm.fptosi.sat.v4f32.v4i100(<4 x float> %f)2151 ret <4 x i100> %x2152}2153 2154define arm_aapcs_vfpcc <4 x i128> @test_signed_v4f32_v4i128(<4 x float> %f) {2155; CHECK-LABEL: test_signed_v4f32_v4i128:2156; CHECK: @ %bb.0:2157; CHECK-NEXT: .save {r4, r5, r6, r7, lr}2158; CHECK-NEXT: push {r4, r5, r6, r7, lr}2159; CHECK-NEXT: .pad #42160; CHECK-NEXT: sub sp, #42161; CHECK-NEXT: .vsave {d8, d9, d10, d11}2162; CHECK-NEXT: vpush {d8, d9, d10, d11}2163; CHECK-NEXT: vmov q4, q02164; CHECK-NEXT: mov r4, r02165; CHECK-NEXT: vmov r0, s192166; CHECK-NEXT: bl __fixsfti2167; CHECK-NEXT: vmov r5, s182168; CHECK-NEXT: vldr s22, .LCPI31_02169; CHECK-NEXT: vldr s20, .LCPI31_12170; CHECK-NEXT: add.w r12, r4, #482171; CHECK-NEXT: vcmp.f32 s19, s222172; CHECK-NEXT: vmrs APSR_nzcv, fpscr2173; CHECK-NEXT: itttt lt2174; CHECK-NEXT: movlt.w r3, #-21474836482175; CHECK-NEXT: movlt r2, #02176; CHECK-NEXT: movlt r1, #02177; CHECK-NEXT: movlt r0, #02178; CHECK-NEXT: vcmp.f32 s19, s202179; CHECK-NEXT: vmrs APSR_nzcv, fpscr2180; CHECK-NEXT: itttt gt2181; CHECK-NEXT: movgt.w r0, #-12182; CHECK-NEXT: movgt.w r1, #-12183; CHECK-NEXT: movgt.w r2, #-12184; CHECK-NEXT: mvngt r3, #-21474836482185; CHECK-NEXT: vcmp.f32 s19, s192186; CHECK-NEXT: vmrs APSR_nzcv, fpscr2187; CHECK-NEXT: it vs2188; CHECK-NEXT: movvs r3, #02189; CHECK-NEXT: ittt vs2190; CHECK-NEXT: movvs r2, #02191; CHECK-NEXT: movvs r1, #02192; CHECK-NEXT: movvs r0, #02193; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}2194; CHECK-NEXT: vmov r7, s162195; CHECK-NEXT: vmov r6, s172196; CHECK-NEXT: mov r0, r52197; CHECK-NEXT: bl __fixsfti2198; CHECK-NEXT: vcmp.f32 s18, s222199; CHECK-NEXT: add.w r12, r4, #322200; CHECK-NEXT: vmrs APSR_nzcv, fpscr2201; CHECK-NEXT: itttt lt2202; CHECK-NEXT: movlt.w r3, #-21474836482203; CHECK-NEXT: movlt r2, #02204; CHECK-NEXT: movlt r1, #02205; CHECK-NEXT: movlt r0, #02206; CHECK-NEXT: vcmp.f32 s18, s202207; CHECK-NEXT: vmrs APSR_nzcv, fpscr2208; CHECK-NEXT: itttt gt2209; CHECK-NEXT: movgt.w r0, #-12210; CHECK-NEXT: movgt.w r1, #-12211; CHECK-NEXT: movgt.w r2, #-12212; CHECK-NEXT: mvngt r3, #-21474836482213; CHECK-NEXT: vcmp.f32 s18, s182214; CHECK-NEXT: vmrs APSR_nzcv, fpscr2215; CHECK-NEXT: itttt vs2216; CHECK-NEXT: movvs r3, #02217; CHECK-NEXT: movvs r2, #02218; CHECK-NEXT: movvs r1, #02219; CHECK-NEXT: movvs r0, #02220; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}2221; CHECK-NEXT: mov r0, r62222; CHECK-NEXT: bl __fixsfti2223; CHECK-NEXT: vcmp.f32 s17, s222224; CHECK-NEXT: add.w r12, r4, #162225; CHECK-NEXT: vmrs APSR_nzcv, fpscr2226; CHECK-NEXT: itttt lt2227; CHECK-NEXT: movlt.w r3, #-21474836482228; CHECK-NEXT: movlt r2, #02229; CHECK-NEXT: movlt r1, #02230; CHECK-NEXT: movlt r0, #02231; CHECK-NEXT: vcmp.f32 s17, s202232; CHECK-NEXT: vmrs APSR_nzcv, fpscr2233; CHECK-NEXT: itttt gt2234; CHECK-NEXT: movgt.w r0, #-12235; CHECK-NEXT: movgt.w r1, #-12236; CHECK-NEXT: movgt.w r2, #-12237; CHECK-NEXT: mvngt r3, #-21474836482238; CHECK-NEXT: vcmp.f32 s17, s172239; CHECK-NEXT: vmrs APSR_nzcv, fpscr2240; CHECK-NEXT: itttt vs2241; CHECK-NEXT: movvs r3, #02242; CHECK-NEXT: movvs r2, #02243; CHECK-NEXT: movvs r1, #02244; CHECK-NEXT: movvs r0, #02245; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}2246; CHECK-NEXT: mov r0, r72247; CHECK-NEXT: bl __fixsfti2248; CHECK-NEXT: vcmp.f32 s16, s222249; CHECK-NEXT: vmrs APSR_nzcv, fpscr2250; CHECK-NEXT: itttt lt2251; CHECK-NEXT: movlt.w r3, #-21474836482252; CHECK-NEXT: movlt r2, #02253; CHECK-NEXT: movlt r1, #02254; CHECK-NEXT: movlt r0, #02255; CHECK-NEXT: vcmp.f32 s16, s202256; CHECK-NEXT: vmrs APSR_nzcv, fpscr2257; CHECK-NEXT: itttt gt2258; CHECK-NEXT: movgt.w r0, #-12259; CHECK-NEXT: movgt.w r1, #-12260; CHECK-NEXT: movgt.w r2, #-12261; CHECK-NEXT: mvngt r3, #-21474836482262; CHECK-NEXT: vcmp.f32 s16, s162263; CHECK-NEXT: vmrs APSR_nzcv, fpscr2264; CHECK-NEXT: itttt vs2265; CHECK-NEXT: movvs r3, #02266; CHECK-NEXT: movvs r2, #02267; CHECK-NEXT: movvs r1, #02268; CHECK-NEXT: movvs r0, #02269; CHECK-NEXT: stm r4!, {r0, r1, r2, r3}2270; CHECK-NEXT: vpop {d8, d9, d10, d11}2271; CHECK-NEXT: add sp, #42272; CHECK-NEXT: pop {r4, r5, r6, r7, pc}2273; CHECK-NEXT: .p2align 22274; CHECK-NEXT: @ %bb.1:2275; CHECK-NEXT: .LCPI31_0:2276; CHECK-NEXT: .long 0xff000000 @ float -1.70141183E+382277; CHECK-NEXT: .LCPI31_1:2278; CHECK-NEXT: .long 0x7effffff @ float 1.70141173E+382279 %x = call <4 x i128> @llvm.fptosi.sat.v4f32.v4i128(<4 x float> %f)2280 ret <4 x i128> %x2281}2282 2283;2284; 2-Vector double to signed integer -- result size variation2285;2286 2287declare <2 x i1> @llvm.fptosi.sat.v2f64.v2i1 (<2 x double>)2288declare <2 x i8> @llvm.fptosi.sat.v2f64.v2i8 (<2 x double>)2289declare <2 x i13> @llvm.fptosi.sat.v2f64.v2i13 (<2 x double>)2290declare <2 x i16> @llvm.fptosi.sat.v2f64.v2i16 (<2 x double>)2291declare <2 x i19> @llvm.fptosi.sat.v2f64.v2i19 (<2 x double>)2292declare <2 x i50> @llvm.fptosi.sat.v2f64.v2i50 (<2 x double>)2293declare <2 x i64> @llvm.fptosi.sat.v2f64.v2i64 (<2 x double>)2294declare <2 x i100> @llvm.fptosi.sat.v2f64.v2i100(<2 x double>)2295declare <2 x i128> @llvm.fptosi.sat.v2f64.v2i128(<2 x double>)2296 2297define arm_aapcs_vfpcc <2 x i1> @test_signed_v2f64_v2i1(<2 x double> %f) {2298; CHECK-LABEL: test_signed_v2f64_v2i1:2299; CHECK: @ %bb.0:2300; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2301; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2302; CHECK-NEXT: .pad #42303; CHECK-NEXT: sub sp, #42304; CHECK-NEXT: .vsave {d8, d9}2305; CHECK-NEXT: vpush {d8, d9}2306; CHECK-NEXT: .pad #162307; CHECK-NEXT: sub sp, #162308; CHECK-NEXT: vmov q4, q02309; CHECK-NEXT: vldr d0, .LCPI32_02310; CHECK-NEXT: vmov r8, r7, d82311; CHECK-NEXT: str r0, [sp, #12] @ 4-byte Spill2312; CHECK-NEXT: vmov r11, r3, d02313; CHECK-NEXT: str r3, [sp, #8] @ 4-byte Spill2314; CHECK-NEXT: mov r0, r82315; CHECK-NEXT: mov r1, r72316; CHECK-NEXT: mov r2, r112317; CHECK-NEXT: bl __aeabi_dcmpge2318; CHECK-NEXT: mov r10, r02319; CHECK-NEXT: mov r0, r82320; CHECK-NEXT: mov r1, r72321; CHECK-NEXT: bl __aeabi_d2iz2322; CHECK-NEXT: vldr d0, .LCPI32_12323; CHECK-NEXT: mov r9, r02324; CHECK-NEXT: mov r0, r82325; CHECK-NEXT: mov r1, r72326; CHECK-NEXT: vmov r2, r3, d02327; CHECK-NEXT: cmp.w r10, #02328; CHECK-NEXT: vmov r6, r5, d92329; CHECK-NEXT: str r2, [sp, #4] @ 4-byte Spill2330; CHECK-NEXT: it eq2331; CHECK-NEXT: moveq.w r9, #-12332; CHECK-NEXT: mov r10, r32333; CHECK-NEXT: bl __aeabi_dcmpgt2334; CHECK-NEXT: cmp r0, #02335; CHECK-NEXT: mov r0, r82336; CHECK-NEXT: mov r1, r72337; CHECK-NEXT: mov r2, r82338; CHECK-NEXT: mov r3, r72339; CHECK-NEXT: it ne2340; CHECK-NEXT: movne.w r9, #02341; CHECK-NEXT: bl __aeabi_dcmpun2342; CHECK-NEXT: cmp r0, #02343; CHECK-NEXT: it ne2344; CHECK-NEXT: movne.w r9, #02345; CHECK-NEXT: and r0, r9, #12346; CHECK-NEXT: ldr r3, [sp, #8] @ 4-byte Reload2347; CHECK-NEXT: rsbs r0, r0, #02348; CHECK-NEXT: movs r4, #02349; CHECK-NEXT: bfi r4, r0, #0, #12350; CHECK-NEXT: mov r0, r62351; CHECK-NEXT: mov r1, r52352; CHECK-NEXT: mov r2, r112353; CHECK-NEXT: bl __aeabi_dcmpge2354; CHECK-NEXT: mov r8, r02355; CHECK-NEXT: mov r0, r62356; CHECK-NEXT: mov r1, r52357; CHECK-NEXT: bl __aeabi_d2iz2358; CHECK-NEXT: mov r7, r02359; CHECK-NEXT: cmp.w r8, #02360; CHECK-NEXT: it eq2361; CHECK-NEXT: moveq.w r7, #-12362; CHECK-NEXT: ldr r2, [sp, #4] @ 4-byte Reload2363; CHECK-NEXT: mov r0, r62364; CHECK-NEXT: mov r1, r52365; CHECK-NEXT: mov r3, r102366; CHECK-NEXT: bl __aeabi_dcmpgt2367; CHECK-NEXT: cmp r0, #02368; CHECK-NEXT: mov r0, r62369; CHECK-NEXT: mov r1, r52370; CHECK-NEXT: mov r2, r62371; CHECK-NEXT: mov r3, r52372; CHECK-NEXT: it ne2373; CHECK-NEXT: movne r7, #02374; CHECK-NEXT: bl __aeabi_dcmpun2375; CHECK-NEXT: cmp r0, #02376; CHECK-NEXT: it ne2377; CHECK-NEXT: movne r7, #02378; CHECK-NEXT: and r0, r7, #12379; CHECK-NEXT: rsbs r0, r0, #02380; CHECK-NEXT: bfi r4, r0, #1, #12381; CHECK-NEXT: ldr r0, [sp, #12] @ 4-byte Reload2382; CHECK-NEXT: strb r4, [r0]2383; CHECK-NEXT: add sp, #162384; CHECK-NEXT: vpop {d8, d9}2385; CHECK-NEXT: add sp, #42386; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2387; CHECK-NEXT: .p2align 32388; CHECK-NEXT: @ %bb.1:2389; CHECK-NEXT: .LCPI32_0:2390; CHECK-NEXT: .long 0 @ double -12391; CHECK-NEXT: .long 32201768962392; CHECK-NEXT: .LCPI32_1:2393; CHECK-NEXT: .long 0 @ double 02394; CHECK-NEXT: .long 02395 %x = call <2 x i1> @llvm.fptosi.sat.v2f64.v2i1(<2 x double> %f)2396 ret <2 x i1> %x2397}2398 2399define arm_aapcs_vfpcc <2 x i8> @test_signed_v2f64_v2i8(<2 x double> %f) {2400; CHECK-LABEL: test_signed_v2f64_v2i8:2401; CHECK: @ %bb.0:2402; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2403; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2404; CHECK-NEXT: .pad #42405; CHECK-NEXT: sub sp, #42406; CHECK-NEXT: .vsave {d8, d9}2407; CHECK-NEXT: vpush {d8, d9}2408; CHECK-NEXT: .pad #162409; CHECK-NEXT: sub sp, #162410; CHECK-NEXT: vmov q4, q02411; CHECK-NEXT: vldr d0, .LCPI33_02412; CHECK-NEXT: vmov r9, r8, d92413; CHECK-NEXT: vmov r7, r3, d02414; CHECK-NEXT: str r3, [sp, #12] @ 4-byte Spill2415; CHECK-NEXT: mov r0, r92416; CHECK-NEXT: mov r1, r82417; CHECK-NEXT: mov r2, r72418; CHECK-NEXT: bl __aeabi_dcmpge2419; CHECK-NEXT: mov r6, r02420; CHECK-NEXT: mov r0, r92421; CHECK-NEXT: mov r1, r82422; CHECK-NEXT: bl __aeabi_d2lz2423; CHECK-NEXT: vldr d0, .LCPI33_12424; CHECK-NEXT: mov r5, r02425; CHECK-NEXT: mov r4, r12426; CHECK-NEXT: mov r0, r92427; CHECK-NEXT: vmov r2, r3, d02428; CHECK-NEXT: mov r1, r82429; CHECK-NEXT: vmov r11, r10, d82430; CHECK-NEXT: cmp r6, #02431; CHECK-NEXT: strd r2, r3, [sp, #4] @ 8-byte Folded Spill2432; CHECK-NEXT: itt eq2433; CHECK-NEXT: moveq.w r4, #-12434; CHECK-NEXT: mvneq r5, #1272435; CHECK-NEXT: bl __aeabi_dcmpgt2436; CHECK-NEXT: cmp r0, #02437; CHECK-NEXT: mov r0, r92438; CHECK-NEXT: mov r1, r82439; CHECK-NEXT: mov r2, r92440; CHECK-NEXT: mov r3, r82441; CHECK-NEXT: itt ne2442; CHECK-NEXT: movne r5, #1272443; CHECK-NEXT: movne r4, #02444; CHECK-NEXT: bl __aeabi_dcmpun2445; CHECK-NEXT: cmp r0, #02446; CHECK-NEXT: itt ne2447; CHECK-NEXT: movne r4, #02448; CHECK-NEXT: movne r5, #02449; CHECK-NEXT: ldr r3, [sp, #12] @ 4-byte Reload2450; CHECK-NEXT: mov r0, r112451; CHECK-NEXT: mov r1, r102452; CHECK-NEXT: mov r2, r72453; CHECK-NEXT: bl __aeabi_dcmpge2454; CHECK-NEXT: mov r8, r02455; CHECK-NEXT: mov r0, r112456; CHECK-NEXT: mov r1, r102457; CHECK-NEXT: bl __aeabi_d2lz2458; CHECK-NEXT: mov r7, r02459; CHECK-NEXT: mov r6, r12460; CHECK-NEXT: cmp.w r8, #02461; CHECK-NEXT: itt eq2462; CHECK-NEXT: mvneq r7, #1272463; CHECK-NEXT: moveq.w r6, #-12464; CHECK-NEXT: ldrd r2, r3, [sp, #4] @ 8-byte Folded Reload2465; CHECK-NEXT: mov r0, r112466; CHECK-NEXT: mov r1, r102467; CHECK-NEXT: bl __aeabi_dcmpgt2468; CHECK-NEXT: cmp r0, #02469; CHECK-NEXT: mov r0, r112470; CHECK-NEXT: mov r1, r102471; CHECK-NEXT: mov r2, r112472; CHECK-NEXT: mov r3, r102473; CHECK-NEXT: itt ne2474; CHECK-NEXT: movne r6, #02475; CHECK-NEXT: movne r7, #1272476; CHECK-NEXT: bl __aeabi_dcmpun2477; CHECK-NEXT: cmp r0, #02478; CHECK-NEXT: itt ne2479; CHECK-NEXT: movne r7, #02480; CHECK-NEXT: movne r6, #02481; CHECK-NEXT: vmov q0[2], q0[0], r7, r52482; CHECK-NEXT: vmov q0[3], q0[1], r6, r42483; CHECK-NEXT: add sp, #162484; CHECK-NEXT: vpop {d8, d9}2485; CHECK-NEXT: add sp, #42486; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2487; CHECK-NEXT: .p2align 32488; CHECK-NEXT: @ %bb.1:2489; CHECK-NEXT: .LCPI33_0:2490; CHECK-NEXT: .long 0 @ double -1282491; CHECK-NEXT: .long 32275169282492; CHECK-NEXT: .LCPI33_1:2493; CHECK-NEXT: .long 0 @ double 1272494; CHECK-NEXT: .long 10800168962495 %x = call <2 x i8> @llvm.fptosi.sat.v2f64.v2i8(<2 x double> %f)2496 ret <2 x i8> %x2497}2498 2499define arm_aapcs_vfpcc <2 x i13> @test_signed_v2f64_v2i13(<2 x double> %f) {2500; CHECK-LABEL: test_signed_v2f64_v2i13:2501; CHECK: @ %bb.0:2502; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2503; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2504; CHECK-NEXT: .pad #42505; CHECK-NEXT: sub sp, #42506; CHECK-NEXT: .vsave {d8, d9}2507; CHECK-NEXT: vpush {d8, d9}2508; CHECK-NEXT: .pad #162509; CHECK-NEXT: sub sp, #162510; CHECK-NEXT: vmov q4, q02511; CHECK-NEXT: vldr d0, .LCPI34_02512; CHECK-NEXT: vmov r9, r8, d92513; CHECK-NEXT: vmov r7, r3, d02514; CHECK-NEXT: str r3, [sp, #12] @ 4-byte Spill2515; CHECK-NEXT: mov r0, r92516; CHECK-NEXT: mov r1, r82517; CHECK-NEXT: mov r2, r72518; CHECK-NEXT: bl __aeabi_dcmpge2519; CHECK-NEXT: mov r6, r02520; CHECK-NEXT: mov r0, r92521; CHECK-NEXT: mov r1, r82522; CHECK-NEXT: bl __aeabi_d2lz2523; CHECK-NEXT: vldr d0, .LCPI34_12524; CHECK-NEXT: mov r5, r02525; CHECK-NEXT: mov r4, r12526; CHECK-NEXT: mov r0, r92527; CHECK-NEXT: vmov r2, r3, d02528; CHECK-NEXT: mov r1, r82529; CHECK-NEXT: vmov r11, r10, d82530; CHECK-NEXT: cmp r6, #02531; CHECK-NEXT: strd r2, r3, [sp, #4] @ 8-byte Folded Spill2532; CHECK-NEXT: ittt eq2533; CHECK-NEXT: movweq r5, #614402534; CHECK-NEXT: movteq r5, #655352535; CHECK-NEXT: moveq.w r4, #-12536; CHECK-NEXT: bl __aeabi_dcmpgt2537; CHECK-NEXT: cmp r0, #02538; CHECK-NEXT: mov r0, r92539; CHECK-NEXT: mov r1, r82540; CHECK-NEXT: mov r2, r92541; CHECK-NEXT: mov r3, r82542; CHECK-NEXT: itt ne2543; CHECK-NEXT: movwne r5, #40952544; CHECK-NEXT: movne r4, #02545; CHECK-NEXT: bl __aeabi_dcmpun2546; CHECK-NEXT: cmp r0, #02547; CHECK-NEXT: itt ne2548; CHECK-NEXT: movne r4, #02549; CHECK-NEXT: movne r5, #02550; CHECK-NEXT: ldr r3, [sp, #12] @ 4-byte Reload2551; CHECK-NEXT: mov r0, r112552; CHECK-NEXT: mov r1, r102553; CHECK-NEXT: mov r2, r72554; CHECK-NEXT: bl __aeabi_dcmpge2555; CHECK-NEXT: mov r8, r02556; CHECK-NEXT: mov r0, r112557; CHECK-NEXT: mov r1, r102558; CHECK-NEXT: bl __aeabi_d2lz2559; CHECK-NEXT: mov r7, r02560; CHECK-NEXT: mov r6, r12561; CHECK-NEXT: cmp.w r8, #02562; CHECK-NEXT: ittt eq2563; CHECK-NEXT: movweq r7, #614402564; CHECK-NEXT: movteq r7, #655352565; CHECK-NEXT: moveq.w r6, #-12566; CHECK-NEXT: ldrd r2, r3, [sp, #4] @ 8-byte Folded Reload2567; CHECK-NEXT: mov r0, r112568; CHECK-NEXT: mov r1, r102569; CHECK-NEXT: bl __aeabi_dcmpgt2570; CHECK-NEXT: cmp r0, #02571; CHECK-NEXT: mov r0, r112572; CHECK-NEXT: mov r1, r102573; CHECK-NEXT: mov r2, r112574; CHECK-NEXT: mov r3, r102575; CHECK-NEXT: itt ne2576; CHECK-NEXT: movne r6, #02577; CHECK-NEXT: movwne r7, #40952578; CHECK-NEXT: bl __aeabi_dcmpun2579; CHECK-NEXT: cmp r0, #02580; CHECK-NEXT: itt ne2581; CHECK-NEXT: movne r6, #02582; CHECK-NEXT: movne r7, #02583; CHECK-NEXT: vmov q0[2], q0[0], r7, r52584; CHECK-NEXT: vmov q0[3], q0[1], r6, r42585; CHECK-NEXT: add sp, #162586; CHECK-NEXT: vpop {d8, d9}2587; CHECK-NEXT: add sp, #42588; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2589; CHECK-NEXT: .p2align 32590; CHECK-NEXT: @ %bb.1:2591; CHECK-NEXT: .LCPI34_0:2592; CHECK-NEXT: .long 0 @ double -40962593; CHECK-NEXT: .long 32327598082594; CHECK-NEXT: .LCPI34_1:2595; CHECK-NEXT: .long 0 @ double 40952596; CHECK-NEXT: .long 10852756482597 %x = call <2 x i13> @llvm.fptosi.sat.v2f64.v2i13(<2 x double> %f)2598 ret <2 x i13> %x2599}2600 2601define arm_aapcs_vfpcc <2 x i16> @test_signed_v2f64_v2i16(<2 x double> %f) {2602; CHECK-LABEL: test_signed_v2f64_v2i16:2603; CHECK: @ %bb.0:2604; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2605; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2606; CHECK-NEXT: .pad #42607; CHECK-NEXT: sub sp, #42608; CHECK-NEXT: .vsave {d8, d9}2609; CHECK-NEXT: vpush {d8, d9}2610; CHECK-NEXT: .pad #162611; CHECK-NEXT: sub sp, #162612; CHECK-NEXT: vmov q4, q02613; CHECK-NEXT: vldr d0, .LCPI35_02614; CHECK-NEXT: vmov r9, r8, d92615; CHECK-NEXT: vmov r7, r3, d02616; CHECK-NEXT: str r3, [sp, #12] @ 4-byte Spill2617; CHECK-NEXT: mov r0, r92618; CHECK-NEXT: mov r1, r82619; CHECK-NEXT: mov r2, r72620; CHECK-NEXT: bl __aeabi_dcmpge2621; CHECK-NEXT: mov r6, r02622; CHECK-NEXT: mov r0, r92623; CHECK-NEXT: mov r1, r82624; CHECK-NEXT: bl __aeabi_d2lz2625; CHECK-NEXT: vldr d0, .LCPI35_12626; CHECK-NEXT: mov r5, r02627; CHECK-NEXT: mov r4, r12628; CHECK-NEXT: mov r0, r92629; CHECK-NEXT: vmov r2, r3, d02630; CHECK-NEXT: mov r1, r82631; CHECK-NEXT: vmov r11, r10, d82632; CHECK-NEXT: cmp r6, #02633; CHECK-NEXT: strd r2, r3, [sp, #4] @ 8-byte Folded Spill2634; CHECK-NEXT: ittt eq2635; CHECK-NEXT: movweq r5, #327682636; CHECK-NEXT: movteq r5, #655352637; CHECK-NEXT: moveq.w r4, #-12638; CHECK-NEXT: bl __aeabi_dcmpgt2639; CHECK-NEXT: cmp r0, #02640; CHECK-NEXT: mov r0, r92641; CHECK-NEXT: mov r1, r82642; CHECK-NEXT: mov r2, r92643; CHECK-NEXT: mov r3, r82644; CHECK-NEXT: itt ne2645; CHECK-NEXT: movwne r5, #327672646; CHECK-NEXT: movne r4, #02647; CHECK-NEXT: bl __aeabi_dcmpun2648; CHECK-NEXT: cmp r0, #02649; CHECK-NEXT: itt ne2650; CHECK-NEXT: movne r4, #02651; CHECK-NEXT: movne r5, #02652; CHECK-NEXT: ldr r3, [sp, #12] @ 4-byte Reload2653; CHECK-NEXT: mov r0, r112654; CHECK-NEXT: mov r1, r102655; CHECK-NEXT: mov r2, r72656; CHECK-NEXT: bl __aeabi_dcmpge2657; CHECK-NEXT: mov r8, r02658; CHECK-NEXT: mov r0, r112659; CHECK-NEXT: mov r1, r102660; CHECK-NEXT: bl __aeabi_d2lz2661; CHECK-NEXT: mov r7, r02662; CHECK-NEXT: mov r6, r12663; CHECK-NEXT: cmp.w r8, #02664; CHECK-NEXT: ittt eq2665; CHECK-NEXT: movweq r7, #327682666; CHECK-NEXT: movteq r7, #655352667; CHECK-NEXT: moveq.w r6, #-12668; CHECK-NEXT: ldrd r2, r3, [sp, #4] @ 8-byte Folded Reload2669; CHECK-NEXT: mov r0, r112670; CHECK-NEXT: mov r1, r102671; CHECK-NEXT: bl __aeabi_dcmpgt2672; CHECK-NEXT: cmp r0, #02673; CHECK-NEXT: mov r0, r112674; CHECK-NEXT: mov r1, r102675; CHECK-NEXT: mov r2, r112676; CHECK-NEXT: mov r3, r102677; CHECK-NEXT: itt ne2678; CHECK-NEXT: movne r6, #02679; CHECK-NEXT: movwne r7, #327672680; CHECK-NEXT: bl __aeabi_dcmpun2681; CHECK-NEXT: cmp r0, #02682; CHECK-NEXT: itt ne2683; CHECK-NEXT: movne r6, #02684; CHECK-NEXT: movne r7, #02685; CHECK-NEXT: vmov q0[2], q0[0], r7, r52686; CHECK-NEXT: vmov q0[3], q0[1], r6, r42687; CHECK-NEXT: add sp, #162688; CHECK-NEXT: vpop {d8, d9}2689; CHECK-NEXT: add sp, #42690; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2691; CHECK-NEXT: .p2align 32692; CHECK-NEXT: @ %bb.1:2693; CHECK-NEXT: .LCPI35_0:2694; CHECK-NEXT: .long 0 @ double -327682695; CHECK-NEXT: .long 32359055362696; CHECK-NEXT: .LCPI35_1:2697; CHECK-NEXT: .long 0 @ double 327672698; CHECK-NEXT: .long 10884218242699 %x = call <2 x i16> @llvm.fptosi.sat.v2f64.v2i16(<2 x double> %f)2700 ret <2 x i16> %x2701}2702 2703define arm_aapcs_vfpcc <2 x i19> @test_signed_v2f64_v2i19(<2 x double> %f) {2704; CHECK-LABEL: test_signed_v2f64_v2i19:2705; CHECK: @ %bb.0:2706; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2707; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2708; CHECK-NEXT: .pad #42709; CHECK-NEXT: sub sp, #42710; CHECK-NEXT: .vsave {d8, d9}2711; CHECK-NEXT: vpush {d8, d9}2712; CHECK-NEXT: .pad #242713; CHECK-NEXT: sub sp, #242714; CHECK-NEXT: vmov q4, q02715; CHECK-NEXT: vldr d0, .LCPI36_02716; CHECK-NEXT: vmov r5, r4, d92717; CHECK-NEXT: vmov r7, r6, d02718; CHECK-NEXT: mov r0, r52719; CHECK-NEXT: mov r1, r42720; CHECK-NEXT: mov r2, r72721; CHECK-NEXT: mov r3, r62722; CHECK-NEXT: strd r5, r4, [sp, #12] @ 8-byte Folded Spill2723; CHECK-NEXT: bl __aeabi_dcmpge2724; CHECK-NEXT: str r0, [sp, #4] @ 4-byte Spill2725; CHECK-NEXT: mov r0, r52726; CHECK-NEXT: mov r1, r42727; CHECK-NEXT: bl __aeabi_d2lz2728; CHECK-NEXT: vldr d0, .LCPI36_12729; CHECK-NEXT: mov r8, r02730; CHECK-NEXT: vmov r11, r5, d82731; CHECK-NEXT: mov r9, r12732; CHECK-NEXT: vmov r10, r0, d02733; CHECK-NEXT: mov r2, r72734; CHECK-NEXT: mov r3, r62735; CHECK-NEXT: str r0, [sp, #20] @ 4-byte Spill2736; CHECK-NEXT: ldr r0, [sp, #4] @ 4-byte Reload2737; CHECK-NEXT: mov r1, r52738; CHECK-NEXT: cmp r0, #02739; CHECK-NEXT: mov r0, r112740; CHECK-NEXT: ittt eq2741; CHECK-NEXT: movweq r8, #02742; CHECK-NEXT: movteq r8, #655322743; CHECK-NEXT: moveq.w r9, #-12744; CHECK-NEXT: bl __aeabi_dcmpge2745; CHECK-NEXT: mov r4, r02746; CHECK-NEXT: mov r0, r112747; CHECK-NEXT: mov r1, r52748; CHECK-NEXT: str r5, [sp, #8] @ 4-byte Spill2749; CHECK-NEXT: bl __aeabi_d2lz2750; CHECK-NEXT: mov r7, r02751; CHECK-NEXT: mov r6, r12752; CHECK-NEXT: cmp r4, #02753; CHECK-NEXT: ittt eq2754; CHECK-NEXT: moveq r7, #02755; CHECK-NEXT: movteq r7, #655322756; CHECK-NEXT: moveq.w r6, #-12757; CHECK-NEXT: ldr r3, [sp, #20] @ 4-byte Reload2758; CHECK-NEXT: mov r0, r112759; CHECK-NEXT: mov r1, r52760; CHECK-NEXT: mov r2, r102761; CHECK-NEXT: bl __aeabi_dcmpgt2762; CHECK-NEXT: cmp r0, #02763; CHECK-NEXT: ittt ne2764; CHECK-NEXT: movne r6, #02765; CHECK-NEXT: movwne r7, #655352766; CHECK-NEXT: movtne r7, #32767; CHECK-NEXT: ldr r5, [sp, #12] @ 4-byte Reload2768; CHECK-NEXT: mov r2, r102769; CHECK-NEXT: ldr r4, [sp, #16] @ 4-byte Reload2770; CHECK-NEXT: ldr r3, [sp, #20] @ 4-byte Reload2771; CHECK-NEXT: mov r0, r52772; CHECK-NEXT: mov r1, r42773; CHECK-NEXT: bl __aeabi_dcmpgt2774; CHECK-NEXT: cmp r0, #02775; CHECK-NEXT: mov r0, r52776; CHECK-NEXT: mov r1, r42777; CHECK-NEXT: mov r2, r52778; CHECK-NEXT: mov r3, r42779; CHECK-NEXT: ittt ne2780; CHECK-NEXT: movne.w r9, #02781; CHECK-NEXT: movwne r8, #655352782; CHECK-NEXT: movtne r8, #32783; CHECK-NEXT: bl __aeabi_dcmpun2784; CHECK-NEXT: cmp r0, #02785; CHECK-NEXT: itt ne2786; CHECK-NEXT: movne.w r9, #02787; CHECK-NEXT: movne.w r8, #02788; CHECK-NEXT: ldr r1, [sp, #8] @ 4-byte Reload2789; CHECK-NEXT: mov r0, r112790; CHECK-NEXT: mov r2, r112791; CHECK-NEXT: mov r3, r12792; CHECK-NEXT: bl __aeabi_dcmpun2793; CHECK-NEXT: cmp r0, #02794; CHECK-NEXT: itt ne2795; CHECK-NEXT: movne r6, #02796; CHECK-NEXT: movne r7, #02797; CHECK-NEXT: vmov q0[2], q0[0], r7, r82798; CHECK-NEXT: vmov q0[3], q0[1], r6, r92799; CHECK-NEXT: add sp, #242800; CHECK-NEXT: vpop {d8, d9}2801; CHECK-NEXT: add sp, #42802; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2803; CHECK-NEXT: .p2align 32804; CHECK-NEXT: @ %bb.1:2805; CHECK-NEXT: .LCPI36_0:2806; CHECK-NEXT: .long 0 @ double -2621442807; CHECK-NEXT: .long 32390512642808; CHECK-NEXT: .LCPI36_1:2809; CHECK-NEXT: .long 0 @ double 2621432810; CHECK-NEXT: .long 10915676082811 %x = call <2 x i19> @llvm.fptosi.sat.v2f64.v2i19(<2 x double> %f)2812 ret <2 x i19> %x2813}2814 2815define arm_aapcs_vfpcc <2 x i32> @test_signed_v2f64_v2i32_duplicate(<2 x double> %f) {2816; CHECK-LABEL: test_signed_v2f64_v2i32_duplicate:2817; CHECK: @ %bb.0:2818; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2819; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2820; CHECK-NEXT: .pad #42821; CHECK-NEXT: sub sp, #42822; CHECK-NEXT: .vsave {d8, d9}2823; CHECK-NEXT: vpush {d8, d9}2824; CHECK-NEXT: .pad #162825; CHECK-NEXT: sub sp, #162826; CHECK-NEXT: vmov q4, q02827; CHECK-NEXT: vldr d0, .LCPI37_02828; CHECK-NEXT: vmov r9, r8, d92829; CHECK-NEXT: vmov r7, r3, d02830; CHECK-NEXT: str r3, [sp, #12] @ 4-byte Spill2831; CHECK-NEXT: mov r0, r92832; CHECK-NEXT: mov r1, r82833; CHECK-NEXT: mov r2, r72834; CHECK-NEXT: bl __aeabi_dcmpge2835; CHECK-NEXT: mov r6, r02836; CHECK-NEXT: mov r0, r92837; CHECK-NEXT: mov r1, r82838; CHECK-NEXT: bl __aeabi_d2lz2839; CHECK-NEXT: vldr d0, .LCPI37_12840; CHECK-NEXT: mov r5, r02841; CHECK-NEXT: mov r4, r12842; CHECK-NEXT: mov r0, r92843; CHECK-NEXT: vmov r2, r3, d02844; CHECK-NEXT: mov r1, r82845; CHECK-NEXT: vmov r11, r10, d82846; CHECK-NEXT: cmp r6, #02847; CHECK-NEXT: strd r2, r3, [sp, #4] @ 8-byte Folded Spill2848; CHECK-NEXT: itt eq2849; CHECK-NEXT: moveq.w r4, #-12850; CHECK-NEXT: moveq.w r5, #-21474836482851; CHECK-NEXT: bl __aeabi_dcmpgt2852; CHECK-NEXT: cmp r0, #02853; CHECK-NEXT: mov r0, r92854; CHECK-NEXT: mov r1, r82855; CHECK-NEXT: mov r2, r92856; CHECK-NEXT: mov r3, r82857; CHECK-NEXT: itt ne2858; CHECK-NEXT: mvnne r5, #-21474836482859; CHECK-NEXT: movne r4, #02860; CHECK-NEXT: bl __aeabi_dcmpun2861; CHECK-NEXT: cmp r0, #02862; CHECK-NEXT: itt ne2863; CHECK-NEXT: movne r4, #02864; CHECK-NEXT: movne r5, #02865; CHECK-NEXT: ldr r3, [sp, #12] @ 4-byte Reload2866; CHECK-NEXT: mov r0, r112867; CHECK-NEXT: mov r1, r102868; CHECK-NEXT: mov r2, r72869; CHECK-NEXT: bl __aeabi_dcmpge2870; CHECK-NEXT: mov r8, r02871; CHECK-NEXT: mov r0, r112872; CHECK-NEXT: mov r1, r102873; CHECK-NEXT: bl __aeabi_d2lz2874; CHECK-NEXT: mov r7, r02875; CHECK-NEXT: mov r6, r12876; CHECK-NEXT: cmp.w r8, #02877; CHECK-NEXT: itt eq2878; CHECK-NEXT: moveq.w r7, #-21474836482879; CHECK-NEXT: moveq.w r6, #-12880; CHECK-NEXT: ldrd r2, r3, [sp, #4] @ 8-byte Folded Reload2881; CHECK-NEXT: mov r0, r112882; CHECK-NEXT: mov r1, r102883; CHECK-NEXT: bl __aeabi_dcmpgt2884; CHECK-NEXT: cmp r0, #02885; CHECK-NEXT: mov r0, r112886; CHECK-NEXT: mov r1, r102887; CHECK-NEXT: mov r2, r112888; CHECK-NEXT: mov r3, r102889; CHECK-NEXT: itt ne2890; CHECK-NEXT: movne r6, #02891; CHECK-NEXT: mvnne r7, #-21474836482892; CHECK-NEXT: bl __aeabi_dcmpun2893; CHECK-NEXT: cmp r0, #02894; CHECK-NEXT: itt ne2895; CHECK-NEXT: movne r7, #02896; CHECK-NEXT: movne r6, #02897; CHECK-NEXT: vmov q0[2], q0[0], r7, r52898; CHECK-NEXT: vmov q0[3], q0[1], r6, r42899; CHECK-NEXT: add sp, #162900; CHECK-NEXT: vpop {d8, d9}2901; CHECK-NEXT: add sp, #42902; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}2903; CHECK-NEXT: .p2align 32904; CHECK-NEXT: @ %bb.1:2905; CHECK-NEXT: .LCPI37_0:2906; CHECK-NEXT: .long 0 @ double -21474836482907; CHECK-NEXT: .long 32526827522908; CHECK-NEXT: .LCPI37_1:2909; CHECK-NEXT: .long 4290772992 @ double 21474836472910; CHECK-NEXT: .long 11051991032911 %x = call <2 x i32> @llvm.fptosi.sat.v2f64.v2i32(<2 x double> %f)2912 ret <2 x i32> %x2913}2914 2915define arm_aapcs_vfpcc <2 x i50> @test_signed_v2f64_v2i50(<2 x double> %f) {2916; CHECK-LABEL: test_signed_v2f64_v2i50:2917; CHECK: @ %bb.0:2918; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}2919; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}2920; CHECK-NEXT: .pad #42921; CHECK-NEXT: sub sp, #42922; CHECK-NEXT: .vsave {d8, d9}2923; CHECK-NEXT: vpush {d8, d9}2924; CHECK-NEXT: .pad #162925; CHECK-NEXT: sub sp, #162926; CHECK-NEXT: vmov q4, q02927; CHECK-NEXT: vldr d0, .LCPI38_02928; CHECK-NEXT: vmov r5, r4, d92929; CHECK-NEXT: vmov r6, r7, d02930; CHECK-NEXT: mov r0, r52931; CHECK-NEXT: mov r1, r42932; CHECK-NEXT: mov r2, r62933; CHECK-NEXT: mov r3, r72934; CHECK-NEXT: strd r4, r5, [sp, #8] @ 8-byte Folded Spill2935; CHECK-NEXT: bl __aeabi_dcmpge2936; CHECK-NEXT: mov r11, r02937; CHECK-NEXT: mov r0, r52938; CHECK-NEXT: mov r1, r42939; CHECK-NEXT: bl __aeabi_d2lz2940; CHECK-NEXT: vmov r5, r10, d82941; CHECK-NEXT: vldr d0, .LCPI38_12942; CHECK-NEXT: cmp.w r11, #02943; CHECK-NEXT: mov r4, r12944; CHECK-NEXT: vmov r9, r8, d02945; CHECK-NEXT: csel r11, r0, r11, ne2946; CHECK-NEXT: mov r2, r62947; CHECK-NEXT: mov r3, r72948; CHECK-NEXT: mov r0, r52949; CHECK-NEXT: mov r1, r102950; CHECK-NEXT: str.w r9, [sp, #4] @ 4-byte Spill2951; CHECK-NEXT: itt eq2952; CHECK-NEXT: moveq r4, #02953; CHECK-NEXT: movteq r4, #655342954; CHECK-NEXT: bl __aeabi_dcmpge2955; CHECK-NEXT: mov r7, r02956; CHECK-NEXT: mov r0, r52957; CHECK-NEXT: mov r1, r102958; CHECK-NEXT: bl __aeabi_d2lz2959; CHECK-NEXT: cmp r7, #02960; CHECK-NEXT: mov r6, r12961; CHECK-NEXT: csel r7, r0, r7, ne2962; CHECK-NEXT: mov r0, r52963; CHECK-NEXT: mov r1, r102964; CHECK-NEXT: mov r2, r92965; CHECK-NEXT: mov r3, r82966; CHECK-NEXT: itt eq2967; CHECK-NEXT: moveq r6, #02968; CHECK-NEXT: movteq r6, #655342969; CHECK-NEXT: bl __aeabi_dcmpgt2970; CHECK-NEXT: cmp r0, #02971; CHECK-NEXT: ittt ne2972; CHECK-NEXT: movne.w r7, #-12973; CHECK-NEXT: movwne r6, #655352974; CHECK-NEXT: movtne r6, #12975; CHECK-NEXT: ldrd r9, r0, [sp, #8] @ 8-byte Folded Reload2976; CHECK-NEXT: mov r3, r82977; CHECK-NEXT: ldr r2, [sp, #4] @ 4-byte Reload2978; CHECK-NEXT: mov r1, r92979; CHECK-NEXT: bl __aeabi_dcmpgt2980; CHECK-NEXT: cmp r0, #02981; CHECK-NEXT: ittt ne2982; CHECK-NEXT: movne.w r11, #-12983; CHECK-NEXT: movwne r4, #655352984; CHECK-NEXT: movtne r4, #12985; CHECK-NEXT: ldr r0, [sp, #12] @ 4-byte Reload2986; CHECK-NEXT: mov r1, r92987; CHECK-NEXT: mov r3, r92988; CHECK-NEXT: mov r2, r02989; CHECK-NEXT: bl __aeabi_dcmpun2990; CHECK-NEXT: cmp r0, #02991; CHECK-NEXT: mov r0, r52992; CHECK-NEXT: mov r1, r102993; CHECK-NEXT: mov r2, r52994; CHECK-NEXT: mov r3, r102995; CHECK-NEXT: itt ne2996; CHECK-NEXT: movne.w r11, #02997; CHECK-NEXT: movne r4, #02998; CHECK-NEXT: bl __aeabi_dcmpun2999; CHECK-NEXT: cmp r0, #03000; CHECK-NEXT: it ne3001; CHECK-NEXT: movne r7, #03002; CHECK-NEXT: vmov q0[2], q0[0], r7, r113003; CHECK-NEXT: it ne3004; CHECK-NEXT: movne r6, #03005; CHECK-NEXT: vmov q0[3], q0[1], r6, r43006; CHECK-NEXT: add sp, #163007; CHECK-NEXT: vpop {d8, d9}3008; CHECK-NEXT: add sp, #43009; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}3010; CHECK-NEXT: .p2align 33011; CHECK-NEXT: @ %bb.1:3012; CHECK-NEXT: .LCPI38_0:3013; CHECK-NEXT: .long 0 @ double -5629499534213123014; CHECK-NEXT: .long 32715571203015; CHECK-NEXT: .LCPI38_1:3016; CHECK-NEXT: .long 4294967280 @ double 5629499534213113017; CHECK-NEXT: .long 11240734713018 %x = call <2 x i50> @llvm.fptosi.sat.v2f64.v2i50(<2 x double> %f)3019 ret <2 x i50> %x3020}3021 3022define arm_aapcs_vfpcc <2 x i64> @test_signed_v2f64_v2i64(<2 x double> %f) {3023; CHECK-LABEL: test_signed_v2f64_v2i64:3024; CHECK: @ %bb.0:3025; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3026; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}3027; CHECK-NEXT: .pad #43028; CHECK-NEXT: sub sp, #43029; CHECK-NEXT: .vsave {d8, d9}3030; CHECK-NEXT: vpush {d8, d9}3031; CHECK-NEXT: .pad #83032; CHECK-NEXT: sub sp, #83033; CHECK-NEXT: vmov q4, q03034; CHECK-NEXT: vldr d0, .LCPI39_03035; CHECK-NEXT: vmov r8, r7, d93036; CHECK-NEXT: vmov r11, r5, d03037; CHECK-NEXT: mov r0, r83038; CHECK-NEXT: mov r1, r73039; CHECK-NEXT: mov r2, r113040; CHECK-NEXT: mov r3, r53041; CHECK-NEXT: bl __aeabi_dcmpge3042; CHECK-NEXT: mov r9, r03043; CHECK-NEXT: mov r0, r83044; CHECK-NEXT: mov r1, r73045; CHECK-NEXT: bl __aeabi_d2lz3046; CHECK-NEXT: vldr d0, .LCPI39_13047; CHECK-NEXT: cmp.w r9, #03048; CHECK-NEXT: mov r4, r13049; CHECK-NEXT: csel r9, r0, r9, ne3050; CHECK-NEXT: vmov r2, r3, d03051; CHECK-NEXT: mov r0, r83052; CHECK-NEXT: mov r1, r73053; CHECK-NEXT: vmov r6, r10, d83054; CHECK-NEXT: strd r2, r3, [sp] @ 8-byte Folded Spill3055; CHECK-NEXT: it eq3056; CHECK-NEXT: moveq.w r4, #-21474836483057; CHECK-NEXT: bl __aeabi_dcmpgt3058; CHECK-NEXT: cmp r0, #03059; CHECK-NEXT: mov r0, r83060; CHECK-NEXT: mov r1, r73061; CHECK-NEXT: mov r2, r83062; CHECK-NEXT: mov r3, r73063; CHECK-NEXT: itt ne3064; CHECK-NEXT: movne.w r9, #-13065; CHECK-NEXT: mvnne r4, #-21474836483066; CHECK-NEXT: bl __aeabi_dcmpun3067; CHECK-NEXT: cmp r0, #03068; CHECK-NEXT: mov r0, r63069; CHECK-NEXT: mov r1, r103070; CHECK-NEXT: mov r2, r113071; CHECK-NEXT: mov r3, r53072; CHECK-NEXT: itt ne3073; CHECK-NEXT: movne r4, #03074; CHECK-NEXT: movne.w r9, #03075; CHECK-NEXT: bl __aeabi_dcmpge3076; CHECK-NEXT: mov r5, r03077; CHECK-NEXT: mov r0, r63078; CHECK-NEXT: mov r1, r103079; CHECK-NEXT: bl __aeabi_d2lz3080; CHECK-NEXT: mov r7, r13081; CHECK-NEXT: cmp r5, #03082; CHECK-NEXT: it eq3083; CHECK-NEXT: moveq.w r7, #-21474836483084; CHECK-NEXT: ldrd r2, r3, [sp] @ 8-byte Folded Reload3085; CHECK-NEXT: csel r5, r0, r5, ne3086; CHECK-NEXT: mov r0, r63087; CHECK-NEXT: mov r1, r103088; CHECK-NEXT: bl __aeabi_dcmpgt3089; CHECK-NEXT: cmp r0, #03090; CHECK-NEXT: mov r0, r63091; CHECK-NEXT: mov r1, r103092; CHECK-NEXT: mov r2, r63093; CHECK-NEXT: mov r3, r103094; CHECK-NEXT: itt ne3095; CHECK-NEXT: mvnne r7, #-21474836483096; CHECK-NEXT: movne.w r5, #-13097; CHECK-NEXT: bl __aeabi_dcmpun3098; CHECK-NEXT: cmp r0, #03099; CHECK-NEXT: itt ne3100; CHECK-NEXT: movne r5, #03101; CHECK-NEXT: movne r7, #03102; CHECK-NEXT: vmov q0[2], q0[0], r5, r93103; CHECK-NEXT: vmov q0[3], q0[1], r7, r43104; CHECK-NEXT: add sp, #83105; CHECK-NEXT: vpop {d8, d9}3106; CHECK-NEXT: add sp, #43107; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}3108; CHECK-NEXT: .p2align 33109; CHECK-NEXT: @ %bb.1:3110; CHECK-NEXT: .LCPI39_0:3111; CHECK-NEXT: .long 0 @ double -9.2233720368547758E+183112; CHECK-NEXT: .long 32862371843113; CHECK-NEXT: .LCPI39_1:3114; CHECK-NEXT: .long 4294967295 @ double 9.2233720368547748E+183115; CHECK-NEXT: .long 11387535353116 %x = call <2 x i64> @llvm.fptosi.sat.v2f64.v2i64(<2 x double> %f)3117 ret <2 x i64> %x3118}3119 3120define arm_aapcs_vfpcc <2 x i100> @test_signed_v2f64_v2i100(<2 x double> %f) {3121; CHECK-LABEL: test_signed_v2f64_v2i100:3122; CHECK: @ %bb.0:3123; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3124; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}3125; CHECK-NEXT: .pad #43126; CHECK-NEXT: sub sp, #43127; CHECK-NEXT: .vsave {d8, d9}3128; CHECK-NEXT: vpush {d8, d9}3129; CHECK-NEXT: .pad #483130; CHECK-NEXT: sub sp, #483131; CHECK-NEXT: vmov q4, q03132; CHECK-NEXT: vldr d0, .LCPI40_03133; CHECK-NEXT: vmov r7, r6, d83134; CHECK-NEXT: mov r8, r03135; CHECK-NEXT: vmov r10, r9, d03136; CHECK-NEXT: mov r0, r73137; CHECK-NEXT: mov r1, r63138; CHECK-NEXT: mov r2, r103139; CHECK-NEXT: mov r3, r93140; CHECK-NEXT: bl __aeabi_dcmpge3141; CHECK-NEXT: mov r4, r03142; CHECK-NEXT: mov r0, r73143; CHECK-NEXT: mov r1, r63144; CHECK-NEXT: bl __fixdfti3145; CHECK-NEXT: vldr d0, .LCPI40_13146; CHECK-NEXT: cmp r4, #03147; CHECK-NEXT: strd r1, r0, [sp, #16] @ 8-byte Folded Spill3148; CHECK-NEXT: csel r4, r2, r4, ne3149; CHECK-NEXT: vmov r5, r11, d03150; CHECK-NEXT: str r3, [sp, #32] @ 4-byte Spill3151; CHECK-NEXT: mov r0, r73152; CHECK-NEXT: mov r1, r63153; CHECK-NEXT: mov r2, r53154; CHECK-NEXT: mov r3, r113155; CHECK-NEXT: bl __aeabi_dcmpgt3156; CHECK-NEXT: cmp r0, #03157; CHECK-NEXT: mov r0, r73158; CHECK-NEXT: mov r1, r63159; CHECK-NEXT: mov r2, r73160; CHECK-NEXT: mov r3, r63161; CHECK-NEXT: it ne3162; CHECK-NEXT: movne.w r4, #-13163; CHECK-NEXT: bl __aeabi_dcmpun3164; CHECK-NEXT: cmp r0, #03165; CHECK-NEXT: mov r0, r73166; CHECK-NEXT: mov r1, r63167; CHECK-NEXT: mov r2, r103168; CHECK-NEXT: mov r3, r93169; CHECK-NEXT: it ne3170; CHECK-NEXT: movne r4, #03171; CHECK-NEXT: str.w r8, [sp, #44] @ 4-byte Spill3172; CHECK-NEXT: str.w r4, [r8, #8]3173; CHECK-NEXT: str.w r9, [sp, #36] @ 4-byte Spill3174; CHECK-NEXT: bl __aeabi_dcmpge3175; CHECK-NEXT: ldr r1, [sp, #16] @ 4-byte Reload3176; CHECK-NEXT: cmp r0, #03177; CHECK-NEXT: mov r2, r53178; CHECK-NEXT: mov r3, r113179; CHECK-NEXT: csel r4, r1, r0, ne3180; CHECK-NEXT: mov r0, r73181; CHECK-NEXT: mov r1, r63182; CHECK-NEXT: str.w r11, [sp, #40] @ 4-byte Spill3183; CHECK-NEXT: bl __aeabi_dcmpgt3184; CHECK-NEXT: cmp r0, #03185; CHECK-NEXT: mov r0, r73186; CHECK-NEXT: mov r1, r63187; CHECK-NEXT: mov r2, r73188; CHECK-NEXT: mov r3, r63189; CHECK-NEXT: it ne3190; CHECK-NEXT: movne.w r4, #-13191; CHECK-NEXT: bl __aeabi_dcmpun3192; CHECK-NEXT: cmp r0, #03193; CHECK-NEXT: mov r0, r73194; CHECK-NEXT: mov r1, r63195; CHECK-NEXT: mov r2, r103196; CHECK-NEXT: mov r3, r93197; CHECK-NEXT: it ne3198; CHECK-NEXT: movne r4, #03199; CHECK-NEXT: str.w r4, [r8, #4]3200; CHECK-NEXT: bl __aeabi_dcmpge3201; CHECK-NEXT: ldr r1, [sp, #20] @ 4-byte Reload3202; CHECK-NEXT: cmp r0, #03203; CHECK-NEXT: mov r2, r53204; CHECK-NEXT: mov r3, r113205; CHECK-NEXT: csel r4, r1, r0, ne3206; CHECK-NEXT: mov r0, r73207; CHECK-NEXT: mov r1, r63208; CHECK-NEXT: bl __aeabi_dcmpgt3209; CHECK-NEXT: cmp r0, #03210; CHECK-NEXT: mov r0, r73211; CHECK-NEXT: mov r1, r63212; CHECK-NEXT: mov r2, r73213; CHECK-NEXT: mov r3, r63214; CHECK-NEXT: it ne3215; CHECK-NEXT: movne.w r4, #-13216; CHECK-NEXT: str r7, [sp, #24] @ 4-byte Spill3217; CHECK-NEXT: str r6, [sp, #28] @ 4-byte Spill3218; CHECK-NEXT: bl __aeabi_dcmpun3219; CHECK-NEXT: vmov r9, r8, d93220; CHECK-NEXT: cmp r0, #03221; CHECK-NEXT: it ne3222; CHECK-NEXT: movne r4, #03223; CHECK-NEXT: ldr r0, [sp, #44] @ 4-byte Reload3224; CHECK-NEXT: mov r2, r103225; CHECK-NEXT: str r4, [r0]3226; CHECK-NEXT: ldr.w r11, [sp, #36] @ 4-byte Reload3227; CHECK-NEXT: mov r3, r113228; CHECK-NEXT: mov r0, r93229; CHECK-NEXT: mov r1, r83230; CHECK-NEXT: bl __aeabi_dcmpge3231; CHECK-NEXT: mov r4, r03232; CHECK-NEXT: mov r0, r93233; CHECK-NEXT: mov r1, r83234; CHECK-NEXT: bl __fixdfti3235; CHECK-NEXT: cmp r4, #03236; CHECK-NEXT: strd r2, r3, [sp, #12] @ 8-byte Folded Spill3237; CHECK-NEXT: csel r7, r1, r4, ne3238; CHECK-NEXT: mov r4, r53239; CHECK-NEXT: str r5, [sp, #4] @ 4-byte Spill3240; CHECK-NEXT: mov r2, r53241; CHECK-NEXT: ldr r5, [sp, #40] @ 4-byte Reload3242; CHECK-NEXT: mov r6, r03243; CHECK-NEXT: mov r0, r93244; CHECK-NEXT: mov r1, r83245; CHECK-NEXT: mov r3, r53246; CHECK-NEXT: bl __aeabi_dcmpgt3247; CHECK-NEXT: cmp r0, #03248; CHECK-NEXT: mov r0, r93249; CHECK-NEXT: mov r1, r83250; CHECK-NEXT: mov r2, r93251; CHECK-NEXT: mov r3, r83252; CHECK-NEXT: it ne3253; CHECK-NEXT: movne.w r7, #-13254; CHECK-NEXT: bl __aeabi_dcmpun3255; CHECK-NEXT: cmp r0, #03256; CHECK-NEXT: mov r0, r93257; CHECK-NEXT: mov r1, r83258; CHECK-NEXT: mov r2, r103259; CHECK-NEXT: mov r3, r113260; CHECK-NEXT: it ne3261; CHECK-NEXT: movne r7, #03262; CHECK-NEXT: bl __aeabi_dcmpge3263; CHECK-NEXT: cmp r0, #03264; CHECK-NEXT: mov r1, r83265; CHECK-NEXT: csel r6, r6, r0, ne3266; CHECK-NEXT: mov r0, r93267; CHECK-NEXT: mov r2, r43268; CHECK-NEXT: mov r3, r53269; CHECK-NEXT: bl __aeabi_dcmpgt3270; CHECK-NEXT: cmp r0, #03271; CHECK-NEXT: mov r0, r93272; CHECK-NEXT: mov r1, r83273; CHECK-NEXT: mov r2, r93274; CHECK-NEXT: mov r3, r83275; CHECK-NEXT: it ne3276; CHECK-NEXT: movne.w r6, #-13277; CHECK-NEXT: bl __aeabi_dcmpun3278; CHECK-NEXT: cmp r0, #03279; CHECK-NEXT: mov r0, r63280; CHECK-NEXT: it ne3281; CHECK-NEXT: movne r0, #03282; CHECK-NEXT: ldr r1, [sp, #44] @ 4-byte Reload3283; CHECK-NEXT: str r0, [sp, #20] @ 4-byte Spill3284; CHECK-NEXT: lsrl r0, r7, #283285; CHECK-NEXT: mov r2, r103286; CHECK-NEXT: mov r3, r113287; CHECK-NEXT: str r0, [r1, #16]3288; CHECK-NEXT: mov r0, r93289; CHECK-NEXT: mov r1, r83290; CHECK-NEXT: str.w r10, [sp, #8] @ 4-byte Spill3291; CHECK-NEXT: mov r6, r113292; CHECK-NEXT: bl __aeabi_dcmpge3293; CHECK-NEXT: ldr r5, [sp, #4] @ 4-byte Reload3294; CHECK-NEXT: cmp r0, #03295; CHECK-NEXT: ldr.w r11, [sp, #40] @ 4-byte Reload3296; CHECK-NEXT: ldr r1, [sp, #12] @ 4-byte Reload3297; CHECK-NEXT: mov r2, r53298; CHECK-NEXT: csel r4, r1, r0, ne3299; CHECK-NEXT: mov r0, r93300; CHECK-NEXT: mov r1, r83301; CHECK-NEXT: mov r3, r113302; CHECK-NEXT: bl __aeabi_dcmpgt3303; CHECK-NEXT: cmp r0, #03304; CHECK-NEXT: mov r0, r93305; CHECK-NEXT: mov r1, r83306; CHECK-NEXT: mov r2, r93307; CHECK-NEXT: mov r3, r83308; CHECK-NEXT: it ne3309; CHECK-NEXT: movne.w r4, #-13310; CHECK-NEXT: bl __aeabi_dcmpun3311; CHECK-NEXT: cmp r0, #03312; CHECK-NEXT: it ne3313; CHECK-NEXT: movne r4, #03314; CHECK-NEXT: orr.w r0, r7, r4, lsl #43315; CHECK-NEXT: ldr r7, [sp, #44] @ 4-byte Reload3316; CHECK-NEXT: mov r1, r83317; CHECK-NEXT: mov r2, r103318; CHECK-NEXT: mov r3, r63319; CHECK-NEXT: str r0, [r7, #20]3320; CHECK-NEXT: mov r0, r93321; CHECK-NEXT: bl __aeabi_dcmpge3322; CHECK-NEXT: cmp r0, #03323; CHECK-NEXT: ldr r6, [sp, #16] @ 4-byte Reload3324; CHECK-NEXT: mov r0, r93325; CHECK-NEXT: mov r1, r83326; CHECK-NEXT: mov r2, r53327; CHECK-NEXT: mov r3, r113328; CHECK-NEXT: it eq3329; CHECK-NEXT: mvneq r6, #73330; CHECK-NEXT: mov r10, r53331; CHECK-NEXT: bl __aeabi_dcmpgt3332; CHECK-NEXT: cmp r0, #03333; CHECK-NEXT: mov r0, r93334; CHECK-NEXT: mov r1, r83335; CHECK-NEXT: mov r2, r93336; CHECK-NEXT: mov r3, r83337; CHECK-NEXT: it ne3338; CHECK-NEXT: movne r6, #73339; CHECK-NEXT: bl __aeabi_dcmpun3340; CHECK-NEXT: cmp r0, #03341; CHECK-NEXT: mov r0, r63342; CHECK-NEXT: it ne3343; CHECK-NEXT: movne r0, #03344; CHECK-NEXT: and r1, r0, #153345; CHECK-NEXT: lsrl r4, r1, #283346; CHECK-NEXT: strb r4, [r7, #24]3347; CHECK-NEXT: ldr r5, [sp, #24] @ 4-byte Reload3348; CHECK-NEXT: ldr r6, [sp, #28] @ 4-byte Reload3349; CHECK-NEXT: ldr r2, [sp, #8] @ 4-byte Reload3350; CHECK-NEXT: ldr r3, [sp, #36] @ 4-byte Reload3351; CHECK-NEXT: mov r0, r53352; CHECK-NEXT: mov r1, r63353; CHECK-NEXT: bl __aeabi_dcmpge3354; CHECK-NEXT: cmp r0, #03355; CHECK-NEXT: ldr r4, [sp, #32] @ 4-byte Reload3356; CHECK-NEXT: mov r0, r53357; CHECK-NEXT: mov r1, r63358; CHECK-NEXT: mov r2, r103359; CHECK-NEXT: mov r3, r113360; CHECK-NEXT: it eq3361; CHECK-NEXT: mvneq r4, #73362; CHECK-NEXT: bl __aeabi_dcmpgt3363; CHECK-NEXT: cmp r0, #03364; CHECK-NEXT: mov r0, r53365; CHECK-NEXT: mov r1, r63366; CHECK-NEXT: mov r2, r53367; CHECK-NEXT: mov r3, r63368; CHECK-NEXT: it ne3369; CHECK-NEXT: movne r4, #73370; CHECK-NEXT: bl __aeabi_dcmpun3371; CHECK-NEXT: cmp r0, #03372; CHECK-NEXT: mov r0, r43373; CHECK-NEXT: it ne3374; CHECK-NEXT: movne r0, #03375; CHECK-NEXT: ldr r1, [sp, #20] @ 4-byte Reload3376; CHECK-NEXT: and r0, r0, #153377; CHECK-NEXT: orr.w r0, r0, r1, lsl #43378; CHECK-NEXT: str r0, [r7, #12]3379; CHECK-NEXT: add sp, #483380; CHECK-NEXT: vpop {d8, d9}3381; CHECK-NEXT: add sp, #43382; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}3383; CHECK-NEXT: .p2align 33384; CHECK-NEXT: @ %bb.1:3385; CHECK-NEXT: .LCPI40_0:3386; CHECK-NEXT: .long 0 @ double -6.338253001141147E+293387; CHECK-NEXT: .long 33239859203388; CHECK-NEXT: .LCPI40_1:3389; CHECK-NEXT: .long 4294967295 @ double 6.3382530011411463E+293390; CHECK-NEXT: .long 11765022713391 %x = call <2 x i100> @llvm.fptosi.sat.v2f64.v2i100(<2 x double> %f)3392 ret <2 x i100> %x3393}3394 3395define arm_aapcs_vfpcc <2 x i128> @test_signed_v2f64_v2i128(<2 x double> %f) {3396; CHECK-LABEL: test_signed_v2f64_v2i128:3397; CHECK: @ %bb.0:3398; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}3399; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}3400; CHECK-NEXT: .pad #43401; CHECK-NEXT: sub sp, #43402; CHECK-NEXT: .vsave {d8, d9}3403; CHECK-NEXT: vpush {d8, d9}3404; CHECK-NEXT: .pad #323405; CHECK-NEXT: sub sp, #323406; CHECK-NEXT: vmov q4, q03407; CHECK-NEXT: vldr d0, .LCPI41_03408; CHECK-NEXT: vmov r8, r7, d93409; CHECK-NEXT: mov r9, r03410; CHECK-NEXT: vmov r2, r3, d03411; CHECK-NEXT: str r3, [sp, #16] @ 4-byte Spill3412; CHECK-NEXT: mov r0, r83413; CHECK-NEXT: mov r1, r73414; CHECK-NEXT: mov r4, r23415; CHECK-NEXT: bl __aeabi_dcmpge3416; CHECK-NEXT: mov r6, r03417; CHECK-NEXT: mov r0, r83418; CHECK-NEXT: mov r1, r73419; CHECK-NEXT: bl __fixdfti3420; CHECK-NEXT: vldr d0, .LCPI41_13421; CHECK-NEXT: mov r5, r33422; CHECK-NEXT: strd r1, r0, [sp, #8] @ 8-byte Folded Spill3423; CHECK-NEXT: mov r0, r83424; CHECK-NEXT: vmov r10, r11, d03425; CHECK-NEXT: str r2, [sp] @ 4-byte Spill3426; CHECK-NEXT: mov r1, r73427; CHECK-NEXT: cmp r6, #03428; CHECK-NEXT: it eq3429; CHECK-NEXT: moveq.w r5, #-21474836483430; CHECK-NEXT: str.w r11, [sp, #20] @ 4-byte Spill3431; CHECK-NEXT: mov r2, r103432; CHECK-NEXT: mov r3, r113433; CHECK-NEXT: bl __aeabi_dcmpgt3434; CHECK-NEXT: cmp r0, #03435; CHECK-NEXT: mov r0, r83436; CHECK-NEXT: mov r1, r73437; CHECK-NEXT: mov r2, r83438; CHECK-NEXT: mov r3, r73439; CHECK-NEXT: it ne3440; CHECK-NEXT: mvnne r5, #-21474836483441; CHECK-NEXT: bl __aeabi_dcmpun3442; CHECK-NEXT: cmp r0, #03443; CHECK-NEXT: it ne3444; CHECK-NEXT: movne r5, #03445; CHECK-NEXT: str.w r5, [r9, #28]3446; CHECK-NEXT: mov r0, r83447; CHECK-NEXT: ldr r6, [sp, #16] @ 4-byte Reload3448; CHECK-NEXT: mov r1, r73449; CHECK-NEXT: mov r2, r43450; CHECK-NEXT: str r4, [sp, #24] @ 4-byte Spill3451; CHECK-NEXT: mov r3, r63452; CHECK-NEXT: bl __aeabi_dcmpge3453; CHECK-NEXT: ldr r1, [sp] @ 4-byte Reload3454; CHECK-NEXT: cmp r0, #03455; CHECK-NEXT: mov r2, r103456; CHECK-NEXT: mov r3, r113457; CHECK-NEXT: csel r5, r1, r0, ne3458; CHECK-NEXT: mov r0, r83459; CHECK-NEXT: mov r1, r73460; CHECK-NEXT: str.w r10, [sp, #28] @ 4-byte Spill3461; CHECK-NEXT: bl __aeabi_dcmpgt3462; CHECK-NEXT: cmp r0, #03463; CHECK-NEXT: mov r0, r83464; CHECK-NEXT: mov r1, r73465; CHECK-NEXT: mov r2, r83466; CHECK-NEXT: mov r3, r73467; CHECK-NEXT: it ne3468; CHECK-NEXT: movne.w r5, #-13469; CHECK-NEXT: bl __aeabi_dcmpun3470; CHECK-NEXT: cmp r0, #03471; CHECK-NEXT: mov r0, r83472; CHECK-NEXT: mov r1, r73473; CHECK-NEXT: mov r2, r43474; CHECK-NEXT: mov r3, r63475; CHECK-NEXT: it ne3476; CHECK-NEXT: movne r5, #03477; CHECK-NEXT: str.w r5, [r9, #24]3478; CHECK-NEXT: mov r11, r63479; CHECK-NEXT: bl __aeabi_dcmpge3480; CHECK-NEXT: ldr r1, [sp, #8] @ 4-byte Reload3481; CHECK-NEXT: cmp r0, #03482; CHECK-NEXT: ldr r3, [sp, #20] @ 4-byte Reload3483; CHECK-NEXT: mov r2, r103484; CHECK-NEXT: csel r4, r1, r0, ne3485; CHECK-NEXT: mov r0, r83486; CHECK-NEXT: mov r1, r73487; CHECK-NEXT: bl __aeabi_dcmpgt3488; CHECK-NEXT: cmp r0, #03489; CHECK-NEXT: mov r0, r83490; CHECK-NEXT: mov r1, r73491; CHECK-NEXT: mov r2, r83492; CHECK-NEXT: mov r3, r73493; CHECK-NEXT: it ne3494; CHECK-NEXT: movne.w r4, #-13495; CHECK-NEXT: bl __aeabi_dcmpun3496; CHECK-NEXT: cmp r0, #03497; CHECK-NEXT: it ne3498; CHECK-NEXT: movne r4, #03499; CHECK-NEXT: str.w r4, [r9, #20]3500; CHECK-NEXT: mov r0, r83501; CHECK-NEXT: ldr r2, [sp, #24] @ 4-byte Reload3502; CHECK-NEXT: mov r1, r73503; CHECK-NEXT: mov r3, r113504; CHECK-NEXT: vmov r6, r5, d83505; CHECK-NEXT: mov r10, r93506; CHECK-NEXT: str.w r9, [sp, #4] @ 4-byte Spill3507; CHECK-NEXT: mov r9, r113508; CHECK-NEXT: bl __aeabi_dcmpge3509; CHECK-NEXT: ldr.w r11, [sp, #20] @ 4-byte Reload3510; CHECK-NEXT: cmp r0, #03511; CHECK-NEXT: ldr r1, [sp, #12] @ 4-byte Reload3512; CHECK-NEXT: ldr r2, [sp, #28] @ 4-byte Reload3513; CHECK-NEXT: csel r4, r1, r0, ne3514; CHECK-NEXT: mov r0, r83515; CHECK-NEXT: mov r1, r73516; CHECK-NEXT: mov r3, r113517; CHECK-NEXT: bl __aeabi_dcmpgt3518; CHECK-NEXT: cmp r0, #03519; CHECK-NEXT: mov r0, r83520; CHECK-NEXT: mov r1, r73521; CHECK-NEXT: mov r2, r83522; CHECK-NEXT: mov r3, r73523; CHECK-NEXT: it ne3524; CHECK-NEXT: movne.w r4, #-13525; CHECK-NEXT: bl __aeabi_dcmpun3526; CHECK-NEXT: cmp r0, #03527; CHECK-NEXT: it ne3528; CHECK-NEXT: movne r4, #03529; CHECK-NEXT: str.w r4, [r10, #16]3530; CHECK-NEXT: mov r0, r63531; CHECK-NEXT: ldr.w r8, [sp, #24] @ 4-byte Reload3532; CHECK-NEXT: mov r1, r53533; CHECK-NEXT: mov r3, r93534; CHECK-NEXT: mov r2, r83535; CHECK-NEXT: bl __aeabi_dcmpge3536; CHECK-NEXT: mov r7, r03537; CHECK-NEXT: mov r0, r63538; CHECK-NEXT: mov r1, r53539; CHECK-NEXT: bl __fixdfti3540; CHECK-NEXT: mov r9, r33541; CHECK-NEXT: strd r1, r0, [sp, #8] @ 8-byte Folded Spill3542; CHECK-NEXT: cmp r7, #03543; CHECK-NEXT: it eq3544; CHECK-NEXT: moveq.w r9, #-21474836483545; CHECK-NEXT: ldr.w r10, [sp, #28] @ 4-byte Reload3546; CHECK-NEXT: mov r4, r23547; CHECK-NEXT: mov r0, r63548; CHECK-NEXT: mov r1, r53549; CHECK-NEXT: mov r3, r113550; CHECK-NEXT: mov r2, r103551; CHECK-NEXT: bl __aeabi_dcmpgt3552; CHECK-NEXT: cmp r0, #03553; CHECK-NEXT: mov r0, r63554; CHECK-NEXT: mov r1, r53555; CHECK-NEXT: mov r2, r63556; CHECK-NEXT: mov r3, r53557; CHECK-NEXT: it ne3558; CHECK-NEXT: mvnne r9, #-21474836483559; CHECK-NEXT: bl __aeabi_dcmpun3560; CHECK-NEXT: cmp r0, #03561; CHECK-NEXT: it ne3562; CHECK-NEXT: movne.w r9, #03563; CHECK-NEXT: ldr r7, [sp, #4] @ 4-byte Reload3564; CHECK-NEXT: mov r0, r63565; CHECK-NEXT: mov r1, r53566; CHECK-NEXT: mov r2, r83567; CHECK-NEXT: str.w r9, [r7, #12]3568; CHECK-NEXT: ldr.w r9, [sp, #16] @ 4-byte Reload3569; CHECK-NEXT: mov r3, r93570; CHECK-NEXT: bl __aeabi_dcmpge3571; CHECK-NEXT: cmp r0, #03572; CHECK-NEXT: mov r1, r53573; CHECK-NEXT: csel r4, r4, r0, ne3574; CHECK-NEXT: mov r0, r63575; CHECK-NEXT: mov r2, r103576; CHECK-NEXT: mov r3, r113577; CHECK-NEXT: bl __aeabi_dcmpgt3578; CHECK-NEXT: cmp r0, #03579; CHECK-NEXT: mov r0, r63580; CHECK-NEXT: mov r1, r53581; CHECK-NEXT: mov r2, r63582; CHECK-NEXT: mov r3, r53583; CHECK-NEXT: it ne3584; CHECK-NEXT: movne.w r4, #-13585; CHECK-NEXT: bl __aeabi_dcmpun3586; CHECK-NEXT: cmp r0, #03587; CHECK-NEXT: mov r0, r63588; CHECK-NEXT: mov r1, r53589; CHECK-NEXT: mov r2, r83590; CHECK-NEXT: mov r3, r93591; CHECK-NEXT: it ne3592; CHECK-NEXT: movne r4, #03593; CHECK-NEXT: str r4, [r7, #8]3594; CHECK-NEXT: bl __aeabi_dcmpge3595; CHECK-NEXT: ldr r1, [sp, #8] @ 4-byte Reload3596; CHECK-NEXT: cmp r0, #03597; CHECK-NEXT: mov r2, r103598; CHECK-NEXT: mov r3, r113599; CHECK-NEXT: csel r4, r1, r0, ne3600; CHECK-NEXT: mov r0, r63601; CHECK-NEXT: mov r1, r53602; CHECK-NEXT: bl __aeabi_dcmpgt3603; CHECK-NEXT: cmp r0, #03604; CHECK-NEXT: mov r0, r63605; CHECK-NEXT: mov r1, r53606; CHECK-NEXT: mov r2, r63607; CHECK-NEXT: mov r3, r53608; CHECK-NEXT: it ne3609; CHECK-NEXT: movne.w r4, #-13610; CHECK-NEXT: bl __aeabi_dcmpun3611; CHECK-NEXT: cmp r0, #03612; CHECK-NEXT: mov r0, r63613; CHECK-NEXT: mov r1, r53614; CHECK-NEXT: mov r2, r83615; CHECK-NEXT: mov r3, r93616; CHECK-NEXT: it ne3617; CHECK-NEXT: movne r4, #03618; CHECK-NEXT: str r4, [r7, #4]3619; CHECK-NEXT: bl __aeabi_dcmpge3620; CHECK-NEXT: ldr r1, [sp, #12] @ 4-byte Reload3621; CHECK-NEXT: cmp r0, #03622; CHECK-NEXT: mov r2, r103623; CHECK-NEXT: mov r3, r113624; CHECK-NEXT: csel r4, r1, r0, ne3625; CHECK-NEXT: mov r0, r63626; CHECK-NEXT: mov r1, r53627; CHECK-NEXT: bl __aeabi_dcmpgt3628; CHECK-NEXT: cmp r0, #03629; CHECK-NEXT: mov r0, r63630; CHECK-NEXT: mov r1, r53631; CHECK-NEXT: mov r2, r63632; CHECK-NEXT: mov r3, r53633; CHECK-NEXT: it ne3634; CHECK-NEXT: movne.w r4, #-13635; CHECK-NEXT: bl __aeabi_dcmpun3636; CHECK-NEXT: cmp r0, #03637; CHECK-NEXT: it ne3638; CHECK-NEXT: movne r4, #03639; CHECK-NEXT: str r4, [r7]3640; CHECK-NEXT: add sp, #323641; CHECK-NEXT: vpop {d8, d9}3642; CHECK-NEXT: add sp, #43643; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}3644; CHECK-NEXT: .p2align 33645; CHECK-NEXT: @ %bb.1:3646; CHECK-NEXT: .LCPI41_0:3647; CHECK-NEXT: .long 0 @ double -1.7014118346046923E+383648; CHECK-NEXT: .long 33533460483649; CHECK-NEXT: .LCPI41_1:3650; CHECK-NEXT: .long 4294967295 @ double 1.7014118346046921E+383651; CHECK-NEXT: .long 12058623993652 %x = call <2 x i128> @llvm.fptosi.sat.v2f64.v2i128(<2 x double> %f)3653 ret <2 x i128> %x3654}3655 3656;3657; 4-Vector half to signed integer -- result size variation3658;3659 3660declare <8 x i1> @llvm.fptosi.sat.v8f16.v8i1 (<8 x half>)3661declare <8 x i8> @llvm.fptosi.sat.v8f16.v8i8 (<8 x half>)3662declare <8 x i13> @llvm.fptosi.sat.v8f16.v8i13 (<8 x half>)3663declare <8 x i16> @llvm.fptosi.sat.v8f16.v8i16 (<8 x half>)3664declare <8 x i19> @llvm.fptosi.sat.v8f16.v8i19 (<8 x half>)3665declare <8 x i50> @llvm.fptosi.sat.v8f16.v8i50 (<8 x half>)3666declare <8 x i64> @llvm.fptosi.sat.v8f16.v8i64 (<8 x half>)3667declare <8 x i100> @llvm.fptosi.sat.v8f16.v8i100(<8 x half>)3668declare <8 x i128> @llvm.fptosi.sat.v8f16.v8i128(<8 x half>)3669 3670define arm_aapcs_vfpcc <8 x i1> @test_signed_v8f16_v8i1(<8 x half> %f) {3671; CHECK-LABEL: test_signed_v8f16_v8i1:3672; CHECK: @ %bb.0:3673; CHECK-NEXT: .vsave {d8}3674; CHECK-NEXT: vpush {d8}3675; CHECK-NEXT: vcvtb.f32.f16 s15, s03676; CHECK-NEXT: vmov.f32 s7, #-1.000000e+003677; CHECK-NEXT: vldr s5, .LCPI42_03678; CHECK-NEXT: vmaxnm.f32 s16, s15, s73679; CHECK-NEXT: vcvtt.f32.f16 s12, s23680; CHECK-NEXT: vcvtt.f32.f16 s9, s13681; CHECK-NEXT: vminnm.f32 s16, s16, s53682; CHECK-NEXT: vcvtt.f32.f16 s4, s33683; CHECK-NEXT: vcvt.s32.f32 s16, s163684; CHECK-NEXT: vcvtb.f32.f16 s8, s33685; CHECK-NEXT: vcvtb.f32.f16 s2, s23686; CHECK-NEXT: vcvtb.f32.f16 s1, s13687; CHECK-NEXT: vcvtt.f32.f16 s0, s03688; CHECK-NEXT: vmaxnm.f32 s6, s4, s73689; CHECK-NEXT: vmaxnm.f32 s10, s8, s73690; CHECK-NEXT: vmaxnm.f32 s14, s12, s73691; CHECK-NEXT: vmaxnm.f32 s3, s2, s73692; CHECK-NEXT: vmaxnm.f32 s11, s9, s73693; CHECK-NEXT: vmaxnm.f32 s13, s1, s73694; CHECK-NEXT: vmaxnm.f32 s7, s0, s73695; CHECK-NEXT: vminnm.f32 s6, s6, s53696; CHECK-NEXT: vminnm.f32 s10, s10, s53697; CHECK-NEXT: vminnm.f32 s14, s14, s53698; CHECK-NEXT: vminnm.f32 s3, s3, s53699; CHECK-NEXT: vminnm.f32 s11, s11, s53700; CHECK-NEXT: vminnm.f32 s13, s13, s53701; CHECK-NEXT: vminnm.f32 s5, s7, s53702; CHECK-NEXT: vcmp.f32 s15, s153703; CHECK-NEXT: vcvt.s32.f32 s5, s53704; CHECK-NEXT: vmrs APSR_nzcv, fpscr3705; CHECK-NEXT: vmov r2, s163706; CHECK-NEXT: mov.w r1, #03707; CHECK-NEXT: it vs3708; CHECK-NEXT: movvs r2, #03709; CHECK-NEXT: vcvt.s32.f32 s13, s133710; CHECK-NEXT: and r2, r2, #13711; CHECK-NEXT: vcmp.f32 s0, s03712; CHECK-NEXT: rsbs r2, r2, #03713; CHECK-NEXT: vmrs APSR_nzcv, fpscr3714; CHECK-NEXT: bfi r1, r2, #0, #13715; CHECK-NEXT: vcvt.s32.f32 s11, s113716; CHECK-NEXT: vcmp.f32 s1, s13717; CHECK-NEXT: vmov r2, s53718; CHECK-NEXT: it vs3719; CHECK-NEXT: movvs r2, #03720; CHECK-NEXT: vmrs APSR_nzcv, fpscr3721; CHECK-NEXT: and r2, r2, #13722; CHECK-NEXT: vcvt.s32.f32 s3, s33723; CHECK-NEXT: rsb.w r2, r2, #03724; CHECK-NEXT: vcmp.f32 s9, s93725; CHECK-NEXT: bfi r1, r2, #1, #13726; CHECK-NEXT: vmov r2, s133727; CHECK-NEXT: it vs3728; CHECK-NEXT: movvs r2, #03729; CHECK-NEXT: vmrs APSR_nzcv, fpscr3730; CHECK-NEXT: and r2, r2, #13731; CHECK-NEXT: vcvt.s32.f32 s14, s143732; CHECK-NEXT: rsb.w r2, r2, #03733; CHECK-NEXT: vcmp.f32 s2, s23734; CHECK-NEXT: bfi r1, r2, #2, #13735; CHECK-NEXT: vmov r2, s113736; CHECK-NEXT: it vs3737; CHECK-NEXT: movvs r2, #03738; CHECK-NEXT: vmrs APSR_nzcv, fpscr3739; CHECK-NEXT: and r2, r2, #13740; CHECK-NEXT: vcvt.s32.f32 s10, s103741; CHECK-NEXT: rsb.w r2, r2, #03742; CHECK-NEXT: vcmp.f32 s12, s123743; CHECK-NEXT: bfi r1, r2, #3, #13744; CHECK-NEXT: vmov r2, s33745; CHECK-NEXT: it vs3746; CHECK-NEXT: movvs r2, #03747; CHECK-NEXT: vmrs APSR_nzcv, fpscr3748; CHECK-NEXT: and r2, r2, #13749; CHECK-NEXT: vcvt.s32.f32 s6, s63750; CHECK-NEXT: rsb.w r2, r2, #03751; CHECK-NEXT: vcmp.f32 s8, s83752; CHECK-NEXT: bfi r1, r2, #4, #13753; CHECK-NEXT: vmov r2, s143754; CHECK-NEXT: it vs3755; CHECK-NEXT: movvs r2, #03756; CHECK-NEXT: vmrs APSR_nzcv, fpscr3757; CHECK-NEXT: and r2, r2, #13758; CHECK-NEXT: vcmp.f32 s4, s43759; CHECK-NEXT: rsb.w r2, r2, #03760; CHECK-NEXT: bfi r1, r2, #5, #13761; CHECK-NEXT: vmov r2, s103762; CHECK-NEXT: it vs3763; CHECK-NEXT: movvs r2, #03764; CHECK-NEXT: vmrs APSR_nzcv, fpscr3765; CHECK-NEXT: and r2, r2, #13766; CHECK-NEXT: rsb.w r2, r2, #03767; CHECK-NEXT: bfi r1, r2, #6, #13768; CHECK-NEXT: vmov r2, s63769; CHECK-NEXT: it vs3770; CHECK-NEXT: movvs r2, #03771; CHECK-NEXT: and r2, r2, #13772; CHECK-NEXT: rsbs r2, r2, #03773; CHECK-NEXT: bfi r1, r2, #7, #13774; CHECK-NEXT: strb r1, [r0]3775; CHECK-NEXT: vpop {d8}3776; CHECK-NEXT: bx lr3777; CHECK-NEXT: .p2align 23778; CHECK-NEXT: @ %bb.1:3779; CHECK-NEXT: .LCPI42_0:3780; CHECK-NEXT: .long 0x00000000 @ float 03781 %x = call <8 x i1> @llvm.fptosi.sat.v8f16.v8i1(<8 x half> %f)3782 ret <8 x i1> %x3783}3784 3785define arm_aapcs_vfpcc <8 x i8> @test_signed_v8f16_v8i8(<8 x half> %f) {3786; CHECK-MVE-LABEL: test_signed_v8f16_v8i8:3787; CHECK-MVE: @ %bb.0:3788; CHECK-MVE-NEXT: .save {r4, r5, r7, lr}3789; CHECK-MVE-NEXT: push {r4, r5, r7, lr}3790; CHECK-MVE-NEXT: .vsave {d8}3791; CHECK-MVE-NEXT: vpush {d8}3792; CHECK-MVE-NEXT: vldr s6, .LCPI43_13793; CHECK-MVE-NEXT: vcvtt.f32.f16 s13, s33794; CHECK-MVE-NEXT: vcvtb.f32.f16 s3, s33795; CHECK-MVE-NEXT: vldr s4, .LCPI43_03796; CHECK-MVE-NEXT: vmaxnm.f32 s16, s3, s63797; CHECK-MVE-NEXT: vcvtt.f32.f16 s7, s23798; CHECK-MVE-NEXT: vmaxnm.f32 s15, s13, s63799; CHECK-MVE-NEXT: vminnm.f32 s16, s16, s43800; CHECK-MVE-NEXT: vcvtb.f32.f16 s2, s23801; CHECK-MVE-NEXT: vminnm.f32 s15, s15, s43802; CHECK-MVE-NEXT: vmaxnm.f32 s11, s2, s63803; CHECK-MVE-NEXT: vcvt.s32.f32 s16, s163804; CHECK-MVE-NEXT: vcvtt.f32.f16 s12, s13805; CHECK-MVE-NEXT: vmaxnm.f32 s9, s7, s63806; CHECK-MVE-NEXT: vminnm.f32 s11, s11, s43807; CHECK-MVE-NEXT: vcvtb.f32.f16 s1, s13808; CHECK-MVE-NEXT: vcvt.s32.f32 s15, s153809; CHECK-MVE-NEXT: vcvtb.f32.f16 s8, s03810; CHECK-MVE-NEXT: vmaxnm.f32 s5, s1, s63811; CHECK-MVE-NEXT: vminnm.f32 s9, s9, s43812; CHECK-MVE-NEXT: vcvt.s32.f32 s11, s113813; CHECK-MVE-NEXT: vmaxnm.f32 s10, s8, s63814; CHECK-MVE-NEXT: vmaxnm.f32 s14, s12, s63815; CHECK-MVE-NEXT: vminnm.f32 s5, s5, s43816; CHECK-MVE-NEXT: vcvt.s32.f32 s9, s93817; CHECK-MVE-NEXT: vcvtt.f32.f16 s0, s03818; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s43819; CHECK-MVE-NEXT: vminnm.f32 s14, s14, s43820; CHECK-MVE-NEXT: vcvt.s32.f32 s5, s53821; CHECK-MVE-NEXT: vmaxnm.f32 s6, s0, s63822; CHECK-MVE-NEXT: vminnm.f32 s4, s6, s43823; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s103824; CHECK-MVE-NEXT: vcvt.s32.f32 s14, s143825; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s43826; CHECK-MVE-NEXT: vcmp.f32 s3, s33827; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3828; CHECK-MVE-NEXT: vmov r12, s163829; CHECK-MVE-NEXT: vcmp.f32 s13, s133830; CHECK-MVE-NEXT: it vs3831; CHECK-MVE-NEXT: movvs.w r12, #03832; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3833; CHECK-MVE-NEXT: vmov lr, s153834; CHECK-MVE-NEXT: vcmp.f32 s2, s23835; CHECK-MVE-NEXT: it vs3836; CHECK-MVE-NEXT: movvs.w lr, #03837; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3838; CHECK-MVE-NEXT: vmov r2, s113839; CHECK-MVE-NEXT: vcmp.f32 s7, s73840; CHECK-MVE-NEXT: it vs3841; CHECK-MVE-NEXT: movvs r2, #03842; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3843; CHECK-MVE-NEXT: vmov r3, s93844; CHECK-MVE-NEXT: vcmp.f32 s1, s13845; CHECK-MVE-NEXT: it vs3846; CHECK-MVE-NEXT: movvs r3, #03847; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3848; CHECK-MVE-NEXT: vmov r0, s53849; CHECK-MVE-NEXT: vcmp.f32 s12, s123850; CHECK-MVE-NEXT: it vs3851; CHECK-MVE-NEXT: movvs r0, #03852; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3853; CHECK-MVE-NEXT: vmov r1, s143854; CHECK-MVE-NEXT: vmov r4, s103855; CHECK-MVE-NEXT: it vs3856; CHECK-MVE-NEXT: movvs r1, #03857; CHECK-MVE-NEXT: vcmp.f32 s8, s83858; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3859; CHECK-MVE-NEXT: it vs3860; CHECK-MVE-NEXT: movvs r4, #03861; CHECK-MVE-NEXT: vcmp.f32 s0, s03862; CHECK-MVE-NEXT: vmov.16 q0[0], r43863; CHECK-MVE-NEXT: vmov r5, s43864; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3865; CHECK-MVE-NEXT: it vs3866; CHECK-MVE-NEXT: movvs r5, #03867; CHECK-MVE-NEXT: vmov.16 q0[1], r53868; CHECK-MVE-NEXT: vmov.16 q0[2], r03869; CHECK-MVE-NEXT: vmov.16 q0[3], r13870; CHECK-MVE-NEXT: vmov.16 q0[4], r23871; CHECK-MVE-NEXT: vmov.16 q0[5], r33872; CHECK-MVE-NEXT: vmov.16 q0[6], r123873; CHECK-MVE-NEXT: vmov.16 q0[7], lr3874; CHECK-MVE-NEXT: vpop {d8}3875; CHECK-MVE-NEXT: pop {r4, r5, r7, pc}3876; CHECK-MVE-NEXT: .p2align 23877; CHECK-MVE-NEXT: @ %bb.1:3878; CHECK-MVE-NEXT: .LCPI43_0:3879; CHECK-MVE-NEXT: .long 0x42fe0000 @ float 1273880; CHECK-MVE-NEXT: .LCPI43_1:3881; CHECK-MVE-NEXT: .long 0xc3000000 @ float -1283882;3883; CHECK-MVEFP-LABEL: test_signed_v8f16_v8i8:3884; CHECK-MVEFP: @ %bb.0:3885; CHECK-MVEFP-NEXT: vcvt.s16.f16 q0, q03886; CHECK-MVEFP-NEXT: vqmovnb.s16 q0, q03887; CHECK-MVEFP-NEXT: vmovlb.s8 q0, q03888; CHECK-MVEFP-NEXT: bx lr3889 %x = call <8 x i8> @llvm.fptosi.sat.v8f16.v8i8(<8 x half> %f)3890 ret <8 x i8> %x3891}3892 3893define arm_aapcs_vfpcc <8 x i13> @test_signed_v8f16_v8i13(<8 x half> %f) {3894; CHECK-MVE-LABEL: test_signed_v8f16_v8i13:3895; CHECK-MVE: @ %bb.0:3896; CHECK-MVE-NEXT: .save {r4, r5, r7, lr}3897; CHECK-MVE-NEXT: push {r4, r5, r7, lr}3898; CHECK-MVE-NEXT: .vsave {d8}3899; CHECK-MVE-NEXT: vpush {d8}3900; CHECK-MVE-NEXT: vldr s6, .LCPI44_13901; CHECK-MVE-NEXT: vcvtt.f32.f16 s13, s33902; CHECK-MVE-NEXT: vcvtb.f32.f16 s3, s33903; CHECK-MVE-NEXT: vldr s4, .LCPI44_03904; CHECK-MVE-NEXT: vmaxnm.f32 s16, s3, s63905; CHECK-MVE-NEXT: vcvtt.f32.f16 s7, s23906; CHECK-MVE-NEXT: vmaxnm.f32 s15, s13, s63907; CHECK-MVE-NEXT: vminnm.f32 s16, s16, s43908; CHECK-MVE-NEXT: vcvtb.f32.f16 s2, s23909; CHECK-MVE-NEXT: vminnm.f32 s15, s15, s43910; CHECK-MVE-NEXT: vmaxnm.f32 s11, s2, s63911; CHECK-MVE-NEXT: vcvt.s32.f32 s16, s163912; CHECK-MVE-NEXT: vcvtt.f32.f16 s12, s13913; CHECK-MVE-NEXT: vmaxnm.f32 s9, s7, s63914; CHECK-MVE-NEXT: vminnm.f32 s11, s11, s43915; CHECK-MVE-NEXT: vcvtb.f32.f16 s1, s13916; CHECK-MVE-NEXT: vcvt.s32.f32 s15, s153917; CHECK-MVE-NEXT: vcvtb.f32.f16 s8, s03918; CHECK-MVE-NEXT: vmaxnm.f32 s5, s1, s63919; CHECK-MVE-NEXT: vminnm.f32 s9, s9, s43920; CHECK-MVE-NEXT: vcvt.s32.f32 s11, s113921; CHECK-MVE-NEXT: vmaxnm.f32 s10, s8, s63922; CHECK-MVE-NEXT: vmaxnm.f32 s14, s12, s63923; CHECK-MVE-NEXT: vminnm.f32 s5, s5, s43924; CHECK-MVE-NEXT: vcvt.s32.f32 s9, s93925; CHECK-MVE-NEXT: vcvtt.f32.f16 s0, s03926; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s43927; CHECK-MVE-NEXT: vminnm.f32 s14, s14, s43928; CHECK-MVE-NEXT: vcvt.s32.f32 s5, s53929; CHECK-MVE-NEXT: vmaxnm.f32 s6, s0, s63930; CHECK-MVE-NEXT: vminnm.f32 s4, s6, s43931; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s103932; CHECK-MVE-NEXT: vcvt.s32.f32 s14, s143933; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s43934; CHECK-MVE-NEXT: vcmp.f32 s3, s33935; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3936; CHECK-MVE-NEXT: vmov r12, s163937; CHECK-MVE-NEXT: vcmp.f32 s13, s133938; CHECK-MVE-NEXT: it vs3939; CHECK-MVE-NEXT: movvs.w r12, #03940; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3941; CHECK-MVE-NEXT: vmov lr, s153942; CHECK-MVE-NEXT: vcmp.f32 s2, s23943; CHECK-MVE-NEXT: it vs3944; CHECK-MVE-NEXT: movvs.w lr, #03945; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3946; CHECK-MVE-NEXT: vmov r2, s113947; CHECK-MVE-NEXT: vcmp.f32 s7, s73948; CHECK-MVE-NEXT: it vs3949; CHECK-MVE-NEXT: movvs r2, #03950; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3951; CHECK-MVE-NEXT: vmov r3, s93952; CHECK-MVE-NEXT: vcmp.f32 s1, s13953; CHECK-MVE-NEXT: it vs3954; CHECK-MVE-NEXT: movvs r3, #03955; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3956; CHECK-MVE-NEXT: vmov r0, s53957; CHECK-MVE-NEXT: vcmp.f32 s12, s123958; CHECK-MVE-NEXT: it vs3959; CHECK-MVE-NEXT: movvs r0, #03960; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3961; CHECK-MVE-NEXT: vmov r1, s143962; CHECK-MVE-NEXT: vmov r4, s103963; CHECK-MVE-NEXT: it vs3964; CHECK-MVE-NEXT: movvs r1, #03965; CHECK-MVE-NEXT: vcmp.f32 s8, s83966; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3967; CHECK-MVE-NEXT: it vs3968; CHECK-MVE-NEXT: movvs r4, #03969; CHECK-MVE-NEXT: vcmp.f32 s0, s03970; CHECK-MVE-NEXT: vmov.16 q0[0], r43971; CHECK-MVE-NEXT: vmov r5, s43972; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr3973; CHECK-MVE-NEXT: it vs3974; CHECK-MVE-NEXT: movvs r5, #03975; CHECK-MVE-NEXT: vmov.16 q0[1], r53976; CHECK-MVE-NEXT: vmov.16 q0[2], r03977; CHECK-MVE-NEXT: vmov.16 q0[3], r13978; CHECK-MVE-NEXT: vmov.16 q0[4], r23979; CHECK-MVE-NEXT: vmov.16 q0[5], r33980; CHECK-MVE-NEXT: vmov.16 q0[6], r123981; CHECK-MVE-NEXT: vmov.16 q0[7], lr3982; CHECK-MVE-NEXT: vpop {d8}3983; CHECK-MVE-NEXT: pop {r4, r5, r7, pc}3984; CHECK-MVE-NEXT: .p2align 23985; CHECK-MVE-NEXT: @ %bb.1:3986; CHECK-MVE-NEXT: .LCPI44_0:3987; CHECK-MVE-NEXT: .long 0x457ff000 @ float 40953988; CHECK-MVE-NEXT: .LCPI44_1:3989; CHECK-MVE-NEXT: .long 0xc5800000 @ float -40963990;3991; CHECK-MVEFP-LABEL: test_signed_v8f16_v8i13:3992; CHECK-MVEFP: @ %bb.0:3993; CHECK-MVEFP-NEXT: vmvn.i16 q1, #0xf0003994; CHECK-MVEFP-NEXT: vcvt.s16.f16 q0, q03995; CHECK-MVEFP-NEXT: vmov.i16 q2, #0xf0003996; CHECK-MVEFP-NEXT: vmin.s16 q0, q0, q13997; CHECK-MVEFP-NEXT: vmax.s16 q0, q0, q23998; CHECK-MVEFP-NEXT: bx lr3999 %x = call <8 x i13> @llvm.fptosi.sat.v8f16.v8i13(<8 x half> %f)4000 ret <8 x i13> %x4001}4002 4003define arm_aapcs_vfpcc <8 x i16> @test_signed_v8f16_v8i16(<8 x half> %f) {4004; CHECK-MVE-LABEL: test_signed_v8f16_v8i16:4005; CHECK-MVE: @ %bb.0:4006; CHECK-MVE-NEXT: .save {r4, r5, r7, lr}4007; CHECK-MVE-NEXT: push {r4, r5, r7, lr}4008; CHECK-MVE-NEXT: .vsave {d8}4009; CHECK-MVE-NEXT: vpush {d8}4010; CHECK-MVE-NEXT: vldr s6, .LCPI45_14011; CHECK-MVE-NEXT: vcvtt.f32.f16 s13, s34012; CHECK-MVE-NEXT: vcvtb.f32.f16 s3, s34013; CHECK-MVE-NEXT: vldr s4, .LCPI45_04014; CHECK-MVE-NEXT: vmaxnm.f32 s16, s3, s64015; CHECK-MVE-NEXT: vcvtt.f32.f16 s7, s24016; CHECK-MVE-NEXT: vmaxnm.f32 s15, s13, s64017; CHECK-MVE-NEXT: vminnm.f32 s16, s16, s44018; CHECK-MVE-NEXT: vcvtb.f32.f16 s2, s24019; CHECK-MVE-NEXT: vminnm.f32 s15, s15, s44020; CHECK-MVE-NEXT: vmaxnm.f32 s11, s2, s64021; CHECK-MVE-NEXT: vcvt.s32.f32 s16, s164022; CHECK-MVE-NEXT: vcvtt.f32.f16 s12, s14023; CHECK-MVE-NEXT: vmaxnm.f32 s9, s7, s64024; CHECK-MVE-NEXT: vminnm.f32 s11, s11, s44025; CHECK-MVE-NEXT: vcvtb.f32.f16 s1, s14026; CHECK-MVE-NEXT: vcvt.s32.f32 s15, s154027; CHECK-MVE-NEXT: vcvtb.f32.f16 s8, s04028; CHECK-MVE-NEXT: vmaxnm.f32 s5, s1, s64029; CHECK-MVE-NEXT: vminnm.f32 s9, s9, s44030; CHECK-MVE-NEXT: vcvt.s32.f32 s11, s114031; CHECK-MVE-NEXT: vmaxnm.f32 s10, s8, s64032; CHECK-MVE-NEXT: vmaxnm.f32 s14, s12, s64033; CHECK-MVE-NEXT: vminnm.f32 s5, s5, s44034; CHECK-MVE-NEXT: vcvt.s32.f32 s9, s94035; CHECK-MVE-NEXT: vcvtt.f32.f16 s0, s04036; CHECK-MVE-NEXT: vminnm.f32 s10, s10, s44037; CHECK-MVE-NEXT: vminnm.f32 s14, s14, s44038; CHECK-MVE-NEXT: vcvt.s32.f32 s5, s54039; CHECK-MVE-NEXT: vmaxnm.f32 s6, s0, s64040; CHECK-MVE-NEXT: vminnm.f32 s4, s6, s44041; CHECK-MVE-NEXT: vcvt.s32.f32 s10, s104042; CHECK-MVE-NEXT: vcvt.s32.f32 s14, s144043; CHECK-MVE-NEXT: vcvt.s32.f32 s4, s44044; CHECK-MVE-NEXT: vcmp.f32 s3, s34045; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4046; CHECK-MVE-NEXT: vmov r12, s164047; CHECK-MVE-NEXT: vcmp.f32 s13, s134048; CHECK-MVE-NEXT: it vs4049; CHECK-MVE-NEXT: movvs.w r12, #04050; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4051; CHECK-MVE-NEXT: vmov lr, s154052; CHECK-MVE-NEXT: vcmp.f32 s2, s24053; CHECK-MVE-NEXT: it vs4054; CHECK-MVE-NEXT: movvs.w lr, #04055; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4056; CHECK-MVE-NEXT: vmov r2, s114057; CHECK-MVE-NEXT: vcmp.f32 s7, s74058; CHECK-MVE-NEXT: it vs4059; CHECK-MVE-NEXT: movvs r2, #04060; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4061; CHECK-MVE-NEXT: vmov r3, s94062; CHECK-MVE-NEXT: vcmp.f32 s1, s14063; CHECK-MVE-NEXT: it vs4064; CHECK-MVE-NEXT: movvs r3, #04065; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4066; CHECK-MVE-NEXT: vmov r0, s54067; CHECK-MVE-NEXT: vcmp.f32 s12, s124068; CHECK-MVE-NEXT: it vs4069; CHECK-MVE-NEXT: movvs r0, #04070; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4071; CHECK-MVE-NEXT: vmov r1, s144072; CHECK-MVE-NEXT: vmov r4, s104073; CHECK-MVE-NEXT: it vs4074; CHECK-MVE-NEXT: movvs r1, #04075; CHECK-MVE-NEXT: vcmp.f32 s8, s84076; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4077; CHECK-MVE-NEXT: it vs4078; CHECK-MVE-NEXT: movvs r4, #04079; CHECK-MVE-NEXT: vcmp.f32 s0, s04080; CHECK-MVE-NEXT: vmov.16 q0[0], r44081; CHECK-MVE-NEXT: vmov r5, s44082; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr4083; CHECK-MVE-NEXT: it vs4084; CHECK-MVE-NEXT: movvs r5, #04085; CHECK-MVE-NEXT: vmov.16 q0[1], r54086; CHECK-MVE-NEXT: vmov.16 q0[2], r04087; CHECK-MVE-NEXT: vmov.16 q0[3], r14088; CHECK-MVE-NEXT: vmov.16 q0[4], r24089; CHECK-MVE-NEXT: vmov.16 q0[5], r34090; CHECK-MVE-NEXT: vmov.16 q0[6], r124091; CHECK-MVE-NEXT: vmov.16 q0[7], lr4092; CHECK-MVE-NEXT: vpop {d8}4093; CHECK-MVE-NEXT: pop {r4, r5, r7, pc}4094; CHECK-MVE-NEXT: .p2align 24095; CHECK-MVE-NEXT: @ %bb.1:4096; CHECK-MVE-NEXT: .LCPI45_0:4097; CHECK-MVE-NEXT: .long 0x46fffe00 @ float 327674098; CHECK-MVE-NEXT: .LCPI45_1:4099; CHECK-MVE-NEXT: .long 0xc7000000 @ float -327684100;4101; CHECK-MVEFP-LABEL: test_signed_v8f16_v8i16:4102; CHECK-MVEFP: @ %bb.0:4103; CHECK-MVEFP-NEXT: vcvt.s16.f16 q0, q04104; CHECK-MVEFP-NEXT: bx lr4105 %x = call <8 x i16> @llvm.fptosi.sat.v8f16.v8i16(<8 x half> %f)4106 ret <8 x i16> %x4107}4108 4109define arm_aapcs_vfpcc <8 x i19> @test_signed_v8f16_v8i19(<8 x half> %f) {4110; CHECK-LABEL: test_signed_v8f16_v8i19:4111; CHECK: @ %bb.0:4112; CHECK-NEXT: .save {r4, r5, r7, r9, r11, lr}4113; CHECK-NEXT: push.w {r4, r5, r7, r9, r11, lr}4114; CHECK-NEXT: vldr s6, .LCPI46_14115; CHECK-NEXT: vcvtb.f32.f16 s12, s04116; CHECK-NEXT: vcvtt.f32.f16 s0, s04117; CHECK-NEXT: vldr s4, .LCPI46_04118; CHECK-NEXT: vmaxnm.f32 s5, s0, s64119; CHECK-NEXT: vmaxnm.f32 s14, s12, s64120; CHECK-NEXT: vminnm.f32 s5, s5, s44121; CHECK-NEXT: vcvtt.f32.f16 s8, s14122; CHECK-NEXT: vminnm.f32 s14, s14, s44123; CHECK-NEXT: vcvt.s32.f32 s5, s54124; CHECK-NEXT: vmaxnm.f32 s10, s8, s64125; CHECK-NEXT: vcvt.s32.f32 s14, s144126; CHECK-NEXT: vminnm.f32 s10, s10, s44127; CHECK-NEXT: vcvtb.f32.f16 s1, s14128; CHECK-NEXT: vcvt.s32.f32 s10, s104129; CHECK-NEXT: vmaxnm.f32 s7, s1, s64130; CHECK-NEXT: vminnm.f32 s7, s7, s44131; CHECK-NEXT: vcmp.f32 s0, s04132; CHECK-NEXT: vcvt.s32.f32 s7, s74133; CHECK-NEXT: vmrs APSR_nzcv, fpscr4134; CHECK-NEXT: vcmp.f32 s12, s124135; CHECK-NEXT: mov.w r7, #04136; CHECK-NEXT: vmov r2, s54137; CHECK-NEXT: vcvtb.f32.f16 s0, s24138; CHECK-NEXT: it vs4139; CHECK-NEXT: movvs r2, #04140; CHECK-NEXT: vmov r1, s144141; CHECK-NEXT: bfc r2, #19, #134142; CHECK-NEXT: vmrs APSR_nzcv, fpscr4143; CHECK-NEXT: it vs4144; CHECK-NEXT: movvs r1, #04145; CHECK-NEXT: vcmp.f32 s8, s84146; CHECK-NEXT: vmrs APSR_nzcv, fpscr4147; CHECK-NEXT: lsll r2, r7, #194148; CHECK-NEXT: bfc r1, #19, #134149; CHECK-NEXT: vmov r12, s104150; CHECK-NEXT: vcmp.f32 s1, s14151; CHECK-NEXT: vmaxnm.f32 s8, s0, s64152; CHECK-NEXT: orr.w r1, r1, r24153; CHECK-NEXT: str r1, [r0]4154; CHECK-NEXT: it vs4155; CHECK-NEXT: movvs.w r12, #04156; CHECK-NEXT: vmrs APSR_nzcv, fpscr4157; CHECK-NEXT: vcmp.f32 s0, s04158; CHECK-NEXT: vcvtt.f32.f16 s0, s24159; CHECK-NEXT: vmaxnm.f32 s2, s0, s64160; CHECK-NEXT: vminnm.f32 s8, s8, s44161; CHECK-NEXT: vminnm.f32 s2, s2, s44162; CHECK-NEXT: vmov r3, s74163; CHECK-NEXT: vcvt.s32.f32 s2, s24164; CHECK-NEXT: it vs4165; CHECK-NEXT: movvs r3, #04166; CHECK-NEXT: vcvt.s32.f32 s8, s84167; CHECK-NEXT: bfc r3, #19, #134168; CHECK-NEXT: mov r2, r124169; CHECK-NEXT: movs r1, #04170; CHECK-NEXT: bfc r2, #19, #134171; CHECK-NEXT: mov r4, r34172; CHECK-NEXT: mov.w r9, #04173; CHECK-NEXT: lsrl r2, r1, #74174; CHECK-NEXT: vmrs APSR_nzcv, fpscr4175; CHECK-NEXT: vcmp.f32 s0, s04176; CHECK-NEXT: lsrl r4, r9, #264177; CHECK-NEXT: vcvtt.f32.f16 s0, s34178; CHECK-NEXT: mov lr, r14179; CHECK-NEXT: orr.w r1, r4, r24180; CHECK-NEXT: vmov r4, s24181; CHECK-NEXT: vmaxnm.f32 s2, s0, s64182; CHECK-NEXT: vmov r2, s84183; CHECK-NEXT: vminnm.f32 s2, s2, s44184; CHECK-NEXT: it vs4185; CHECK-NEXT: movvs r2, #04186; CHECK-NEXT: vcvt.s32.f32 s2, s24187; CHECK-NEXT: bfc r2, #19, #134188; CHECK-NEXT: movs r5, #04189; CHECK-NEXT: lsll r2, r5, #124190; CHECK-NEXT: vmrs APSR_nzcv, fpscr4191; CHECK-NEXT: it vs4192; CHECK-NEXT: movvs r4, #04193; CHECK-NEXT: orrs r2, r14194; CHECK-NEXT: bfc r4, #19, #134195; CHECK-NEXT: movs r1, #04196; CHECK-NEXT: lsll r4, r1, #314197; CHECK-NEXT: vcmp.f32 s0, s04198; CHECK-NEXT: orrs r2, r44199; CHECK-NEXT: str r2, [r0, #8]4200; CHECK-NEXT: orr.w r2, r7, r3, lsl #64201; CHECK-NEXT: vcvtb.f32.f16 s0, s34202; CHECK-NEXT: orr.w r3, r2, r12, lsl #254203; CHECK-NEXT: vmov r2, s24204; CHECK-NEXT: vmaxnm.f32 s2, s0, s64205; CHECK-NEXT: vmrs APSR_nzcv, fpscr4206; CHECK-NEXT: vminnm.f32 s2, s2, s44207; CHECK-NEXT: it vs4208; CHECK-NEXT: movvs r2, #04209; CHECK-NEXT: vcvt.s32.f32 s2, s24210; CHECK-NEXT: bfc r2, #19, #134211; CHECK-NEXT: movs r7, #04212; CHECK-NEXT: vcmp.f32 s0, s04213; CHECK-NEXT: lsll r2, r7, #54214; CHECK-NEXT: vmrs APSR_nzcv, fpscr4215; CHECK-NEXT: mov.w r11, #04216; CHECK-NEXT: vmov r7, s24217; CHECK-NEXT: it vs4218; CHECK-NEXT: movvs r7, #04219; CHECK-NEXT: mov r4, r74220; CHECK-NEXT: bfc r4, #19, #134221; CHECK-NEXT: lsrl r4, r11, #144222; CHECK-NEXT: orrs r2, r44223; CHECK-NEXT: strh r2, [r0, #16]4224; CHECK-NEXT: str r3, [r0, #4]4225; CHECK-NEXT: lsrs r2, r2, #164226; CHECK-NEXT: strb r2, [r0, #18]4227; CHECK-NEXT: orr.w r2, r9, lr4228; CHECK-NEXT: orrs r2, r54229; CHECK-NEXT: orrs r1, r24230; CHECK-NEXT: orr.w r1, r1, r7, lsl #184231; CHECK-NEXT: str r1, [r0, #12]4232; CHECK-NEXT: pop.w {r4, r5, r7, r9, r11, pc}4233; CHECK-NEXT: .p2align 24234; CHECK-NEXT: @ %bb.1:4235; CHECK-NEXT: .LCPI46_0:4236; CHECK-NEXT: .long 0x487fffc0 @ float 2621434237; CHECK-NEXT: .LCPI46_1:4238; CHECK-NEXT: .long 0xc8800000 @ float -2621444239 %x = call <8 x i19> @llvm.fptosi.sat.v8f16.v8i19(<8 x half> %f)4240 ret <8 x i19> %x4241}4242 4243define arm_aapcs_vfpcc <8 x i32> @test_signed_v8f16_v8i32_duplicate(<8 x half> %f) {4244; CHECK-LABEL: test_signed_v8f16_v8i32_duplicate:4245; CHECK: @ %bb.0:4246; CHECK-NEXT: vmovx.f16 s4, s34247; CHECK-NEXT: vmovx.f16 s6, s04248; CHECK-NEXT: vcvt.s32.f16 s8, s44249; CHECK-NEXT: vmovx.f16 s4, s24250; CHECK-NEXT: vcvt.s32.f16 s10, s44251; CHECK-NEXT: vmovx.f16 s4, s14252; CHECK-NEXT: vcvt.s32.f16 s14, s24253; CHECK-NEXT: vcvt.s32.f16 s2, s14254; CHECK-NEXT: vcvt.s32.f16 s0, s04255; CHECK-NEXT: vcvt.s32.f16 s4, s44256; CHECK-NEXT: vcvt.s32.f16 s6, s64257; CHECK-NEXT: vmov r0, s24258; CHECK-NEXT: vmov r1, s04259; CHECK-NEXT: vcvt.s32.f16 s12, s34260; CHECK-NEXT: vmov q0[2], q0[0], r1, r04261; CHECK-NEXT: vmov r0, s44262; CHECK-NEXT: vmov r1, s64263; CHECK-NEXT: vmov q0[3], q0[1], r1, r04264; CHECK-NEXT: vmov r0, s124265; CHECK-NEXT: vmov r1, s144266; CHECK-NEXT: vmov q1[2], q1[0], r1, r04267; CHECK-NEXT: vmov r0, s84268; CHECK-NEXT: vmov r1, s104269; CHECK-NEXT: vmov q1[3], q1[1], r1, r04270; CHECK-NEXT: bx lr4271 %x = call <8 x i32> @llvm.fptosi.sat.v8f16.v8i32(<8 x half> %f)4272 ret <8 x i32> %x4273}4274 4275define arm_aapcs_vfpcc <8 x i50> @test_signed_v8f16_v8i50(<8 x half> %f) {4276; CHECK-LABEL: test_signed_v8f16_v8i50:4277; CHECK: @ %bb.0:4278; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}4279; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}4280; CHECK-NEXT: .pad #44281; CHECK-NEXT: sub sp, #44282; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13}4283; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13}4284; CHECK-NEXT: .pad #244285; CHECK-NEXT: sub sp, #244286; CHECK-NEXT: vmov q4, q04287; CHECK-NEXT: mov r4, r04288; CHECK-NEXT: vcvtt.f32.f16 s24, s164289; CHECK-NEXT: vmov r0, s244290; CHECK-NEXT: bl __aeabi_f2lz4291; CHECK-NEXT: vcvtb.f32.f16 s26, s174292; CHECK-NEXT: mov r2, r04293; CHECK-NEXT: vmov r0, s264294; CHECK-NEXT: vldr s22, .LCPI48_04295; CHECK-NEXT: vldr s20, .LCPI48_14296; CHECK-NEXT: vcmp.f32 s24, s224297; CHECK-NEXT: vmrs APSR_nzcv, fpscr4298; CHECK-NEXT: itt lt4299; CHECK-NEXT: movlt r1, #04300; CHECK-NEXT: movtlt r1, #655344301; CHECK-NEXT: it lt4302; CHECK-NEXT: movlt r2, #04303; CHECK-NEXT: vcmp.f32 s24, s204304; CHECK-NEXT: vmrs APSR_nzcv, fpscr4305; CHECK-NEXT: it gt4306; CHECK-NEXT: movgt.w r2, #-14307; CHECK-NEXT: vcmp.f32 s24, s244308; CHECK-NEXT: itt gt4309; CHECK-NEXT: movwgt r1, #655354310; CHECK-NEXT: movtgt r1, #14311; CHECK-NEXT: vmrs APSR_nzcv, fpscr4312; CHECK-NEXT: it vs4313; CHECK-NEXT: movvs r2, #04314; CHECK-NEXT: str r2, [sp, #20] @ 4-byte Spill4315; CHECK-NEXT: it vs4316; CHECK-NEXT: movvs r1, #04317; CHECK-NEXT: str r1, [sp, #16] @ 4-byte Spill4318; CHECK-NEXT: bl __aeabi_f2lz4319; CHECK-NEXT: vcvtt.f32.f16 s24, s174320; CHECK-NEXT: mov r2, r04321; CHECK-NEXT: vmov r0, s244322; CHECK-NEXT: vcmp.f32 s26, s224323; CHECK-NEXT: vmrs APSR_nzcv, fpscr4324; CHECK-NEXT: itt lt4325; CHECK-NEXT: movlt r1, #04326; CHECK-NEXT: movtlt r1, #655344327; CHECK-NEXT: vcmp.f32 s26, s204328; CHECK-NEXT: it lt4329; CHECK-NEXT: movlt r2, #04330; CHECK-NEXT: vmrs APSR_nzcv, fpscr4331; CHECK-NEXT: itt gt4332; CHECK-NEXT: movwgt r1, #655354333; CHECK-NEXT: movtgt r1, #14334; CHECK-NEXT: it gt4335; CHECK-NEXT: movgt.w r2, #-14336; CHECK-NEXT: vcmp.f32 s26, s264337; CHECK-NEXT: vmrs APSR_nzcv, fpscr4338; CHECK-NEXT: it vs4339; CHECK-NEXT: movvs r2, #04340; CHECK-NEXT: str r2, [sp, #12] @ 4-byte Spill4341; CHECK-NEXT: it vs4342; CHECK-NEXT: movvs r1, #04343; CHECK-NEXT: str r1, [sp, #8] @ 4-byte Spill4344; CHECK-NEXT: bl __aeabi_f2lz4345; CHECK-NEXT: vcvtb.f32.f16 s26, s184346; CHECK-NEXT: mov r2, r04347; CHECK-NEXT: vmov r0, s264348; CHECK-NEXT: vcmp.f32 s24, s224349; CHECK-NEXT: vmrs APSR_nzcv, fpscr4350; CHECK-NEXT: itt lt4351; CHECK-NEXT: movlt r1, #04352; CHECK-NEXT: movtlt r1, #655344353; CHECK-NEXT: vcmp.f32 s24, s204354; CHECK-NEXT: it lt4355; CHECK-NEXT: movlt r2, #04356; CHECK-NEXT: vmrs APSR_nzcv, fpscr4357; CHECK-NEXT: itt gt4358; CHECK-NEXT: movwgt r1, #655354359; CHECK-NEXT: movtgt r1, #14360; CHECK-NEXT: it gt4361; CHECK-NEXT: movgt.w r2, #-14362; CHECK-NEXT: vcmp.f32 s24, s244363; CHECK-NEXT: vmrs APSR_nzcv, fpscr4364; CHECK-NEXT: it vs4365; CHECK-NEXT: movvs r2, #04366; CHECK-NEXT: str r2, [sp, #4] @ 4-byte Spill4367; CHECK-NEXT: it vs4368; CHECK-NEXT: movvs r1, #04369; CHECK-NEXT: str r1, [sp] @ 4-byte Spill4370; CHECK-NEXT: bl __aeabi_f2lz4371; CHECK-NEXT: vcmp.f32 s26, s224372; CHECK-NEXT: mov r6, r14373; CHECK-NEXT: vmrs APSR_nzcv, fpscr4374; CHECK-NEXT: ittt lt4375; CHECK-NEXT: movlt r0, #04376; CHECK-NEXT: movlt r6, #04377; CHECK-NEXT: movtlt r6, #655344378; CHECK-NEXT: vcmp.f32 s26, s204379; CHECK-NEXT: vcvtt.f32.f16 s18, s184380; CHECK-NEXT: vmrs APSR_nzcv, fpscr4381; CHECK-NEXT: ittt gt4382; CHECK-NEXT: movwgt r6, #655354383; CHECK-NEXT: movtgt r6, #14384; CHECK-NEXT: movgt.w r0, #-14385; CHECK-NEXT: vcmp.f32 s26, s264386; CHECK-NEXT: vmrs APSR_nzcv, fpscr4387; CHECK-NEXT: it vs4388; CHECK-NEXT: movvs r0, #04389; CHECK-NEXT: str.w r0, [r4, #25]4390; CHECK-NEXT: vmov r0, s184391; CHECK-NEXT: it vs4392; CHECK-NEXT: movvs r6, #04393; CHECK-NEXT: bl __aeabi_f2lz4394; CHECK-NEXT: vcmp.f32 s18, s224395; CHECK-NEXT: mov r8, r04396; CHECK-NEXT: vmrs APSR_nzcv, fpscr4397; CHECK-NEXT: mov r9, r14398; CHECK-NEXT: vcmp.f32 s18, s204399; CHECK-NEXT: ittt lt4400; CHECK-NEXT: movwlt r9, #04401; CHECK-NEXT: movtlt r9, #655344402; CHECK-NEXT: movlt.w r8, #04403; CHECK-NEXT: vmrs APSR_nzcv, fpscr4404; CHECK-NEXT: vcmp.f32 s18, s184405; CHECK-NEXT: vcvtb.f32.f16 s18, s194406; CHECK-NEXT: ittt gt4407; CHECK-NEXT: movgt.w r8, #-14408; CHECK-NEXT: movwgt r9, #655354409; CHECK-NEXT: movtgt r9, #14410; CHECK-NEXT: vmov r0, s184411; CHECK-NEXT: vmrs APSR_nzcv, fpscr4412; CHECK-NEXT: itt vs4413; CHECK-NEXT: movvs.w r8, #04414; CHECK-NEXT: movvs.w r9, #04415; CHECK-NEXT: bl __aeabi_f2lz4416; CHECK-NEXT: vcmp.f32 s18, s224417; CHECK-NEXT: mov r11, r04418; CHECK-NEXT: vmrs APSR_nzcv, fpscr4419; CHECK-NEXT: mov r5, r14420; CHECK-NEXT: vcmp.f32 s18, s204421; CHECK-NEXT: ittt lt4422; CHECK-NEXT: movlt r5, #04423; CHECK-NEXT: movtlt r5, #655344424; CHECK-NEXT: movlt.w r11, #04425; CHECK-NEXT: vmrs APSR_nzcv, fpscr4426; CHECK-NEXT: vcmp.f32 s18, s184427; CHECK-NEXT: vcvtt.f32.f16 s18, s194428; CHECK-NEXT: ittt gt4429; CHECK-NEXT: movgt.w r11, #-14430; CHECK-NEXT: movwgt r5, #655354431; CHECK-NEXT: movtgt r5, #14432; CHECK-NEXT: vmov r0, s184433; CHECK-NEXT: vmrs APSR_nzcv, fpscr4434; CHECK-NEXT: itt vs4435; CHECK-NEXT: movvs.w r11, #04436; CHECK-NEXT: movvs r5, #04437; CHECK-NEXT: bl __aeabi_f2lz4438; CHECK-NEXT: vcvtb.f32.f16 s16, s164439; CHECK-NEXT: mov r10, r04440; CHECK-NEXT: vmov r0, s164441; CHECK-NEXT: mov r7, r14442; CHECK-NEXT: vcmp.f32 s18, s224443; CHECK-NEXT: vmrs APSR_nzcv, fpscr4444; CHECK-NEXT: ittt lt4445; CHECK-NEXT: movlt r7, #04446; CHECK-NEXT: movtlt r7, #655344447; CHECK-NEXT: movlt.w r10, #04448; CHECK-NEXT: vcmp.f32 s18, s204449; CHECK-NEXT: vmrs APSR_nzcv, fpscr4450; CHECK-NEXT: ittt gt4451; CHECK-NEXT: movgt.w r10, #-14452; CHECK-NEXT: movwgt r7, #655354453; CHECK-NEXT: movtgt r7, #14454; CHECK-NEXT: vcmp.f32 s18, s184455; CHECK-NEXT: vmrs APSR_nzcv, fpscr4456; CHECK-NEXT: itt vs4457; CHECK-NEXT: movvs.w r10, #04458; CHECK-NEXT: movvs r7, #04459; CHECK-NEXT: bl __aeabi_f2lz4460; CHECK-NEXT: vcmp.f32 s16, s224461; CHECK-NEXT: bfc r5, #18, #144462; CHECK-NEXT: vmrs APSR_nzcv, fpscr4463; CHECK-NEXT: ittt lt4464; CHECK-NEXT: movlt r0, #04465; CHECK-NEXT: movlt r1, #04466; CHECK-NEXT: movtlt r1, #655344467; CHECK-NEXT: vcmp.f32 s16, s204468; CHECK-NEXT: mov r2, r114469; CHECK-NEXT: vmrs APSR_nzcv, fpscr4470; CHECK-NEXT: ittt gt4471; CHECK-NEXT: movwgt r1, #655354472; CHECK-NEXT: movtgt r1, #14473; CHECK-NEXT: movgt.w r0, #-14474; CHECK-NEXT: vcmp.f32 s16, s164475; CHECK-NEXT: lsrl r2, r5, #284476; CHECK-NEXT: vmrs APSR_nzcv, fpscr4477; CHECK-NEXT: it vs4478; CHECK-NEXT: movvs r0, #04479; CHECK-NEXT: str r0, [r4]4480; CHECK-NEXT: lsr.w r0, r7, #104481; CHECK-NEXT: bfc r7, #18, #144482; CHECK-NEXT: bfc r9, #18, #144483; CHECK-NEXT: lsll r10, r7, #224484; CHECK-NEXT: bfc r6, #18, #144485; CHECK-NEXT: orr.w r3, r5, r74486; CHECK-NEXT: str.w r3, [r4, #45]4487; CHECK-NEXT: orr.w r2, r2, r104488; CHECK-NEXT: str.w r2, [r4, #41]4489; CHECK-NEXT: strb.w r0, [r4, #49]4490; CHECK-NEXT: mov r0, r84491; CHECK-NEXT: lsrl r0, r9, #144492; CHECK-NEXT: orr.w r2, r9, r11, lsl #44493; CHECK-NEXT: str.w r2, [r4, #37]4494; CHECK-NEXT: str.w r0, [r4, #33]4495; CHECK-NEXT: orr.w r0, r6, r8, lsl #184496; CHECK-NEXT: str.w r0, [r4, #29]4497; CHECK-NEXT: ldr r3, [sp] @ 4-byte Reload4498; CHECK-NEXT: ldr r0, [sp, #4] @ 4-byte Reload4499; CHECK-NEXT: ldr r6, [sp, #12] @ 4-byte Reload4500; CHECK-NEXT: lsr.w r5, r3, #104501; CHECK-NEXT: bfc r3, #18, #144502; CHECK-NEXT: lsll r0, r3, #224503; CHECK-NEXT: mov r7, r34504; CHECK-NEXT: ldr r3, [sp, #8] @ 4-byte Reload4505; CHECK-NEXT: mov r2, r64506; CHECK-NEXT: bfc r3, #18, #144507; CHECK-NEXT: lsrl r2, r3, #284508; CHECK-NEXT: orr.w r3, r3, r74509; CHECK-NEXT: str r3, [r4, #20]4510; CHECK-NEXT: orr.w r2, r2, r04511; CHECK-NEXT: str r2, [r4, #16]4512; CHECK-NEXT: strb r5, [r4, #24]4513; CHECK-NEXT: ldr r3, [sp, #16] @ 4-byte Reload4514; CHECK-NEXT: ldr r7, [sp, #20] @ 4-byte Reload4515; CHECK-NEXT: bfc r3, #18, #144516; CHECK-NEXT: mov r0, r74517; CHECK-NEXT: lsrl r0, r3, #144518; CHECK-NEXT: orr.w r2, r3, r6, lsl #44519; CHECK-NEXT: strd r0, r2, [r4, #8]4520; CHECK-NEXT: it vs4521; CHECK-NEXT: movvs r1, #04522; CHECK-NEXT: bfc r1, #18, #144523; CHECK-NEXT: orr.w r0, r1, r7, lsl #184524; CHECK-NEXT: str r0, [r4, #4]4525; CHECK-NEXT: add sp, #244526; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13}4527; CHECK-NEXT: add sp, #44528; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}4529; CHECK-NEXT: .p2align 24530; CHECK-NEXT: @ %bb.1:4531; CHECK-NEXT: .LCPI48_0:4532; CHECK-NEXT: .long 0xd8000000 @ float -5.62949953E+144533; CHECK-NEXT: .LCPI48_1:4534; CHECK-NEXT: .long 0x57ffffff @ float 5.6294992E+144535 %x = call <8 x i50> @llvm.fptosi.sat.v8f16.v8i50(<8 x half> %f)4536 ret <8 x i50> %x4537}4538 4539define arm_aapcs_vfpcc <8 x i64> @test_signed_v8f16_v8i64(<8 x half> %f) {4540; CHECK-LABEL: test_signed_v8f16_v8i64:4541; CHECK: @ %bb.0:4542; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}4543; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}4544; CHECK-NEXT: .pad #44545; CHECK-NEXT: sub sp, #44546; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}4547; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}4548; CHECK-NEXT: vmov q4, q04549; CHECK-NEXT: vcvtt.f32.f16 s24, s194550; CHECK-NEXT: vmov r0, s244551; CHECK-NEXT: bl __aeabi_f2lz4552; CHECK-NEXT: vcvtb.f32.f16 s26, s194553; CHECK-NEXT: mov r9, r04554; CHECK-NEXT: vmov r0, s264555; CHECK-NEXT: vldr s28, .LCPI49_04556; CHECK-NEXT: vldr s30, .LCPI49_14557; CHECK-NEXT: mov r8, r14558; CHECK-NEXT: vcmp.f32 s24, s284559; CHECK-NEXT: vcvtt.f32.f16 s20, s164560; CHECK-NEXT: vmrs APSR_nzcv, fpscr4561; CHECK-NEXT: itt lt4562; CHECK-NEXT: movlt.w r8, #-21474836484563; CHECK-NEXT: movlt.w r9, #04564; CHECK-NEXT: vcmp.f32 s24, s304565; CHECK-NEXT: vcvtt.f32.f16 s22, s184566; CHECK-NEXT: vmrs APSR_nzcv, fpscr4567; CHECK-NEXT: itt gt4568; CHECK-NEXT: movgt.w r9, #-14569; CHECK-NEXT: mvngt r8, #-21474836484570; CHECK-NEXT: vcmp.f32 s24, s244571; CHECK-NEXT: vmrs APSR_nzcv, fpscr4572; CHECK-NEXT: vmov r6, s204573; CHECK-NEXT: vmov r4, s224574; CHECK-NEXT: itt vs4575; CHECK-NEXT: movvs.w r8, #04576; CHECK-NEXT: movvs.w r9, #04577; CHECK-NEXT: bl __aeabi_f2lz4578; CHECK-NEXT: mov r10, r04579; CHECK-NEXT: vcmp.f32 s26, s284580; CHECK-NEXT: mov r11, r14581; CHECK-NEXT: vmrs APSR_nzcv, fpscr4582; CHECK-NEXT: itt lt4583; CHECK-NEXT: movlt.w r10, #04584; CHECK-NEXT: movlt.w r11, #-21474836484585; CHECK-NEXT: vcmp.f32 s26, s304586; CHECK-NEXT: vmrs APSR_nzcv, fpscr4587; CHECK-NEXT: mov r0, r44588; CHECK-NEXT: itt gt4589; CHECK-NEXT: mvngt r11, #-21474836484590; CHECK-NEXT: movgt.w r10, #-14591; CHECK-NEXT: vcmp.f32 s26, s264592; CHECK-NEXT: vmrs APSR_nzcv, fpscr4593; CHECK-NEXT: itt vs4594; CHECK-NEXT: movvs.w r10, #04595; CHECK-NEXT: movvs.w r11, #04596; CHECK-NEXT: bl __aeabi_f2lz4597; CHECK-NEXT: mov r5, r04598; CHECK-NEXT: vcmp.f32 s22, s284599; CHECK-NEXT: mov r4, r14600; CHECK-NEXT: vmrs APSR_nzcv, fpscr4601; CHECK-NEXT: itt lt4602; CHECK-NEXT: movlt.w r4, #-21474836484603; CHECK-NEXT: movlt r5, #04604; CHECK-NEXT: vcmp.f32 s22, s304605; CHECK-NEXT: vmrs APSR_nzcv, fpscr4606; CHECK-NEXT: mov r0, r64607; CHECK-NEXT: itt gt4608; CHECK-NEXT: movgt.w r5, #-14609; CHECK-NEXT: mvngt r4, #-21474836484610; CHECK-NEXT: vcmp.f32 s22, s224611; CHECK-NEXT: vmrs APSR_nzcv, fpscr4612; CHECK-NEXT: itt vs4613; CHECK-NEXT: movvs r4, #04614; CHECK-NEXT: movvs r5, #04615; CHECK-NEXT: bl __aeabi_f2lz4616; CHECK-NEXT: vcvtb.f32.f16 s16, s164617; CHECK-NEXT: mov r7, r04618; CHECK-NEXT: vmov r0, s164619; CHECK-NEXT: mov r6, r14620; CHECK-NEXT: vcmp.f32 s20, s284621; CHECK-NEXT: vmrs APSR_nzcv, fpscr4622; CHECK-NEXT: itt lt4623; CHECK-NEXT: movlt.w r6, #-21474836484624; CHECK-NEXT: movlt r7, #04625; CHECK-NEXT: vcmp.f32 s20, s304626; CHECK-NEXT: vmrs APSR_nzcv, fpscr4627; CHECK-NEXT: itt gt4628; CHECK-NEXT: movgt.w r7, #-14629; CHECK-NEXT: mvngt r6, #-21474836484630; CHECK-NEXT: vcmp.f32 s20, s204631; CHECK-NEXT: vmrs APSR_nzcv, fpscr4632; CHECK-NEXT: itt vs4633; CHECK-NEXT: movvs r6, #04634; CHECK-NEXT: movvs r7, #04635; CHECK-NEXT: bl __aeabi_f2lz4636; CHECK-NEXT: vcmp.f32 s16, s284637; CHECK-NEXT: vmrs APSR_nzcv, fpscr4638; CHECK-NEXT: itt lt4639; CHECK-NEXT: movlt r0, #04640; CHECK-NEXT: movlt.w r1, #-21474836484641; CHECK-NEXT: vcmp.f32 s16, s304642; CHECK-NEXT: vmrs APSR_nzcv, fpscr4643; CHECK-NEXT: vcmp.f32 s16, s164644; CHECK-NEXT: itt gt4645; CHECK-NEXT: mvngt r1, #-21474836484646; CHECK-NEXT: movgt.w r0, #-14647; CHECK-NEXT: vmrs APSR_nzcv, fpscr4648; CHECK-NEXT: it vs4649; CHECK-NEXT: movvs r0, #04650; CHECK-NEXT: vcvtt.f32.f16 s16, s174651; CHECK-NEXT: vmov q5[2], q5[0], r0, r74652; CHECK-NEXT: vmov r0, s164653; CHECK-NEXT: it vs4654; CHECK-NEXT: movvs r1, #04655; CHECK-NEXT: vmov q5[3], q5[1], r1, r64656; CHECK-NEXT: bl __aeabi_f2lz4657; CHECK-NEXT: vcmp.f32 s16, s284658; CHECK-NEXT: mov r7, r04659; CHECK-NEXT: vmrs APSR_nzcv, fpscr4660; CHECK-NEXT: mov r6, r14661; CHECK-NEXT: vcmp.f32 s16, s304662; CHECK-NEXT: itt lt4663; CHECK-NEXT: movlt.w r6, #-21474836484664; CHECK-NEXT: movlt r7, #04665; CHECK-NEXT: vmrs APSR_nzcv, fpscr4666; CHECK-NEXT: vcmp.f32 s16, s164667; CHECK-NEXT: vcvtb.f32.f16 s16, s174668; CHECK-NEXT: itt gt4669; CHECK-NEXT: movgt.w r7, #-14670; CHECK-NEXT: mvngt r6, #-21474836484671; CHECK-NEXT: vmov r0, s164672; CHECK-NEXT: vmrs APSR_nzcv, fpscr4673; CHECK-NEXT: itt vs4674; CHECK-NEXT: movvs r6, #04675; CHECK-NEXT: movvs r7, #04676; CHECK-NEXT: bl __aeabi_f2lz4677; CHECK-NEXT: vcmp.f32 s16, s284678; CHECK-NEXT: vmrs APSR_nzcv, fpscr4679; CHECK-NEXT: itt lt4680; CHECK-NEXT: movlt r0, #04681; CHECK-NEXT: movlt.w r1, #-21474836484682; CHECK-NEXT: vcmp.f32 s16, s304683; CHECK-NEXT: vmrs APSR_nzcv, fpscr4684; CHECK-NEXT: vcmp.f32 s16, s164685; CHECK-NEXT: itt gt4686; CHECK-NEXT: mvngt r1, #-21474836484687; CHECK-NEXT: movgt.w r0, #-14688; CHECK-NEXT: vmrs APSR_nzcv, fpscr4689; CHECK-NEXT: it vs4690; CHECK-NEXT: movvs r0, #04691; CHECK-NEXT: vcvtb.f32.f16 s16, s184692; CHECK-NEXT: vmov q6[2], q6[0], r0, r74693; CHECK-NEXT: vmov r0, s164694; CHECK-NEXT: it vs4695; CHECK-NEXT: movvs r1, #04696; CHECK-NEXT: vmov q6[3], q6[1], r1, r64697; CHECK-NEXT: bl __aeabi_f2lz4698; CHECK-NEXT: vcmp.f32 s16, s284699; CHECK-NEXT: vmov q3[2], q3[0], r10, r94700; CHECK-NEXT: vmrs APSR_nzcv, fpscr4701; CHECK-NEXT: itt lt4702; CHECK-NEXT: movlt r0, #04703; CHECK-NEXT: movlt.w r1, #-21474836484704; CHECK-NEXT: vcmp.f32 s16, s304705; CHECK-NEXT: vmov q3[3], q3[1], r11, r84706; CHECK-NEXT: vmrs APSR_nzcv, fpscr4707; CHECK-NEXT: itt gt4708; CHECK-NEXT: mvngt r1, #-21474836484709; CHECK-NEXT: movgt.w r0, #-14710; CHECK-NEXT: vcmp.f32 s16, s164711; CHECK-NEXT: vmov q0, q54712; CHECK-NEXT: vmrs APSR_nzcv, fpscr4713; CHECK-NEXT: itt vs4714; CHECK-NEXT: movvs r0, #04715; CHECK-NEXT: movvs r1, #04716; CHECK-NEXT: vmov q2[2], q2[0], r0, r54717; CHECK-NEXT: vmov q1, q64718; CHECK-NEXT: vmov q2[3], q2[1], r1, r44719; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}4720; CHECK-NEXT: add sp, #44721; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}4722; CHECK-NEXT: .p2align 24723; CHECK-NEXT: @ %bb.1:4724; CHECK-NEXT: .LCPI49_0:4725; CHECK-NEXT: .long 0xdf000000 @ float -9.22337203E+184726; CHECK-NEXT: .LCPI49_1:4727; CHECK-NEXT: .long 0x5effffff @ float 9.22337149E+184728 %x = call <8 x i64> @llvm.fptosi.sat.v8f16.v8i64(<8 x half> %f)4729 ret <8 x i64> %x4730}4731 4732define arm_aapcs_vfpcc <8 x i100> @test_signed_v8f16_v8i100(<8 x half> %f) {4733; CHECK-LABEL: test_signed_v8f16_v8i100:4734; CHECK: @ %bb.0:4735; CHECK-NEXT: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}4736; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}4737; CHECK-NEXT: .pad #44738; CHECK-NEXT: sub sp, #44739; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13}4740; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13}4741; CHECK-NEXT: .pad #484742; CHECK-NEXT: sub sp, #484743; CHECK-NEXT: vmov q4, q04744; CHECK-NEXT: mov r4, r04745; CHECK-NEXT: vcvtb.f32.f16 s24, s174746; CHECK-NEXT: vmov r0, s244747; CHECK-NEXT: bl __fixsfti4748; CHECK-NEXT: vcvtb.f32.f16 s26, s184749; CHECK-NEXT: mov r8, r04750; CHECK-NEXT: vmov r0, s264751; CHECK-NEXT: vldr s22, .LCPI50_04752; CHECK-NEXT: vldr s20, .LCPI50_14753; CHECK-NEXT: mov r9, r14754; CHECK-NEXT: vcmp.f32 s24, s224755; CHECK-NEXT: mov r10, r24756; CHECK-NEXT: vmrs APSR_nzcv, fpscr4757; CHECK-NEXT: itttt lt4758; CHECK-NEXT: mvnlt r3, #74759; CHECK-NEXT: movlt.w r8, #04760; CHECK-NEXT: movlt.w r9, #04761; CHECK-NEXT: movlt.w r10, #04762; CHECK-NEXT: vcmp.f32 s24, s204763; CHECK-NEXT: vmrs APSR_nzcv, fpscr4764; CHECK-NEXT: itttt gt4765; CHECK-NEXT: movgt.w r10, #-14766; CHECK-NEXT: movgt.w r9, #-14767; CHECK-NEXT: movgt.w r8, #-14768; CHECK-NEXT: movgt r3, #74769; CHECK-NEXT: vcmp.f32 s24, s244770; CHECK-NEXT: vmrs APSR_nzcv, fpscr4771; CHECK-NEXT: it vs4772; CHECK-NEXT: movvs r3, #04773; CHECK-NEXT: str r3, [sp, #36] @ 4-byte Spill4774; CHECK-NEXT: ittt vs4775; CHECK-NEXT: movvs.w r8, #04776; CHECK-NEXT: movvs.w r9, #04777; CHECK-NEXT: movvs.w r10, #04778; CHECK-NEXT: bl __fixsfti4779; CHECK-NEXT: vcvtb.f32.f16 s24, s194780; CHECK-NEXT: mov r5, r04781; CHECK-NEXT: vmov r0, s244782; CHECK-NEXT: mov r6, r14783; CHECK-NEXT: vcmp.f32 s26, s224784; CHECK-NEXT: mov r7, r24785; CHECK-NEXT: vmrs APSR_nzcv, fpscr4786; CHECK-NEXT: itttt lt4787; CHECK-NEXT: mvnlt r3, #74788; CHECK-NEXT: movlt r5, #04789; CHECK-NEXT: movlt r6, #04790; CHECK-NEXT: movlt r7, #04791; CHECK-NEXT: vcmp.f32 s26, s204792; CHECK-NEXT: vmrs APSR_nzcv, fpscr4793; CHECK-NEXT: itttt gt4794; CHECK-NEXT: movgt.w r7, #-14795; CHECK-NEXT: movgt.w r6, #-14796; CHECK-NEXT: movgt.w r5, #-14797; CHECK-NEXT: movgt r3, #74798; CHECK-NEXT: vcmp.f32 s26, s264799; CHECK-NEXT: vmrs APSR_nzcv, fpscr4800; CHECK-NEXT: it vs4801; CHECK-NEXT: movvs r3, #04802; CHECK-NEXT: str r3, [sp, #32] @ 4-byte Spill4803; CHECK-NEXT: ittt vs4804; CHECK-NEXT: movvs r5, #04805; CHECK-NEXT: movvs r6, #04806; CHECK-NEXT: movvs r7, #04807; CHECK-NEXT: bl __fixsfti4808; CHECK-NEXT: vcmp.f32 s24, s224809; CHECK-NEXT: vmrs APSR_nzcv, fpscr4810; CHECK-NEXT: itttt lt4811; CHECK-NEXT: movlt r2, #04812; CHECK-NEXT: movlt r1, #04813; CHECK-NEXT: movlt r0, #04814; CHECK-NEXT: mvnlt r3, #74815; CHECK-NEXT: vcmp.f32 s24, s204816; CHECK-NEXT: vmrs APSR_nzcv, fpscr4817; CHECK-NEXT: vcmp.f32 s24, s244818; CHECK-NEXT: itttt gt4819; CHECK-NEXT: movgt r3, #74820; CHECK-NEXT: movgt.w r0, #-14821; CHECK-NEXT: movgt.w r1, #-14822; CHECK-NEXT: movgt.w r2, #-14823; CHECK-NEXT: vmrs APSR_nzcv, fpscr4824; CHECK-NEXT: it vs4825; CHECK-NEXT: movvs r2, #04826; CHECK-NEXT: str.w r2, [r4, #83]4827; CHECK-NEXT: it vs4828; CHECK-NEXT: movvs r1, #04829; CHECK-NEXT: str.w r1, [r4, #79]4830; CHECK-NEXT: it vs4831; CHECK-NEXT: movvs r0, #04832; CHECK-NEXT: vcvtt.f32.f16 s24, s164833; CHECK-NEXT: str.w r0, [r4, #75]4834; CHECK-NEXT: vmov r0, s244835; CHECK-NEXT: str.w r7, [r4, #58]4836; CHECK-NEXT: str.w r6, [r4, #54]4837; CHECK-NEXT: str.w r5, [r4, #50]4838; CHECK-NEXT: str.w r10, [r4, #33]4839; CHECK-NEXT: str.w r9, [r4, #29]4840; CHECK-NEXT: str.w r8, [r4, #25]4841; CHECK-NEXT: it vs4842; CHECK-NEXT: movvs r3, #04843; CHECK-NEXT: str r3, [sp, #28] @ 4-byte Spill4844; CHECK-NEXT: bl __fixsfti4845; CHECK-NEXT: vcmp.f32 s24, s224846; CHECK-NEXT: vmrs APSR_nzcv, fpscr4847; CHECK-NEXT: itttt lt4848; CHECK-NEXT: mvnlt r3, #74849; CHECK-NEXT: movlt r2, #04850; CHECK-NEXT: movlt r0, #04851; CHECK-NEXT: movlt r1, #04852; CHECK-NEXT: vcmp.f32 s24, s204853; CHECK-NEXT: vmrs APSR_nzcv, fpscr4854; CHECK-NEXT: vcmp.f32 s24, s244855; CHECK-NEXT: itttt gt4856; CHECK-NEXT: movgt.w r1, #-14857; CHECK-NEXT: movgt.w r0, #-14858; CHECK-NEXT: movgt.w r2, #-14859; CHECK-NEXT: movgt r3, #74860; CHECK-NEXT: vmrs APSR_nzcv, fpscr4861; CHECK-NEXT: it vs4862; CHECK-NEXT: movvs r3, #04863; CHECK-NEXT: str r3, [sp, #24] @ 4-byte Spill4864; CHECK-NEXT: it vs4865; CHECK-NEXT: movvs r2, #04866; CHECK-NEXT: str r2, [sp, #20] @ 4-byte Spill4867; CHECK-NEXT: it vs4868; CHECK-NEXT: movvs r0, #04869; CHECK-NEXT: vcvtt.f32.f16 s24, s174870; CHECK-NEXT: str r0, [sp, #40] @ 4-byte Spill4871; CHECK-NEXT: vmov r0, s244872; CHECK-NEXT: it vs4873; CHECK-NEXT: movvs r1, #04874; CHECK-NEXT: str r1, [sp, #44] @ 4-byte Spill4875; CHECK-NEXT: bl __fixsfti4876; CHECK-NEXT: vcmp.f32 s24, s224877; CHECK-NEXT: vcvtt.f32.f16 s18, s184878; CHECK-NEXT: vmrs APSR_nzcv, fpscr4879; CHECK-NEXT: itttt lt4880; CHECK-NEXT: mvnlt r3, #74881; CHECK-NEXT: movlt r2, #04882; CHECK-NEXT: movlt r1, #04883; CHECK-NEXT: movlt r0, #04884; CHECK-NEXT: vcmp.f32 s24, s204885; CHECK-NEXT: vmrs APSR_nzcv, fpscr4886; CHECK-NEXT: itttt gt4887; CHECK-NEXT: movgt.w r0, #-14888; CHECK-NEXT: movgt.w r1, #-14889; CHECK-NEXT: movgt.w r2, #-14890; CHECK-NEXT: movgt r3, #74891; CHECK-NEXT: vcmp.f32 s24, s244892; CHECK-NEXT: vmrs APSR_nzcv, fpscr4893; CHECK-NEXT: it vs4894; CHECK-NEXT: movvs r3, #04895; CHECK-NEXT: str r3, [sp, #16] @ 4-byte Spill4896; CHECK-NEXT: it vs4897; CHECK-NEXT: movvs r2, #04898; CHECK-NEXT: str r2, [sp, #12] @ 4-byte Spill4899; CHECK-NEXT: it vs4900; CHECK-NEXT: movvs r1, #04901; CHECK-NEXT: str r1, [sp, #8] @ 4-byte Spill4902; CHECK-NEXT: it vs4903; CHECK-NEXT: movvs r0, #04904; CHECK-NEXT: str r0, [sp, #4] @ 4-byte Spill4905; CHECK-NEXT: vmov r0, s184906; CHECK-NEXT: bl __fixsfti4907; CHECK-NEXT: vcmp.f32 s18, s224908; CHECK-NEXT: mov r5, r04909; CHECK-NEXT: vmrs APSR_nzcv, fpscr4910; CHECK-NEXT: mov r7, r14911; CHECK-NEXT: mov r8, r24912; CHECK-NEXT: vcmp.f32 s18, s204913; CHECK-NEXT: itttt lt4914; CHECK-NEXT: mvnlt r3, #74915; CHECK-NEXT: movlt.w r8, #04916; CHECK-NEXT: movlt r5, #04917; CHECK-NEXT: movlt r7, #04918; CHECK-NEXT: vmrs APSR_nzcv, fpscr4919; CHECK-NEXT: vcmp.f32 s18, s184920; CHECK-NEXT: vcvtt.f32.f16 s18, s194921; CHECK-NEXT: vmov r0, s184922; CHECK-NEXT: itttt gt4923; CHECK-NEXT: movgt.w r7, #-14924; CHECK-NEXT: movgt.w r5, #-14925; CHECK-NEXT: movgt.w r8, #-14926; CHECK-NEXT: movgt r3, #74927; CHECK-NEXT: vmrs APSR_nzcv, fpscr4928; CHECK-NEXT: it vs4929; CHECK-NEXT: movvs r3, #04930; CHECK-NEXT: str r3, [sp] @ 4-byte Spill4931; CHECK-NEXT: ittt vs4932; CHECK-NEXT: movvs.w r8, #04933; CHECK-NEXT: movvs r5, #04934; CHECK-NEXT: movvs r7, #04935; CHECK-NEXT: bl __fixsfti4936; CHECK-NEXT: vcvtb.f32.f16 s16, s164937; CHECK-NEXT: mov r6, r04938; CHECK-NEXT: vmov r0, s164939; CHECK-NEXT: mov r9, r14940; CHECK-NEXT: vcmp.f32 s18, s224941; CHECK-NEXT: mov r10, r24942; CHECK-NEXT: mov r11, r34943; CHECK-NEXT: vmrs APSR_nzcv, fpscr4944; CHECK-NEXT: itttt lt4945; CHECK-NEXT: mvnlt r11, #74946; CHECK-NEXT: movlt.w r10, #04947; CHECK-NEXT: movlt.w r9, #04948; CHECK-NEXT: movlt r6, #04949; CHECK-NEXT: vcmp.f32 s18, s204950; CHECK-NEXT: vmrs APSR_nzcv, fpscr4951; CHECK-NEXT: itttt gt4952; CHECK-NEXT: movgt.w r6, #-14953; CHECK-NEXT: movgt.w r9, #-14954; CHECK-NEXT: movgt.w r10, #-14955; CHECK-NEXT: movgt.w r11, #74956; CHECK-NEXT: vcmp.f32 s18, s184957; CHECK-NEXT: vmrs APSR_nzcv, fpscr4958; CHECK-NEXT: itttt vs4959; CHECK-NEXT: movvs.w r11, #04960; CHECK-NEXT: movvs.w r10, #04961; CHECK-NEXT: movvs.w r9, #04962; CHECK-NEXT: movvs r6, #04963; CHECK-NEXT: bl __fixsfti4964; CHECK-NEXT: vcmp.f32 s16, s224965; CHECK-NEXT: mov r12, r34966; CHECK-NEXT: vmrs APSR_nzcv, fpscr4967; CHECK-NEXT: itttt lt4968; CHECK-NEXT: movlt r2, #04969; CHECK-NEXT: movlt r1, #04970; CHECK-NEXT: movlt r0, #04971; CHECK-NEXT: mvnlt r12, #74972; CHECK-NEXT: vcmp.f32 s16, s204973; CHECK-NEXT: vmrs APSR_nzcv, fpscr4974; CHECK-NEXT: itttt gt4975; CHECK-NEXT: movgt.w r12, #74976; CHECK-NEXT: movgt.w r0, #-14977; CHECK-NEXT: movgt.w r1, #-14978; CHECK-NEXT: movgt.w r2, #-14979; CHECK-NEXT: vcmp.f32 s16, s164980; CHECK-NEXT: vmrs APSR_nzcv, fpscr4981; CHECK-NEXT: it vs4982; CHECK-NEXT: movvs r2, #04983; CHECK-NEXT: str r2, [r4, #8]4984; CHECK-NEXT: it vs4985; CHECK-NEXT: movvs r1, #04986; CHECK-NEXT: str r1, [r4, #4]4987; CHECK-NEXT: it vs4988; CHECK-NEXT: movvs r0, #04989; CHECK-NEXT: str r0, [r4]4990; CHECK-NEXT: mov r0, r64991; CHECK-NEXT: lsrl r0, r9, #284992; CHECK-NEXT: str.w r0, [r4, #91]4993; CHECK-NEXT: mov r0, r54994; CHECK-NEXT: lsrl r0, r7, #284995; CHECK-NEXT: str.w r0, [r4, #66]4996; CHECK-NEXT: ldr.w lr, [sp, #4] @ 4-byte Reload4997; CHECK-NEXT: ldr r3, [sp, #8] @ 4-byte Reload4998; CHECK-NEXT: mov r0, lr4999; CHECK-NEXT: lsrl r0, r3, #285000; CHECK-NEXT: str.w r0, [r4, #41]5001; CHECK-NEXT: ldrd r0, r1, [sp, #40] @ 8-byte Folded Reload5002; CHECK-NEXT: lsrl r0, r1, #285003; CHECK-NEXT: str r1, [sp, #44] @ 4-byte Spill5004; CHECK-NEXT: and r1, r11, #155005; CHECK-NEXT: str r0, [r4, #16]5006; CHECK-NEXT: orr.w r0, r9, r10, lsl #45007; CHECK-NEXT: lsrl r10, r1, #285008; CHECK-NEXT: str.w r0, [r4, #95]5009; CHECK-NEXT: strb.w r10, [r4, #99]5010; CHECK-NEXT: ldr r0, [sp, #28] @ 4-byte Reload5011; CHECK-NEXT: and r0, r0, #155012; CHECK-NEXT: orr.w r0, r0, r6, lsl #45013; CHECK-NEXT: str.w r0, [r4, #87]5014; CHECK-NEXT: orr.w r0, r7, r8, lsl #45015; CHECK-NEXT: str.w r0, [r4, #70]5016; CHECK-NEXT: ldr r0, [sp] @ 4-byte Reload5017; CHECK-NEXT: and r1, r0, #155018; CHECK-NEXT: lsrl r8, r1, #285019; CHECK-NEXT: strb.w r8, [r4, #74]5020; CHECK-NEXT: ldr r0, [sp, #32] @ 4-byte Reload5021; CHECK-NEXT: and r0, r0, #155022; CHECK-NEXT: orr.w r0, r0, r5, lsl #45023; CHECK-NEXT: str.w r0, [r4, #62]5024; CHECK-NEXT: ldr r2, [sp, #12] @ 4-byte Reload5025; CHECK-NEXT: orr.w r0, r3, r2, lsl #45026; CHECK-NEXT: str.w r0, [r4, #45]5027; CHECK-NEXT: ldr r0, [sp, #16] @ 4-byte Reload5028; CHECK-NEXT: and r1, r0, #155029; CHECK-NEXT: lsrl r2, r1, #285030; CHECK-NEXT: strb.w r2, [r4, #49]5031; CHECK-NEXT: ldr r0, [sp, #36] @ 4-byte Reload5032; CHECK-NEXT: and r0, r0, #155033; CHECK-NEXT: orr.w r0, r0, lr, lsl #45034; CHECK-NEXT: str.w r0, [r4, #37]5035; CHECK-NEXT: ldr r2, [sp, #20] @ 4-byte Reload5036; CHECK-NEXT: ldr r0, [sp, #44] @ 4-byte Reload5037; CHECK-NEXT: orr.w r0, r0, r2, lsl #45038; CHECK-NEXT: str r0, [r4, #20]5039; CHECK-NEXT: ldr r0, [sp, #24] @ 4-byte Reload5040; CHECK-NEXT: and r1, r0, #155041; CHECK-NEXT: lsrl r2, r1, #285042; CHECK-NEXT: strb r2, [r4, #24]5043; CHECK-NEXT: it vs5044; CHECK-NEXT: movvs.w r12, #05045; CHECK-NEXT: ldr r1, [sp, #40] @ 4-byte Reload5046; CHECK-NEXT: and r0, r12, #155047; CHECK-NEXT: orr.w r0, r0, r1, lsl #45048; CHECK-NEXT: str r0, [r4, #12]5049; CHECK-NEXT: add sp, #485050; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13}5051; CHECK-NEXT: add sp, #45052; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}5053; CHECK-NEXT: .p2align 25054; CHECK-NEXT: @ %bb.1:5055; CHECK-NEXT: .LCPI50_0:5056; CHECK-NEXT: .long 0xf1000000 @ float -6.338253E+295057; CHECK-NEXT: .LCPI50_1:5058; CHECK-NEXT: .long 0x70ffffff @ float 6.33825262E+295059 %x = call <8 x i100> @llvm.fptosi.sat.v8f16.v8i100(<8 x half> %f)5060 ret <8 x i100> %x5061}5062 5063define arm_aapcs_vfpcc <8 x i128> @test_signed_v8f16_v8i128(<8 x half> %f) {5064; CHECK-LABEL: test_signed_v8f16_v8i128:5065; CHECK: @ %bb.0:5066; CHECK-NEXT: .save {r4, r5, r6, r7, lr}5067; CHECK-NEXT: push {r4, r5, r6, r7, lr}5068; CHECK-NEXT: .pad #45069; CHECK-NEXT: sub sp, #45070; CHECK-NEXT: .vsave {d8, d9, d10, d11, d12, d13, d14, d15}5071; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15}5072; CHECK-NEXT: vmov q4, q05073; CHECK-NEXT: mov r4, r05074; CHECK-NEXT: vcvtt.f32.f16 s30, s195075; CHECK-NEXT: vcvtb.f32.f16 s20, s165076; CHECK-NEXT: vmov r0, s305077; CHECK-NEXT: vcvtb.f32.f16 s26, s195078; CHECK-NEXT: vldr s22, .LCPI51_05079; CHECK-NEXT: vmov r5, s205080; CHECK-NEXT: vmov r7, s265081; CHECK-NEXT: vcvtt.f32.f16 s28, s185082; CHECK-NEXT: bl __fixsfti5083; CHECK-NEXT: vldr s24, .LCPI51_15084; CHECK-NEXT: add.w r12, r4, #1125085; CHECK-NEXT: vmov r6, s285086; CHECK-NEXT: vcvtb.f32.f16 s18, s185087; CHECK-NEXT: vcmp.f32 s30, s245088; CHECK-NEXT: vmrs APSR_nzcv, fpscr5089; CHECK-NEXT: itttt lt5090; CHECK-NEXT: movlt.w r3, #-21474836485091; CHECK-NEXT: movlt r2, #05092; CHECK-NEXT: movlt r1, #05093; CHECK-NEXT: movlt r0, #05094; CHECK-NEXT: vcmp.f32 s30, s225095; CHECK-NEXT: vmrs APSR_nzcv, fpscr5096; CHECK-NEXT: itttt gt5097; CHECK-NEXT: movgt.w r0, #-15098; CHECK-NEXT: movgt.w r1, #-15099; CHECK-NEXT: movgt.w r2, #-15100; CHECK-NEXT: mvngt r3, #-21474836485101; CHECK-NEXT: vcmp.f32 s30, s305102; CHECK-NEXT: vmrs APSR_nzcv, fpscr5103; CHECK-NEXT: it vs5104; CHECK-NEXT: movvs r3, #05105; CHECK-NEXT: ittt vs5106; CHECK-NEXT: movvs r2, #05107; CHECK-NEXT: movvs r1, #05108; CHECK-NEXT: movvs r0, #05109; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5110; CHECK-NEXT: mov r0, r75111; CHECK-NEXT: bl __fixsfti5112; CHECK-NEXT: vcmp.f32 s26, s245113; CHECK-NEXT: add.w r12, r4, #965114; CHECK-NEXT: vmrs APSR_nzcv, fpscr5115; CHECK-NEXT: itttt lt5116; CHECK-NEXT: movlt.w r3, #-21474836485117; CHECK-NEXT: movlt r2, #05118; CHECK-NEXT: movlt r1, #05119; CHECK-NEXT: movlt r0, #05120; CHECK-NEXT: vcmp.f32 s26, s225121; CHECK-NEXT: vmrs APSR_nzcv, fpscr5122; CHECK-NEXT: vcmp.f32 s26, s265123; CHECK-NEXT: itttt gt5124; CHECK-NEXT: movgt.w r0, #-15125; CHECK-NEXT: movgt.w r1, #-15126; CHECK-NEXT: movgt.w r2, #-15127; CHECK-NEXT: mvngt r3, #-21474836485128; CHECK-NEXT: vmrs APSR_nzcv, fpscr5129; CHECK-NEXT: it vs5130; CHECK-NEXT: movvs r3, #05131; CHECK-NEXT: ittt vs5132; CHECK-NEXT: movvs r2, #05133; CHECK-NEXT: movvs r1, #05134; CHECK-NEXT: movvs r0, #05135; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5136; CHECK-NEXT: mov r0, r65137; CHECK-NEXT: vmov r7, s185138; CHECK-NEXT: vcvtt.f32.f16 s26, s175139; CHECK-NEXT: bl __fixsfti5140; CHECK-NEXT: vcmp.f32 s28, s245141; CHECK-NEXT: add.w r12, r4, #805142; CHECK-NEXT: vmrs APSR_nzcv, fpscr5143; CHECK-NEXT: itttt lt5144; CHECK-NEXT: movlt.w r3, #-21474836485145; CHECK-NEXT: movlt r2, #05146; CHECK-NEXT: movlt r1, #05147; CHECK-NEXT: movlt r0, #05148; CHECK-NEXT: vcmp.f32 s28, s225149; CHECK-NEXT: vmrs APSR_nzcv, fpscr5150; CHECK-NEXT: vcmp.f32 s28, s285151; CHECK-NEXT: itttt gt5152; CHECK-NEXT: movgt.w r0, #-15153; CHECK-NEXT: movgt.w r1, #-15154; CHECK-NEXT: movgt.w r2, #-15155; CHECK-NEXT: mvngt r3, #-21474836485156; CHECK-NEXT: vmrs APSR_nzcv, fpscr5157; CHECK-NEXT: it vs5158; CHECK-NEXT: movvs r3, #05159; CHECK-NEXT: ittt vs5160; CHECK-NEXT: movvs r2, #05161; CHECK-NEXT: movvs r1, #05162; CHECK-NEXT: movvs r0, #05163; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5164; CHECK-NEXT: mov r0, r75165; CHECK-NEXT: vmov r6, s265166; CHECK-NEXT: vcvtb.f32.f16 s28, s175167; CHECK-NEXT: bl __fixsfti5168; CHECK-NEXT: vcmp.f32 s18, s245169; CHECK-NEXT: add.w r12, r4, #645170; CHECK-NEXT: vmrs APSR_nzcv, fpscr5171; CHECK-NEXT: itttt lt5172; CHECK-NEXT: movlt.w r3, #-21474836485173; CHECK-NEXT: movlt r2, #05174; CHECK-NEXT: movlt r1, #05175; CHECK-NEXT: movlt r0, #05176; CHECK-NEXT: vcmp.f32 s18, s225177; CHECK-NEXT: vcvtt.f32.f16 s16, s165178; CHECK-NEXT: vmrs APSR_nzcv, fpscr5179; CHECK-NEXT: itttt gt5180; CHECK-NEXT: movgt.w r0, #-15181; CHECK-NEXT: movgt.w r1, #-15182; CHECK-NEXT: movgt.w r2, #-15183; CHECK-NEXT: mvngt r3, #-21474836485184; CHECK-NEXT: vcmp.f32 s18, s185185; CHECK-NEXT: vmrs APSR_nzcv, fpscr5186; CHECK-NEXT: it vs5187; CHECK-NEXT: movvs r3, #05188; CHECK-NEXT: ittt vs5189; CHECK-NEXT: movvs r2, #05190; CHECK-NEXT: movvs r1, #05191; CHECK-NEXT: movvs r0, #05192; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5193; CHECK-NEXT: mov r0, r65194; CHECK-NEXT: vmov r7, s285195; CHECK-NEXT: bl __fixsfti5196; CHECK-NEXT: vcmp.f32 s26, s245197; CHECK-NEXT: add.w r12, r4, #485198; CHECK-NEXT: vmrs APSR_nzcv, fpscr5199; CHECK-NEXT: itttt lt5200; CHECK-NEXT: movlt.w r3, #-21474836485201; CHECK-NEXT: movlt r2, #05202; CHECK-NEXT: movlt r1, #05203; CHECK-NEXT: movlt r0, #05204; CHECK-NEXT: vcmp.f32 s26, s225205; CHECK-NEXT: vmrs APSR_nzcv, fpscr5206; CHECK-NEXT: itttt gt5207; CHECK-NEXT: movgt.w r0, #-15208; CHECK-NEXT: movgt.w r1, #-15209; CHECK-NEXT: movgt.w r2, #-15210; CHECK-NEXT: mvngt r3, #-21474836485211; CHECK-NEXT: vcmp.f32 s26, s265212; CHECK-NEXT: vmrs APSR_nzcv, fpscr5213; CHECK-NEXT: it vs5214; CHECK-NEXT: movvs r3, #05215; CHECK-NEXT: ittt vs5216; CHECK-NEXT: movvs r2, #05217; CHECK-NEXT: movvs r1, #05218; CHECK-NEXT: movvs r0, #05219; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5220; CHECK-NEXT: mov r0, r75221; CHECK-NEXT: vmov r6, s165222; CHECK-NEXT: bl __fixsfti5223; CHECK-NEXT: vcmp.f32 s28, s245224; CHECK-NEXT: add.w r12, r4, #325225; CHECK-NEXT: vmrs APSR_nzcv, fpscr5226; CHECK-NEXT: itttt lt5227; CHECK-NEXT: movlt.w r3, #-21474836485228; CHECK-NEXT: movlt r2, #05229; CHECK-NEXT: movlt r1, #05230; CHECK-NEXT: movlt r0, #05231; CHECK-NEXT: vcmp.f32 s28, s225232; CHECK-NEXT: vmrs APSR_nzcv, fpscr5233; CHECK-NEXT: itttt gt5234; CHECK-NEXT: movgt.w r0, #-15235; CHECK-NEXT: movgt.w r1, #-15236; CHECK-NEXT: movgt.w r2, #-15237; CHECK-NEXT: mvngt r3, #-21474836485238; CHECK-NEXT: vcmp.f32 s28, s285239; CHECK-NEXT: vmrs APSR_nzcv, fpscr5240; CHECK-NEXT: itttt vs5241; CHECK-NEXT: movvs r3, #05242; CHECK-NEXT: movvs r2, #05243; CHECK-NEXT: movvs r1, #05244; CHECK-NEXT: movvs r0, #05245; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5246; CHECK-NEXT: mov r0, r65247; CHECK-NEXT: bl __fixsfti5248; CHECK-NEXT: vcmp.f32 s16, s245249; CHECK-NEXT: add.w r12, r4, #165250; CHECK-NEXT: vmrs APSR_nzcv, fpscr5251; CHECK-NEXT: itttt lt5252; CHECK-NEXT: movlt.w r3, #-21474836485253; CHECK-NEXT: movlt r2, #05254; CHECK-NEXT: movlt r1, #05255; CHECK-NEXT: movlt r0, #05256; CHECK-NEXT: vcmp.f32 s16, s225257; CHECK-NEXT: vmrs APSR_nzcv, fpscr5258; CHECK-NEXT: itttt gt5259; CHECK-NEXT: movgt.w r0, #-15260; CHECK-NEXT: movgt.w r1, #-15261; CHECK-NEXT: movgt.w r2, #-15262; CHECK-NEXT: mvngt r3, #-21474836485263; CHECK-NEXT: vcmp.f32 s16, s165264; CHECK-NEXT: vmrs APSR_nzcv, fpscr5265; CHECK-NEXT: itttt vs5266; CHECK-NEXT: movvs r3, #05267; CHECK-NEXT: movvs r2, #05268; CHECK-NEXT: movvs r1, #05269; CHECK-NEXT: movvs r0, #05270; CHECK-NEXT: stm.w r12, {r0, r1, r2, r3}5271; CHECK-NEXT: mov r0, r55272; CHECK-NEXT: bl __fixsfti5273; CHECK-NEXT: vcmp.f32 s20, s245274; CHECK-NEXT: vmrs APSR_nzcv, fpscr5275; CHECK-NEXT: itttt lt5276; CHECK-NEXT: movlt.w r3, #-21474836485277; CHECK-NEXT: movlt r2, #05278; CHECK-NEXT: movlt r1, #05279; CHECK-NEXT: movlt r0, #05280; CHECK-NEXT: vcmp.f32 s20, s225281; CHECK-NEXT: vmrs APSR_nzcv, fpscr5282; CHECK-NEXT: itttt gt5283; CHECK-NEXT: movgt.w r0, #-15284; CHECK-NEXT: movgt.w r1, #-15285; CHECK-NEXT: movgt.w r2, #-15286; CHECK-NEXT: mvngt r3, #-21474836485287; CHECK-NEXT: vcmp.f32 s20, s205288; CHECK-NEXT: vmrs APSR_nzcv, fpscr5289; CHECK-NEXT: itttt vs5290; CHECK-NEXT: movvs r3, #05291; CHECK-NEXT: movvs r2, #05292; CHECK-NEXT: movvs r1, #05293; CHECK-NEXT: movvs r0, #05294; CHECK-NEXT: stm r4!, {r0, r1, r2, r3}5295; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15}5296; CHECK-NEXT: add sp, #45297; CHECK-NEXT: pop {r4, r5, r6, r7, pc}5298; CHECK-NEXT: .p2align 25299; CHECK-NEXT: @ %bb.1:5300; CHECK-NEXT: .LCPI51_0:5301; CHECK-NEXT: .long 0x7effffff @ float 1.70141173E+385302; CHECK-NEXT: .LCPI51_1:5303; CHECK-NEXT: .long 0xff000000 @ float -1.70141183E+385304 %x = call <8 x i128> @llvm.fptosi.sat.v8f16.v8i128(<8 x half> %f)5305 ret <8 x i128> %x5306}5307 5308