166 lines · plain
1; RUN: llc < %s -mtriple=aarch64 -mattr=+v8.5a | FileCheck %s2 3declare <2 x float> @llvm.aarch64.neon.frint32x.v2f32(<2 x float>)4declare <4 x float> @llvm.aarch64.neon.frint32x.v4f32(<4 x float>)5declare <2 x float> @llvm.aarch64.neon.frint32z.v2f32(<2 x float>)6declare <4 x float> @llvm.aarch64.neon.frint32z.v4f32(<4 x float>)7 8define dso_local <2 x float> @t_vrnd32x_f32(<2 x float> %a) {9; CHECK-LABEL: t_vrnd32x_f32:10; CHECK: frint32x v0.2s, v0.2s11; CHECK-NEXT: ret12entry:13 %val = tail call <2 x float> @llvm.aarch64.neon.frint32x.v2f32(<2 x float> %a)14 ret <2 x float> %val15}16 17define dso_local <4 x float> @t_vrnd32xq_f32(<4 x float> %a) {18; CHECK-LABEL: t_vrnd32xq_f32:19; CHECK: frint32x v0.4s, v0.4s20; CHECK-NEXT: ret21entry:22 %val = tail call <4 x float> @llvm.aarch64.neon.frint32x.v4f32(<4 x float> %a)23 ret <4 x float> %val24}25 26define dso_local <2 x float> @t_vrnd32z_f32(<2 x float> %a) {27; CHECK-LABEL: t_vrnd32z_f32:28; CHECK: frint32z v0.2s, v0.2s29; CHECK-NEXT: ret30entry:31 %val = tail call <2 x float> @llvm.aarch64.neon.frint32z.v2f32(<2 x float> %a)32 ret <2 x float> %val33}34 35define dso_local <4 x float> @t_vrnd32zq_f32(<4 x float> %a) {36; CHECK-LABEL: t_vrnd32zq_f32:37; CHECK: frint32z v0.4s, v0.4s38; CHECK-NEXT: ret39entry:40 %val = tail call <4 x float> @llvm.aarch64.neon.frint32z.v4f32(<4 x float> %a)41 ret <4 x float> %val42}43 44declare <2 x float> @llvm.aarch64.neon.frint64x.v2f32(<2 x float>)45declare <4 x float> @llvm.aarch64.neon.frint64x.v4f32(<4 x float>)46declare <2 x float> @llvm.aarch64.neon.frint64z.v2f32(<2 x float>)47declare <4 x float> @llvm.aarch64.neon.frint64z.v4f32(<4 x float>)48 49define dso_local <2 x float> @t_vrnd64x_f32(<2 x float> %a) {50; CHECK-LABEL: t_vrnd64x_f32:51; CHECK: frint64x v0.2s, v0.2s52; CHECK-NEXT: ret53entry:54 %val = tail call <2 x float> @llvm.aarch64.neon.frint64x.v2f32(<2 x float> %a)55 ret <2 x float> %val56}57 58define dso_local <4 x float> @t_vrnd64xq_f32(<4 x float> %a) {59; CHECK-LABEL: t_vrnd64xq_f32:60; CHECK: frint64x v0.4s, v0.4s61; CHECK-NEXT: ret62entry:63 %val = tail call <4 x float> @llvm.aarch64.neon.frint64x.v4f32(<4 x float> %a)64 ret <4 x float> %val65}66 67define dso_local <2 x float> @t_vrnd64z_f32(<2 x float> %a) {68; CHECK-LABEL: t_vrnd64z_f32:69; CHECK: frint64z v0.2s, v0.2s70; CHECK-NEXT: ret71entry:72 %val = tail call <2 x float> @llvm.aarch64.neon.frint64z.v2f32(<2 x float> %a)73 ret <2 x float> %val74}75 76define dso_local <4 x float> @t_vrnd64zq_f32(<4 x float> %a) {77; CHECK-LABEL: t_vrnd64zq_f32:78; CHECK: frint64z v0.4s, v0.4s79; CHECK-NEXT: ret80entry:81 %val = tail call <4 x float> @llvm.aarch64.neon.frint64z.v4f32(<4 x float> %a)82 ret <4 x float> %val83}84 85declare <1 x double> @llvm.aarch64.neon.frint32x.v1f64(<1 x double>)86declare <2 x double> @llvm.aarch64.neon.frint32x.v2f64(<2 x double>)87declare <1 x double> @llvm.aarch64.neon.frint32z.v1f64(<1 x double>)88declare <2 x double> @llvm.aarch64.neon.frint32z.v2f64(<2 x double>)89 90define dso_local <1 x double> @t_vrnd32x_f64(<1 x double> %a) {91; CHECK-LABEL: t_vrnd32x_f64:92; CHECK: frint32x d0, d093; CHECK-NEXT: ret94entry:95 %val = tail call <1 x double> @llvm.aarch64.neon.frint32x.v1f64(<1 x double> %a)96 ret <1 x double> %val97}98 99define dso_local <2 x double> @t_vrnd32xq_f64(<2 x double> %a) {100; CHECK-LABEL: t_vrnd32xq_f64:101; CHECK: frint32x v0.2d, v0.2d102; CHECK-NEXT: ret103entry:104 %val = tail call <2 x double> @llvm.aarch64.neon.frint32x.v2f64(<2 x double> %a)105 ret <2 x double> %val106}107 108define dso_local <1 x double> @t_vrnd32z_f64(<1 x double> %a) {109; CHECK-LABEL: t_vrnd32z_f64:110; CHECK: frint32z d0, d0111; CHECK-NEXT: ret112entry:113 %val = tail call <1 x double> @llvm.aarch64.neon.frint32z.v1f64(<1 x double> %a)114 ret <1 x double> %val115}116 117define dso_local <2 x double> @t_vrnd32zq_f64(<2 x double> %a) {118; CHECK-LABEL: t_vrnd32zq_f64:119; CHECK: frint32z v0.2d, v0.2d120; CHECK-NEXT: ret121entry:122 %val = tail call <2 x double> @llvm.aarch64.neon.frint32z.v2f64(<2 x double> %a)123 ret <2 x double> %val124}125 126declare <1 x double> @llvm.aarch64.neon.frint64x.v1f64(<1 x double>)127declare <2 x double> @llvm.aarch64.neon.frint64x.v2f64(<2 x double>)128declare <1 x double> @llvm.aarch64.neon.frint64z.v1f64(<1 x double>)129declare <2 x double> @llvm.aarch64.neon.frint64z.v2f64(<2 x double>)130 131define dso_local <1 x double> @t_vrnd64x_f64(<1 x double> %a) {132; CHECK-LABEL: t_vrnd64x_f64:133; CHECK: frint64x d0, d0134; CHECK-NEXT: ret135entry:136 %val = tail call <1 x double> @llvm.aarch64.neon.frint64x.v1f64(<1 x double> %a)137 ret <1 x double> %val138}139 140define dso_local <2 x double> @t_vrnd64xq_f64(<2 x double> %a) {141; CHECK-LABEL: t_vrnd64xq_f64:142; CHECK: frint64x v0.2d, v0.2d143; CHECK-NEXT: ret144entry:145 %val = tail call <2 x double> @llvm.aarch64.neon.frint64x.v2f64(<2 x double> %a)146 ret <2 x double> %val147}148 149define dso_local <1 x double> @t_vrnd64z_f64(<1 x double> %a) {150; CHECK-LABEL: t_vrnd64z_f64:151; CHECK: frint64z d0, d0152; CHECK-NEXT: ret153entry:154 %val = tail call <1 x double> @llvm.aarch64.neon.frint64z.v1f64(<1 x double> %a)155 ret <1 x double> %val156}157 158define dso_local <2 x double> @t_vrnd64zq_f64(<2 x double> %a) {159; CHECK-LABEL: t_vrnd64zq_f64:160; CHECK: frint64z v0.2d, v0.2d161; CHECK-NEXT: ret162entry:163 %val = tail call <2 x double> @llvm.aarch64.neon.frint64z.v2f64(<2 x double> %a)164 ret <2 x double> %val165}166