233 lines · plain
1; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s2 3define <2 x float> @frecps_2s(ptr %A, ptr %B) nounwind {4;CHECK-LABEL: frecps_2s:5;CHECK: frecps.2s6 %tmp1 = load <2 x float>, ptr %A7 %tmp2 = load <2 x float>, ptr %B8 %tmp3 = call <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float> %tmp1, <2 x float> %tmp2)9 ret <2 x float> %tmp310}11 12define <4 x float> @frecps_4s(ptr %A, ptr %B) nounwind {13;CHECK-LABEL: frecps_4s:14;CHECK: frecps.4s15 %tmp1 = load <4 x float>, ptr %A16 %tmp2 = load <4 x float>, ptr %B17 %tmp3 = call <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float> %tmp1, <4 x float> %tmp2)18 ret <4 x float> %tmp319}20 21define <2 x double> @frecps_2d(ptr %A, ptr %B) nounwind {22;CHECK-LABEL: frecps_2d:23;CHECK: frecps.2d24 %tmp1 = load <2 x double>, ptr %A25 %tmp2 = load <2 x double>, ptr %B26 %tmp3 = call <2 x double> @llvm.aarch64.neon.frecps.v2f64(<2 x double> %tmp1, <2 x double> %tmp2)27 ret <2 x double> %tmp328}29 30declare <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float>, <2 x float>) nounwind readnone31declare <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float>, <4 x float>) nounwind readnone32declare <2 x double> @llvm.aarch64.neon.frecps.v2f64(<2 x double>, <2 x double>) nounwind readnone33 34 35define <2 x float> @frsqrts_2s(ptr %A, ptr %B) nounwind {36;CHECK-LABEL: frsqrts_2s:37;CHECK: frsqrts.2s38 %tmp1 = load <2 x float>, ptr %A39 %tmp2 = load <2 x float>, ptr %B40 %tmp3 = call <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float> %tmp1, <2 x float> %tmp2)41 ret <2 x float> %tmp342}43 44define <4 x float> @frsqrts_4s(ptr %A, ptr %B) nounwind {45;CHECK-LABEL: frsqrts_4s:46;CHECK: frsqrts.4s47 %tmp1 = load <4 x float>, ptr %A48 %tmp2 = load <4 x float>, ptr %B49 %tmp3 = call <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float> %tmp1, <4 x float> %tmp2)50 ret <4 x float> %tmp351}52 53define <2 x double> @frsqrts_2d(ptr %A, ptr %B) nounwind {54;CHECK-LABEL: frsqrts_2d:55;CHECK: frsqrts.2d56 %tmp1 = load <2 x double>, ptr %A57 %tmp2 = load <2 x double>, ptr %B58 %tmp3 = call <2 x double> @llvm.aarch64.neon.frsqrts.v2f64(<2 x double> %tmp1, <2 x double> %tmp2)59 ret <2 x double> %tmp360}61 62declare <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float>, <2 x float>) nounwind readnone63declare <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float>, <4 x float>) nounwind readnone64declare <2 x double> @llvm.aarch64.neon.frsqrts.v2f64(<2 x double>, <2 x double>) nounwind readnone65 66define <2 x float> @frecpe_2s(ptr %A) nounwind {67;CHECK-LABEL: frecpe_2s:68;CHECK: frecpe.2s69 %tmp1 = load <2 x float>, ptr %A70 %tmp3 = call <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float> %tmp1)71 ret <2 x float> %tmp372}73 74define <4 x float> @frecpe_4s(ptr %A) nounwind {75;CHECK-LABEL: frecpe_4s:76;CHECK: frecpe.4s77 %tmp1 = load <4 x float>, ptr %A78 %tmp3 = call <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float> %tmp1)79 ret <4 x float> %tmp380}81 82define <2 x double> @frecpe_2d(ptr %A) nounwind {83;CHECK-LABEL: frecpe_2d:84;CHECK: frecpe.2d85 %tmp1 = load <2 x double>, ptr %A86 %tmp3 = call <2 x double> @llvm.aarch64.neon.frecpe.v2f64(<2 x double> %tmp1)87 ret <2 x double> %tmp388}89 90define float @frecpe_s(ptr %A) nounwind {91;CHECK-LABEL: frecpe_s:92;CHECK: frecpe s0, {{s[0-9]+}}93 %tmp1 = load float, ptr %A94 %tmp3 = call float @llvm.aarch64.neon.frecpe.f32(float %tmp1)95 ret float %tmp396}97 98define double @frecpe_d(ptr %A) nounwind {99;CHECK-LABEL: frecpe_d:100;CHECK: frecpe d0, {{d[0-9]+}}101 %tmp1 = load double, ptr %A102 %tmp3 = call double @llvm.aarch64.neon.frecpe.f64(double %tmp1)103 ret double %tmp3104}105 106declare <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float>) nounwind readnone107declare <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float>) nounwind readnone108declare <2 x double> @llvm.aarch64.neon.frecpe.v2f64(<2 x double>) nounwind readnone109declare float @llvm.aarch64.neon.frecpe.f32(float) nounwind readnone110declare double @llvm.aarch64.neon.frecpe.f64(double) nounwind readnone111 112define float @frecpx_s(ptr %A) nounwind {113;CHECK-LABEL: frecpx_s:114;CHECK: frecpx s0, {{s[0-9]+}}115 %tmp1 = load float, ptr %A116 %tmp3 = call float @llvm.aarch64.neon.frecpx.f32(float %tmp1)117 ret float %tmp3118}119 120define double @frecpx_d(ptr %A) nounwind {121;CHECK-LABEL: frecpx_d:122;CHECK: frecpx d0, {{d[0-9]+}}123 %tmp1 = load double, ptr %A124 %tmp3 = call double @llvm.aarch64.neon.frecpx.f64(double %tmp1)125 ret double %tmp3126}127 128declare float @llvm.aarch64.neon.frecpx.f32(float) nounwind readnone129declare double @llvm.aarch64.neon.frecpx.f64(double) nounwind readnone130 131define <2 x float> @frsqrte_2s(ptr %A) nounwind {132;CHECK-LABEL: frsqrte_2s:133;CHECK: frsqrte.2s134 %tmp1 = load <2 x float>, ptr %A135 %tmp3 = call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> %tmp1)136 ret <2 x float> %tmp3137}138 139define <4 x float> @frsqrte_4s(ptr %A) nounwind {140;CHECK-LABEL: frsqrte_4s:141;CHECK: frsqrte.4s142 %tmp1 = load <4 x float>, ptr %A143 %tmp3 = call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> %tmp1)144 ret <4 x float> %tmp3145}146 147define <2 x double> @frsqrte_2d(ptr %A) nounwind {148;CHECK-LABEL: frsqrte_2d:149;CHECK: frsqrte.2d150 %tmp1 = load <2 x double>, ptr %A151 %tmp3 = call <2 x double> @llvm.aarch64.neon.frsqrte.v2f64(<2 x double> %tmp1)152 ret <2 x double> %tmp3153}154 155define float @frsqrte_s(ptr %A) nounwind {156;CHECK-LABEL: frsqrte_s:157;CHECK: frsqrte s0, {{s[0-9]+}}158 %tmp1 = load float, ptr %A159 %tmp3 = call float @llvm.aarch64.neon.frsqrte.f32(float %tmp1)160 ret float %tmp3161}162 163define double @frsqrte_d(ptr %A) nounwind {164;CHECK-LABEL: frsqrte_d:165;CHECK: frsqrte d0, {{d[0-9]+}}166 %tmp1 = load double, ptr %A167 %tmp3 = call double @llvm.aarch64.neon.frsqrte.f64(double %tmp1)168 ret double %tmp3169}170 171declare <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float>) nounwind readnone172declare <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float>) nounwind readnone173declare <2 x double> @llvm.aarch64.neon.frsqrte.v2f64(<2 x double>) nounwind readnone174declare float @llvm.aarch64.neon.frsqrte.f32(float) nounwind readnone175declare double @llvm.aarch64.neon.frsqrte.f64(double) nounwind readnone176 177define <2 x i32> @urecpe_2s(ptr %A) nounwind {178;CHECK-LABEL: urecpe_2s:179;CHECK: urecpe.2s180 %tmp1 = load <2 x i32>, ptr %A181 %tmp3 = call <2 x i32> @llvm.aarch64.neon.urecpe.v2i32(<2 x i32> %tmp1)182 ret <2 x i32> %tmp3183}184 185define <4 x i32> @urecpe_4s(ptr %A) nounwind {186;CHECK-LABEL: urecpe_4s:187;CHECK: urecpe.4s188 %tmp1 = load <4 x i32>, ptr %A189 %tmp3 = call <4 x i32> @llvm.aarch64.neon.urecpe.v4i32(<4 x i32> %tmp1)190 ret <4 x i32> %tmp3191}192 193declare <2 x i32> @llvm.aarch64.neon.urecpe.v2i32(<2 x i32>) nounwind readnone194declare <4 x i32> @llvm.aarch64.neon.urecpe.v4i32(<4 x i32>) nounwind readnone195 196define <2 x i32> @ursqrte_2s(ptr %A) nounwind {197;CHECK-LABEL: ursqrte_2s:198;CHECK: ursqrte.2s199 %tmp1 = load <2 x i32>, ptr %A200 %tmp3 = call <2 x i32> @llvm.aarch64.neon.ursqrte.v2i32(<2 x i32> %tmp1)201 ret <2 x i32> %tmp3202}203 204define <4 x i32> @ursqrte_4s(ptr %A) nounwind {205;CHECK-LABEL: ursqrte_4s:206;CHECK: ursqrte.4s207 %tmp1 = load <4 x i32>, ptr %A208 %tmp3 = call <4 x i32> @llvm.aarch64.neon.ursqrte.v4i32(<4 x i32> %tmp1)209 ret <4 x i32> %tmp3210}211 212declare <2 x i32> @llvm.aarch64.neon.ursqrte.v2i32(<2 x i32>) nounwind readnone213declare <4 x i32> @llvm.aarch64.neon.ursqrte.v4i32(<4 x i32>) nounwind readnone214 215define float @f1(float %a, float %b) nounwind readnone optsize ssp {216; CHECK-LABEL: f1:217; CHECK: frsqrts s0, s0, s1218; CHECK-NEXT: ret219 %vrsqrtss.i = tail call float @llvm.aarch64.neon.frsqrts.f32(float %a, float %b) nounwind220 ret float %vrsqrtss.i221}222 223define double @f2(double %a, double %b) nounwind readnone optsize ssp {224; CHECK-LABEL: f2:225; CHECK: frsqrts d0, d0, d1226; CHECK-NEXT: ret227 %vrsqrtsd.i = tail call double @llvm.aarch64.neon.frsqrts.f64(double %a, double %b) nounwind228 ret double %vrsqrtsd.i229}230 231declare double @llvm.aarch64.neon.frsqrts.f64(double, double) nounwind readnone232declare float @llvm.aarch64.neon.frsqrts.f32(float, float) nounwind readnone233