2198 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-SD-NOFP163; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-SD-FP164; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-GI-NOFP165; RUN: llc -mtriple=aarch64 -mattr=+fullfp16 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-GI-FP166 7define double @ceil_f64(double %a) {8; CHECK-LABEL: ceil_f64:9; CHECK: // %bb.0: // %entry10; CHECK-NEXT: frintp d0, d011; CHECK-NEXT: ret12entry:13 %c = call double @llvm.ceil.f64(double %a)14 ret double %c15}16 17define float @ceil_f32(float %a) {18; CHECK-LABEL: ceil_f32:19; CHECK: // %bb.0: // %entry20; CHECK-NEXT: frintp s0, s021; CHECK-NEXT: ret22entry:23 %c = call float @llvm.ceil.f32(float %a)24 ret float %c25}26 27define half @ceil_f16(half %a) {28; CHECK-SD-NOFP16-LABEL: ceil_f16:29; CHECK-SD-NOFP16: // %bb.0: // %entry30; CHECK-SD-NOFP16-NEXT: fcvt s0, h031; CHECK-SD-NOFP16-NEXT: frintp s0, s032; CHECK-SD-NOFP16-NEXT: fcvt h0, s033; CHECK-SD-NOFP16-NEXT: ret34;35; CHECK-SD-FP16-LABEL: ceil_f16:36; CHECK-SD-FP16: // %bb.0: // %entry37; CHECK-SD-FP16-NEXT: frintp h0, h038; CHECK-SD-FP16-NEXT: ret39;40; CHECK-GI-NOFP16-LABEL: ceil_f16:41; CHECK-GI-NOFP16: // %bb.0: // %entry42; CHECK-GI-NOFP16-NEXT: fcvt s0, h043; CHECK-GI-NOFP16-NEXT: frintp s0, s044; CHECK-GI-NOFP16-NEXT: fcvt h0, s045; CHECK-GI-NOFP16-NEXT: ret46;47; CHECK-GI-FP16-LABEL: ceil_f16:48; CHECK-GI-FP16: // %bb.0: // %entry49; CHECK-GI-FP16-NEXT: frintp h0, h050; CHECK-GI-FP16-NEXT: ret51entry:52 %c = call half @llvm.ceil.f16(half %a)53 ret half %c54}55 56define <2 x double> @ceil_v2f64(<2 x double> %a) {57; CHECK-LABEL: ceil_v2f64:58; CHECK: // %bb.0: // %entry59; CHECK-NEXT: frintp v0.2d, v0.2d60; CHECK-NEXT: ret61entry:62 %c = call <2 x double> @llvm.ceil.v2f64(<2 x double> %a)63 ret <2 x double> %c64}65 66define <3 x double> @ceil_v3f64(<3 x double> %a) {67; CHECK-SD-LABEL: ceil_v3f64:68; CHECK-SD: // %bb.0: // %entry69; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q070; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q171; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q272; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]73; CHECK-SD-NEXT: frintp v2.2d, v2.2d74; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q275; CHECK-SD-NEXT: frintp v0.2d, v0.2d76; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #877; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q078; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q179; CHECK-SD-NEXT: ret80;81; CHECK-GI-LABEL: ceil_v3f64:82; CHECK-GI: // %bb.0: // %entry83; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q084; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q185; CHECK-GI-NEXT: frintp d2, d286; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]87; CHECK-GI-NEXT: frintp v0.2d, v0.2d88; CHECK-GI-NEXT: mov d1, v0.d[1]89; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q090; CHECK-GI-NEXT: ret91entry:92 %c = call <3 x double> @llvm.ceil.v3f64(<3 x double> %a)93 ret <3 x double> %c94}95 96define <4 x double> @ceil_v4f64(<4 x double> %a) {97; CHECK-LABEL: ceil_v4f64:98; CHECK: // %bb.0: // %entry99; CHECK-NEXT: frintp v0.2d, v0.2d100; CHECK-NEXT: frintp v1.2d, v1.2d101; CHECK-NEXT: ret102entry:103 %c = call <4 x double> @llvm.ceil.v4f64(<4 x double> %a)104 ret <4 x double> %c105}106 107define <2 x float> @ceil_v2f32(<2 x float> %a) {108; CHECK-LABEL: ceil_v2f32:109; CHECK: // %bb.0: // %entry110; CHECK-NEXT: frintp v0.2s, v0.2s111; CHECK-NEXT: ret112entry:113 %c = call <2 x float> @llvm.ceil.v2f32(<2 x float> %a)114 ret <2 x float> %c115}116 117define <3 x float> @ceil_v3f32(<3 x float> %a) {118; CHECK-LABEL: ceil_v3f32:119; CHECK: // %bb.0: // %entry120; CHECK-NEXT: frintp v0.4s, v0.4s121; CHECK-NEXT: ret122entry:123 %c = call <3 x float> @llvm.ceil.v3f32(<3 x float> %a)124 ret <3 x float> %c125}126 127define <4 x float> @ceil_v4f32(<4 x float> %a) {128; CHECK-LABEL: ceil_v4f32:129; CHECK: // %bb.0: // %entry130; CHECK-NEXT: frintp v0.4s, v0.4s131; CHECK-NEXT: ret132entry:133 %c = call <4 x float> @llvm.ceil.v4f32(<4 x float> %a)134 ret <4 x float> %c135}136 137define <8 x float> @ceil_v8f32(<8 x float> %a) {138; CHECK-LABEL: ceil_v8f32:139; CHECK: // %bb.0: // %entry140; CHECK-NEXT: frintp v0.4s, v0.4s141; CHECK-NEXT: frintp v1.4s, v1.4s142; CHECK-NEXT: ret143entry:144 %c = call <8 x float> @llvm.ceil.v8f32(<8 x float> %a)145 ret <8 x float> %c146}147 148define <7 x half> @ceil_v7f16(<7 x half> %a) {149; CHECK-SD-NOFP16-LABEL: ceil_v7f16:150; CHECK-SD-NOFP16: // %bb.0: // %entry151; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h152; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h153; CHECK-SD-NOFP16-NEXT: frintp v1.4s, v1.4s154; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s155; CHECK-SD-NOFP16-NEXT: frintp v1.4s, v2.4s156; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s157; CHECK-SD-NOFP16-NEXT: ret158;159; CHECK-SD-FP16-LABEL: ceil_v7f16:160; CHECK-SD-FP16: // %bb.0: // %entry161; CHECK-SD-FP16-NEXT: frintp v0.8h, v0.8h162; CHECK-SD-FP16-NEXT: ret163;164; CHECK-GI-NOFP16-LABEL: ceil_v7f16:165; CHECK-GI-NOFP16: // %bb.0: // %entry166; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h167; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]168; CHECK-GI-NOFP16-NEXT: frintp v1.4s, v1.4s169; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]170; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s171; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]172; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]173; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h174; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]175; CHECK-GI-NOFP16-NEXT: frintp v2.4s, v2.4s176; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]177; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s178; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]179; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]180; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]181; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]182; CHECK-GI-NOFP16-NEXT: ret183;184; CHECK-GI-FP16-LABEL: ceil_v7f16:185; CHECK-GI-FP16: // %bb.0: // %entry186; CHECK-GI-FP16-NEXT: frintp v0.8h, v0.8h187; CHECK-GI-FP16-NEXT: ret188entry:189 %c = call <7 x half> @llvm.ceil.v7f16(<7 x half> %a)190 ret <7 x half> %c191}192 193define <4 x half> @ceil_v4f16(<4 x half> %a) {194; CHECK-SD-NOFP16-LABEL: ceil_v4f16:195; CHECK-SD-NOFP16: // %bb.0: // %entry196; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h197; CHECK-SD-NOFP16-NEXT: frintp v0.4s, v0.4s198; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s199; CHECK-SD-NOFP16-NEXT: ret200;201; CHECK-SD-FP16-LABEL: ceil_v4f16:202; CHECK-SD-FP16: // %bb.0: // %entry203; CHECK-SD-FP16-NEXT: frintp v0.4h, v0.4h204; CHECK-SD-FP16-NEXT: ret205;206; CHECK-GI-NOFP16-LABEL: ceil_v4f16:207; CHECK-GI-NOFP16: // %bb.0: // %entry208; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h209; CHECK-GI-NOFP16-NEXT: frintp v0.4s, v0.4s210; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s211; CHECK-GI-NOFP16-NEXT: ret212;213; CHECK-GI-FP16-LABEL: ceil_v4f16:214; CHECK-GI-FP16: // %bb.0: // %entry215; CHECK-GI-FP16-NEXT: frintp v0.4h, v0.4h216; CHECK-GI-FP16-NEXT: ret217entry:218 %c = call <4 x half> @llvm.ceil.v4f16(<4 x half> %a)219 ret <4 x half> %c220}221 222define <8 x half> @ceil_v8f16(<8 x half> %a) {223; CHECK-SD-NOFP16-LABEL: ceil_v8f16:224; CHECK-SD-NOFP16: // %bb.0: // %entry225; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h226; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h227; CHECK-SD-NOFP16-NEXT: frintp v1.4s, v1.4s228; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s229; CHECK-SD-NOFP16-NEXT: frintp v1.4s, v2.4s230; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s231; CHECK-SD-NOFP16-NEXT: ret232;233; CHECK-SD-FP16-LABEL: ceil_v8f16:234; CHECK-SD-FP16: // %bb.0: // %entry235; CHECK-SD-FP16-NEXT: frintp v0.8h, v0.8h236; CHECK-SD-FP16-NEXT: ret237;238; CHECK-GI-NOFP16-LABEL: ceil_v8f16:239; CHECK-GI-NOFP16: // %bb.0: // %entry240; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h241; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h242; CHECK-GI-NOFP16-NEXT: frintp v1.4s, v1.4s243; CHECK-GI-NOFP16-NEXT: frintp v2.4s, v0.4s244; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s245; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s246; CHECK-GI-NOFP16-NEXT: ret247;248; CHECK-GI-FP16-LABEL: ceil_v8f16:249; CHECK-GI-FP16: // %bb.0: // %entry250; CHECK-GI-FP16-NEXT: frintp v0.8h, v0.8h251; CHECK-GI-FP16-NEXT: ret252entry:253 %c = call <8 x half> @llvm.ceil.v8f16(<8 x half> %a)254 ret <8 x half> %c255}256 257define <16 x half> @ceil_v16f16(<16 x half> %a) {258; CHECK-SD-NOFP16-LABEL: ceil_v16f16:259; CHECK-SD-NOFP16: // %bb.0: // %entry260; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h261; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h262; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h263; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h264; CHECK-SD-NOFP16-NEXT: frintp v2.4s, v2.4s265; CHECK-SD-NOFP16-NEXT: frintp v1.4s, v3.4s266; CHECK-SD-NOFP16-NEXT: frintp v3.4s, v5.4s267; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s268; CHECK-SD-NOFP16-NEXT: frintp v2.4s, v4.4s269; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s270; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s271; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s272; CHECK-SD-NOFP16-NEXT: ret273;274; CHECK-SD-FP16-LABEL: ceil_v16f16:275; CHECK-SD-FP16: // %bb.0: // %entry276; CHECK-SD-FP16-NEXT: frintp v0.8h, v0.8h277; CHECK-SD-FP16-NEXT: frintp v1.8h, v1.8h278; CHECK-SD-FP16-NEXT: ret279;280; CHECK-GI-NOFP16-LABEL: ceil_v16f16:281; CHECK-GI-NOFP16: // %bb.0: // %entry282; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h283; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h284; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h285; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h286; CHECK-GI-NOFP16-NEXT: frintp v2.4s, v2.4s287; CHECK-GI-NOFP16-NEXT: frintp v3.4s, v3.4s288; CHECK-GI-NOFP16-NEXT: frintp v4.4s, v0.4s289; CHECK-GI-NOFP16-NEXT: frintp v5.4s, v1.4s290; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s291; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s292; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s293; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s294; CHECK-GI-NOFP16-NEXT: ret295;296; CHECK-GI-FP16-LABEL: ceil_v16f16:297; CHECK-GI-FP16: // %bb.0: // %entry298; CHECK-GI-FP16-NEXT: frintp v0.8h, v0.8h299; CHECK-GI-FP16-NEXT: frintp v1.8h, v1.8h300; CHECK-GI-FP16-NEXT: ret301entry:302 %c = call <16 x half> @llvm.ceil.v16f16(<16 x half> %a)303 ret <16 x half> %c304}305 306define double @floor_f64(double %a) {307; CHECK-LABEL: floor_f64:308; CHECK: // %bb.0: // %entry309; CHECK-NEXT: frintm d0, d0310; CHECK-NEXT: ret311entry:312 %c = call double @llvm.floor.f64(double %a)313 ret double %c314}315 316define float @floor_f32(float %a) {317; CHECK-LABEL: floor_f32:318; CHECK: // %bb.0: // %entry319; CHECK-NEXT: frintm s0, s0320; CHECK-NEXT: ret321entry:322 %c = call float @llvm.floor.f32(float %a)323 ret float %c324}325 326define half @floor_f16(half %a) {327; CHECK-SD-NOFP16-LABEL: floor_f16:328; CHECK-SD-NOFP16: // %bb.0: // %entry329; CHECK-SD-NOFP16-NEXT: fcvt s0, h0330; CHECK-SD-NOFP16-NEXT: frintm s0, s0331; CHECK-SD-NOFP16-NEXT: fcvt h0, s0332; CHECK-SD-NOFP16-NEXT: ret333;334; CHECK-SD-FP16-LABEL: floor_f16:335; CHECK-SD-FP16: // %bb.0: // %entry336; CHECK-SD-FP16-NEXT: frintm h0, h0337; CHECK-SD-FP16-NEXT: ret338;339; CHECK-GI-NOFP16-LABEL: floor_f16:340; CHECK-GI-NOFP16: // %bb.0: // %entry341; CHECK-GI-NOFP16-NEXT: fcvt s0, h0342; CHECK-GI-NOFP16-NEXT: frintm s0, s0343; CHECK-GI-NOFP16-NEXT: fcvt h0, s0344; CHECK-GI-NOFP16-NEXT: ret345;346; CHECK-GI-FP16-LABEL: floor_f16:347; CHECK-GI-FP16: // %bb.0: // %entry348; CHECK-GI-FP16-NEXT: frintm h0, h0349; CHECK-GI-FP16-NEXT: ret350entry:351 %c = call half @llvm.floor.f16(half %a)352 ret half %c353}354 355define <2 x double> @floor_v2f64(<2 x double> %a) {356; CHECK-LABEL: floor_v2f64:357; CHECK: // %bb.0: // %entry358; CHECK-NEXT: frintm v0.2d, v0.2d359; CHECK-NEXT: ret360entry:361 %c = call <2 x double> @llvm.floor.v2f64(<2 x double> %a)362 ret <2 x double> %c363}364 365define <3 x double> @floor_v3f64(<3 x double> %a) {366; CHECK-SD-LABEL: floor_v3f64:367; CHECK-SD: // %bb.0: // %entry368; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0369; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1370; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q2371; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]372; CHECK-SD-NEXT: frintm v2.2d, v2.2d373; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2374; CHECK-SD-NEXT: frintm v0.2d, v0.2d375; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8376; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0377; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1378; CHECK-SD-NEXT: ret379;380; CHECK-GI-LABEL: floor_v3f64:381; CHECK-GI: // %bb.0: // %entry382; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0383; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1384; CHECK-GI-NEXT: frintm d2, d2385; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]386; CHECK-GI-NEXT: frintm v0.2d, v0.2d387; CHECK-GI-NEXT: mov d1, v0.d[1]388; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0389; CHECK-GI-NEXT: ret390entry:391 %c = call <3 x double> @llvm.floor.v3f64(<3 x double> %a)392 ret <3 x double> %c393}394 395define <4 x double> @floor_v4f64(<4 x double> %a) {396; CHECK-LABEL: floor_v4f64:397; CHECK: // %bb.0: // %entry398; CHECK-NEXT: frintm v0.2d, v0.2d399; CHECK-NEXT: frintm v1.2d, v1.2d400; CHECK-NEXT: ret401entry:402 %c = call <4 x double> @llvm.floor.v4f64(<4 x double> %a)403 ret <4 x double> %c404}405 406define <2 x float> @floor_v2f32(<2 x float> %a) {407; CHECK-LABEL: floor_v2f32:408; CHECK: // %bb.0: // %entry409; CHECK-NEXT: frintm v0.2s, v0.2s410; CHECK-NEXT: ret411entry:412 %c = call <2 x float> @llvm.floor.v2f32(<2 x float> %a)413 ret <2 x float> %c414}415 416define <3 x float> @floor_v3f32(<3 x float> %a) {417; CHECK-LABEL: floor_v3f32:418; CHECK: // %bb.0: // %entry419; CHECK-NEXT: frintm v0.4s, v0.4s420; CHECK-NEXT: ret421entry:422 %c = call <3 x float> @llvm.floor.v3f32(<3 x float> %a)423 ret <3 x float> %c424}425 426define <4 x float> @floor_v4f32(<4 x float> %a) {427; CHECK-LABEL: floor_v4f32:428; CHECK: // %bb.0: // %entry429; CHECK-NEXT: frintm v0.4s, v0.4s430; CHECK-NEXT: ret431entry:432 %c = call <4 x float> @llvm.floor.v4f32(<4 x float> %a)433 ret <4 x float> %c434}435 436define <8 x float> @floor_v8f32(<8 x float> %a) {437; CHECK-LABEL: floor_v8f32:438; CHECK: // %bb.0: // %entry439; CHECK-NEXT: frintm v0.4s, v0.4s440; CHECK-NEXT: frintm v1.4s, v1.4s441; CHECK-NEXT: ret442entry:443 %c = call <8 x float> @llvm.floor.v8f32(<8 x float> %a)444 ret <8 x float> %c445}446 447define <7 x half> @floor_v7f16(<7 x half> %a) {448; CHECK-SD-NOFP16-LABEL: floor_v7f16:449; CHECK-SD-NOFP16: // %bb.0: // %entry450; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h451; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h452; CHECK-SD-NOFP16-NEXT: frintm v1.4s, v1.4s453; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s454; CHECK-SD-NOFP16-NEXT: frintm v1.4s, v2.4s455; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s456; CHECK-SD-NOFP16-NEXT: ret457;458; CHECK-SD-FP16-LABEL: floor_v7f16:459; CHECK-SD-FP16: // %bb.0: // %entry460; CHECK-SD-FP16-NEXT: frintm v0.8h, v0.8h461; CHECK-SD-FP16-NEXT: ret462;463; CHECK-GI-NOFP16-LABEL: floor_v7f16:464; CHECK-GI-NOFP16: // %bb.0: // %entry465; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h466; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]467; CHECK-GI-NOFP16-NEXT: frintm v1.4s, v1.4s468; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]469; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s470; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]471; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]472; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h473; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]474; CHECK-GI-NOFP16-NEXT: frintm v2.4s, v2.4s475; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]476; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s477; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]478; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]479; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]480; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]481; CHECK-GI-NOFP16-NEXT: ret482;483; CHECK-GI-FP16-LABEL: floor_v7f16:484; CHECK-GI-FP16: // %bb.0: // %entry485; CHECK-GI-FP16-NEXT: frintm v0.8h, v0.8h486; CHECK-GI-FP16-NEXT: ret487entry:488 %c = call <7 x half> @llvm.floor.v7f16(<7 x half> %a)489 ret <7 x half> %c490}491 492define <4 x half> @floor_v4f16(<4 x half> %a) {493; CHECK-SD-NOFP16-LABEL: floor_v4f16:494; CHECK-SD-NOFP16: // %bb.0: // %entry495; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h496; CHECK-SD-NOFP16-NEXT: frintm v0.4s, v0.4s497; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s498; CHECK-SD-NOFP16-NEXT: ret499;500; CHECK-SD-FP16-LABEL: floor_v4f16:501; CHECK-SD-FP16: // %bb.0: // %entry502; CHECK-SD-FP16-NEXT: frintm v0.4h, v0.4h503; CHECK-SD-FP16-NEXT: ret504;505; CHECK-GI-NOFP16-LABEL: floor_v4f16:506; CHECK-GI-NOFP16: // %bb.0: // %entry507; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h508; CHECK-GI-NOFP16-NEXT: frintm v0.4s, v0.4s509; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s510; CHECK-GI-NOFP16-NEXT: ret511;512; CHECK-GI-FP16-LABEL: floor_v4f16:513; CHECK-GI-FP16: // %bb.0: // %entry514; CHECK-GI-FP16-NEXT: frintm v0.4h, v0.4h515; CHECK-GI-FP16-NEXT: ret516entry:517 %c = call <4 x half> @llvm.floor.v4f16(<4 x half> %a)518 ret <4 x half> %c519}520 521define <8 x half> @floor_v8f16(<8 x half> %a) {522; CHECK-SD-NOFP16-LABEL: floor_v8f16:523; CHECK-SD-NOFP16: // %bb.0: // %entry524; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h525; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h526; CHECK-SD-NOFP16-NEXT: frintm v1.4s, v1.4s527; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s528; CHECK-SD-NOFP16-NEXT: frintm v1.4s, v2.4s529; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s530; CHECK-SD-NOFP16-NEXT: ret531;532; CHECK-SD-FP16-LABEL: floor_v8f16:533; CHECK-SD-FP16: // %bb.0: // %entry534; CHECK-SD-FP16-NEXT: frintm v0.8h, v0.8h535; CHECK-SD-FP16-NEXT: ret536;537; CHECK-GI-NOFP16-LABEL: floor_v8f16:538; CHECK-GI-NOFP16: // %bb.0: // %entry539; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h540; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h541; CHECK-GI-NOFP16-NEXT: frintm v1.4s, v1.4s542; CHECK-GI-NOFP16-NEXT: frintm v2.4s, v0.4s543; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s544; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s545; CHECK-GI-NOFP16-NEXT: ret546;547; CHECK-GI-FP16-LABEL: floor_v8f16:548; CHECK-GI-FP16: // %bb.0: // %entry549; CHECK-GI-FP16-NEXT: frintm v0.8h, v0.8h550; CHECK-GI-FP16-NEXT: ret551entry:552 %c = call <8 x half> @llvm.floor.v8f16(<8 x half> %a)553 ret <8 x half> %c554}555 556define <16 x half> @floor_v16f16(<16 x half> %a) {557; CHECK-SD-NOFP16-LABEL: floor_v16f16:558; CHECK-SD-NOFP16: // %bb.0: // %entry559; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h560; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h561; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h562; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h563; CHECK-SD-NOFP16-NEXT: frintm v2.4s, v2.4s564; CHECK-SD-NOFP16-NEXT: frintm v1.4s, v3.4s565; CHECK-SD-NOFP16-NEXT: frintm v3.4s, v5.4s566; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s567; CHECK-SD-NOFP16-NEXT: frintm v2.4s, v4.4s568; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s569; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s570; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s571; CHECK-SD-NOFP16-NEXT: ret572;573; CHECK-SD-FP16-LABEL: floor_v16f16:574; CHECK-SD-FP16: // %bb.0: // %entry575; CHECK-SD-FP16-NEXT: frintm v0.8h, v0.8h576; CHECK-SD-FP16-NEXT: frintm v1.8h, v1.8h577; CHECK-SD-FP16-NEXT: ret578;579; CHECK-GI-NOFP16-LABEL: floor_v16f16:580; CHECK-GI-NOFP16: // %bb.0: // %entry581; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h582; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h583; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h584; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h585; CHECK-GI-NOFP16-NEXT: frintm v2.4s, v2.4s586; CHECK-GI-NOFP16-NEXT: frintm v3.4s, v3.4s587; CHECK-GI-NOFP16-NEXT: frintm v4.4s, v0.4s588; CHECK-GI-NOFP16-NEXT: frintm v5.4s, v1.4s589; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s590; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s591; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s592; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s593; CHECK-GI-NOFP16-NEXT: ret594;595; CHECK-GI-FP16-LABEL: floor_v16f16:596; CHECK-GI-FP16: // %bb.0: // %entry597; CHECK-GI-FP16-NEXT: frintm v0.8h, v0.8h598; CHECK-GI-FP16-NEXT: frintm v1.8h, v1.8h599; CHECK-GI-FP16-NEXT: ret600entry:601 %c = call <16 x half> @llvm.floor.v16f16(<16 x half> %a)602 ret <16 x half> %c603}604 605define double @nearbyint_f64(double %a) {606; CHECK-LABEL: nearbyint_f64:607; CHECK: // %bb.0: // %entry608; CHECK-NEXT: frinti d0, d0609; CHECK-NEXT: ret610entry:611 %c = call double @llvm.nearbyint.f64(double %a)612 ret double %c613}614 615define float @nearbyint_f32(float %a) {616; CHECK-LABEL: nearbyint_f32:617; CHECK: // %bb.0: // %entry618; CHECK-NEXT: frinti s0, s0619; CHECK-NEXT: ret620entry:621 %c = call float @llvm.nearbyint.f32(float %a)622 ret float %c623}624 625define half @nearbyint_f16(half %a) {626; CHECK-SD-NOFP16-LABEL: nearbyint_f16:627; CHECK-SD-NOFP16: // %bb.0: // %entry628; CHECK-SD-NOFP16-NEXT: fcvt s0, h0629; CHECK-SD-NOFP16-NEXT: frinti s0, s0630; CHECK-SD-NOFP16-NEXT: fcvt h0, s0631; CHECK-SD-NOFP16-NEXT: ret632;633; CHECK-SD-FP16-LABEL: nearbyint_f16:634; CHECK-SD-FP16: // %bb.0: // %entry635; CHECK-SD-FP16-NEXT: frinti h0, h0636; CHECK-SD-FP16-NEXT: ret637;638; CHECK-GI-NOFP16-LABEL: nearbyint_f16:639; CHECK-GI-NOFP16: // %bb.0: // %entry640; CHECK-GI-NOFP16-NEXT: fcvt s0, h0641; CHECK-GI-NOFP16-NEXT: frinti s0, s0642; CHECK-GI-NOFP16-NEXT: fcvt h0, s0643; CHECK-GI-NOFP16-NEXT: ret644;645; CHECK-GI-FP16-LABEL: nearbyint_f16:646; CHECK-GI-FP16: // %bb.0: // %entry647; CHECK-GI-FP16-NEXT: frinti h0, h0648; CHECK-GI-FP16-NEXT: ret649entry:650 %c = call half @llvm.nearbyint.f16(half %a)651 ret half %c652}653 654define <2 x double> @nearbyint_v2f64(<2 x double> %a) {655; CHECK-LABEL: nearbyint_v2f64:656; CHECK: // %bb.0: // %entry657; CHECK-NEXT: frinti v0.2d, v0.2d658; CHECK-NEXT: ret659entry:660 %c = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %a)661 ret <2 x double> %c662}663 664define <3 x double> @nearbyint_v3f64(<3 x double> %a) {665; CHECK-SD-LABEL: nearbyint_v3f64:666; CHECK-SD: // %bb.0: // %entry667; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0668; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1669; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q2670; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]671; CHECK-SD-NEXT: frinti v2.2d, v2.2d672; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2673; CHECK-SD-NEXT: frinti v0.2d, v0.2d674; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8675; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0676; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1677; CHECK-SD-NEXT: ret678;679; CHECK-GI-LABEL: nearbyint_v3f64:680; CHECK-GI: // %bb.0: // %entry681; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0682; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1683; CHECK-GI-NEXT: frinti d2, d2684; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]685; CHECK-GI-NEXT: frinti v0.2d, v0.2d686; CHECK-GI-NEXT: mov d1, v0.d[1]687; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0688; CHECK-GI-NEXT: ret689entry:690 %c = call <3 x double> @llvm.nearbyint.v3f64(<3 x double> %a)691 ret <3 x double> %c692}693 694define <4 x double> @nearbyint_v4f64(<4 x double> %a) {695; CHECK-LABEL: nearbyint_v4f64:696; CHECK: // %bb.0: // %entry697; CHECK-NEXT: frinti v0.2d, v0.2d698; CHECK-NEXT: frinti v1.2d, v1.2d699; CHECK-NEXT: ret700entry:701 %c = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %a)702 ret <4 x double> %c703}704 705define <2 x float> @nearbyint_v2f32(<2 x float> %a) {706; CHECK-LABEL: nearbyint_v2f32:707; CHECK: // %bb.0: // %entry708; CHECK-NEXT: frinti v0.2s, v0.2s709; CHECK-NEXT: ret710entry:711 %c = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> %a)712 ret <2 x float> %c713}714 715define <3 x float> @nearbyint_v3f32(<3 x float> %a) {716; CHECK-LABEL: nearbyint_v3f32:717; CHECK: // %bb.0: // %entry718; CHECK-NEXT: frinti v0.4s, v0.4s719; CHECK-NEXT: ret720entry:721 %c = call <3 x float> @llvm.nearbyint.v3f32(<3 x float> %a)722 ret <3 x float> %c723}724 725define <4 x float> @nearbyint_v4f32(<4 x float> %a) {726; CHECK-LABEL: nearbyint_v4f32:727; CHECK: // %bb.0: // %entry728; CHECK-NEXT: frinti v0.4s, v0.4s729; CHECK-NEXT: ret730entry:731 %c = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %a)732 ret <4 x float> %c733}734 735define <8 x float> @nearbyint_v8f32(<8 x float> %a) {736; CHECK-LABEL: nearbyint_v8f32:737; CHECK: // %bb.0: // %entry738; CHECK-NEXT: frinti v0.4s, v0.4s739; CHECK-NEXT: frinti v1.4s, v1.4s740; CHECK-NEXT: ret741entry:742 %c = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %a)743 ret <8 x float> %c744}745 746define <7 x half> @nearbyint_v7f16(<7 x half> %a) {747; CHECK-SD-NOFP16-LABEL: nearbyint_v7f16:748; CHECK-SD-NOFP16: // %bb.0: // %entry749; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h750; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h751; CHECK-SD-NOFP16-NEXT: frinti v1.4s, v1.4s752; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s753; CHECK-SD-NOFP16-NEXT: frinti v1.4s, v2.4s754; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s755; CHECK-SD-NOFP16-NEXT: ret756;757; CHECK-SD-FP16-LABEL: nearbyint_v7f16:758; CHECK-SD-FP16: // %bb.0: // %entry759; CHECK-SD-FP16-NEXT: frinti v0.8h, v0.8h760; CHECK-SD-FP16-NEXT: ret761;762; CHECK-GI-NOFP16-LABEL: nearbyint_v7f16:763; CHECK-GI-NOFP16: // %bb.0: // %entry764; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h765; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]766; CHECK-GI-NOFP16-NEXT: frinti v1.4s, v1.4s767; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]768; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s769; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]770; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]771; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h772; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]773; CHECK-GI-NOFP16-NEXT: frinti v2.4s, v2.4s774; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]775; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s776; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]777; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]778; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]779; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]780; CHECK-GI-NOFP16-NEXT: ret781;782; CHECK-GI-FP16-LABEL: nearbyint_v7f16:783; CHECK-GI-FP16: // %bb.0: // %entry784; CHECK-GI-FP16-NEXT: frinti v0.8h, v0.8h785; CHECK-GI-FP16-NEXT: ret786entry:787 %c = call <7 x half> @llvm.nearbyint.v7f16(<7 x half> %a)788 ret <7 x half> %c789}790 791define <4 x half> @nearbyint_v4f16(<4 x half> %a) {792; CHECK-SD-NOFP16-LABEL: nearbyint_v4f16:793; CHECK-SD-NOFP16: // %bb.0: // %entry794; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h795; CHECK-SD-NOFP16-NEXT: frinti v0.4s, v0.4s796; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s797; CHECK-SD-NOFP16-NEXT: ret798;799; CHECK-SD-FP16-LABEL: nearbyint_v4f16:800; CHECK-SD-FP16: // %bb.0: // %entry801; CHECK-SD-FP16-NEXT: frinti v0.4h, v0.4h802; CHECK-SD-FP16-NEXT: ret803;804; CHECK-GI-NOFP16-LABEL: nearbyint_v4f16:805; CHECK-GI-NOFP16: // %bb.0: // %entry806; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h807; CHECK-GI-NOFP16-NEXT: frinti v0.4s, v0.4s808; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s809; CHECK-GI-NOFP16-NEXT: ret810;811; CHECK-GI-FP16-LABEL: nearbyint_v4f16:812; CHECK-GI-FP16: // %bb.0: // %entry813; CHECK-GI-FP16-NEXT: frinti v0.4h, v0.4h814; CHECK-GI-FP16-NEXT: ret815entry:816 %c = call <4 x half> @llvm.nearbyint.v4f16(<4 x half> %a)817 ret <4 x half> %c818}819 820define <8 x half> @nearbyint_v8f16(<8 x half> %a) {821; CHECK-SD-NOFP16-LABEL: nearbyint_v8f16:822; CHECK-SD-NOFP16: // %bb.0: // %entry823; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h824; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h825; CHECK-SD-NOFP16-NEXT: frinti v1.4s, v1.4s826; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s827; CHECK-SD-NOFP16-NEXT: frinti v1.4s, v2.4s828; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s829; CHECK-SD-NOFP16-NEXT: ret830;831; CHECK-SD-FP16-LABEL: nearbyint_v8f16:832; CHECK-SD-FP16: // %bb.0: // %entry833; CHECK-SD-FP16-NEXT: frinti v0.8h, v0.8h834; CHECK-SD-FP16-NEXT: ret835;836; CHECK-GI-NOFP16-LABEL: nearbyint_v8f16:837; CHECK-GI-NOFP16: // %bb.0: // %entry838; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h839; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h840; CHECK-GI-NOFP16-NEXT: frinti v1.4s, v1.4s841; CHECK-GI-NOFP16-NEXT: frinti v2.4s, v0.4s842; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s843; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s844; CHECK-GI-NOFP16-NEXT: ret845;846; CHECK-GI-FP16-LABEL: nearbyint_v8f16:847; CHECK-GI-FP16: // %bb.0: // %entry848; CHECK-GI-FP16-NEXT: frinti v0.8h, v0.8h849; CHECK-GI-FP16-NEXT: ret850entry:851 %c = call <8 x half> @llvm.nearbyint.v8f16(<8 x half> %a)852 ret <8 x half> %c853}854 855define <16 x half> @nearbyint_v16f16(<16 x half> %a) {856; CHECK-SD-NOFP16-LABEL: nearbyint_v16f16:857; CHECK-SD-NOFP16: // %bb.0: // %entry858; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h859; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h860; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h861; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h862; CHECK-SD-NOFP16-NEXT: frinti v2.4s, v2.4s863; CHECK-SD-NOFP16-NEXT: frinti v1.4s, v3.4s864; CHECK-SD-NOFP16-NEXT: frinti v3.4s, v5.4s865; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s866; CHECK-SD-NOFP16-NEXT: frinti v2.4s, v4.4s867; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s868; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s869; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s870; CHECK-SD-NOFP16-NEXT: ret871;872; CHECK-SD-FP16-LABEL: nearbyint_v16f16:873; CHECK-SD-FP16: // %bb.0: // %entry874; CHECK-SD-FP16-NEXT: frinti v0.8h, v0.8h875; CHECK-SD-FP16-NEXT: frinti v1.8h, v1.8h876; CHECK-SD-FP16-NEXT: ret877;878; CHECK-GI-NOFP16-LABEL: nearbyint_v16f16:879; CHECK-GI-NOFP16: // %bb.0: // %entry880; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h881; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h882; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h883; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h884; CHECK-GI-NOFP16-NEXT: frinti v2.4s, v2.4s885; CHECK-GI-NOFP16-NEXT: frinti v3.4s, v3.4s886; CHECK-GI-NOFP16-NEXT: frinti v4.4s, v0.4s887; CHECK-GI-NOFP16-NEXT: frinti v5.4s, v1.4s888; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s889; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s890; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s891; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s892; CHECK-GI-NOFP16-NEXT: ret893;894; CHECK-GI-FP16-LABEL: nearbyint_v16f16:895; CHECK-GI-FP16: // %bb.0: // %entry896; CHECK-GI-FP16-NEXT: frinti v0.8h, v0.8h897; CHECK-GI-FP16-NEXT: frinti v1.8h, v1.8h898; CHECK-GI-FP16-NEXT: ret899entry:900 %c = call <16 x half> @llvm.nearbyint.v16f16(<16 x half> %a)901 ret <16 x half> %c902}903 904define double @roundeven_f64(double %a) {905; CHECK-LABEL: roundeven_f64:906; CHECK: // %bb.0: // %entry907; CHECK-NEXT: frintn d0, d0908; CHECK-NEXT: ret909entry:910 %c = call double @llvm.roundeven.f64(double %a)911 ret double %c912}913 914define float @roundeven_f32(float %a) {915; CHECK-LABEL: roundeven_f32:916; CHECK: // %bb.0: // %entry917; CHECK-NEXT: frintn s0, s0918; CHECK-NEXT: ret919entry:920 %c = call float @llvm.roundeven.f32(float %a)921 ret float %c922}923 924define half @roundeven_f16(half %a) {925; CHECK-SD-NOFP16-LABEL: roundeven_f16:926; CHECK-SD-NOFP16: // %bb.0: // %entry927; CHECK-SD-NOFP16-NEXT: fcvt s0, h0928; CHECK-SD-NOFP16-NEXT: frintn s0, s0929; CHECK-SD-NOFP16-NEXT: fcvt h0, s0930; CHECK-SD-NOFP16-NEXT: ret931;932; CHECK-SD-FP16-LABEL: roundeven_f16:933; CHECK-SD-FP16: // %bb.0: // %entry934; CHECK-SD-FP16-NEXT: frintn h0, h0935; CHECK-SD-FP16-NEXT: ret936;937; CHECK-GI-NOFP16-LABEL: roundeven_f16:938; CHECK-GI-NOFP16: // %bb.0: // %entry939; CHECK-GI-NOFP16-NEXT: fcvt s0, h0940; CHECK-GI-NOFP16-NEXT: frintn s0, s0941; CHECK-GI-NOFP16-NEXT: fcvt h0, s0942; CHECK-GI-NOFP16-NEXT: ret943;944; CHECK-GI-FP16-LABEL: roundeven_f16:945; CHECK-GI-FP16: // %bb.0: // %entry946; CHECK-GI-FP16-NEXT: frintn h0, h0947; CHECK-GI-FP16-NEXT: ret948entry:949 %c = call half @llvm.roundeven.f16(half %a)950 ret half %c951}952 953define <2 x double> @roundeven_v2f64(<2 x double> %a) {954; CHECK-LABEL: roundeven_v2f64:955; CHECK: // %bb.0: // %entry956; CHECK-NEXT: frintn v0.2d, v0.2d957; CHECK-NEXT: ret958entry:959 %c = call <2 x double> @llvm.roundeven.v2f64(<2 x double> %a)960 ret <2 x double> %c961}962 963define <3 x double> @roundeven_v3f64(<3 x double> %a) {964; CHECK-SD-LABEL: roundeven_v3f64:965; CHECK-SD: // %bb.0: // %entry966; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0967; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1968; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q2969; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]970; CHECK-SD-NEXT: frintn v2.2d, v2.2d971; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2972; CHECK-SD-NEXT: frintn v0.2d, v0.2d973; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8974; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0975; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1976; CHECK-SD-NEXT: ret977;978; CHECK-GI-LABEL: roundeven_v3f64:979; CHECK-GI: // %bb.0: // %entry980; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0981; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1982; CHECK-GI-NEXT: frintn d2, d2983; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]984; CHECK-GI-NEXT: frintn v0.2d, v0.2d985; CHECK-GI-NEXT: mov d1, v0.d[1]986; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0987; CHECK-GI-NEXT: ret988entry:989 %c = call <3 x double> @llvm.roundeven.v3f64(<3 x double> %a)990 ret <3 x double> %c991}992 993define <4 x double> @roundeven_v4f64(<4 x double> %a) {994; CHECK-LABEL: roundeven_v4f64:995; CHECK: // %bb.0: // %entry996; CHECK-NEXT: frintn v0.2d, v0.2d997; CHECK-NEXT: frintn v1.2d, v1.2d998; CHECK-NEXT: ret999entry:1000 %c = call <4 x double> @llvm.roundeven.v4f64(<4 x double> %a)1001 ret <4 x double> %c1002}1003 1004define <2 x float> @roundeven_v2f32(<2 x float> %a) {1005; CHECK-LABEL: roundeven_v2f32:1006; CHECK: // %bb.0: // %entry1007; CHECK-NEXT: frintn v0.2s, v0.2s1008; CHECK-NEXT: ret1009entry:1010 %c = call <2 x float> @llvm.roundeven.v2f32(<2 x float> %a)1011 ret <2 x float> %c1012}1013 1014define <3 x float> @roundeven_v3f32(<3 x float> %a) {1015; CHECK-LABEL: roundeven_v3f32:1016; CHECK: // %bb.0: // %entry1017; CHECK-NEXT: frintn v0.4s, v0.4s1018; CHECK-NEXT: ret1019entry:1020 %c = call <3 x float> @llvm.roundeven.v3f32(<3 x float> %a)1021 ret <3 x float> %c1022}1023 1024define <4 x float> @roundeven_v4f32(<4 x float> %a) {1025; CHECK-LABEL: roundeven_v4f32:1026; CHECK: // %bb.0: // %entry1027; CHECK-NEXT: frintn v0.4s, v0.4s1028; CHECK-NEXT: ret1029entry:1030 %c = call <4 x float> @llvm.roundeven.v4f32(<4 x float> %a)1031 ret <4 x float> %c1032}1033 1034define <8 x float> @roundeven_v8f32(<8 x float> %a) {1035; CHECK-LABEL: roundeven_v8f32:1036; CHECK: // %bb.0: // %entry1037; CHECK-NEXT: frintn v0.4s, v0.4s1038; CHECK-NEXT: frintn v1.4s, v1.4s1039; CHECK-NEXT: ret1040entry:1041 %c = call <8 x float> @llvm.roundeven.v8f32(<8 x float> %a)1042 ret <8 x float> %c1043}1044 1045define <7 x half> @roundeven_v7f16(<7 x half> %a) {1046; CHECK-SD-NOFP16-LABEL: roundeven_v7f16:1047; CHECK-SD-NOFP16: // %bb.0: // %entry1048; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1049; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1050; CHECK-SD-NOFP16-NEXT: frintn v1.4s, v1.4s1051; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1052; CHECK-SD-NOFP16-NEXT: frintn v1.4s, v2.4s1053; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1054; CHECK-SD-NOFP16-NEXT: ret1055;1056; CHECK-SD-FP16-LABEL: roundeven_v7f16:1057; CHECK-SD-FP16: // %bb.0: // %entry1058; CHECK-SD-FP16-NEXT: frintn v0.8h, v0.8h1059; CHECK-SD-FP16-NEXT: ret1060;1061; CHECK-GI-NOFP16-LABEL: roundeven_v7f16:1062; CHECK-GI-NOFP16: // %bb.0: // %entry1063; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1064; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]1065; CHECK-GI-NOFP16-NEXT: frintn v1.4s, v1.4s1066; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]1067; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s1068; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]1069; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]1070; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h1071; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]1072; CHECK-GI-NOFP16-NEXT: frintn v2.4s, v2.4s1073; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]1074; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s1075; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]1076; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]1077; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]1078; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]1079; CHECK-GI-NOFP16-NEXT: ret1080;1081; CHECK-GI-FP16-LABEL: roundeven_v7f16:1082; CHECK-GI-FP16: // %bb.0: // %entry1083; CHECK-GI-FP16-NEXT: frintn v0.8h, v0.8h1084; CHECK-GI-FP16-NEXT: ret1085entry:1086 %c = call <7 x half> @llvm.roundeven.v7f16(<7 x half> %a)1087 ret <7 x half> %c1088}1089 1090define <4 x half> @roundeven_v4f16(<4 x half> %a) {1091; CHECK-SD-NOFP16-LABEL: roundeven_v4f16:1092; CHECK-SD-NOFP16: // %bb.0: // %entry1093; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h1094; CHECK-SD-NOFP16-NEXT: frintn v0.4s, v0.4s1095; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s1096; CHECK-SD-NOFP16-NEXT: ret1097;1098; CHECK-SD-FP16-LABEL: roundeven_v4f16:1099; CHECK-SD-FP16: // %bb.0: // %entry1100; CHECK-SD-FP16-NEXT: frintn v0.4h, v0.4h1101; CHECK-SD-FP16-NEXT: ret1102;1103; CHECK-GI-NOFP16-LABEL: roundeven_v4f16:1104; CHECK-GI-NOFP16: // %bb.0: // %entry1105; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h1106; CHECK-GI-NOFP16-NEXT: frintn v0.4s, v0.4s1107; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s1108; CHECK-GI-NOFP16-NEXT: ret1109;1110; CHECK-GI-FP16-LABEL: roundeven_v4f16:1111; CHECK-GI-FP16: // %bb.0: // %entry1112; CHECK-GI-FP16-NEXT: frintn v0.4h, v0.4h1113; CHECK-GI-FP16-NEXT: ret1114entry:1115 %c = call <4 x half> @llvm.roundeven.v4f16(<4 x half> %a)1116 ret <4 x half> %c1117}1118 1119define <8 x half> @roundeven_v8f16(<8 x half> %a) {1120; CHECK-SD-NOFP16-LABEL: roundeven_v8f16:1121; CHECK-SD-NOFP16: // %bb.0: // %entry1122; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1123; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1124; CHECK-SD-NOFP16-NEXT: frintn v1.4s, v1.4s1125; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1126; CHECK-SD-NOFP16-NEXT: frintn v1.4s, v2.4s1127; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1128; CHECK-SD-NOFP16-NEXT: ret1129;1130; CHECK-SD-FP16-LABEL: roundeven_v8f16:1131; CHECK-SD-FP16: // %bb.0: // %entry1132; CHECK-SD-FP16-NEXT: frintn v0.8h, v0.8h1133; CHECK-SD-FP16-NEXT: ret1134;1135; CHECK-GI-NOFP16-LABEL: roundeven_v8f16:1136; CHECK-GI-NOFP16: // %bb.0: // %entry1137; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1138; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h1139; CHECK-GI-NOFP16-NEXT: frintn v1.4s, v1.4s1140; CHECK-GI-NOFP16-NEXT: frintn v2.4s, v0.4s1141; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s1142; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s1143; CHECK-GI-NOFP16-NEXT: ret1144;1145; CHECK-GI-FP16-LABEL: roundeven_v8f16:1146; CHECK-GI-FP16: // %bb.0: // %entry1147; CHECK-GI-FP16-NEXT: frintn v0.8h, v0.8h1148; CHECK-GI-FP16-NEXT: ret1149entry:1150 %c = call <8 x half> @llvm.roundeven.v8f16(<8 x half> %a)1151 ret <8 x half> %c1152}1153 1154define <16 x half> @roundeven_v16f16(<16 x half> %a) {1155; CHECK-SD-NOFP16-LABEL: roundeven_v16f16:1156; CHECK-SD-NOFP16: // %bb.0: // %entry1157; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h1158; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h1159; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h1160; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h1161; CHECK-SD-NOFP16-NEXT: frintn v2.4s, v2.4s1162; CHECK-SD-NOFP16-NEXT: frintn v1.4s, v3.4s1163; CHECK-SD-NOFP16-NEXT: frintn v3.4s, v5.4s1164; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s1165; CHECK-SD-NOFP16-NEXT: frintn v2.4s, v4.4s1166; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s1167; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s1168; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s1169; CHECK-SD-NOFP16-NEXT: ret1170;1171; CHECK-SD-FP16-LABEL: roundeven_v16f16:1172; CHECK-SD-FP16: // %bb.0: // %entry1173; CHECK-SD-FP16-NEXT: frintn v0.8h, v0.8h1174; CHECK-SD-FP16-NEXT: frintn v1.8h, v1.8h1175; CHECK-SD-FP16-NEXT: ret1176;1177; CHECK-GI-NOFP16-LABEL: roundeven_v16f16:1178; CHECK-GI-NOFP16: // %bb.0: // %entry1179; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h1180; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h1181; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h1182; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h1183; CHECK-GI-NOFP16-NEXT: frintn v2.4s, v2.4s1184; CHECK-GI-NOFP16-NEXT: frintn v3.4s, v3.4s1185; CHECK-GI-NOFP16-NEXT: frintn v4.4s, v0.4s1186; CHECK-GI-NOFP16-NEXT: frintn v5.4s, v1.4s1187; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s1188; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s1189; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s1190; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s1191; CHECK-GI-NOFP16-NEXT: ret1192;1193; CHECK-GI-FP16-LABEL: roundeven_v16f16:1194; CHECK-GI-FP16: // %bb.0: // %entry1195; CHECK-GI-FP16-NEXT: frintn v0.8h, v0.8h1196; CHECK-GI-FP16-NEXT: frintn v1.8h, v1.8h1197; CHECK-GI-FP16-NEXT: ret1198entry:1199 %c = call <16 x half> @llvm.roundeven.v16f16(<16 x half> %a)1200 ret <16 x half> %c1201}1202 1203define double @rint_f64(double %a) {1204; CHECK-LABEL: rint_f64:1205; CHECK: // %bb.0: // %entry1206; CHECK-NEXT: frintx d0, d01207; CHECK-NEXT: ret1208entry:1209 %c = call double @llvm.rint.f64(double %a)1210 ret double %c1211}1212 1213define float @rint_f32(float %a) {1214; CHECK-LABEL: rint_f32:1215; CHECK: // %bb.0: // %entry1216; CHECK-NEXT: frintx s0, s01217; CHECK-NEXT: ret1218entry:1219 %c = call float @llvm.rint.f32(float %a)1220 ret float %c1221}1222 1223define half @rint_f16(half %a) {1224; CHECK-SD-NOFP16-LABEL: rint_f16:1225; CHECK-SD-NOFP16: // %bb.0: // %entry1226; CHECK-SD-NOFP16-NEXT: fcvt s0, h01227; CHECK-SD-NOFP16-NEXT: frintx s0, s01228; CHECK-SD-NOFP16-NEXT: fcvt h0, s01229; CHECK-SD-NOFP16-NEXT: ret1230;1231; CHECK-SD-FP16-LABEL: rint_f16:1232; CHECK-SD-FP16: // %bb.0: // %entry1233; CHECK-SD-FP16-NEXT: frintx h0, h01234; CHECK-SD-FP16-NEXT: ret1235;1236; CHECK-GI-NOFP16-LABEL: rint_f16:1237; CHECK-GI-NOFP16: // %bb.0: // %entry1238; CHECK-GI-NOFP16-NEXT: fcvt s0, h01239; CHECK-GI-NOFP16-NEXT: frintx s0, s01240; CHECK-GI-NOFP16-NEXT: fcvt h0, s01241; CHECK-GI-NOFP16-NEXT: ret1242;1243; CHECK-GI-FP16-LABEL: rint_f16:1244; CHECK-GI-FP16: // %bb.0: // %entry1245; CHECK-GI-FP16-NEXT: frintx h0, h01246; CHECK-GI-FP16-NEXT: ret1247entry:1248 %c = call half @llvm.rint.f16(half %a)1249 ret half %c1250}1251 1252define <2 x double> @rint_v2f64(<2 x double> %a) {1253; CHECK-LABEL: rint_v2f64:1254; CHECK: // %bb.0: // %entry1255; CHECK-NEXT: frintx v0.2d, v0.2d1256; CHECK-NEXT: ret1257entry:1258 %c = call <2 x double> @llvm.rint.v2f64(<2 x double> %a)1259 ret <2 x double> %c1260}1261 1262define <3 x double> @rint_v3f64(<3 x double> %a) {1263; CHECK-SD-LABEL: rint_v3f64:1264; CHECK-SD: // %bb.0: // %entry1265; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q01266; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q11267; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q21268; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]1269; CHECK-SD-NEXT: frintx v2.2d, v2.2d1270; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q21271; CHECK-SD-NEXT: frintx v0.2d, v0.2d1272; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81273; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q01274; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q11275; CHECK-SD-NEXT: ret1276;1277; CHECK-GI-LABEL: rint_v3f64:1278; CHECK-GI: // %bb.0: // %entry1279; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q01280; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q11281; CHECK-GI-NEXT: frintx d2, d21282; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]1283; CHECK-GI-NEXT: frintx v0.2d, v0.2d1284; CHECK-GI-NEXT: mov d1, v0.d[1]1285; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q01286; CHECK-GI-NEXT: ret1287entry:1288 %c = call <3 x double> @llvm.rint.v3f64(<3 x double> %a)1289 ret <3 x double> %c1290}1291 1292define <4 x double> @rint_v4f64(<4 x double> %a) {1293; CHECK-LABEL: rint_v4f64:1294; CHECK: // %bb.0: // %entry1295; CHECK-NEXT: frintx v0.2d, v0.2d1296; CHECK-NEXT: frintx v1.2d, v1.2d1297; CHECK-NEXT: ret1298entry:1299 %c = call <4 x double> @llvm.rint.v4f64(<4 x double> %a)1300 ret <4 x double> %c1301}1302 1303define <2 x float> @rint_v2f32(<2 x float> %a) {1304; CHECK-LABEL: rint_v2f32:1305; CHECK: // %bb.0: // %entry1306; CHECK-NEXT: frintx v0.2s, v0.2s1307; CHECK-NEXT: ret1308entry:1309 %c = call <2 x float> @llvm.rint.v2f32(<2 x float> %a)1310 ret <2 x float> %c1311}1312 1313define <3 x float> @rint_v3f32(<3 x float> %a) {1314; CHECK-LABEL: rint_v3f32:1315; CHECK: // %bb.0: // %entry1316; CHECK-NEXT: frintx v0.4s, v0.4s1317; CHECK-NEXT: ret1318entry:1319 %c = call <3 x float> @llvm.rint.v3f32(<3 x float> %a)1320 ret <3 x float> %c1321}1322 1323define <4 x float> @rint_v4f32(<4 x float> %a) {1324; CHECK-LABEL: rint_v4f32:1325; CHECK: // %bb.0: // %entry1326; CHECK-NEXT: frintx v0.4s, v0.4s1327; CHECK-NEXT: ret1328entry:1329 %c = call <4 x float> @llvm.rint.v4f32(<4 x float> %a)1330 ret <4 x float> %c1331}1332 1333define <8 x float> @rint_v8f32(<8 x float> %a) {1334; CHECK-LABEL: rint_v8f32:1335; CHECK: // %bb.0: // %entry1336; CHECK-NEXT: frintx v0.4s, v0.4s1337; CHECK-NEXT: frintx v1.4s, v1.4s1338; CHECK-NEXT: ret1339entry:1340 %c = call <8 x float> @llvm.rint.v8f32(<8 x float> %a)1341 ret <8 x float> %c1342}1343 1344define <7 x half> @rint_v7f16(<7 x half> %a) {1345; CHECK-SD-NOFP16-LABEL: rint_v7f16:1346; CHECK-SD-NOFP16: // %bb.0: // %entry1347; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1348; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1349; CHECK-SD-NOFP16-NEXT: frintx v1.4s, v1.4s1350; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1351; CHECK-SD-NOFP16-NEXT: frintx v1.4s, v2.4s1352; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1353; CHECK-SD-NOFP16-NEXT: ret1354;1355; CHECK-SD-FP16-LABEL: rint_v7f16:1356; CHECK-SD-FP16: // %bb.0: // %entry1357; CHECK-SD-FP16-NEXT: frintx v0.8h, v0.8h1358; CHECK-SD-FP16-NEXT: ret1359;1360; CHECK-GI-NOFP16-LABEL: rint_v7f16:1361; CHECK-GI-NOFP16: // %bb.0: // %entry1362; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1363; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]1364; CHECK-GI-NOFP16-NEXT: frintx v1.4s, v1.4s1365; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]1366; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s1367; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]1368; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]1369; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h1370; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]1371; CHECK-GI-NOFP16-NEXT: frintx v2.4s, v2.4s1372; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]1373; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s1374; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]1375; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]1376; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]1377; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]1378; CHECK-GI-NOFP16-NEXT: ret1379;1380; CHECK-GI-FP16-LABEL: rint_v7f16:1381; CHECK-GI-FP16: // %bb.0: // %entry1382; CHECK-GI-FP16-NEXT: frintx v0.8h, v0.8h1383; CHECK-GI-FP16-NEXT: ret1384entry:1385 %c = call <7 x half> @llvm.rint.v7f16(<7 x half> %a)1386 ret <7 x half> %c1387}1388 1389define <4 x half> @rint_v4f16(<4 x half> %a) {1390; CHECK-SD-NOFP16-LABEL: rint_v4f16:1391; CHECK-SD-NOFP16: // %bb.0: // %entry1392; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h1393; CHECK-SD-NOFP16-NEXT: frintx v0.4s, v0.4s1394; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s1395; CHECK-SD-NOFP16-NEXT: ret1396;1397; CHECK-SD-FP16-LABEL: rint_v4f16:1398; CHECK-SD-FP16: // %bb.0: // %entry1399; CHECK-SD-FP16-NEXT: frintx v0.4h, v0.4h1400; CHECK-SD-FP16-NEXT: ret1401;1402; CHECK-GI-NOFP16-LABEL: rint_v4f16:1403; CHECK-GI-NOFP16: // %bb.0: // %entry1404; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h1405; CHECK-GI-NOFP16-NEXT: frintx v0.4s, v0.4s1406; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s1407; CHECK-GI-NOFP16-NEXT: ret1408;1409; CHECK-GI-FP16-LABEL: rint_v4f16:1410; CHECK-GI-FP16: // %bb.0: // %entry1411; CHECK-GI-FP16-NEXT: frintx v0.4h, v0.4h1412; CHECK-GI-FP16-NEXT: ret1413entry:1414 %c = call <4 x half> @llvm.rint.v4f16(<4 x half> %a)1415 ret <4 x half> %c1416}1417 1418define <8 x half> @rint_v8f16(<8 x half> %a) {1419; CHECK-SD-NOFP16-LABEL: rint_v8f16:1420; CHECK-SD-NOFP16: // %bb.0: // %entry1421; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1422; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1423; CHECK-SD-NOFP16-NEXT: frintx v1.4s, v1.4s1424; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1425; CHECK-SD-NOFP16-NEXT: frintx v1.4s, v2.4s1426; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1427; CHECK-SD-NOFP16-NEXT: ret1428;1429; CHECK-SD-FP16-LABEL: rint_v8f16:1430; CHECK-SD-FP16: // %bb.0: // %entry1431; CHECK-SD-FP16-NEXT: frintx v0.8h, v0.8h1432; CHECK-SD-FP16-NEXT: ret1433;1434; CHECK-GI-NOFP16-LABEL: rint_v8f16:1435; CHECK-GI-NOFP16: // %bb.0: // %entry1436; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1437; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h1438; CHECK-GI-NOFP16-NEXT: frintx v1.4s, v1.4s1439; CHECK-GI-NOFP16-NEXT: frintx v2.4s, v0.4s1440; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s1441; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s1442; CHECK-GI-NOFP16-NEXT: ret1443;1444; CHECK-GI-FP16-LABEL: rint_v8f16:1445; CHECK-GI-FP16: // %bb.0: // %entry1446; CHECK-GI-FP16-NEXT: frintx v0.8h, v0.8h1447; CHECK-GI-FP16-NEXT: ret1448entry:1449 %c = call <8 x half> @llvm.rint.v8f16(<8 x half> %a)1450 ret <8 x half> %c1451}1452 1453define <16 x half> @rint_v16f16(<16 x half> %a) {1454; CHECK-SD-NOFP16-LABEL: rint_v16f16:1455; CHECK-SD-NOFP16: // %bb.0: // %entry1456; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h1457; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h1458; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h1459; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h1460; CHECK-SD-NOFP16-NEXT: frintx v2.4s, v2.4s1461; CHECK-SD-NOFP16-NEXT: frintx v1.4s, v3.4s1462; CHECK-SD-NOFP16-NEXT: frintx v3.4s, v5.4s1463; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s1464; CHECK-SD-NOFP16-NEXT: frintx v2.4s, v4.4s1465; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s1466; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s1467; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s1468; CHECK-SD-NOFP16-NEXT: ret1469;1470; CHECK-SD-FP16-LABEL: rint_v16f16:1471; CHECK-SD-FP16: // %bb.0: // %entry1472; CHECK-SD-FP16-NEXT: frintx v0.8h, v0.8h1473; CHECK-SD-FP16-NEXT: frintx v1.8h, v1.8h1474; CHECK-SD-FP16-NEXT: ret1475;1476; CHECK-GI-NOFP16-LABEL: rint_v16f16:1477; CHECK-GI-NOFP16: // %bb.0: // %entry1478; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h1479; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h1480; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h1481; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h1482; CHECK-GI-NOFP16-NEXT: frintx v2.4s, v2.4s1483; CHECK-GI-NOFP16-NEXT: frintx v3.4s, v3.4s1484; CHECK-GI-NOFP16-NEXT: frintx v4.4s, v0.4s1485; CHECK-GI-NOFP16-NEXT: frintx v5.4s, v1.4s1486; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s1487; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s1488; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s1489; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s1490; CHECK-GI-NOFP16-NEXT: ret1491;1492; CHECK-GI-FP16-LABEL: rint_v16f16:1493; CHECK-GI-FP16: // %bb.0: // %entry1494; CHECK-GI-FP16-NEXT: frintx v0.8h, v0.8h1495; CHECK-GI-FP16-NEXT: frintx v1.8h, v1.8h1496; CHECK-GI-FP16-NEXT: ret1497entry:1498 %c = call <16 x half> @llvm.rint.v16f16(<16 x half> %a)1499 ret <16 x half> %c1500}1501 1502define double @round_f64(double %a) {1503; CHECK-LABEL: round_f64:1504; CHECK: // %bb.0: // %entry1505; CHECK-NEXT: frinta d0, d01506; CHECK-NEXT: ret1507entry:1508 %c = call double @llvm.round.f64(double %a)1509 ret double %c1510}1511 1512define float @round_f32(float %a) {1513; CHECK-LABEL: round_f32:1514; CHECK: // %bb.0: // %entry1515; CHECK-NEXT: frinta s0, s01516; CHECK-NEXT: ret1517entry:1518 %c = call float @llvm.round.f32(float %a)1519 ret float %c1520}1521 1522define half @round_f16(half %a) {1523; CHECK-SD-NOFP16-LABEL: round_f16:1524; CHECK-SD-NOFP16: // %bb.0: // %entry1525; CHECK-SD-NOFP16-NEXT: fcvt s0, h01526; CHECK-SD-NOFP16-NEXT: frinta s0, s01527; CHECK-SD-NOFP16-NEXT: fcvt h0, s01528; CHECK-SD-NOFP16-NEXT: ret1529;1530; CHECK-SD-FP16-LABEL: round_f16:1531; CHECK-SD-FP16: // %bb.0: // %entry1532; CHECK-SD-FP16-NEXT: frinta h0, h01533; CHECK-SD-FP16-NEXT: ret1534;1535; CHECK-GI-NOFP16-LABEL: round_f16:1536; CHECK-GI-NOFP16: // %bb.0: // %entry1537; CHECK-GI-NOFP16-NEXT: fcvt s0, h01538; CHECK-GI-NOFP16-NEXT: frinta s0, s01539; CHECK-GI-NOFP16-NEXT: fcvt h0, s01540; CHECK-GI-NOFP16-NEXT: ret1541;1542; CHECK-GI-FP16-LABEL: round_f16:1543; CHECK-GI-FP16: // %bb.0: // %entry1544; CHECK-GI-FP16-NEXT: frinta h0, h01545; CHECK-GI-FP16-NEXT: ret1546entry:1547 %c = call half @llvm.round.f16(half %a)1548 ret half %c1549}1550 1551define <2 x double> @round_v2f64(<2 x double> %a) {1552; CHECK-LABEL: round_v2f64:1553; CHECK: // %bb.0: // %entry1554; CHECK-NEXT: frinta v0.2d, v0.2d1555; CHECK-NEXT: ret1556entry:1557 %c = call <2 x double> @llvm.round.v2f64(<2 x double> %a)1558 ret <2 x double> %c1559}1560 1561define <3 x double> @round_v3f64(<3 x double> %a) {1562; CHECK-SD-LABEL: round_v3f64:1563; CHECK-SD: // %bb.0: // %entry1564; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q01565; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q11566; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q21567; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]1568; CHECK-SD-NEXT: frinta v2.2d, v2.2d1569; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q21570; CHECK-SD-NEXT: frinta v0.2d, v0.2d1571; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81572; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q01573; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q11574; CHECK-SD-NEXT: ret1575;1576; CHECK-GI-LABEL: round_v3f64:1577; CHECK-GI: // %bb.0: // %entry1578; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q01579; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q11580; CHECK-GI-NEXT: frinta d2, d21581; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]1582; CHECK-GI-NEXT: frinta v0.2d, v0.2d1583; CHECK-GI-NEXT: mov d1, v0.d[1]1584; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q01585; CHECK-GI-NEXT: ret1586entry:1587 %c = call <3 x double> @llvm.round.v3f64(<3 x double> %a)1588 ret <3 x double> %c1589}1590 1591define <4 x double> @round_v4f64(<4 x double> %a) {1592; CHECK-LABEL: round_v4f64:1593; CHECK: // %bb.0: // %entry1594; CHECK-NEXT: frinta v0.2d, v0.2d1595; CHECK-NEXT: frinta v1.2d, v1.2d1596; CHECK-NEXT: ret1597entry:1598 %c = call <4 x double> @llvm.round.v4f64(<4 x double> %a)1599 ret <4 x double> %c1600}1601 1602define <2 x float> @round_v2f32(<2 x float> %a) {1603; CHECK-LABEL: round_v2f32:1604; CHECK: // %bb.0: // %entry1605; CHECK-NEXT: frinta v0.2s, v0.2s1606; CHECK-NEXT: ret1607entry:1608 %c = call <2 x float> @llvm.round.v2f32(<2 x float> %a)1609 ret <2 x float> %c1610}1611 1612define <3 x float> @round_v3f32(<3 x float> %a) {1613; CHECK-LABEL: round_v3f32:1614; CHECK: // %bb.0: // %entry1615; CHECK-NEXT: frinta v0.4s, v0.4s1616; CHECK-NEXT: ret1617entry:1618 %c = call <3 x float> @llvm.round.v3f32(<3 x float> %a)1619 ret <3 x float> %c1620}1621 1622define <4 x float> @round_v4f32(<4 x float> %a) {1623; CHECK-LABEL: round_v4f32:1624; CHECK: // %bb.0: // %entry1625; CHECK-NEXT: frinta v0.4s, v0.4s1626; CHECK-NEXT: ret1627entry:1628 %c = call <4 x float> @llvm.round.v4f32(<4 x float> %a)1629 ret <4 x float> %c1630}1631 1632define <8 x float> @round_v8f32(<8 x float> %a) {1633; CHECK-LABEL: round_v8f32:1634; CHECK: // %bb.0: // %entry1635; CHECK-NEXT: frinta v0.4s, v0.4s1636; CHECK-NEXT: frinta v1.4s, v1.4s1637; CHECK-NEXT: ret1638entry:1639 %c = call <8 x float> @llvm.round.v8f32(<8 x float> %a)1640 ret <8 x float> %c1641}1642 1643define <7 x half> @round_v7f16(<7 x half> %a) {1644; CHECK-SD-NOFP16-LABEL: round_v7f16:1645; CHECK-SD-NOFP16: // %bb.0: // %entry1646; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1647; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1648; CHECK-SD-NOFP16-NEXT: frinta v1.4s, v1.4s1649; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1650; CHECK-SD-NOFP16-NEXT: frinta v1.4s, v2.4s1651; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1652; CHECK-SD-NOFP16-NEXT: ret1653;1654; CHECK-SD-FP16-LABEL: round_v7f16:1655; CHECK-SD-FP16: // %bb.0: // %entry1656; CHECK-SD-FP16-NEXT: frinta v0.8h, v0.8h1657; CHECK-SD-FP16-NEXT: ret1658;1659; CHECK-GI-NOFP16-LABEL: round_v7f16:1660; CHECK-GI-NOFP16: // %bb.0: // %entry1661; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1662; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]1663; CHECK-GI-NOFP16-NEXT: frinta v1.4s, v1.4s1664; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]1665; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s1666; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]1667; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]1668; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h1669; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]1670; CHECK-GI-NOFP16-NEXT: frinta v2.4s, v2.4s1671; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]1672; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s1673; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]1674; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]1675; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]1676; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]1677; CHECK-GI-NOFP16-NEXT: ret1678;1679; CHECK-GI-FP16-LABEL: round_v7f16:1680; CHECK-GI-FP16: // %bb.0: // %entry1681; CHECK-GI-FP16-NEXT: frinta v0.8h, v0.8h1682; CHECK-GI-FP16-NEXT: ret1683entry:1684 %c = call <7 x half> @llvm.round.v7f16(<7 x half> %a)1685 ret <7 x half> %c1686}1687 1688define <4 x half> @round_v4f16(<4 x half> %a) {1689; CHECK-SD-NOFP16-LABEL: round_v4f16:1690; CHECK-SD-NOFP16: // %bb.0: // %entry1691; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h1692; CHECK-SD-NOFP16-NEXT: frinta v0.4s, v0.4s1693; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s1694; CHECK-SD-NOFP16-NEXT: ret1695;1696; CHECK-SD-FP16-LABEL: round_v4f16:1697; CHECK-SD-FP16: // %bb.0: // %entry1698; CHECK-SD-FP16-NEXT: frinta v0.4h, v0.4h1699; CHECK-SD-FP16-NEXT: ret1700;1701; CHECK-GI-NOFP16-LABEL: round_v4f16:1702; CHECK-GI-NOFP16: // %bb.0: // %entry1703; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h1704; CHECK-GI-NOFP16-NEXT: frinta v0.4s, v0.4s1705; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s1706; CHECK-GI-NOFP16-NEXT: ret1707;1708; CHECK-GI-FP16-LABEL: round_v4f16:1709; CHECK-GI-FP16: // %bb.0: // %entry1710; CHECK-GI-FP16-NEXT: frinta v0.4h, v0.4h1711; CHECK-GI-FP16-NEXT: ret1712entry:1713 %c = call <4 x half> @llvm.round.v4f16(<4 x half> %a)1714 ret <4 x half> %c1715}1716 1717define <8 x half> @round_v8f16(<8 x half> %a) {1718; CHECK-SD-NOFP16-LABEL: round_v8f16:1719; CHECK-SD-NOFP16: // %bb.0: // %entry1720; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1721; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1722; CHECK-SD-NOFP16-NEXT: frinta v1.4s, v1.4s1723; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1724; CHECK-SD-NOFP16-NEXT: frinta v1.4s, v2.4s1725; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1726; CHECK-SD-NOFP16-NEXT: ret1727;1728; CHECK-SD-FP16-LABEL: round_v8f16:1729; CHECK-SD-FP16: // %bb.0: // %entry1730; CHECK-SD-FP16-NEXT: frinta v0.8h, v0.8h1731; CHECK-SD-FP16-NEXT: ret1732;1733; CHECK-GI-NOFP16-LABEL: round_v8f16:1734; CHECK-GI-NOFP16: // %bb.0: // %entry1735; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1736; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h1737; CHECK-GI-NOFP16-NEXT: frinta v1.4s, v1.4s1738; CHECK-GI-NOFP16-NEXT: frinta v2.4s, v0.4s1739; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s1740; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s1741; CHECK-GI-NOFP16-NEXT: ret1742;1743; CHECK-GI-FP16-LABEL: round_v8f16:1744; CHECK-GI-FP16: // %bb.0: // %entry1745; CHECK-GI-FP16-NEXT: frinta v0.8h, v0.8h1746; CHECK-GI-FP16-NEXT: ret1747entry:1748 %c = call <8 x half> @llvm.round.v8f16(<8 x half> %a)1749 ret <8 x half> %c1750}1751 1752define <16 x half> @round_v16f16(<16 x half> %a) {1753; CHECK-SD-NOFP16-LABEL: round_v16f16:1754; CHECK-SD-NOFP16: // %bb.0: // %entry1755; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h1756; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h1757; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h1758; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h1759; CHECK-SD-NOFP16-NEXT: frinta v2.4s, v2.4s1760; CHECK-SD-NOFP16-NEXT: frinta v1.4s, v3.4s1761; CHECK-SD-NOFP16-NEXT: frinta v3.4s, v5.4s1762; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s1763; CHECK-SD-NOFP16-NEXT: frinta v2.4s, v4.4s1764; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s1765; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s1766; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s1767; CHECK-SD-NOFP16-NEXT: ret1768;1769; CHECK-SD-FP16-LABEL: round_v16f16:1770; CHECK-SD-FP16: // %bb.0: // %entry1771; CHECK-SD-FP16-NEXT: frinta v0.8h, v0.8h1772; CHECK-SD-FP16-NEXT: frinta v1.8h, v1.8h1773; CHECK-SD-FP16-NEXT: ret1774;1775; CHECK-GI-NOFP16-LABEL: round_v16f16:1776; CHECK-GI-NOFP16: // %bb.0: // %entry1777; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h1778; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h1779; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h1780; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h1781; CHECK-GI-NOFP16-NEXT: frinta v2.4s, v2.4s1782; CHECK-GI-NOFP16-NEXT: frinta v3.4s, v3.4s1783; CHECK-GI-NOFP16-NEXT: frinta v4.4s, v0.4s1784; CHECK-GI-NOFP16-NEXT: frinta v5.4s, v1.4s1785; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s1786; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s1787; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s1788; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s1789; CHECK-GI-NOFP16-NEXT: ret1790;1791; CHECK-GI-FP16-LABEL: round_v16f16:1792; CHECK-GI-FP16: // %bb.0: // %entry1793; CHECK-GI-FP16-NEXT: frinta v0.8h, v0.8h1794; CHECK-GI-FP16-NEXT: frinta v1.8h, v1.8h1795; CHECK-GI-FP16-NEXT: ret1796entry:1797 %c = call <16 x half> @llvm.round.v16f16(<16 x half> %a)1798 ret <16 x half> %c1799}1800 1801define double @trunc_f64(double %a) {1802; CHECK-LABEL: trunc_f64:1803; CHECK: // %bb.0: // %entry1804; CHECK-NEXT: frintz d0, d01805; CHECK-NEXT: ret1806entry:1807 %c = call double @llvm.trunc.f64(double %a)1808 ret double %c1809}1810 1811define float @trunc_f32(float %a) {1812; CHECK-LABEL: trunc_f32:1813; CHECK: // %bb.0: // %entry1814; CHECK-NEXT: frintz s0, s01815; CHECK-NEXT: ret1816entry:1817 %c = call float @llvm.trunc.f32(float %a)1818 ret float %c1819}1820 1821define half @trunc_f16(half %a) {1822; CHECK-SD-NOFP16-LABEL: trunc_f16:1823; CHECK-SD-NOFP16: // %bb.0: // %entry1824; CHECK-SD-NOFP16-NEXT: fcvt s0, h01825; CHECK-SD-NOFP16-NEXT: frintz s0, s01826; CHECK-SD-NOFP16-NEXT: fcvt h0, s01827; CHECK-SD-NOFP16-NEXT: ret1828;1829; CHECK-SD-FP16-LABEL: trunc_f16:1830; CHECK-SD-FP16: // %bb.0: // %entry1831; CHECK-SD-FP16-NEXT: frintz h0, h01832; CHECK-SD-FP16-NEXT: ret1833;1834; CHECK-GI-NOFP16-LABEL: trunc_f16:1835; CHECK-GI-NOFP16: // %bb.0: // %entry1836; CHECK-GI-NOFP16-NEXT: fcvt s0, h01837; CHECK-GI-NOFP16-NEXT: frintz s0, s01838; CHECK-GI-NOFP16-NEXT: fcvt h0, s01839; CHECK-GI-NOFP16-NEXT: ret1840;1841; CHECK-GI-FP16-LABEL: trunc_f16:1842; CHECK-GI-FP16: // %bb.0: // %entry1843; CHECK-GI-FP16-NEXT: frintz h0, h01844; CHECK-GI-FP16-NEXT: ret1845entry:1846 %c = call half @llvm.trunc.f16(half %a)1847 ret half %c1848}1849 1850define <2 x double> @trunc_v2f64(<2 x double> %a) {1851; CHECK-LABEL: trunc_v2f64:1852; CHECK: // %bb.0: // %entry1853; CHECK-NEXT: frintz v0.2d, v0.2d1854; CHECK-NEXT: ret1855entry:1856 %c = call <2 x double> @llvm.trunc.v2f64(<2 x double> %a)1857 ret <2 x double> %c1858}1859 1860define <3 x double> @trunc_v3f64(<3 x double> %a) {1861; CHECK-SD-LABEL: trunc_v3f64:1862; CHECK-SD: // %bb.0: // %entry1863; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q01864; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q11865; CHECK-SD-NEXT: // kill: def $d2 killed $d2 def $q21866; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]1867; CHECK-SD-NEXT: frintz v2.2d, v2.2d1868; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q21869; CHECK-SD-NEXT: frintz v0.2d, v0.2d1870; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #81871; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q01872; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q11873; CHECK-SD-NEXT: ret1874;1875; CHECK-GI-LABEL: trunc_v3f64:1876; CHECK-GI: // %bb.0: // %entry1877; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q01878; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q11879; CHECK-GI-NEXT: frintz d2, d21880; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]1881; CHECK-GI-NEXT: frintz v0.2d, v0.2d1882; CHECK-GI-NEXT: mov d1, v0.d[1]1883; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q01884; CHECK-GI-NEXT: ret1885entry:1886 %c = call <3 x double> @llvm.trunc.v3f64(<3 x double> %a)1887 ret <3 x double> %c1888}1889 1890define <4 x double> @trunc_v4f64(<4 x double> %a) {1891; CHECK-LABEL: trunc_v4f64:1892; CHECK: // %bb.0: // %entry1893; CHECK-NEXT: frintz v0.2d, v0.2d1894; CHECK-NEXT: frintz v1.2d, v1.2d1895; CHECK-NEXT: ret1896entry:1897 %c = call <4 x double> @llvm.trunc.v4f64(<4 x double> %a)1898 ret <4 x double> %c1899}1900 1901define <2 x float> @trunc_v2f32(<2 x float> %a) {1902; CHECK-LABEL: trunc_v2f32:1903; CHECK: // %bb.0: // %entry1904; CHECK-NEXT: frintz v0.2s, v0.2s1905; CHECK-NEXT: ret1906entry:1907 %c = call <2 x float> @llvm.trunc.v2f32(<2 x float> %a)1908 ret <2 x float> %c1909}1910 1911define <3 x float> @trunc_v3f32(<3 x float> %a) {1912; CHECK-LABEL: trunc_v3f32:1913; CHECK: // %bb.0: // %entry1914; CHECK-NEXT: frintz v0.4s, v0.4s1915; CHECK-NEXT: ret1916entry:1917 %c = call <3 x float> @llvm.trunc.v3f32(<3 x float> %a)1918 ret <3 x float> %c1919}1920 1921define <4 x float> @trunc_v4f32(<4 x float> %a) {1922; CHECK-LABEL: trunc_v4f32:1923; CHECK: // %bb.0: // %entry1924; CHECK-NEXT: frintz v0.4s, v0.4s1925; CHECK-NEXT: ret1926entry:1927 %c = call <4 x float> @llvm.trunc.v4f32(<4 x float> %a)1928 ret <4 x float> %c1929}1930 1931define <8 x float> @trunc_v8f32(<8 x float> %a) {1932; CHECK-LABEL: trunc_v8f32:1933; CHECK: // %bb.0: // %entry1934; CHECK-NEXT: frintz v0.4s, v0.4s1935; CHECK-NEXT: frintz v1.4s, v1.4s1936; CHECK-NEXT: ret1937entry:1938 %c = call <8 x float> @llvm.trunc.v8f32(<8 x float> %a)1939 ret <8 x float> %c1940}1941 1942define <7 x half> @trunc_v7f16(<7 x half> %a) {1943; CHECK-SD-NOFP16-LABEL: trunc_v7f16:1944; CHECK-SD-NOFP16: // %bb.0: // %entry1945; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h1946; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h1947; CHECK-SD-NOFP16-NEXT: frintz v1.4s, v1.4s1948; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s1949; CHECK-SD-NOFP16-NEXT: frintz v1.4s, v2.4s1950; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s1951; CHECK-SD-NOFP16-NEXT: ret1952;1953; CHECK-SD-FP16-LABEL: trunc_v7f16:1954; CHECK-SD-FP16: // %bb.0: // %entry1955; CHECK-SD-FP16-NEXT: frintz v0.8h, v0.8h1956; CHECK-SD-FP16-NEXT: ret1957;1958; CHECK-GI-NOFP16-LABEL: trunc_v7f16:1959; CHECK-GI-NOFP16: // %bb.0: // %entry1960; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h1961; CHECK-GI-NOFP16-NEXT: mov v2.h[0], v0.h[4]1962; CHECK-GI-NOFP16-NEXT: frintz v1.4s, v1.4s1963; CHECK-GI-NOFP16-NEXT: mov v2.h[1], v0.h[5]1964; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v1.4s1965; CHECK-GI-NOFP16-NEXT: mov v2.h[2], v0.h[6]1966; CHECK-GI-NOFP16-NEXT: mov v0.h[0], v1.h[0]1967; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v2.4h1968; CHECK-GI-NOFP16-NEXT: mov v0.h[1], v1.h[1]1969; CHECK-GI-NOFP16-NEXT: frintz v2.4s, v2.4s1970; CHECK-GI-NOFP16-NEXT: mov v0.h[2], v1.h[2]1971; CHECK-GI-NOFP16-NEXT: fcvtn v2.4h, v2.4s1972; CHECK-GI-NOFP16-NEXT: mov v0.h[3], v1.h[3]1973; CHECK-GI-NOFP16-NEXT: mov v0.h[4], v2.h[0]1974; CHECK-GI-NOFP16-NEXT: mov v0.h[5], v2.h[1]1975; CHECK-GI-NOFP16-NEXT: mov v0.h[6], v2.h[2]1976; CHECK-GI-NOFP16-NEXT: ret1977;1978; CHECK-GI-FP16-LABEL: trunc_v7f16:1979; CHECK-GI-FP16: // %bb.0: // %entry1980; CHECK-GI-FP16-NEXT: frintz v0.8h, v0.8h1981; CHECK-GI-FP16-NEXT: ret1982entry:1983 %c = call <7 x half> @llvm.trunc.v7f16(<7 x half> %a)1984 ret <7 x half> %c1985}1986 1987define <4 x half> @trunc_v4f16(<4 x half> %a) {1988; CHECK-SD-NOFP16-LABEL: trunc_v4f16:1989; CHECK-SD-NOFP16: // %bb.0: // %entry1990; CHECK-SD-NOFP16-NEXT: fcvtl v0.4s, v0.4h1991; CHECK-SD-NOFP16-NEXT: frintz v0.4s, v0.4s1992; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v0.4s1993; CHECK-SD-NOFP16-NEXT: ret1994;1995; CHECK-SD-FP16-LABEL: trunc_v4f16:1996; CHECK-SD-FP16: // %bb.0: // %entry1997; CHECK-SD-FP16-NEXT: frintz v0.4h, v0.4h1998; CHECK-SD-FP16-NEXT: ret1999;2000; CHECK-GI-NOFP16-LABEL: trunc_v4f16:2001; CHECK-GI-NOFP16: // %bb.0: // %entry2002; CHECK-GI-NOFP16-NEXT: fcvtl v0.4s, v0.4h2003; CHECK-GI-NOFP16-NEXT: frintz v0.4s, v0.4s2004; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v0.4s2005; CHECK-GI-NOFP16-NEXT: ret2006;2007; CHECK-GI-FP16-LABEL: trunc_v4f16:2008; CHECK-GI-FP16: // %bb.0: // %entry2009; CHECK-GI-FP16-NEXT: frintz v0.4h, v0.4h2010; CHECK-GI-FP16-NEXT: ret2011entry:2012 %c = call <4 x half> @llvm.trunc.v4f16(<4 x half> %a)2013 ret <4 x half> %c2014}2015 2016define <8 x half> @trunc_v8f16(<8 x half> %a) {2017; CHECK-SD-NOFP16-LABEL: trunc_v8f16:2018; CHECK-SD-NOFP16: // %bb.0: // %entry2019; CHECK-SD-NOFP16-NEXT: fcvtl v1.4s, v0.4h2020; CHECK-SD-NOFP16-NEXT: fcvtl2 v2.4s, v0.8h2021; CHECK-SD-NOFP16-NEXT: frintz v1.4s, v1.4s2022; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v1.4s2023; CHECK-SD-NOFP16-NEXT: frintz v1.4s, v2.4s2024; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v1.4s2025; CHECK-SD-NOFP16-NEXT: ret2026;2027; CHECK-SD-FP16-LABEL: trunc_v8f16:2028; CHECK-SD-FP16: // %bb.0: // %entry2029; CHECK-SD-FP16-NEXT: frintz v0.8h, v0.8h2030; CHECK-SD-FP16-NEXT: ret2031;2032; CHECK-GI-NOFP16-LABEL: trunc_v8f16:2033; CHECK-GI-NOFP16: // %bb.0: // %entry2034; CHECK-GI-NOFP16-NEXT: fcvtl v1.4s, v0.4h2035; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h2036; CHECK-GI-NOFP16-NEXT: frintz v1.4s, v1.4s2037; CHECK-GI-NOFP16-NEXT: frintz v2.4s, v0.4s2038; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v1.4s2039; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s2040; CHECK-GI-NOFP16-NEXT: ret2041;2042; CHECK-GI-FP16-LABEL: trunc_v8f16:2043; CHECK-GI-FP16: // %bb.0: // %entry2044; CHECK-GI-FP16-NEXT: frintz v0.8h, v0.8h2045; CHECK-GI-FP16-NEXT: ret2046entry:2047 %c = call <8 x half> @llvm.trunc.v8f16(<8 x half> %a)2048 ret <8 x half> %c2049}2050 2051define <16 x half> @trunc_v16f16(<16 x half> %a) {2052; CHECK-SD-NOFP16-LABEL: trunc_v16f16:2053; CHECK-SD-NOFP16: // %bb.0: // %entry2054; CHECK-SD-NOFP16-NEXT: fcvtl v2.4s, v0.4h2055; CHECK-SD-NOFP16-NEXT: fcvtl v3.4s, v1.4h2056; CHECK-SD-NOFP16-NEXT: fcvtl2 v4.4s, v0.8h2057; CHECK-SD-NOFP16-NEXT: fcvtl2 v5.4s, v1.8h2058; CHECK-SD-NOFP16-NEXT: frintz v2.4s, v2.4s2059; CHECK-SD-NOFP16-NEXT: frintz v1.4s, v3.4s2060; CHECK-SD-NOFP16-NEXT: frintz v3.4s, v5.4s2061; CHECK-SD-NOFP16-NEXT: fcvtn v0.4h, v2.4s2062; CHECK-SD-NOFP16-NEXT: frintz v2.4s, v4.4s2063; CHECK-SD-NOFP16-NEXT: fcvtn v1.4h, v1.4s2064; CHECK-SD-NOFP16-NEXT: fcvtn2 v0.8h, v2.4s2065; CHECK-SD-NOFP16-NEXT: fcvtn2 v1.8h, v3.4s2066; CHECK-SD-NOFP16-NEXT: ret2067;2068; CHECK-SD-FP16-LABEL: trunc_v16f16:2069; CHECK-SD-FP16: // %bb.0: // %entry2070; CHECK-SD-FP16-NEXT: frintz v0.8h, v0.8h2071; CHECK-SD-FP16-NEXT: frintz v1.8h, v1.8h2072; CHECK-SD-FP16-NEXT: ret2073;2074; CHECK-GI-NOFP16-LABEL: trunc_v16f16:2075; CHECK-GI-NOFP16: // %bb.0: // %entry2076; CHECK-GI-NOFP16-NEXT: fcvtl v2.4s, v0.4h2077; CHECK-GI-NOFP16-NEXT: fcvtl v3.4s, v1.4h2078; CHECK-GI-NOFP16-NEXT: fcvtl2 v0.4s, v0.8h2079; CHECK-GI-NOFP16-NEXT: fcvtl2 v1.4s, v1.8h2080; CHECK-GI-NOFP16-NEXT: frintz v2.4s, v2.4s2081; CHECK-GI-NOFP16-NEXT: frintz v3.4s, v3.4s2082; CHECK-GI-NOFP16-NEXT: frintz v4.4s, v0.4s2083; CHECK-GI-NOFP16-NEXT: frintz v5.4s, v1.4s2084; CHECK-GI-NOFP16-NEXT: fcvtn v0.4h, v2.4s2085; CHECK-GI-NOFP16-NEXT: fcvtn v1.4h, v3.4s2086; CHECK-GI-NOFP16-NEXT: fcvtn2 v0.8h, v4.4s2087; CHECK-GI-NOFP16-NEXT: fcvtn2 v1.8h, v5.4s2088; CHECK-GI-NOFP16-NEXT: ret2089;2090; CHECK-GI-FP16-LABEL: trunc_v16f16:2091; CHECK-GI-FP16: // %bb.0: // %entry2092; CHECK-GI-FP16-NEXT: frintz v0.8h, v0.8h2093; CHECK-GI-FP16-NEXT: frintz v1.8h, v1.8h2094; CHECK-GI-FP16-NEXT: ret2095entry:2096 %c = call <16 x half> @llvm.trunc.v16f16(<16 x half> %a)2097 ret <16 x half> %c2098}2099 2100declare <16 x half> @llvm.ceil.v16f16(<16 x half>)2101declare <16 x half> @llvm.floor.v16f16(<16 x half>)2102declare <16 x half> @llvm.nearbyint.v16f16(<16 x half>)2103declare <16 x half> @llvm.rint.v16f16(<16 x half>)2104declare <16 x half> @llvm.round.v16f16(<16 x half>)2105declare <16 x half> @llvm.roundeven.v16f16(<16 x half>)2106declare <16 x half> @llvm.trunc.v16f16(<16 x half>)2107declare <2 x double> @llvm.ceil.v2f64(<2 x double>)2108declare <2 x double> @llvm.floor.v2f64(<2 x double>)2109declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>)2110declare <2 x double> @llvm.rint.v2f64(<2 x double>)2111declare <2 x double> @llvm.round.v2f64(<2 x double>)2112declare <2 x double> @llvm.roundeven.v2f64(<2 x double>)2113declare <2 x double> @llvm.trunc.v2f64(<2 x double>)2114declare <2 x float> @llvm.ceil.v2f32(<2 x float>)2115declare <2 x float> @llvm.floor.v2f32(<2 x float>)2116declare <2 x float> @llvm.nearbyint.v2f32(<2 x float>)2117declare <2 x float> @llvm.rint.v2f32(<2 x float>)2118declare <2 x float> @llvm.round.v2f32(<2 x float>)2119declare <2 x float> @llvm.roundeven.v2f32(<2 x float>)2120declare <2 x float> @llvm.trunc.v2f32(<2 x float>)2121declare <3 x double> @llvm.ceil.v3f64(<3 x double>)2122declare <3 x double> @llvm.floor.v3f64(<3 x double>)2123declare <3 x double> @llvm.nearbyint.v3f64(<3 x double>)2124declare <3 x double> @llvm.rint.v3f64(<3 x double>)2125declare <3 x double> @llvm.round.v3f64(<3 x double>)2126declare <3 x double> @llvm.roundeven.v3f64(<3 x double>)2127declare <3 x double> @llvm.trunc.v3f64(<3 x double>)2128declare <3 x float> @llvm.ceil.v3f32(<3 x float>)2129declare <3 x float> @llvm.floor.v3f32(<3 x float>)2130declare <3 x float> @llvm.nearbyint.v3f32(<3 x float>)2131declare <3 x float> @llvm.rint.v3f32(<3 x float>)2132declare <3 x float> @llvm.round.v3f32(<3 x float>)2133declare <3 x float> @llvm.roundeven.v3f32(<3 x float>)2134declare <3 x float> @llvm.trunc.v3f32(<3 x float>)2135declare <4 x double> @llvm.ceil.v4f64(<4 x double>)2136declare <4 x double> @llvm.floor.v4f64(<4 x double>)2137declare <4 x double> @llvm.nearbyint.v4f64(<4 x double>)2138declare <4 x double> @llvm.rint.v4f64(<4 x double>)2139declare <4 x double> @llvm.round.v4f64(<4 x double>)2140declare <4 x double> @llvm.roundeven.v4f64(<4 x double>)2141declare <4 x double> @llvm.trunc.v4f64(<4 x double>)2142declare <4 x float> @llvm.ceil.v4f32(<4 x float>)2143declare <4 x float> @llvm.floor.v4f32(<4 x float>)2144declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>)2145declare <4 x float> @llvm.rint.v4f32(<4 x float>)2146declare <4 x float> @llvm.round.v4f32(<4 x float>)2147declare <4 x float> @llvm.roundeven.v4f32(<4 x float>)2148declare <4 x float> @llvm.trunc.v4f32(<4 x float>)2149declare <4 x half> @llvm.ceil.v4f16(<4 x half>)2150declare <4 x half> @llvm.floor.v4f16(<4 x half>)2151declare <4 x half> @llvm.nearbyint.v4f16(<4 x half>)2152declare <4 x half> @llvm.rint.v4f16(<4 x half>)2153declare <4 x half> @llvm.round.v4f16(<4 x half>)2154declare <4 x half> @llvm.roundeven.v4f16(<4 x half>)2155declare <4 x half> @llvm.trunc.v4f16(<4 x half>)2156declare <7 x half> @llvm.ceil.v7f16(<7 x half>)2157declare <7 x half> @llvm.floor.v7f16(<7 x half>)2158declare <7 x half> @llvm.nearbyint.v7f16(<7 x half>)2159declare <7 x half> @llvm.rint.v7f16(<7 x half>)2160declare <7 x half> @llvm.round.v7f16(<7 x half>)2161declare <7 x half> @llvm.roundeven.v7f16(<7 x half>)2162declare <7 x half> @llvm.trunc.v7f16(<7 x half>)2163declare <8 x float> @llvm.ceil.v8f32(<8 x float>)2164declare <8 x float> @llvm.floor.v8f32(<8 x float>)2165declare <8 x float> @llvm.nearbyint.v8f32(<8 x float>)2166declare <8 x float> @llvm.rint.v8f32(<8 x float>)2167declare <8 x float> @llvm.round.v8f32(<8 x float>)2168declare <8 x float> @llvm.roundeven.v8f32(<8 x float>)2169declare <8 x float> @llvm.trunc.v8f32(<8 x float>)2170declare <8 x half> @llvm.ceil.v8f16(<8 x half>)2171declare <8 x half> @llvm.floor.v8f16(<8 x half>)2172declare <8 x half> @llvm.nearbyint.v8f16(<8 x half>)2173declare <8 x half> @llvm.rint.v8f16(<8 x half>)2174declare <8 x half> @llvm.round.v8f16(<8 x half>)2175declare <8 x half> @llvm.roundeven.v8f16(<8 x half>)2176declare <8 x half> @llvm.trunc.v8f16(<8 x half>)2177declare double @llvm.ceil.f64(double)2178declare double @llvm.floor.f64(double)2179declare double @llvm.nearbyint.f64(double)2180declare double @llvm.rint.f64(double)2181declare double @llvm.round.f64(double)2182declare double @llvm.roundeven.f64(double)2183declare double @llvm.trunc.f64(double)2184declare float @llvm.ceil.f32(float)2185declare float @llvm.floor.f32(float)2186declare float @llvm.nearbyint.f32(float)2187declare float @llvm.rint.f32(float)2188declare float @llvm.round.f32(float)2189declare float @llvm.roundeven.f32(float)2190declare float @llvm.trunc.f32(float)2191declare half @llvm.ceil.f16(half)2192declare half @llvm.floor.f16(half)2193declare half @llvm.nearbyint.f16(half)2194declare half @llvm.rint.f16(half)2195declare half @llvm.round.f16(half)2196declare half @llvm.roundeven.f16(half)2197declare half @llvm.trunc.f16(half)2198