brintos

brintos / llvm-project-archived public Read only

0
0
Text · 84.7 KiB · 52107aa Raw
2285 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=arm-none-eabihf -mattr=+v7,+neon,+vfp4 | FileCheck %s --check-prefixes=CHECK-ARMV73; RUN: llc < %s -mtriple=arm-none-eabihf -mattr=+v8,+neon,+fp-armv8 | FileCheck %s --check-prefixes=CHECK,CHECK-NOFP164; RUN: llc < %s -mtriple=arm-none-eabihf -mattr=+v8,+neon,+fullfp16 | FileCheck %s --check-prefixes=CHECK,CHECK-FP165 6define <4 x half> @frinta_4h(<4 x half> %A) nounwind {7; CHECK-ARMV7-LABEL: frinta_4h:8; CHECK-ARMV7:       @ %bb.0:9; CHECK-ARMV7-NEXT:    .save {r4, lr}10; CHECK-ARMV7-NEXT:    push {r4, lr}11; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}12; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}13; CHECK-ARMV7-NEXT:    vmov.f32 s20, s014; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s315; CHECK-ARMV7-NEXT:    vmov.f32 s16, s216; CHECK-ARMV7-NEXT:    vmov.f32 s18, s117; CHECK-ARMV7-NEXT:    bl roundf18; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s019; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s1620; CHECK-ARMV7-NEXT:    vmov r4, s021; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s2022; CHECK-ARMV7-NEXT:    vmov.f32 s0, s223; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s1824; CHECK-ARMV7-NEXT:    bl roundf25; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s026; CHECK-ARMV7-NEXT:    vmov r0, s027; CHECK-ARMV7-NEXT:    vmov.f32 s0, s1828; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #1629; CHECK-ARMV7-NEXT:    bl roundf30; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s031; CHECK-ARMV7-NEXT:    vmov.f32 s0, s2032; CHECK-ARMV7-NEXT:    bl roundf33; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s034; CHECK-ARMV7-NEXT:    vmov r0, s1635; CHECK-ARMV7-NEXT:    vmov r1, s036; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #1637; CHECK-ARMV7-NEXT:    vmov d16, r0, r438; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]39; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]40; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]41; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]42; CHECK-ARMV7-NEXT:    vmov s0, r043; CHECK-ARMV7-NEXT:    vmov s1, r144; CHECK-ARMV7-NEXT:    vmov s2, r245; CHECK-ARMV7-NEXT:    vmov s3, r346; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}47; CHECK-ARMV7-NEXT:    pop {r4, pc}48;49; CHECK-NOFP16-LABEL: frinta_4h:50; CHECK-NOFP16:       @ %bb.0:51; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s352; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s253; CHECK-NOFP16-NEXT:    vrinta.f32 s4, s454; CHECK-NOFP16-NEXT:    vrinta.f32 s2, s255; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s456; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s257; CHECK-NOFP16-NEXT:    vmov r0, s458; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s059; CHECK-NOFP16-NEXT:    vmov r1, s260; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s161; CHECK-NOFP16-NEXT:    vrinta.f32 s2, s262; CHECK-NOFP16-NEXT:    vrinta.f32 s0, s063; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s264; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s065; CHECK-NOFP16-NEXT:    vmov r2, s066; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #1667; CHECK-NOFP16-NEXT:    vmov r1, s268; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #1669; CHECK-NOFP16-NEXT:    vmov d16, r1, r070; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]71; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]72; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]73; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]74; CHECK-NOFP16-NEXT:    vmov s0, r075; CHECK-NOFP16-NEXT:    vmov s1, r176; CHECK-NOFP16-NEXT:    vmov s2, r277; CHECK-NOFP16-NEXT:    vmov s3, r378; CHECK-NOFP16-NEXT:    bx lr79;80; CHECK-FP16-LABEL: frinta_4h:81; CHECK-FP16:       @ %bb.0:82; CHECK-FP16-NEXT:    vrinta.f16 d0, d083; CHECK-FP16-NEXT:    bx lr84  %tmp3 = call <4 x half> @llvm.round.v4f16(<4 x half> %A)85  ret <4 x half> %tmp386}87 88define <8 x half> @frinta_8h(<8 x half> %A) nounwind {89; CHECK-ARMV7-LABEL: frinta_8h:90; CHECK-ARMV7:       @ %bb.0:91; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}92; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}93; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}94; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}95; CHECK-ARMV7-NEXT:    vmov.f32 s28, s096; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s797; CHECK-ARMV7-NEXT:    vmov.f32 s16, s698; CHECK-ARMV7-NEXT:    vmov.f32 s18, s599; CHECK-ARMV7-NEXT:    vmov.f32 s20, s4100; CHECK-ARMV7-NEXT:    vmov.f32 s22, s3101; CHECK-ARMV7-NEXT:    vmov.f32 s24, s2102; CHECK-ARMV7-NEXT:    vmov.f32 s26, s1103; CHECK-ARMV7-NEXT:    bl roundf104; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0105; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s16106; CHECK-ARMV7-NEXT:    vmov r4, s0107; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s24108; CHECK-ARMV7-NEXT:    vmov.f32 s0, s2109; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s22110; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s20111; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s18112; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s28113; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s26114; CHECK-ARMV7-NEXT:    bl roundf115; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0116; CHECK-ARMV7-NEXT:    vmov r0, s0117; CHECK-ARMV7-NEXT:    vmov.f32 s0, s26118; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #16119; CHECK-ARMV7-NEXT:    bl roundf120; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0121; CHECK-ARMV7-NEXT:    vmov r5, s0122; CHECK-ARMV7-NEXT:    vmov.f32 s0, s28123; CHECK-ARMV7-NEXT:    bl roundf124; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0125; CHECK-ARMV7-NEXT:    vmov r0, s0126; CHECK-ARMV7-NEXT:    vmov.f32 s0, s18127; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #16128; CHECK-ARMV7-NEXT:    bl roundf129; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s0130; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20131; CHECK-ARMV7-NEXT:    bl roundf132; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0133; CHECK-ARMV7-NEXT:    vmov r0, s16134; CHECK-ARMV7-NEXT:    vmov r1, s0135; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22136; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #16137; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r0138; CHECK-ARMV7-NEXT:    bl roundf139; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0140; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r5141; CHECK-ARMV7-NEXT:    vmov r6, s0142; CHECK-ARMV7-NEXT:    vmov.f32 s0, s24143; CHECK-ARMV7-NEXT:    bl roundf144; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0145; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r4146; CHECK-ARMV7-NEXT:    vmov r0, s0147; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]148; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]149; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #16150; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]151; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r0152; CHECK-ARMV7-NEXT:    vmov s5, r5153; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]154; CHECK-ARMV7-NEXT:    vmov s6, r4155; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]156; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]157; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]158; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]159; CHECK-ARMV7-NEXT:    vmov s4, r6160; CHECK-ARMV7-NEXT:    vmov s7, r0161; CHECK-ARMV7-NEXT:    vmov s0, r12162; CHECK-ARMV7-NEXT:    vmov s1, r1163; CHECK-ARMV7-NEXT:    vmov s2, r2164; CHECK-ARMV7-NEXT:    vmov s3, r3165; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}166; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}167;168; CHECK-NOFP16-LABEL: frinta_8h:169; CHECK-NOFP16:       @ %bb.0:170; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}171; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}172; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s7173; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s6174; CHECK-NOFP16-NEXT:    vrinta.f32 s8, s8175; CHECK-NOFP16-NEXT:    vrinta.f32 s6, s6176; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s8177; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s6178; CHECK-NOFP16-NEXT:    vmov r0, s8179; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s0180; CHECK-NOFP16-NEXT:    vmov r1, s6181; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s1182; CHECK-NOFP16-NEXT:    vrinta.f32 s6, s6183; CHECK-NOFP16-NEXT:    vrinta.f32 s0, s0184; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s6185; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0186; CHECK-NOFP16-NEXT:    vmov r2, s0187; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s5188; CHECK-NOFP16-NEXT:    vrinta.f32 s0, s0189; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s4190; CHECK-NOFP16-NEXT:    vrinta.f32 s4, s4191; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0192; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s4193; CHECK-NOFP16-NEXT:    vmov r3, s4194; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #16195; CHECK-NOFP16-NEXT:    vmov r1, s6196; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #16197; CHECK-NOFP16-NEXT:    vmov r2, s0198; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s3199; CHECK-NOFP16-NEXT:    vrinta.f32 s0, s0200; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r1201; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0202; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #16203; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r2204; CHECK-NOFP16-NEXT:    vmov r2, s0205; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s2206; CHECK-NOFP16-NEXT:    vrinta.f32 s0, s0207; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0208; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r0209; CHECK-NOFP16-NEXT:    vmov r1, s0210; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]211; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]212; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #16213; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]214; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r0215; CHECK-NOFP16-NEXT:    vmov s6, r4216; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]217; CHECK-NOFP16-NEXT:    vmov s7, r5218; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]219; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]220; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]221; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]222; CHECK-NOFP16-NEXT:    vmov s5, r1223; CHECK-NOFP16-NEXT:    vmov s4, r0224; CHECK-NOFP16-NEXT:    vmov s0, r12225; CHECK-NOFP16-NEXT:    vmov s1, lr226; CHECK-NOFP16-NEXT:    vmov s2, r2227; CHECK-NOFP16-NEXT:    vmov s3, r3228; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}229;230; CHECK-FP16-LABEL: frinta_8h:231; CHECK-FP16:       @ %bb.0:232; CHECK-FP16-NEXT:    vrinta.f16 q0, q0233; CHECK-FP16-NEXT:    bx lr234  %tmp3 = call <8 x half> @llvm.round.v8f16(<8 x half> %A)235  ret <8 x half> %tmp3236}237 238define <2 x float> @frinta_2s(<2 x float> %A) nounwind {239; CHECK-ARMV7-LABEL: frinta_2s:240; CHECK-ARMV7:       @ %bb.0:241; CHECK-ARMV7-NEXT:    .save {r11, lr}242; CHECK-ARMV7-NEXT:    push {r11, lr}243; CHECK-ARMV7-NEXT:    .vsave {d8, d9}244; CHECK-ARMV7-NEXT:    vpush {d8, d9}245; CHECK-ARMV7-NEXT:    vmov.f64 d8, d0246; CHECK-ARMV7-NEXT:    vmov.f32 s0, s17247; CHECK-ARMV7-NEXT:    bl roundf248; CHECK-ARMV7-NEXT:    vmov.f32 s19, s0249; CHECK-ARMV7-NEXT:    vmov.f32 s0, s16250; CHECK-ARMV7-NEXT:    bl roundf251; CHECK-ARMV7-NEXT:    vmov.f32 s18, s0252; CHECK-ARMV7-NEXT:    vmov.f64 d0, d9253; CHECK-ARMV7-NEXT:    vpop {d8, d9}254; CHECK-ARMV7-NEXT:    pop {r11, pc}255;256; CHECK-LABEL: frinta_2s:257; CHECK:       @ %bb.0:258; CHECK-NEXT:    vrinta.f32 d0, d0259; CHECK-NEXT:    bx lr260  %tmp3 = call <2 x float> @llvm.round.v2f32(<2 x float> %A)261  ret <2 x float> %tmp3262}263 264define <4 x float> @frinta_4s(<4 x float> %A) nounwind {265; CHECK-ARMV7-LABEL: frinta_4s:266; CHECK-ARMV7:       @ %bb.0:267; CHECK-ARMV7-NEXT:    .save {r11, lr}268; CHECK-ARMV7-NEXT:    push {r11, lr}269; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}270; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}271; CHECK-ARMV7-NEXT:    vorr q5, q0, q0272; CHECK-ARMV7-NEXT:    vmov.f32 s0, s23273; CHECK-ARMV7-NEXT:    bl roundf274; CHECK-ARMV7-NEXT:    vmov.f32 s19, s0275; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22276; CHECK-ARMV7-NEXT:    bl roundf277; CHECK-ARMV7-NEXT:    vmov.f32 s18, s0278; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21279; CHECK-ARMV7-NEXT:    bl roundf280; CHECK-ARMV7-NEXT:    vmov.f32 s17, s0281; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20282; CHECK-ARMV7-NEXT:    bl roundf283; CHECK-ARMV7-NEXT:    vmov.f32 s16, s0284; CHECK-ARMV7-NEXT:    vorr q0, q4, q4285; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}286; CHECK-ARMV7-NEXT:    pop {r11, pc}287;288; CHECK-LABEL: frinta_4s:289; CHECK:       @ %bb.0:290; CHECK-NEXT:    vrinta.f32 q0, q0291; CHECK-NEXT:    bx lr292  %tmp3 = call <4 x float> @llvm.round.v4f32(<4 x float> %A)293  ret <4 x float> %tmp3294}295 296define <2 x double> @frinta_2d(<2 x double> %A) nounwind {297; CHECK-ARMV7-LABEL: frinta_2d:298; CHECK-ARMV7:       @ %bb.0:299; CHECK-ARMV7-NEXT:    .save {r11, lr}300; CHECK-ARMV7-NEXT:    push {r11, lr}301; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}302; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}303; CHECK-ARMV7-NEXT:    vorr q4, q0, q0304; CHECK-ARMV7-NEXT:    vorr d0, d9, d9305; CHECK-ARMV7-NEXT:    bl round306; CHECK-ARMV7-NEXT:    vorr d11, d0, d0307; CHECK-ARMV7-NEXT:    vorr d0, d8, d8308; CHECK-ARMV7-NEXT:    bl round309; CHECK-ARMV7-NEXT:    vorr d10, d0, d0310; CHECK-ARMV7-NEXT:    vorr q0, q5, q5311; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}312; CHECK-ARMV7-NEXT:    pop {r11, pc}313;314; CHECK-LABEL: frinta_2d:315; CHECK:       @ %bb.0:316; CHECK-NEXT:    vrinta.f64 d17, d1317; CHECK-NEXT:    vrinta.f64 d16, d0318; CHECK-NEXT:    vorr q0, q8, q8319; CHECK-NEXT:    bx lr320  %tmp3 = call <2 x double> @llvm.round.v2f64(<2 x double> %A)321  ret <2 x double> %tmp3322}323 324 325define <4 x half> @frinti_4h(<4 x half> %A) nounwind {326; CHECK-ARMV7-LABEL: frinti_4h:327; CHECK-ARMV7:       @ %bb.0:328; CHECK-ARMV7-NEXT:    .save {r4, lr}329; CHECK-ARMV7-NEXT:    push {r4, lr}330; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}331; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}332; CHECK-ARMV7-NEXT:    vmov.f32 s20, s0333; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s3334; CHECK-ARMV7-NEXT:    vmov.f32 s16, s2335; CHECK-ARMV7-NEXT:    vmov.f32 s18, s1336; CHECK-ARMV7-NEXT:    bl nearbyintf337; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0338; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s16339; CHECK-ARMV7-NEXT:    vmov r4, s0340; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s20341; CHECK-ARMV7-NEXT:    vmov.f32 s0, s2342; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s18343; CHECK-ARMV7-NEXT:    bl nearbyintf344; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0345; CHECK-ARMV7-NEXT:    vmov r0, s0346; CHECK-ARMV7-NEXT:    vmov.f32 s0, s18347; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #16348; CHECK-ARMV7-NEXT:    bl nearbyintf349; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s0350; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20351; CHECK-ARMV7-NEXT:    bl nearbyintf352; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0353; CHECK-ARMV7-NEXT:    vmov r0, s16354; CHECK-ARMV7-NEXT:    vmov r1, s0355; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #16356; CHECK-ARMV7-NEXT:    vmov d16, r0, r4357; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]358; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]359; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]360; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]361; CHECK-ARMV7-NEXT:    vmov s0, r0362; CHECK-ARMV7-NEXT:    vmov s1, r1363; CHECK-ARMV7-NEXT:    vmov s2, r2364; CHECK-ARMV7-NEXT:    vmov s3, r3365; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}366; CHECK-ARMV7-NEXT:    pop {r4, pc}367;368; CHECK-NOFP16-LABEL: frinti_4h:369; CHECK-NOFP16:       @ %bb.0:370; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s3371; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s2372; CHECK-NOFP16-NEXT:    vrintr.f32 s4, s4373; CHECK-NOFP16-NEXT:    vrintr.f32 s2, s2374; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s4375; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s2376; CHECK-NOFP16-NEXT:    vmov r0, s4377; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s0378; CHECK-NOFP16-NEXT:    vmov r1, s2379; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s1380; CHECK-NOFP16-NEXT:    vrintr.f32 s2, s2381; CHECK-NOFP16-NEXT:    vrintr.f32 s0, s0382; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s2383; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0384; CHECK-NOFP16-NEXT:    vmov r2, s0385; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #16386; CHECK-NOFP16-NEXT:    vmov r1, s2387; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #16388; CHECK-NOFP16-NEXT:    vmov d16, r1, r0389; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]390; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]391; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]392; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]393; CHECK-NOFP16-NEXT:    vmov s0, r0394; CHECK-NOFP16-NEXT:    vmov s1, r1395; CHECK-NOFP16-NEXT:    vmov s2, r2396; CHECK-NOFP16-NEXT:    vmov s3, r3397; CHECK-NOFP16-NEXT:    bx lr398;399; CHECK-FP16-LABEL: frinti_4h:400; CHECK-FP16:       @ %bb.0:401; CHECK-FP16-NEXT:    vmovx.f16 s2, s0402; CHECK-FP16-NEXT:    vrintr.f16 s2, s2403; CHECK-FP16-NEXT:    vmov r0, s2404; CHECK-FP16-NEXT:    vrintr.f16 s2, s0405; CHECK-FP16-NEXT:    vmov r1, s2406; CHECK-FP16-NEXT:    vrintr.f16 s2, s1407; CHECK-FP16-NEXT:    vmovx.f16 s0, s1408; CHECK-FP16-NEXT:    vrintr.f16 s0, s0409; CHECK-FP16-NEXT:    vmov.16 d16[0], r1410; CHECK-FP16-NEXT:    vmov.16 d16[1], r0411; CHECK-FP16-NEXT:    vmov r0, s2412; CHECK-FP16-NEXT:    vmov.16 d16[2], r0413; CHECK-FP16-NEXT:    vmov r0, s0414; CHECK-FP16-NEXT:    vmov.16 d16[3], r0415; CHECK-FP16-NEXT:    vorr d0, d16, d16416; CHECK-FP16-NEXT:    bx lr417  %tmp3 = call <4 x half> @llvm.nearbyint.v4f16(<4 x half> %A)418  ret <4 x half> %tmp3419}420 421define <8 x half> @frinti_8h(<8 x half> %A) nounwind {422; CHECK-ARMV7-LABEL: frinti_8h:423; CHECK-ARMV7:       @ %bb.0:424; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}425; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}426; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}427; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}428; CHECK-ARMV7-NEXT:    vmov.f32 s28, s0429; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s7430; CHECK-ARMV7-NEXT:    vmov.f32 s16, s6431; CHECK-ARMV7-NEXT:    vmov.f32 s18, s5432; CHECK-ARMV7-NEXT:    vmov.f32 s20, s4433; CHECK-ARMV7-NEXT:    vmov.f32 s22, s3434; CHECK-ARMV7-NEXT:    vmov.f32 s24, s2435; CHECK-ARMV7-NEXT:    vmov.f32 s26, s1436; CHECK-ARMV7-NEXT:    bl nearbyintf437; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0438; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s16439; CHECK-ARMV7-NEXT:    vmov r4, s0440; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s24441; CHECK-ARMV7-NEXT:    vmov.f32 s0, s2442; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s22443; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s20444; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s18445; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s28446; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s26447; CHECK-ARMV7-NEXT:    bl nearbyintf448; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0449; CHECK-ARMV7-NEXT:    vmov r0, s0450; CHECK-ARMV7-NEXT:    vmov.f32 s0, s26451; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #16452; CHECK-ARMV7-NEXT:    bl nearbyintf453; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0454; CHECK-ARMV7-NEXT:    vmov r5, s0455; CHECK-ARMV7-NEXT:    vmov.f32 s0, s28456; CHECK-ARMV7-NEXT:    bl nearbyintf457; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0458; CHECK-ARMV7-NEXT:    vmov r0, s0459; CHECK-ARMV7-NEXT:    vmov.f32 s0, s18460; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #16461; CHECK-ARMV7-NEXT:    bl nearbyintf462; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s0463; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20464; CHECK-ARMV7-NEXT:    bl nearbyintf465; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0466; CHECK-ARMV7-NEXT:    vmov r0, s16467; CHECK-ARMV7-NEXT:    vmov r1, s0468; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22469; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #16470; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r0471; CHECK-ARMV7-NEXT:    bl nearbyintf472; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0473; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r5474; CHECK-ARMV7-NEXT:    vmov r6, s0475; CHECK-ARMV7-NEXT:    vmov.f32 s0, s24476; CHECK-ARMV7-NEXT:    bl nearbyintf477; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0478; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r4479; CHECK-ARMV7-NEXT:    vmov r0, s0480; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]481; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]482; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #16483; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]484; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r0485; CHECK-ARMV7-NEXT:    vmov s5, r5486; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]487; CHECK-ARMV7-NEXT:    vmov s6, r4488; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]489; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]490; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]491; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]492; CHECK-ARMV7-NEXT:    vmov s4, r6493; CHECK-ARMV7-NEXT:    vmov s7, r0494; CHECK-ARMV7-NEXT:    vmov s0, r12495; CHECK-ARMV7-NEXT:    vmov s1, r1496; CHECK-ARMV7-NEXT:    vmov s2, r2497; CHECK-ARMV7-NEXT:    vmov s3, r3498; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}499; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}500;501; CHECK-NOFP16-LABEL: frinti_8h:502; CHECK-NOFP16:       @ %bb.0:503; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}504; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}505; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s7506; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s6507; CHECK-NOFP16-NEXT:    vrintr.f32 s8, s8508; CHECK-NOFP16-NEXT:    vrintr.f32 s6, s6509; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s8510; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s6511; CHECK-NOFP16-NEXT:    vmov r0, s8512; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s0513; CHECK-NOFP16-NEXT:    vmov r1, s6514; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s1515; CHECK-NOFP16-NEXT:    vrintr.f32 s6, s6516; CHECK-NOFP16-NEXT:    vrintr.f32 s0, s0517; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s6518; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0519; CHECK-NOFP16-NEXT:    vmov r2, s0520; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s5521; CHECK-NOFP16-NEXT:    vrintr.f32 s0, s0522; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s4523; CHECK-NOFP16-NEXT:    vrintr.f32 s4, s4524; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0525; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s4526; CHECK-NOFP16-NEXT:    vmov r3, s4527; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #16528; CHECK-NOFP16-NEXT:    vmov r1, s6529; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #16530; CHECK-NOFP16-NEXT:    vmov r2, s0531; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s3532; CHECK-NOFP16-NEXT:    vrintr.f32 s0, s0533; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r1534; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0535; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #16536; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r2537; CHECK-NOFP16-NEXT:    vmov r2, s0538; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s2539; CHECK-NOFP16-NEXT:    vrintr.f32 s0, s0540; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0541; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r0542; CHECK-NOFP16-NEXT:    vmov r1, s0543; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]544; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]545; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #16546; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]547; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r0548; CHECK-NOFP16-NEXT:    vmov s6, r4549; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]550; CHECK-NOFP16-NEXT:    vmov s7, r5551; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]552; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]553; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]554; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]555; CHECK-NOFP16-NEXT:    vmov s5, r1556; CHECK-NOFP16-NEXT:    vmov s4, r0557; CHECK-NOFP16-NEXT:    vmov s0, r12558; CHECK-NOFP16-NEXT:    vmov s1, lr559; CHECK-NOFP16-NEXT:    vmov s2, r2560; CHECK-NOFP16-NEXT:    vmov s3, r3561; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}562;563; CHECK-FP16-LABEL: frinti_8h:564; CHECK-FP16:       @ %bb.0:565; CHECK-FP16-NEXT:    vmovx.f16 s4, s2566; CHECK-FP16-NEXT:    vrintr.f16 s4, s4567; CHECK-FP16-NEXT:    vmov r0, s4568; CHECK-FP16-NEXT:    vrintr.f16 s4, s2569; CHECK-FP16-NEXT:    vmov r1, s4570; CHECK-FP16-NEXT:    vrintr.f16 s4, s3571; CHECK-FP16-NEXT:    vmov.16 d17[0], r1572; CHECK-FP16-NEXT:    vmov.16 d17[1], r0573; CHECK-FP16-NEXT:    vmov r0, s4574; CHECK-FP16-NEXT:    vmovx.f16 s4, s3575; CHECK-FP16-NEXT:    vrintr.f16 s4, s4576; CHECK-FP16-NEXT:    vmov.16 d17[2], r0577; CHECK-FP16-NEXT:    vmov r0, s4578; CHECK-FP16-NEXT:    vmovx.f16 s4, s0579; CHECK-FP16-NEXT:    vrintr.f16 s4, s4580; CHECK-FP16-NEXT:    vmov.16 d17[3], r0581; CHECK-FP16-NEXT:    vmov r0, s4582; CHECK-FP16-NEXT:    vrintr.f16 s4, s0583; CHECK-FP16-NEXT:    vmovx.f16 s0, s1584; CHECK-FP16-NEXT:    vmov r1, s4585; CHECK-FP16-NEXT:    vrintr.f16 s4, s1586; CHECK-FP16-NEXT:    vrintr.f16 s0, s0587; CHECK-FP16-NEXT:    vmov.16 d16[0], r1588; CHECK-FP16-NEXT:    vmov.16 d16[1], r0589; CHECK-FP16-NEXT:    vmov r0, s4590; CHECK-FP16-NEXT:    vmov.16 d16[2], r0591; CHECK-FP16-NEXT:    vmov r0, s0592; CHECK-FP16-NEXT:    vmov.16 d16[3], r0593; CHECK-FP16-NEXT:    vorr q0, q8, q8594; CHECK-FP16-NEXT:    bx lr595  %tmp3 = call <8 x half> @llvm.nearbyint.v8f16(<8 x half> %A)596  ret <8 x half> %tmp3597}598 599define <2 x float> @frinti_2s(<2 x float> %A) nounwind {600; CHECK-ARMV7-LABEL: frinti_2s:601; CHECK-ARMV7:       @ %bb.0:602; CHECK-ARMV7-NEXT:    .save {r11, lr}603; CHECK-ARMV7-NEXT:    push {r11, lr}604; CHECK-ARMV7-NEXT:    .vsave {d8, d9}605; CHECK-ARMV7-NEXT:    vpush {d8, d9}606; CHECK-ARMV7-NEXT:    vmov.f64 d8, d0607; CHECK-ARMV7-NEXT:    vmov.f32 s0, s17608; CHECK-ARMV7-NEXT:    bl nearbyintf609; CHECK-ARMV7-NEXT:    vmov.f32 s19, s0610; CHECK-ARMV7-NEXT:    vmov.f32 s0, s16611; CHECK-ARMV7-NEXT:    bl nearbyintf612; CHECK-ARMV7-NEXT:    vmov.f32 s18, s0613; CHECK-ARMV7-NEXT:    vmov.f64 d0, d9614; CHECK-ARMV7-NEXT:    vpop {d8, d9}615; CHECK-ARMV7-NEXT:    pop {r11, pc}616;617; CHECK-LABEL: frinti_2s:618; CHECK:       @ %bb.0:619; CHECK-NEXT:    vrintr.f32 s3, s1620; CHECK-NEXT:    vrintr.f32 s2, s0621; CHECK-NEXT:    vmov.f64 d0, d1622; CHECK-NEXT:    bx lr623  %tmp3 = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> %A)624  ret <2 x float> %tmp3625}626 627define <4 x float> @frinti_4s(<4 x float> %A) nounwind {628; CHECK-ARMV7-LABEL: frinti_4s:629; CHECK-ARMV7:       @ %bb.0:630; CHECK-ARMV7-NEXT:    .save {r11, lr}631; CHECK-ARMV7-NEXT:    push {r11, lr}632; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}633; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}634; CHECK-ARMV7-NEXT:    vorr q5, q0, q0635; CHECK-ARMV7-NEXT:    vmov.f32 s0, s23636; CHECK-ARMV7-NEXT:    bl nearbyintf637; CHECK-ARMV7-NEXT:    vmov.f32 s19, s0638; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22639; CHECK-ARMV7-NEXT:    bl nearbyintf640; CHECK-ARMV7-NEXT:    vmov.f32 s18, s0641; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21642; CHECK-ARMV7-NEXT:    bl nearbyintf643; CHECK-ARMV7-NEXT:    vmov.f32 s17, s0644; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20645; CHECK-ARMV7-NEXT:    bl nearbyintf646; CHECK-ARMV7-NEXT:    vmov.f32 s16, s0647; CHECK-ARMV7-NEXT:    vorr q0, q4, q4648; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}649; CHECK-ARMV7-NEXT:    pop {r11, pc}650;651; CHECK-LABEL: frinti_4s:652; CHECK:       @ %bb.0:653; CHECK-NEXT:    vrintr.f32 s7, s3654; CHECK-NEXT:    vrintr.f32 s6, s2655; CHECK-NEXT:    vrintr.f32 s5, s1656; CHECK-NEXT:    vrintr.f32 s4, s0657; CHECK-NEXT:    vorr q0, q1, q1658; CHECK-NEXT:    bx lr659  %tmp3 = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %A)660  ret <4 x float> %tmp3661}662 663define <2 x double> @frinti_2d(<2 x double> %A) nounwind {664; CHECK-ARMV7-LABEL: frinti_2d:665; CHECK-ARMV7:       @ %bb.0:666; CHECK-ARMV7-NEXT:    .save {r11, lr}667; CHECK-ARMV7-NEXT:    push {r11, lr}668; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}669; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}670; CHECK-ARMV7-NEXT:    vorr q4, q0, q0671; CHECK-ARMV7-NEXT:    vorr d0, d9, d9672; CHECK-ARMV7-NEXT:    bl nearbyint673; CHECK-ARMV7-NEXT:    vorr d11, d0, d0674; CHECK-ARMV7-NEXT:    vorr d0, d8, d8675; CHECK-ARMV7-NEXT:    bl nearbyint676; CHECK-ARMV7-NEXT:    vorr d10, d0, d0677; CHECK-ARMV7-NEXT:    vorr q0, q5, q5678; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}679; CHECK-ARMV7-NEXT:    pop {r11, pc}680;681; CHECK-LABEL: frinti_2d:682; CHECK:       @ %bb.0:683; CHECK-NEXT:    vrintr.f64 d17, d1684; CHECK-NEXT:    vrintr.f64 d16, d0685; CHECK-NEXT:    vorr q0, q8, q8686; CHECK-NEXT:    bx lr687  %tmp3 = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %A)688  ret <2 x double> %tmp3689}690 691 692define <4 x half> @frintm_4h(<4 x half> %A) nounwind {693; CHECK-ARMV7-LABEL: frintm_4h:694; CHECK-ARMV7:       @ %bb.0:695; CHECK-ARMV7-NEXT:    .save {r4, lr}696; CHECK-ARMV7-NEXT:    push {r4, lr}697; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}698; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}699; CHECK-ARMV7-NEXT:    vmov.f32 s20, s0700; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s3701; CHECK-ARMV7-NEXT:    vmov.f32 s16, s2702; CHECK-ARMV7-NEXT:    vmov.f32 s18, s1703; CHECK-ARMV7-NEXT:    bl floorf704; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0705; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s16706; CHECK-ARMV7-NEXT:    vmov r4, s0707; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s20708; CHECK-ARMV7-NEXT:    vmov.f32 s0, s2709; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s18710; CHECK-ARMV7-NEXT:    bl floorf711; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0712; CHECK-ARMV7-NEXT:    vmov r0, s0713; CHECK-ARMV7-NEXT:    vmov.f32 s0, s18714; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #16715; CHECK-ARMV7-NEXT:    bl floorf716; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s0717; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20718; CHECK-ARMV7-NEXT:    bl floorf719; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0720; CHECK-ARMV7-NEXT:    vmov r0, s16721; CHECK-ARMV7-NEXT:    vmov r1, s0722; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #16723; CHECK-ARMV7-NEXT:    vmov d16, r0, r4724; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]725; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]726; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]727; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]728; CHECK-ARMV7-NEXT:    vmov s0, r0729; CHECK-ARMV7-NEXT:    vmov s1, r1730; CHECK-ARMV7-NEXT:    vmov s2, r2731; CHECK-ARMV7-NEXT:    vmov s3, r3732; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}733; CHECK-ARMV7-NEXT:    pop {r4, pc}734;735; CHECK-NOFP16-LABEL: frintm_4h:736; CHECK-NOFP16:       @ %bb.0:737; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s3738; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s2739; CHECK-NOFP16-NEXT:    vrintm.f32 s4, s4740; CHECK-NOFP16-NEXT:    vrintm.f32 s2, s2741; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s4742; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s2743; CHECK-NOFP16-NEXT:    vmov r0, s4744; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s0745; CHECK-NOFP16-NEXT:    vmov r1, s2746; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s1747; CHECK-NOFP16-NEXT:    vrintm.f32 s2, s2748; CHECK-NOFP16-NEXT:    vrintm.f32 s0, s0749; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s2750; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0751; CHECK-NOFP16-NEXT:    vmov r2, s0752; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #16753; CHECK-NOFP16-NEXT:    vmov r1, s2754; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #16755; CHECK-NOFP16-NEXT:    vmov d16, r1, r0756; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]757; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]758; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]759; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]760; CHECK-NOFP16-NEXT:    vmov s0, r0761; CHECK-NOFP16-NEXT:    vmov s1, r1762; CHECK-NOFP16-NEXT:    vmov s2, r2763; CHECK-NOFP16-NEXT:    vmov s3, r3764; CHECK-NOFP16-NEXT:    bx lr765;766; CHECK-FP16-LABEL: frintm_4h:767; CHECK-FP16:       @ %bb.0:768; CHECK-FP16-NEXT:    vrintm.f16 d0, d0769; CHECK-FP16-NEXT:    bx lr770  %tmp3 = call <4 x half> @llvm.floor.v4f16(<4 x half> %A)771  ret <4 x half> %tmp3772}773 774define <8 x half> @frintm_8h(<8 x half> %A) nounwind {775; CHECK-ARMV7-LABEL: frintm_8h:776; CHECK-ARMV7:       @ %bb.0:777; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}778; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}779; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}780; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}781; CHECK-ARMV7-NEXT:    vmov.f32 s28, s0782; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s7783; CHECK-ARMV7-NEXT:    vmov.f32 s16, s6784; CHECK-ARMV7-NEXT:    vmov.f32 s18, s5785; CHECK-ARMV7-NEXT:    vmov.f32 s20, s4786; CHECK-ARMV7-NEXT:    vmov.f32 s22, s3787; CHECK-ARMV7-NEXT:    vmov.f32 s24, s2788; CHECK-ARMV7-NEXT:    vmov.f32 s26, s1789; CHECK-ARMV7-NEXT:    bl floorf790; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0791; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s16792; CHECK-ARMV7-NEXT:    vmov r4, s0793; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s24794; CHECK-ARMV7-NEXT:    vmov.f32 s0, s2795; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s22796; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s20797; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s18798; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s28799; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s26800; CHECK-ARMV7-NEXT:    bl floorf801; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0802; CHECK-ARMV7-NEXT:    vmov r0, s0803; CHECK-ARMV7-NEXT:    vmov.f32 s0, s26804; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #16805; CHECK-ARMV7-NEXT:    bl floorf806; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0807; CHECK-ARMV7-NEXT:    vmov r5, s0808; CHECK-ARMV7-NEXT:    vmov.f32 s0, s28809; CHECK-ARMV7-NEXT:    bl floorf810; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0811; CHECK-ARMV7-NEXT:    vmov r0, s0812; CHECK-ARMV7-NEXT:    vmov.f32 s0, s18813; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #16814; CHECK-ARMV7-NEXT:    bl floorf815; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s0816; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20817; CHECK-ARMV7-NEXT:    bl floorf818; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0819; CHECK-ARMV7-NEXT:    vmov r0, s16820; CHECK-ARMV7-NEXT:    vmov r1, s0821; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22822; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #16823; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r0824; CHECK-ARMV7-NEXT:    bl floorf825; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0826; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r5827; CHECK-ARMV7-NEXT:    vmov r6, s0828; CHECK-ARMV7-NEXT:    vmov.f32 s0, s24829; CHECK-ARMV7-NEXT:    bl floorf830; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s0831; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r4832; CHECK-ARMV7-NEXT:    vmov r0, s0833; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]834; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]835; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #16836; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]837; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r0838; CHECK-ARMV7-NEXT:    vmov s5, r5839; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]840; CHECK-ARMV7-NEXT:    vmov s6, r4841; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]842; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]843; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]844; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]845; CHECK-ARMV7-NEXT:    vmov s4, r6846; CHECK-ARMV7-NEXT:    vmov s7, r0847; CHECK-ARMV7-NEXT:    vmov s0, r12848; CHECK-ARMV7-NEXT:    vmov s1, r1849; CHECK-ARMV7-NEXT:    vmov s2, r2850; CHECK-ARMV7-NEXT:    vmov s3, r3851; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}852; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}853;854; CHECK-NOFP16-LABEL: frintm_8h:855; CHECK-NOFP16:       @ %bb.0:856; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}857; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}858; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s7859; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s6860; CHECK-NOFP16-NEXT:    vrintm.f32 s8, s8861; CHECK-NOFP16-NEXT:    vrintm.f32 s6, s6862; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s8863; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s6864; CHECK-NOFP16-NEXT:    vmov r0, s8865; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s0866; CHECK-NOFP16-NEXT:    vmov r1, s6867; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s1868; CHECK-NOFP16-NEXT:    vrintm.f32 s6, s6869; CHECK-NOFP16-NEXT:    vrintm.f32 s0, s0870; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s6871; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0872; CHECK-NOFP16-NEXT:    vmov r2, s0873; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s5874; CHECK-NOFP16-NEXT:    vrintm.f32 s0, s0875; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s4876; CHECK-NOFP16-NEXT:    vrintm.f32 s4, s4877; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0878; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s4879; CHECK-NOFP16-NEXT:    vmov r3, s4880; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #16881; CHECK-NOFP16-NEXT:    vmov r1, s6882; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #16883; CHECK-NOFP16-NEXT:    vmov r2, s0884; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s3885; CHECK-NOFP16-NEXT:    vrintm.f32 s0, s0886; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r1887; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0888; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #16889; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r2890; CHECK-NOFP16-NEXT:    vmov r2, s0891; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s2892; CHECK-NOFP16-NEXT:    vrintm.f32 s0, s0893; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s0894; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r0895; CHECK-NOFP16-NEXT:    vmov r1, s0896; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]897; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]898; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #16899; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]900; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r0901; CHECK-NOFP16-NEXT:    vmov s6, r4902; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]903; CHECK-NOFP16-NEXT:    vmov s7, r5904; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]905; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]906; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]907; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]908; CHECK-NOFP16-NEXT:    vmov s5, r1909; CHECK-NOFP16-NEXT:    vmov s4, r0910; CHECK-NOFP16-NEXT:    vmov s0, r12911; CHECK-NOFP16-NEXT:    vmov s1, lr912; CHECK-NOFP16-NEXT:    vmov s2, r2913; CHECK-NOFP16-NEXT:    vmov s3, r3914; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}915;916; CHECK-FP16-LABEL: frintm_8h:917; CHECK-FP16:       @ %bb.0:918; CHECK-FP16-NEXT:    vrintm.f16 q0, q0919; CHECK-FP16-NEXT:    bx lr920  %tmp3 = call <8 x half> @llvm.floor.v8f16(<8 x half> %A)921  ret <8 x half> %tmp3922}923 924define <2 x float> @frintm_2s(<2 x float> %A) nounwind {925; CHECK-ARMV7-LABEL: frintm_2s:926; CHECK-ARMV7:       @ %bb.0:927; CHECK-ARMV7-NEXT:    .save {r11, lr}928; CHECK-ARMV7-NEXT:    push {r11, lr}929; CHECK-ARMV7-NEXT:    .vsave {d8, d9}930; CHECK-ARMV7-NEXT:    vpush {d8, d9}931; CHECK-ARMV7-NEXT:    vmov.f64 d8, d0932; CHECK-ARMV7-NEXT:    vmov.f32 s0, s17933; CHECK-ARMV7-NEXT:    bl floorf934; CHECK-ARMV7-NEXT:    vmov.f32 s19, s0935; CHECK-ARMV7-NEXT:    vmov.f32 s0, s16936; CHECK-ARMV7-NEXT:    bl floorf937; CHECK-ARMV7-NEXT:    vmov.f32 s18, s0938; CHECK-ARMV7-NEXT:    vmov.f64 d0, d9939; CHECK-ARMV7-NEXT:    vpop {d8, d9}940; CHECK-ARMV7-NEXT:    pop {r11, pc}941;942; CHECK-LABEL: frintm_2s:943; CHECK:       @ %bb.0:944; CHECK-NEXT:    vrintm.f32 d0, d0945; CHECK-NEXT:    bx lr946  %tmp3 = call <2 x float> @llvm.floor.v2f32(<2 x float> %A)947  ret <2 x float> %tmp3948}949 950define <4 x float> @frintm_4s(<4 x float> %A) nounwind {951; CHECK-ARMV7-LABEL: frintm_4s:952; CHECK-ARMV7:       @ %bb.0:953; CHECK-ARMV7-NEXT:    .save {r11, lr}954; CHECK-ARMV7-NEXT:    push {r11, lr}955; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}956; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}957; CHECK-ARMV7-NEXT:    vorr q5, q0, q0958; CHECK-ARMV7-NEXT:    vmov.f32 s0, s23959; CHECK-ARMV7-NEXT:    bl floorf960; CHECK-ARMV7-NEXT:    vmov.f32 s19, s0961; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22962; CHECK-ARMV7-NEXT:    bl floorf963; CHECK-ARMV7-NEXT:    vmov.f32 s18, s0964; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21965; CHECK-ARMV7-NEXT:    bl floorf966; CHECK-ARMV7-NEXT:    vmov.f32 s17, s0967; CHECK-ARMV7-NEXT:    vmov.f32 s0, s20968; CHECK-ARMV7-NEXT:    bl floorf969; CHECK-ARMV7-NEXT:    vmov.f32 s16, s0970; CHECK-ARMV7-NEXT:    vorr q0, q4, q4971; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}972; CHECK-ARMV7-NEXT:    pop {r11, pc}973;974; CHECK-LABEL: frintm_4s:975; CHECK:       @ %bb.0:976; CHECK-NEXT:    vrintm.f32 q0, q0977; CHECK-NEXT:    bx lr978  %tmp3 = call <4 x float> @llvm.floor.v4f32(<4 x float> %A)979  ret <4 x float> %tmp3980}981 982define <2 x double> @frintm_2d(<2 x double> %A) nounwind {983; CHECK-ARMV7-LABEL: frintm_2d:984; CHECK-ARMV7:       @ %bb.0:985; CHECK-ARMV7-NEXT:    .save {r11, lr}986; CHECK-ARMV7-NEXT:    push {r11, lr}987; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}988; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}989; CHECK-ARMV7-NEXT:    vorr q4, q0, q0990; CHECK-ARMV7-NEXT:    vorr d0, d9, d9991; CHECK-ARMV7-NEXT:    bl floor992; CHECK-ARMV7-NEXT:    vorr d11, d0, d0993; CHECK-ARMV7-NEXT:    vorr d0, d8, d8994; CHECK-ARMV7-NEXT:    bl floor995; CHECK-ARMV7-NEXT:    vorr d10, d0, d0996; CHECK-ARMV7-NEXT:    vorr q0, q5, q5997; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}998; CHECK-ARMV7-NEXT:    pop {r11, pc}999;1000; CHECK-LABEL: frintm_2d:1001; CHECK:       @ %bb.0:1002; CHECK-NEXT:    vrintm.f64 d17, d11003; CHECK-NEXT:    vrintm.f64 d16, d01004; CHECK-NEXT:    vorr q0, q8, q81005; CHECK-NEXT:    bx lr1006  %tmp3 = call <2 x double> @llvm.floor.v2f64(<2 x double> %A)1007  ret <2 x double> %tmp31008}1009 1010 1011define <4 x half> @frintn_4h(<4 x half> %A) nounwind {1012; CHECK-ARMV7-LABEL: frintn_4h:1013; CHECK-ARMV7:       @ %bb.0:1014; CHECK-ARMV7-NEXT:    .save {r4, lr}1015; CHECK-ARMV7-NEXT:    push {r4, lr}1016; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}1017; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}1018; CHECK-ARMV7-NEXT:    vmov.f32 s20, s01019; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s31020; CHECK-ARMV7-NEXT:    vmov.f32 s16, s21021; CHECK-ARMV7-NEXT:    vmov.f32 s18, s11022; CHECK-ARMV7-NEXT:    bl roundevenf1023; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01024; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161025; CHECK-ARMV7-NEXT:    vmov r4, s01026; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201027; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21028; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181029; CHECK-ARMV7-NEXT:    bl roundevenf1030; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01031; CHECK-ARMV7-NEXT:    vmov r0, s01032; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181033; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161034; CHECK-ARMV7-NEXT:    bl roundevenf1035; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01036; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201037; CHECK-ARMV7-NEXT:    bl roundevenf1038; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01039; CHECK-ARMV7-NEXT:    vmov r0, s161040; CHECK-ARMV7-NEXT:    vmov r1, s01041; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161042; CHECK-ARMV7-NEXT:    vmov d16, r0, r41043; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]1044; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]1045; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]1046; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]1047; CHECK-ARMV7-NEXT:    vmov s0, r01048; CHECK-ARMV7-NEXT:    vmov s1, r11049; CHECK-ARMV7-NEXT:    vmov s2, r21050; CHECK-ARMV7-NEXT:    vmov s3, r31051; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}1052; CHECK-ARMV7-NEXT:    pop {r4, pc}1053;1054; CHECK-NOFP16-LABEL: frintn_4h:1055; CHECK-NOFP16:       @ %bb.0:1056; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s31057; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s21058; CHECK-NOFP16-NEXT:    vrintn.f32 s4, s41059; CHECK-NOFP16-NEXT:    vrintn.f32 s2, s21060; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s41061; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s21062; CHECK-NOFP16-NEXT:    vmov r0, s41063; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s01064; CHECK-NOFP16-NEXT:    vmov r1, s21065; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s11066; CHECK-NOFP16-NEXT:    vrintn.f32 s2, s21067; CHECK-NOFP16-NEXT:    vrintn.f32 s0, s01068; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s21069; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01070; CHECK-NOFP16-NEXT:    vmov r2, s01071; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #161072; CHECK-NOFP16-NEXT:    vmov r1, s21073; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #161074; CHECK-NOFP16-NEXT:    vmov d16, r1, r01075; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]1076; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]1077; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]1078; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]1079; CHECK-NOFP16-NEXT:    vmov s0, r01080; CHECK-NOFP16-NEXT:    vmov s1, r11081; CHECK-NOFP16-NEXT:    vmov s2, r21082; CHECK-NOFP16-NEXT:    vmov s3, r31083; CHECK-NOFP16-NEXT:    bx lr1084;1085; CHECK-FP16-LABEL: frintn_4h:1086; CHECK-FP16:       @ %bb.0:1087; CHECK-FP16-NEXT:    vrintn.f16 d0, d01088; CHECK-FP16-NEXT:    bx lr1089  %tmp3 = call <4 x half> @llvm.roundeven.v4f16(<4 x half> %A)1090  ret <4 x half> %tmp31091}1092 1093define <8 x half> @frintn_8h(<8 x half> %A) nounwind {1094; CHECK-ARMV7-LABEL: frintn_8h:1095; CHECK-ARMV7:       @ %bb.0:1096; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}1097; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}1098; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}1099; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}1100; CHECK-ARMV7-NEXT:    vmov.f32 s28, s01101; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s71102; CHECK-ARMV7-NEXT:    vmov.f32 s16, s61103; CHECK-ARMV7-NEXT:    vmov.f32 s18, s51104; CHECK-ARMV7-NEXT:    vmov.f32 s20, s41105; CHECK-ARMV7-NEXT:    vmov.f32 s22, s31106; CHECK-ARMV7-NEXT:    vmov.f32 s24, s21107; CHECK-ARMV7-NEXT:    vmov.f32 s26, s11108; CHECK-ARMV7-NEXT:    bl roundevenf1109; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01110; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161111; CHECK-ARMV7-NEXT:    vmov r4, s01112; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s241113; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21114; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s221115; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201116; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181117; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s281118; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s261119; CHECK-ARMV7-NEXT:    bl roundevenf1120; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01121; CHECK-ARMV7-NEXT:    vmov r0, s01122; CHECK-ARMV7-NEXT:    vmov.f32 s0, s261123; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161124; CHECK-ARMV7-NEXT:    bl roundevenf1125; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01126; CHECK-ARMV7-NEXT:    vmov r5, s01127; CHECK-ARMV7-NEXT:    vmov.f32 s0, s281128; CHECK-ARMV7-NEXT:    bl roundevenf1129; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01130; CHECK-ARMV7-NEXT:    vmov r0, s01131; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181132; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #161133; CHECK-ARMV7-NEXT:    bl roundevenf1134; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01135; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201136; CHECK-ARMV7-NEXT:    bl roundevenf1137; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01138; CHECK-ARMV7-NEXT:    vmov r0, s161139; CHECK-ARMV7-NEXT:    vmov r1, s01140; CHECK-ARMV7-NEXT:    vmov.f32 s0, s221141; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161142; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r01143; CHECK-ARMV7-NEXT:    bl roundevenf1144; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01145; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r51146; CHECK-ARMV7-NEXT:    vmov r6, s01147; CHECK-ARMV7-NEXT:    vmov.f32 s0, s241148; CHECK-ARMV7-NEXT:    bl roundevenf1149; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01150; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r41151; CHECK-ARMV7-NEXT:    vmov r0, s01152; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]1153; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]1154; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #161155; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]1156; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r01157; CHECK-ARMV7-NEXT:    vmov s5, r51158; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]1159; CHECK-ARMV7-NEXT:    vmov s6, r41160; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]1161; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]1162; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]1163; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]1164; CHECK-ARMV7-NEXT:    vmov s4, r61165; CHECK-ARMV7-NEXT:    vmov s7, r01166; CHECK-ARMV7-NEXT:    vmov s0, r121167; CHECK-ARMV7-NEXT:    vmov s1, r11168; CHECK-ARMV7-NEXT:    vmov s2, r21169; CHECK-ARMV7-NEXT:    vmov s3, r31170; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}1171; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}1172;1173; CHECK-NOFP16-LABEL: frintn_8h:1174; CHECK-NOFP16:       @ %bb.0:1175; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}1176; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}1177; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s71178; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s61179; CHECK-NOFP16-NEXT:    vrintn.f32 s8, s81180; CHECK-NOFP16-NEXT:    vrintn.f32 s6, s61181; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s81182; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s61183; CHECK-NOFP16-NEXT:    vmov r0, s81184; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s01185; CHECK-NOFP16-NEXT:    vmov r1, s61186; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s11187; CHECK-NOFP16-NEXT:    vrintn.f32 s6, s61188; CHECK-NOFP16-NEXT:    vrintn.f32 s0, s01189; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s61190; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01191; CHECK-NOFP16-NEXT:    vmov r2, s01192; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s51193; CHECK-NOFP16-NEXT:    vrintn.f32 s0, s01194; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s41195; CHECK-NOFP16-NEXT:    vrintn.f32 s4, s41196; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01197; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s41198; CHECK-NOFP16-NEXT:    vmov r3, s41199; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #161200; CHECK-NOFP16-NEXT:    vmov r1, s61201; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #161202; CHECK-NOFP16-NEXT:    vmov r2, s01203; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s31204; CHECK-NOFP16-NEXT:    vrintn.f32 s0, s01205; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r11206; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01207; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #161208; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r21209; CHECK-NOFP16-NEXT:    vmov r2, s01210; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s21211; CHECK-NOFP16-NEXT:    vrintn.f32 s0, s01212; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01213; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r01214; CHECK-NOFP16-NEXT:    vmov r1, s01215; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]1216; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]1217; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #161218; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]1219; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r01220; CHECK-NOFP16-NEXT:    vmov s6, r41221; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]1222; CHECK-NOFP16-NEXT:    vmov s7, r51223; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]1224; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]1225; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]1226; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]1227; CHECK-NOFP16-NEXT:    vmov s5, r11228; CHECK-NOFP16-NEXT:    vmov s4, r01229; CHECK-NOFP16-NEXT:    vmov s0, r121230; CHECK-NOFP16-NEXT:    vmov s1, lr1231; CHECK-NOFP16-NEXT:    vmov s2, r21232; CHECK-NOFP16-NEXT:    vmov s3, r31233; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}1234;1235; CHECK-FP16-LABEL: frintn_8h:1236; CHECK-FP16:       @ %bb.0:1237; CHECK-FP16-NEXT:    vrintn.f16 q0, q01238; CHECK-FP16-NEXT:    bx lr1239  %tmp3 = call <8 x half> @llvm.roundeven.v8f16(<8 x half> %A)1240  ret <8 x half> %tmp31241}1242 1243define <2 x float> @frintn_2s(<2 x float> %A) nounwind {1244; CHECK-ARMV7-LABEL: frintn_2s:1245; CHECK-ARMV7:       @ %bb.0:1246; CHECK-ARMV7-NEXT:    .save {r11, lr}1247; CHECK-ARMV7-NEXT:    push {r11, lr}1248; CHECK-ARMV7-NEXT:    .vsave {d8, d9}1249; CHECK-ARMV7-NEXT:    vpush {d8, d9}1250; CHECK-ARMV7-NEXT:    vmov.f64 d8, d01251; CHECK-ARMV7-NEXT:    vmov.f32 s0, s171252; CHECK-ARMV7-NEXT:    bl roundevenf1253; CHECK-ARMV7-NEXT:    vmov.f32 s19, s01254; CHECK-ARMV7-NEXT:    vmov.f32 s0, s161255; CHECK-ARMV7-NEXT:    bl roundevenf1256; CHECK-ARMV7-NEXT:    vmov.f32 s18, s01257; CHECK-ARMV7-NEXT:    vmov.f64 d0, d91258; CHECK-ARMV7-NEXT:    vpop {d8, d9}1259; CHECK-ARMV7-NEXT:    pop {r11, pc}1260;1261; CHECK-LABEL: frintn_2s:1262; CHECK:       @ %bb.0:1263; CHECK-NEXT:    vrintn.f32 d0, d01264; CHECK-NEXT:    bx lr1265  %tmp3 = call <2 x float> @llvm.roundeven.v2f32(<2 x float> %A)1266  ret <2 x float> %tmp31267}1268 1269define <4 x float> @frintn_4s(<4 x float> %A) nounwind {1270; CHECK-ARMV7-LABEL: frintn_4s:1271; CHECK-ARMV7:       @ %bb.0:1272; CHECK-ARMV7-NEXT:    .save {r11, lr}1273; CHECK-ARMV7-NEXT:    push {r11, lr}1274; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}1275; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}1276; CHECK-ARMV7-NEXT:    vorr q5, q0, q01277; CHECK-ARMV7-NEXT:    vmov.f32 s0, s231278; CHECK-ARMV7-NEXT:    bl roundevenf1279; CHECK-ARMV7-NEXT:    vmov.f32 s19, s01280; CHECK-ARMV7-NEXT:    vmov.f32 s0, s221281; CHECK-ARMV7-NEXT:    bl roundevenf1282; CHECK-ARMV7-NEXT:    vmov.f32 s18, s01283; CHECK-ARMV7-NEXT:    vmov.f32 s0, s211284; CHECK-ARMV7-NEXT:    bl roundevenf1285; CHECK-ARMV7-NEXT:    vmov.f32 s17, s01286; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201287; CHECK-ARMV7-NEXT:    bl roundevenf1288; CHECK-ARMV7-NEXT:    vmov.f32 s16, s01289; CHECK-ARMV7-NEXT:    vorr q0, q4, q41290; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}1291; CHECK-ARMV7-NEXT:    pop {r11, pc}1292;1293; CHECK-LABEL: frintn_4s:1294; CHECK:       @ %bb.0:1295; CHECK-NEXT:    vrintn.f32 q0, q01296; CHECK-NEXT:    bx lr1297  %tmp3 = call <4 x float> @llvm.roundeven.v4f32(<4 x float> %A)1298  ret <4 x float> %tmp31299}1300 1301define <2 x double> @frintn_2d(<2 x double> %A) nounwind {1302; CHECK-ARMV7-LABEL: frintn_2d:1303; CHECK-ARMV7:       @ %bb.0:1304; CHECK-ARMV7-NEXT:    .save {r11, lr}1305; CHECK-ARMV7-NEXT:    push {r11, lr}1306; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}1307; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}1308; CHECK-ARMV7-NEXT:    vorr q4, q0, q01309; CHECK-ARMV7-NEXT:    vorr d0, d9, d91310; CHECK-ARMV7-NEXT:    bl roundeven1311; CHECK-ARMV7-NEXT:    vorr d11, d0, d01312; CHECK-ARMV7-NEXT:    vorr d0, d8, d81313; CHECK-ARMV7-NEXT:    bl roundeven1314; CHECK-ARMV7-NEXT:    vorr d10, d0, d01315; CHECK-ARMV7-NEXT:    vorr q0, q5, q51316; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}1317; CHECK-ARMV7-NEXT:    pop {r11, pc}1318;1319; CHECK-LABEL: frintn_2d:1320; CHECK:       @ %bb.0:1321; CHECK-NEXT:    vrintn.f64 d17, d11322; CHECK-NEXT:    vrintn.f64 d16, d01323; CHECK-NEXT:    vorr q0, q8, q81324; CHECK-NEXT:    bx lr1325  %tmp3 = call <2 x double> @llvm.roundeven.v2f64(<2 x double> %A)1326  ret <2 x double> %tmp31327}1328 1329 1330define <4 x half> @frintp_4h(<4 x half> %A) nounwind {1331; CHECK-ARMV7-LABEL: frintp_4h:1332; CHECK-ARMV7:       @ %bb.0:1333; CHECK-ARMV7-NEXT:    .save {r4, lr}1334; CHECK-ARMV7-NEXT:    push {r4, lr}1335; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}1336; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}1337; CHECK-ARMV7-NEXT:    vmov.f32 s20, s01338; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s31339; CHECK-ARMV7-NEXT:    vmov.f32 s16, s21340; CHECK-ARMV7-NEXT:    vmov.f32 s18, s11341; CHECK-ARMV7-NEXT:    bl ceilf1342; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01343; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161344; CHECK-ARMV7-NEXT:    vmov r4, s01345; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201346; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21347; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181348; CHECK-ARMV7-NEXT:    bl ceilf1349; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01350; CHECK-ARMV7-NEXT:    vmov r0, s01351; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181352; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161353; CHECK-ARMV7-NEXT:    bl ceilf1354; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01355; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201356; CHECK-ARMV7-NEXT:    bl ceilf1357; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01358; CHECK-ARMV7-NEXT:    vmov r0, s161359; CHECK-ARMV7-NEXT:    vmov r1, s01360; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161361; CHECK-ARMV7-NEXT:    vmov d16, r0, r41362; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]1363; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]1364; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]1365; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]1366; CHECK-ARMV7-NEXT:    vmov s0, r01367; CHECK-ARMV7-NEXT:    vmov s1, r11368; CHECK-ARMV7-NEXT:    vmov s2, r21369; CHECK-ARMV7-NEXT:    vmov s3, r31370; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}1371; CHECK-ARMV7-NEXT:    pop {r4, pc}1372;1373; CHECK-NOFP16-LABEL: frintp_4h:1374; CHECK-NOFP16:       @ %bb.0:1375; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s31376; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s21377; CHECK-NOFP16-NEXT:    vrintp.f32 s4, s41378; CHECK-NOFP16-NEXT:    vrintp.f32 s2, s21379; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s41380; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s21381; CHECK-NOFP16-NEXT:    vmov r0, s41382; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s01383; CHECK-NOFP16-NEXT:    vmov r1, s21384; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s11385; CHECK-NOFP16-NEXT:    vrintp.f32 s2, s21386; CHECK-NOFP16-NEXT:    vrintp.f32 s0, s01387; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s21388; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01389; CHECK-NOFP16-NEXT:    vmov r2, s01390; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #161391; CHECK-NOFP16-NEXT:    vmov r1, s21392; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #161393; CHECK-NOFP16-NEXT:    vmov d16, r1, r01394; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]1395; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]1396; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]1397; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]1398; CHECK-NOFP16-NEXT:    vmov s0, r01399; CHECK-NOFP16-NEXT:    vmov s1, r11400; CHECK-NOFP16-NEXT:    vmov s2, r21401; CHECK-NOFP16-NEXT:    vmov s3, r31402; CHECK-NOFP16-NEXT:    bx lr1403;1404; CHECK-FP16-LABEL: frintp_4h:1405; CHECK-FP16:       @ %bb.0:1406; CHECK-FP16-NEXT:    vrintp.f16 d0, d01407; CHECK-FP16-NEXT:    bx lr1408  %tmp3 = call <4 x half> @llvm.ceil.v4f16(<4 x half> %A)1409  ret <4 x half> %tmp31410}1411 1412define <8 x half> @frintp_8h(<8 x half> %A) nounwind {1413; CHECK-ARMV7-LABEL: frintp_8h:1414; CHECK-ARMV7:       @ %bb.0:1415; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}1416; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}1417; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}1418; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}1419; CHECK-ARMV7-NEXT:    vmov.f32 s28, s01420; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s71421; CHECK-ARMV7-NEXT:    vmov.f32 s16, s61422; CHECK-ARMV7-NEXT:    vmov.f32 s18, s51423; CHECK-ARMV7-NEXT:    vmov.f32 s20, s41424; CHECK-ARMV7-NEXT:    vmov.f32 s22, s31425; CHECK-ARMV7-NEXT:    vmov.f32 s24, s21426; CHECK-ARMV7-NEXT:    vmov.f32 s26, s11427; CHECK-ARMV7-NEXT:    bl ceilf1428; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01429; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161430; CHECK-ARMV7-NEXT:    vmov r4, s01431; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s241432; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21433; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s221434; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201435; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181436; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s281437; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s261438; CHECK-ARMV7-NEXT:    bl ceilf1439; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01440; CHECK-ARMV7-NEXT:    vmov r0, s01441; CHECK-ARMV7-NEXT:    vmov.f32 s0, s261442; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161443; CHECK-ARMV7-NEXT:    bl ceilf1444; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01445; CHECK-ARMV7-NEXT:    vmov r5, s01446; CHECK-ARMV7-NEXT:    vmov.f32 s0, s281447; CHECK-ARMV7-NEXT:    bl ceilf1448; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01449; CHECK-ARMV7-NEXT:    vmov r0, s01450; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181451; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #161452; CHECK-ARMV7-NEXT:    bl ceilf1453; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01454; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201455; CHECK-ARMV7-NEXT:    bl ceilf1456; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01457; CHECK-ARMV7-NEXT:    vmov r0, s161458; CHECK-ARMV7-NEXT:    vmov r1, s01459; CHECK-ARMV7-NEXT:    vmov.f32 s0, s221460; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161461; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r01462; CHECK-ARMV7-NEXT:    bl ceilf1463; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01464; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r51465; CHECK-ARMV7-NEXT:    vmov r6, s01466; CHECK-ARMV7-NEXT:    vmov.f32 s0, s241467; CHECK-ARMV7-NEXT:    bl ceilf1468; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01469; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r41470; CHECK-ARMV7-NEXT:    vmov r0, s01471; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]1472; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]1473; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #161474; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]1475; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r01476; CHECK-ARMV7-NEXT:    vmov s5, r51477; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]1478; CHECK-ARMV7-NEXT:    vmov s6, r41479; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]1480; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]1481; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]1482; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]1483; CHECK-ARMV7-NEXT:    vmov s4, r61484; CHECK-ARMV7-NEXT:    vmov s7, r01485; CHECK-ARMV7-NEXT:    vmov s0, r121486; CHECK-ARMV7-NEXT:    vmov s1, r11487; CHECK-ARMV7-NEXT:    vmov s2, r21488; CHECK-ARMV7-NEXT:    vmov s3, r31489; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}1490; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}1491;1492; CHECK-NOFP16-LABEL: frintp_8h:1493; CHECK-NOFP16:       @ %bb.0:1494; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}1495; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}1496; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s71497; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s61498; CHECK-NOFP16-NEXT:    vrintp.f32 s8, s81499; CHECK-NOFP16-NEXT:    vrintp.f32 s6, s61500; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s81501; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s61502; CHECK-NOFP16-NEXT:    vmov r0, s81503; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s01504; CHECK-NOFP16-NEXT:    vmov r1, s61505; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s11506; CHECK-NOFP16-NEXT:    vrintp.f32 s6, s61507; CHECK-NOFP16-NEXT:    vrintp.f32 s0, s01508; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s61509; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01510; CHECK-NOFP16-NEXT:    vmov r2, s01511; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s51512; CHECK-NOFP16-NEXT:    vrintp.f32 s0, s01513; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s41514; CHECK-NOFP16-NEXT:    vrintp.f32 s4, s41515; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01516; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s41517; CHECK-NOFP16-NEXT:    vmov r3, s41518; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #161519; CHECK-NOFP16-NEXT:    vmov r1, s61520; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #161521; CHECK-NOFP16-NEXT:    vmov r2, s01522; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s31523; CHECK-NOFP16-NEXT:    vrintp.f32 s0, s01524; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r11525; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01526; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #161527; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r21528; CHECK-NOFP16-NEXT:    vmov r2, s01529; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s21530; CHECK-NOFP16-NEXT:    vrintp.f32 s0, s01531; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01532; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r01533; CHECK-NOFP16-NEXT:    vmov r1, s01534; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]1535; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]1536; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #161537; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]1538; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r01539; CHECK-NOFP16-NEXT:    vmov s6, r41540; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]1541; CHECK-NOFP16-NEXT:    vmov s7, r51542; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]1543; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]1544; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]1545; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]1546; CHECK-NOFP16-NEXT:    vmov s5, r11547; CHECK-NOFP16-NEXT:    vmov s4, r01548; CHECK-NOFP16-NEXT:    vmov s0, r121549; CHECK-NOFP16-NEXT:    vmov s1, lr1550; CHECK-NOFP16-NEXT:    vmov s2, r21551; CHECK-NOFP16-NEXT:    vmov s3, r31552; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}1553;1554; CHECK-FP16-LABEL: frintp_8h:1555; CHECK-FP16:       @ %bb.0:1556; CHECK-FP16-NEXT:    vrintp.f16 q0, q01557; CHECK-FP16-NEXT:    bx lr1558  %tmp3 = call <8 x half> @llvm.ceil.v8f16(<8 x half> %A)1559  ret <8 x half> %tmp31560}1561 1562define <2 x float> @frintp_2s(<2 x float> %A) nounwind {1563; CHECK-ARMV7-LABEL: frintp_2s:1564; CHECK-ARMV7:       @ %bb.0:1565; CHECK-ARMV7-NEXT:    .save {r11, lr}1566; CHECK-ARMV7-NEXT:    push {r11, lr}1567; CHECK-ARMV7-NEXT:    .vsave {d8, d9}1568; CHECK-ARMV7-NEXT:    vpush {d8, d9}1569; CHECK-ARMV7-NEXT:    vmov.f64 d8, d01570; CHECK-ARMV7-NEXT:    vmov.f32 s0, s171571; CHECK-ARMV7-NEXT:    bl ceilf1572; CHECK-ARMV7-NEXT:    vmov.f32 s19, s01573; CHECK-ARMV7-NEXT:    vmov.f32 s0, s161574; CHECK-ARMV7-NEXT:    bl ceilf1575; CHECK-ARMV7-NEXT:    vmov.f32 s18, s01576; CHECK-ARMV7-NEXT:    vmov.f64 d0, d91577; CHECK-ARMV7-NEXT:    vpop {d8, d9}1578; CHECK-ARMV7-NEXT:    pop {r11, pc}1579;1580; CHECK-LABEL: frintp_2s:1581; CHECK:       @ %bb.0:1582; CHECK-NEXT:    vrintp.f32 d0, d01583; CHECK-NEXT:    bx lr1584  %tmp3 = call <2 x float> @llvm.ceil.v2f32(<2 x float> %A)1585  ret <2 x float> %tmp31586}1587 1588define <4 x float> @frintp_4s(<4 x float> %A) nounwind {1589; CHECK-ARMV7-LABEL: frintp_4s:1590; CHECK-ARMV7:       @ %bb.0:1591; CHECK-ARMV7-NEXT:    .save {r11, lr}1592; CHECK-ARMV7-NEXT:    push {r11, lr}1593; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}1594; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}1595; CHECK-ARMV7-NEXT:    vorr q5, q0, q01596; CHECK-ARMV7-NEXT:    vmov.f32 s0, s231597; CHECK-ARMV7-NEXT:    bl ceilf1598; CHECK-ARMV7-NEXT:    vmov.f32 s19, s01599; CHECK-ARMV7-NEXT:    vmov.f32 s0, s221600; CHECK-ARMV7-NEXT:    bl ceilf1601; CHECK-ARMV7-NEXT:    vmov.f32 s18, s01602; CHECK-ARMV7-NEXT:    vmov.f32 s0, s211603; CHECK-ARMV7-NEXT:    bl ceilf1604; CHECK-ARMV7-NEXT:    vmov.f32 s17, s01605; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201606; CHECK-ARMV7-NEXT:    bl ceilf1607; CHECK-ARMV7-NEXT:    vmov.f32 s16, s01608; CHECK-ARMV7-NEXT:    vorr q0, q4, q41609; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}1610; CHECK-ARMV7-NEXT:    pop {r11, pc}1611;1612; CHECK-LABEL: frintp_4s:1613; CHECK:       @ %bb.0:1614; CHECK-NEXT:    vrintp.f32 q0, q01615; CHECK-NEXT:    bx lr1616  %tmp3 = call <4 x float> @llvm.ceil.v4f32(<4 x float> %A)1617  ret <4 x float> %tmp31618}1619 1620define <2 x double> @frintp_2d(<2 x double> %A) nounwind {1621; CHECK-ARMV7-LABEL: frintp_2d:1622; CHECK-ARMV7:       @ %bb.0:1623; CHECK-ARMV7-NEXT:    .save {r11, lr}1624; CHECK-ARMV7-NEXT:    push {r11, lr}1625; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}1626; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}1627; CHECK-ARMV7-NEXT:    vorr q4, q0, q01628; CHECK-ARMV7-NEXT:    vorr d0, d9, d91629; CHECK-ARMV7-NEXT:    bl ceil1630; CHECK-ARMV7-NEXT:    vorr d11, d0, d01631; CHECK-ARMV7-NEXT:    vorr d0, d8, d81632; CHECK-ARMV7-NEXT:    bl ceil1633; CHECK-ARMV7-NEXT:    vorr d10, d0, d01634; CHECK-ARMV7-NEXT:    vorr q0, q5, q51635; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}1636; CHECK-ARMV7-NEXT:    pop {r11, pc}1637;1638; CHECK-LABEL: frintp_2d:1639; CHECK:       @ %bb.0:1640; CHECK-NEXT:    vrintp.f64 d17, d11641; CHECK-NEXT:    vrintp.f64 d16, d01642; CHECK-NEXT:    vorr q0, q8, q81643; CHECK-NEXT:    bx lr1644  %tmp3 = call <2 x double> @llvm.ceil.v2f64(<2 x double> %A)1645  ret <2 x double> %tmp31646}1647 1648 1649define <4 x half> @frintx_4h(<4 x half> %A) nounwind {1650; CHECK-ARMV7-LABEL: frintx_4h:1651; CHECK-ARMV7:       @ %bb.0:1652; CHECK-ARMV7-NEXT:    .save {r4, lr}1653; CHECK-ARMV7-NEXT:    push {r4, lr}1654; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}1655; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}1656; CHECK-ARMV7-NEXT:    vmov.f32 s20, s01657; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s31658; CHECK-ARMV7-NEXT:    vmov.f32 s16, s21659; CHECK-ARMV7-NEXT:    vmov.f32 s18, s11660; CHECK-ARMV7-NEXT:    bl rintf1661; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01662; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161663; CHECK-ARMV7-NEXT:    vmov r4, s01664; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201665; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21666; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181667; CHECK-ARMV7-NEXT:    bl rintf1668; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01669; CHECK-ARMV7-NEXT:    vmov r0, s01670; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181671; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161672; CHECK-ARMV7-NEXT:    bl rintf1673; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01674; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201675; CHECK-ARMV7-NEXT:    bl rintf1676; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01677; CHECK-ARMV7-NEXT:    vmov r0, s161678; CHECK-ARMV7-NEXT:    vmov r1, s01679; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161680; CHECK-ARMV7-NEXT:    vmov d16, r0, r41681; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]1682; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]1683; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]1684; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]1685; CHECK-ARMV7-NEXT:    vmov s0, r01686; CHECK-ARMV7-NEXT:    vmov s1, r11687; CHECK-ARMV7-NEXT:    vmov s2, r21688; CHECK-ARMV7-NEXT:    vmov s3, r31689; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}1690; CHECK-ARMV7-NEXT:    pop {r4, pc}1691;1692; CHECK-NOFP16-LABEL: frintx_4h:1693; CHECK-NOFP16:       @ %bb.0:1694; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s31695; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s21696; CHECK-NOFP16-NEXT:    vrintx.f32 s4, s41697; CHECK-NOFP16-NEXT:    vrintx.f32 s2, s21698; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s41699; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s21700; CHECK-NOFP16-NEXT:    vmov r0, s41701; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s01702; CHECK-NOFP16-NEXT:    vmov r1, s21703; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s11704; CHECK-NOFP16-NEXT:    vrintx.f32 s2, s21705; CHECK-NOFP16-NEXT:    vrintx.f32 s0, s01706; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s21707; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01708; CHECK-NOFP16-NEXT:    vmov r2, s01709; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #161710; CHECK-NOFP16-NEXT:    vmov r1, s21711; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #161712; CHECK-NOFP16-NEXT:    vmov d16, r1, r01713; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]1714; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]1715; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]1716; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]1717; CHECK-NOFP16-NEXT:    vmov s0, r01718; CHECK-NOFP16-NEXT:    vmov s1, r11719; CHECK-NOFP16-NEXT:    vmov s2, r21720; CHECK-NOFP16-NEXT:    vmov s3, r31721; CHECK-NOFP16-NEXT:    bx lr1722;1723; CHECK-FP16-LABEL: frintx_4h:1724; CHECK-FP16:       @ %bb.0:1725; CHECK-FP16-NEXT:    vrintx.f16 d0, d01726; CHECK-FP16-NEXT:    bx lr1727  %tmp3 = call <4 x half> @llvm.rint.v4f16(<4 x half> %A)1728  ret <4 x half> %tmp31729}1730 1731define <8 x half> @frintx_8h(<8 x half> %A) nounwind {1732; CHECK-ARMV7-LABEL: frintx_8h:1733; CHECK-ARMV7:       @ %bb.0:1734; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}1735; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}1736; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}1737; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}1738; CHECK-ARMV7-NEXT:    vmov.f32 s28, s01739; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s71740; CHECK-ARMV7-NEXT:    vmov.f32 s16, s61741; CHECK-ARMV7-NEXT:    vmov.f32 s18, s51742; CHECK-ARMV7-NEXT:    vmov.f32 s20, s41743; CHECK-ARMV7-NEXT:    vmov.f32 s22, s31744; CHECK-ARMV7-NEXT:    vmov.f32 s24, s21745; CHECK-ARMV7-NEXT:    vmov.f32 s26, s11746; CHECK-ARMV7-NEXT:    bl rintf1747; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01748; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161749; CHECK-ARMV7-NEXT:    vmov r4, s01750; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s241751; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21752; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s221753; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201754; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181755; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s281756; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s261757; CHECK-ARMV7-NEXT:    bl rintf1758; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01759; CHECK-ARMV7-NEXT:    vmov r0, s01760; CHECK-ARMV7-NEXT:    vmov.f32 s0, s261761; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161762; CHECK-ARMV7-NEXT:    bl rintf1763; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01764; CHECK-ARMV7-NEXT:    vmov r5, s01765; CHECK-ARMV7-NEXT:    vmov.f32 s0, s281766; CHECK-ARMV7-NEXT:    bl rintf1767; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01768; CHECK-ARMV7-NEXT:    vmov r0, s01769; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181770; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #161771; CHECK-ARMV7-NEXT:    bl rintf1772; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01773; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201774; CHECK-ARMV7-NEXT:    bl rintf1775; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01776; CHECK-ARMV7-NEXT:    vmov r0, s161777; CHECK-ARMV7-NEXT:    vmov r1, s01778; CHECK-ARMV7-NEXT:    vmov.f32 s0, s221779; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161780; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r01781; CHECK-ARMV7-NEXT:    bl rintf1782; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01783; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r51784; CHECK-ARMV7-NEXT:    vmov r6, s01785; CHECK-ARMV7-NEXT:    vmov.f32 s0, s241786; CHECK-ARMV7-NEXT:    bl rintf1787; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01788; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r41789; CHECK-ARMV7-NEXT:    vmov r0, s01790; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]1791; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]1792; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #161793; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]1794; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r01795; CHECK-ARMV7-NEXT:    vmov s5, r51796; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]1797; CHECK-ARMV7-NEXT:    vmov s6, r41798; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]1799; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]1800; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]1801; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]1802; CHECK-ARMV7-NEXT:    vmov s4, r61803; CHECK-ARMV7-NEXT:    vmov s7, r01804; CHECK-ARMV7-NEXT:    vmov s0, r121805; CHECK-ARMV7-NEXT:    vmov s1, r11806; CHECK-ARMV7-NEXT:    vmov s2, r21807; CHECK-ARMV7-NEXT:    vmov s3, r31808; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}1809; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}1810;1811; CHECK-NOFP16-LABEL: frintx_8h:1812; CHECK-NOFP16:       @ %bb.0:1813; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}1814; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}1815; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s71816; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s61817; CHECK-NOFP16-NEXT:    vrintx.f32 s8, s81818; CHECK-NOFP16-NEXT:    vrintx.f32 s6, s61819; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s81820; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s61821; CHECK-NOFP16-NEXT:    vmov r0, s81822; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s01823; CHECK-NOFP16-NEXT:    vmov r1, s61824; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s11825; CHECK-NOFP16-NEXT:    vrintx.f32 s6, s61826; CHECK-NOFP16-NEXT:    vrintx.f32 s0, s01827; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s61828; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01829; CHECK-NOFP16-NEXT:    vmov r2, s01830; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s51831; CHECK-NOFP16-NEXT:    vrintx.f32 s0, s01832; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s41833; CHECK-NOFP16-NEXT:    vrintx.f32 s4, s41834; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01835; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s41836; CHECK-NOFP16-NEXT:    vmov r3, s41837; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #161838; CHECK-NOFP16-NEXT:    vmov r1, s61839; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #161840; CHECK-NOFP16-NEXT:    vmov r2, s01841; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s31842; CHECK-NOFP16-NEXT:    vrintx.f32 s0, s01843; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r11844; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01845; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #161846; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r21847; CHECK-NOFP16-NEXT:    vmov r2, s01848; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s21849; CHECK-NOFP16-NEXT:    vrintx.f32 s0, s01850; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s01851; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r01852; CHECK-NOFP16-NEXT:    vmov r1, s01853; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]1854; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]1855; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #161856; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]1857; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r01858; CHECK-NOFP16-NEXT:    vmov s6, r41859; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]1860; CHECK-NOFP16-NEXT:    vmov s7, r51861; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]1862; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]1863; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]1864; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]1865; CHECK-NOFP16-NEXT:    vmov s5, r11866; CHECK-NOFP16-NEXT:    vmov s4, r01867; CHECK-NOFP16-NEXT:    vmov s0, r121868; CHECK-NOFP16-NEXT:    vmov s1, lr1869; CHECK-NOFP16-NEXT:    vmov s2, r21870; CHECK-NOFP16-NEXT:    vmov s3, r31871; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}1872;1873; CHECK-FP16-LABEL: frintx_8h:1874; CHECK-FP16:       @ %bb.0:1875; CHECK-FP16-NEXT:    vrintx.f16 q0, q01876; CHECK-FP16-NEXT:    bx lr1877  %tmp3 = call <8 x half> @llvm.rint.v8f16(<8 x half> %A)1878  ret <8 x half> %tmp31879}1880 1881define <2 x float> @frintx_2s(<2 x float> %A) nounwind {1882; CHECK-ARMV7-LABEL: frintx_2s:1883; CHECK-ARMV7:       @ %bb.0:1884; CHECK-ARMV7-NEXT:    .save {r11, lr}1885; CHECK-ARMV7-NEXT:    push {r11, lr}1886; CHECK-ARMV7-NEXT:    .vsave {d8, d9}1887; CHECK-ARMV7-NEXT:    vpush {d8, d9}1888; CHECK-ARMV7-NEXT:    vmov.f64 d8, d01889; CHECK-ARMV7-NEXT:    vmov.f32 s0, s171890; CHECK-ARMV7-NEXT:    bl rintf1891; CHECK-ARMV7-NEXT:    vmov.f32 s19, s01892; CHECK-ARMV7-NEXT:    vmov.f32 s0, s161893; CHECK-ARMV7-NEXT:    bl rintf1894; CHECK-ARMV7-NEXT:    vmov.f32 s18, s01895; CHECK-ARMV7-NEXT:    vmov.f64 d0, d91896; CHECK-ARMV7-NEXT:    vpop {d8, d9}1897; CHECK-ARMV7-NEXT:    pop {r11, pc}1898;1899; CHECK-LABEL: frintx_2s:1900; CHECK:       @ %bb.0:1901; CHECK-NEXT:    vrintx.f32 d0, d01902; CHECK-NEXT:    bx lr1903  %tmp3 = call <2 x float> @llvm.rint.v2f32(<2 x float> %A)1904  ret <2 x float> %tmp31905}1906 1907define <4 x float> @frintx_4s(<4 x float> %A) nounwind {1908; CHECK-ARMV7-LABEL: frintx_4s:1909; CHECK-ARMV7:       @ %bb.0:1910; CHECK-ARMV7-NEXT:    .save {r11, lr}1911; CHECK-ARMV7-NEXT:    push {r11, lr}1912; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}1913; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}1914; CHECK-ARMV7-NEXT:    vorr q5, q0, q01915; CHECK-ARMV7-NEXT:    vmov.f32 s0, s231916; CHECK-ARMV7-NEXT:    bl rintf1917; CHECK-ARMV7-NEXT:    vmov.f32 s19, s01918; CHECK-ARMV7-NEXT:    vmov.f32 s0, s221919; CHECK-ARMV7-NEXT:    bl rintf1920; CHECK-ARMV7-NEXT:    vmov.f32 s18, s01921; CHECK-ARMV7-NEXT:    vmov.f32 s0, s211922; CHECK-ARMV7-NEXT:    bl rintf1923; CHECK-ARMV7-NEXT:    vmov.f32 s17, s01924; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201925; CHECK-ARMV7-NEXT:    bl rintf1926; CHECK-ARMV7-NEXT:    vmov.f32 s16, s01927; CHECK-ARMV7-NEXT:    vorr q0, q4, q41928; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}1929; CHECK-ARMV7-NEXT:    pop {r11, pc}1930;1931; CHECK-LABEL: frintx_4s:1932; CHECK:       @ %bb.0:1933; CHECK-NEXT:    vrintx.f32 q0, q01934; CHECK-NEXT:    bx lr1935  %tmp3 = call <4 x float> @llvm.rint.v4f32(<4 x float> %A)1936  ret <4 x float> %tmp31937}1938 1939define <2 x double> @frintx_2d(<2 x double> %A) nounwind {1940; CHECK-ARMV7-LABEL: frintx_2d:1941; CHECK-ARMV7:       @ %bb.0:1942; CHECK-ARMV7-NEXT:    .save {r11, lr}1943; CHECK-ARMV7-NEXT:    push {r11, lr}1944; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}1945; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}1946; CHECK-ARMV7-NEXT:    vorr q4, q0, q01947; CHECK-ARMV7-NEXT:    vorr d0, d9, d91948; CHECK-ARMV7-NEXT:    bl rint1949; CHECK-ARMV7-NEXT:    vorr d11, d0, d01950; CHECK-ARMV7-NEXT:    vorr d0, d8, d81951; CHECK-ARMV7-NEXT:    bl rint1952; CHECK-ARMV7-NEXT:    vorr d10, d0, d01953; CHECK-ARMV7-NEXT:    vorr q0, q5, q51954; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}1955; CHECK-ARMV7-NEXT:    pop {r11, pc}1956;1957; CHECK-LABEL: frintx_2d:1958; CHECK:       @ %bb.0:1959; CHECK-NEXT:    vrintx.f64 d17, d11960; CHECK-NEXT:    vrintx.f64 d16, d01961; CHECK-NEXT:    vorr q0, q8, q81962; CHECK-NEXT:    bx lr1963  %tmp3 = call <2 x double> @llvm.rint.v2f64(<2 x double> %A)1964  ret <2 x double> %tmp31965}1966 1967 1968define <4 x half> @frintz_4h(<4 x half> %A) nounwind {1969; CHECK-ARMV7-LABEL: frintz_4h:1970; CHECK-ARMV7:       @ %bb.0:1971; CHECK-ARMV7-NEXT:    .save {r4, lr}1972; CHECK-ARMV7-NEXT:    push {r4, lr}1973; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10}1974; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10}1975; CHECK-ARMV7-NEXT:    vmov.f32 s20, s01976; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s31977; CHECK-ARMV7-NEXT:    vmov.f32 s16, s21978; CHECK-ARMV7-NEXT:    vmov.f32 s18, s11979; CHECK-ARMV7-NEXT:    bl truncf1980; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01981; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s161982; CHECK-ARMV7-NEXT:    vmov r4, s01983; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s201984; CHECK-ARMV7-NEXT:    vmov.f32 s0, s21985; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s181986; CHECK-ARMV7-NEXT:    bl truncf1987; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01988; CHECK-ARMV7-NEXT:    vmov r0, s01989; CHECK-ARMV7-NEXT:    vmov.f32 s0, s181990; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #161991; CHECK-ARMV7-NEXT:    bl truncf1992; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s01993; CHECK-ARMV7-NEXT:    vmov.f32 s0, s201994; CHECK-ARMV7-NEXT:    bl truncf1995; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s01996; CHECK-ARMV7-NEXT:    vmov r0, s161997; CHECK-ARMV7-NEXT:    vmov r1, s01998; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #161999; CHECK-ARMV7-NEXT:    vmov d16, r0, r42000; CHECK-ARMV7-NEXT:    vmov.u16 r0, d16[0]2001; CHECK-ARMV7-NEXT:    vmov.u16 r1, d16[1]2002; CHECK-ARMV7-NEXT:    vmov.u16 r2, d16[2]2003; CHECK-ARMV7-NEXT:    vmov.u16 r3, d16[3]2004; CHECK-ARMV7-NEXT:    vmov s0, r02005; CHECK-ARMV7-NEXT:    vmov s1, r12006; CHECK-ARMV7-NEXT:    vmov s2, r22007; CHECK-ARMV7-NEXT:    vmov s3, r32008; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10}2009; CHECK-ARMV7-NEXT:    pop {r4, pc}2010;2011; CHECK-NOFP16-LABEL: frintz_4h:2012; CHECK-NOFP16:       @ %bb.0:2013; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s32014; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s22015; CHECK-NOFP16-NEXT:    vrintz.f32 s4, s42016; CHECK-NOFP16-NEXT:    vrintz.f32 s2, s22017; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s42018; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s22019; CHECK-NOFP16-NEXT:    vmov r0, s42020; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s02021; CHECK-NOFP16-NEXT:    vmov r1, s22022; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s2, s12023; CHECK-NOFP16-NEXT:    vrintz.f32 s2, s22024; CHECK-NOFP16-NEXT:    vrintz.f32 s0, s02025; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s2, s22026; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s02027; CHECK-NOFP16-NEXT:    vmov r2, s02028; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #162029; CHECK-NOFP16-NEXT:    vmov r1, s22030; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #162031; CHECK-NOFP16-NEXT:    vmov d16, r1, r02032; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]2033; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]2034; CHECK-NOFP16-NEXT:    vmov.u16 r2, d16[2]2035; CHECK-NOFP16-NEXT:    vmov.u16 r3, d16[3]2036; CHECK-NOFP16-NEXT:    vmov s0, r02037; CHECK-NOFP16-NEXT:    vmov s1, r12038; CHECK-NOFP16-NEXT:    vmov s2, r22039; CHECK-NOFP16-NEXT:    vmov s3, r32040; CHECK-NOFP16-NEXT:    bx lr2041;2042; CHECK-FP16-LABEL: frintz_4h:2043; CHECK-FP16:       @ %bb.0:2044; CHECK-FP16-NEXT:    vrintz.f16 d0, d02045; CHECK-FP16-NEXT:    bx lr2046  %tmp3 = call <4 x half> @llvm.trunc.v4f16(<4 x half> %A)2047  ret <4 x half> %tmp32048}2049 2050define <8 x half> @frintz_8h(<8 x half> %A) nounwind {2051; CHECK-ARMV7-LABEL: frintz_8h:2052; CHECK-ARMV7:       @ %bb.0:2053; CHECK-ARMV7-NEXT:    .save {r4, r5, r6, lr}2054; CHECK-ARMV7-NEXT:    push {r4, r5, r6, lr}2055; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14}2056; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14}2057; CHECK-ARMV7-NEXT:    vmov.f32 s28, s02058; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s0, s72059; CHECK-ARMV7-NEXT:    vmov.f32 s16, s62060; CHECK-ARMV7-NEXT:    vmov.f32 s18, s52061; CHECK-ARMV7-NEXT:    vmov.f32 s20, s42062; CHECK-ARMV7-NEXT:    vmov.f32 s22, s32063; CHECK-ARMV7-NEXT:    vmov.f32 s24, s22064; CHECK-ARMV7-NEXT:    vmov.f32 s26, s12065; CHECK-ARMV7-NEXT:    bl truncf2066; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02067; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s2, s162068; CHECK-ARMV7-NEXT:    vmov r4, s02069; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s24, s242070; CHECK-ARMV7-NEXT:    vmov.f32 s0, s22071; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s22, s222072; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s20, s202073; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s18, s182074; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s28, s282075; CHECK-ARMV7-NEXT:    vcvtb.f32.f16 s26, s262076; CHECK-ARMV7-NEXT:    bl truncf2077; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02078; CHECK-ARMV7-NEXT:    vmov r0, s02079; CHECK-ARMV7-NEXT:    vmov.f32 s0, s262080; CHECK-ARMV7-NEXT:    pkhbt r4, r0, r4, lsl #162081; CHECK-ARMV7-NEXT:    bl truncf2082; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02083; CHECK-ARMV7-NEXT:    vmov r5, s02084; CHECK-ARMV7-NEXT:    vmov.f32 s0, s282085; CHECK-ARMV7-NEXT:    bl truncf2086; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02087; CHECK-ARMV7-NEXT:    vmov r0, s02088; CHECK-ARMV7-NEXT:    vmov.f32 s0, s182089; CHECK-ARMV7-NEXT:    pkhbt r5, r0, r5, lsl #162090; CHECK-ARMV7-NEXT:    bl truncf2091; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s16, s02092; CHECK-ARMV7-NEXT:    vmov.f32 s0, s202093; CHECK-ARMV7-NEXT:    bl truncf2094; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02095; CHECK-ARMV7-NEXT:    vmov r0, s162096; CHECK-ARMV7-NEXT:    vmov r1, s02097; CHECK-ARMV7-NEXT:    vmov.f32 s0, s222098; CHECK-ARMV7-NEXT:    pkhbt r0, r1, r0, lsl #162099; CHECK-ARMV7-NEXT:    vmov.32 d8[0], r02100; CHECK-ARMV7-NEXT:    bl truncf2101; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02102; CHECK-ARMV7-NEXT:    vmov.32 d9[0], r52103; CHECK-ARMV7-NEXT:    vmov r6, s02104; CHECK-ARMV7-NEXT:    vmov.f32 s0, s242105; CHECK-ARMV7-NEXT:    bl truncf2106; CHECK-ARMV7-NEXT:    vcvtb.f16.f32 s0, s02107; CHECK-ARMV7-NEXT:    vmov.32 d8[1], r42108; CHECK-ARMV7-NEXT:    vmov r0, s02109; CHECK-ARMV7-NEXT:    vmov.u16 r5, d8[1]2110; CHECK-ARMV7-NEXT:    vmov.u16 r4, d8[2]2111; CHECK-ARMV7-NEXT:    pkhbt r0, r0, r6, lsl #162112; CHECK-ARMV7-NEXT:    vmov.u16 r6, d8[0]2113; CHECK-ARMV7-NEXT:    vmov.32 d9[1], r02114; CHECK-ARMV7-NEXT:    vmov s5, r52115; CHECK-ARMV7-NEXT:    vmov.u16 r0, d8[3]2116; CHECK-ARMV7-NEXT:    vmov s6, r42117; CHECK-ARMV7-NEXT:    vmov.u16 r12, d9[0]2118; CHECK-ARMV7-NEXT:    vmov.u16 r1, d9[1]2119; CHECK-ARMV7-NEXT:    vmov.u16 r2, d9[2]2120; CHECK-ARMV7-NEXT:    vmov.u16 r3, d9[3]2121; CHECK-ARMV7-NEXT:    vmov s4, r62122; CHECK-ARMV7-NEXT:    vmov s7, r02123; CHECK-ARMV7-NEXT:    vmov s0, r122124; CHECK-ARMV7-NEXT:    vmov s1, r12125; CHECK-ARMV7-NEXT:    vmov s2, r22126; CHECK-ARMV7-NEXT:    vmov s3, r32127; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14}2128; CHECK-ARMV7-NEXT:    pop {r4, r5, r6, pc}2129;2130; CHECK-NOFP16-LABEL: frintz_8h:2131; CHECK-NOFP16:       @ %bb.0:2132; CHECK-NOFP16-NEXT:    .save {r4, r5, r11, lr}2133; CHECK-NOFP16-NEXT:    push {r4, r5, r11, lr}2134; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s8, s72135; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s62136; CHECK-NOFP16-NEXT:    vrintz.f32 s8, s82137; CHECK-NOFP16-NEXT:    vrintz.f32 s6, s62138; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s8, s82139; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s62140; CHECK-NOFP16-NEXT:    vmov r0, s82141; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s02142; CHECK-NOFP16-NEXT:    vmov r1, s62143; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s6, s12144; CHECK-NOFP16-NEXT:    vrintz.f32 s6, s62145; CHECK-NOFP16-NEXT:    vrintz.f32 s0, s02146; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s6, s62147; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s02148; CHECK-NOFP16-NEXT:    vmov r2, s02149; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s52150; CHECK-NOFP16-NEXT:    vrintz.f32 s0, s02151; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s4, s42152; CHECK-NOFP16-NEXT:    vrintz.f32 s4, s42153; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s02154; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s4, s42155; CHECK-NOFP16-NEXT:    vmov r3, s42156; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r0, lsl #162157; CHECK-NOFP16-NEXT:    vmov r1, s62158; CHECK-NOFP16-NEXT:    pkhbt r1, r2, r1, lsl #162159; CHECK-NOFP16-NEXT:    vmov r2, s02160; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s32161; CHECK-NOFP16-NEXT:    vrintz.f32 s0, s02162; CHECK-NOFP16-NEXT:    vmov.32 d17[0], r12163; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s02164; CHECK-NOFP16-NEXT:    pkhbt r2, r3, r2, lsl #162165; CHECK-NOFP16-NEXT:    vmov.32 d16[0], r22166; CHECK-NOFP16-NEXT:    vmov r2, s02167; CHECK-NOFP16-NEXT:    vcvtb.f32.f16 s0, s22168; CHECK-NOFP16-NEXT:    vrintz.f32 s0, s02169; CHECK-NOFP16-NEXT:    vcvtb.f16.f32 s0, s02170; CHECK-NOFP16-NEXT:    vmov.32 d16[1], r02171; CHECK-NOFP16-NEXT:    vmov r1, s02172; CHECK-NOFP16-NEXT:    vmov.u16 r4, d16[2]2173; CHECK-NOFP16-NEXT:    vmov.u16 r5, d16[3]2174; CHECK-NOFP16-NEXT:    pkhbt r0, r1, r2, lsl #162175; CHECK-NOFP16-NEXT:    vmov.u16 r1, d16[1]2176; CHECK-NOFP16-NEXT:    vmov.32 d17[1], r02177; CHECK-NOFP16-NEXT:    vmov s6, r42178; CHECK-NOFP16-NEXT:    vmov.u16 r0, d16[0]2179; CHECK-NOFP16-NEXT:    vmov s7, r52180; CHECK-NOFP16-NEXT:    vmov.u16 r12, d17[0]2181; CHECK-NOFP16-NEXT:    vmov.u16 lr, d17[1]2182; CHECK-NOFP16-NEXT:    vmov.u16 r2, d17[2]2183; CHECK-NOFP16-NEXT:    vmov.u16 r3, d17[3]2184; CHECK-NOFP16-NEXT:    vmov s5, r12185; CHECK-NOFP16-NEXT:    vmov s4, r02186; CHECK-NOFP16-NEXT:    vmov s0, r122187; CHECK-NOFP16-NEXT:    vmov s1, lr2188; CHECK-NOFP16-NEXT:    vmov s2, r22189; CHECK-NOFP16-NEXT:    vmov s3, r32190; CHECK-NOFP16-NEXT:    pop {r4, r5, r11, pc}2191;2192; CHECK-FP16-LABEL: frintz_8h:2193; CHECK-FP16:       @ %bb.0:2194; CHECK-FP16-NEXT:    vrintz.f16 q0, q02195; CHECK-FP16-NEXT:    bx lr2196  %tmp3 = call <8 x half> @llvm.trunc.v8f16(<8 x half> %A)2197  ret <8 x half> %tmp32198}2199 2200define <2 x float> @frintz_2s(<2 x float> %A) nounwind {2201; CHECK-ARMV7-LABEL: frintz_2s:2202; CHECK-ARMV7:       @ %bb.0:2203; CHECK-ARMV7-NEXT:    .save {r11, lr}2204; CHECK-ARMV7-NEXT:    push {r11, lr}2205; CHECK-ARMV7-NEXT:    .vsave {d8, d9}2206; CHECK-ARMV7-NEXT:    vpush {d8, d9}2207; CHECK-ARMV7-NEXT:    vmov.f64 d8, d02208; CHECK-ARMV7-NEXT:    vmov.f32 s0, s172209; CHECK-ARMV7-NEXT:    bl truncf2210; CHECK-ARMV7-NEXT:    vmov.f32 s19, s02211; CHECK-ARMV7-NEXT:    vmov.f32 s0, s162212; CHECK-ARMV7-NEXT:    bl truncf2213; CHECK-ARMV7-NEXT:    vmov.f32 s18, s02214; CHECK-ARMV7-NEXT:    vmov.f64 d0, d92215; CHECK-ARMV7-NEXT:    vpop {d8, d9}2216; CHECK-ARMV7-NEXT:    pop {r11, pc}2217;2218; CHECK-LABEL: frintz_2s:2219; CHECK:       @ %bb.0:2220; CHECK-NEXT:    vrintz.f32 d0, d02221; CHECK-NEXT:    bx lr2222  %tmp3 = call <2 x float> @llvm.trunc.v2f32(<2 x float> %A)2223  ret <2 x float> %tmp32224}2225 2226define <4 x float> @frintz_4s(<4 x float> %A) nounwind {2227; CHECK-ARMV7-LABEL: frintz_4s:2228; CHECK-ARMV7:       @ %bb.0:2229; CHECK-ARMV7-NEXT:    .save {r11, lr}2230; CHECK-ARMV7-NEXT:    push {r11, lr}2231; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}2232; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}2233; CHECK-ARMV7-NEXT:    vorr q5, q0, q02234; CHECK-ARMV7-NEXT:    vmov.f32 s0, s232235; CHECK-ARMV7-NEXT:    bl truncf2236; CHECK-ARMV7-NEXT:    vmov.f32 s19, s02237; CHECK-ARMV7-NEXT:    vmov.f32 s0, s222238; CHECK-ARMV7-NEXT:    bl truncf2239; CHECK-ARMV7-NEXT:    vmov.f32 s18, s02240; CHECK-ARMV7-NEXT:    vmov.f32 s0, s212241; CHECK-ARMV7-NEXT:    bl truncf2242; CHECK-ARMV7-NEXT:    vmov.f32 s17, s02243; CHECK-ARMV7-NEXT:    vmov.f32 s0, s202244; CHECK-ARMV7-NEXT:    bl truncf2245; CHECK-ARMV7-NEXT:    vmov.f32 s16, s02246; CHECK-ARMV7-NEXT:    vorr q0, q4, q42247; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}2248; CHECK-ARMV7-NEXT:    pop {r11, pc}2249;2250; CHECK-LABEL: frintz_4s:2251; CHECK:       @ %bb.0:2252; CHECK-NEXT:    vrintz.f32 q0, q02253; CHECK-NEXT:    bx lr2254  %tmp3 = call <4 x float> @llvm.trunc.v4f32(<4 x float> %A)2255  ret <4 x float> %tmp32256}2257 2258define <2 x double> @frintz_2d(<2 x double> %A) nounwind {2259; CHECK-ARMV7-LABEL: frintz_2d:2260; CHECK-ARMV7:       @ %bb.0:2261; CHECK-ARMV7-NEXT:    .save {r11, lr}2262; CHECK-ARMV7-NEXT:    push {r11, lr}2263; CHECK-ARMV7-NEXT:    .vsave {d8, d9, d10, d11}2264; CHECK-ARMV7-NEXT:    vpush {d8, d9, d10, d11}2265; CHECK-ARMV7-NEXT:    vorr q4, q0, q02266; CHECK-ARMV7-NEXT:    vorr d0, d9, d92267; CHECK-ARMV7-NEXT:    bl trunc2268; CHECK-ARMV7-NEXT:    vorr d11, d0, d02269; CHECK-ARMV7-NEXT:    vorr d0, d8, d82270; CHECK-ARMV7-NEXT:    bl trunc2271; CHECK-ARMV7-NEXT:    vorr d10, d0, d02272; CHECK-ARMV7-NEXT:    vorr q0, q5, q52273; CHECK-ARMV7-NEXT:    vpop {d8, d9, d10, d11}2274; CHECK-ARMV7-NEXT:    pop {r11, pc}2275;2276; CHECK-LABEL: frintz_2d:2277; CHECK:       @ %bb.0:2278; CHECK-NEXT:    vrintz.f64 d17, d12279; CHECK-NEXT:    vrintz.f64 d16, d02280; CHECK-NEXT:    vorr q0, q8, q82281; CHECK-NEXT:    bx lr2282  %tmp3 = call <2 x double> @llvm.trunc.v2f64(<2 x double> %A)2283  ret <2 x double> %tmp32284}2285