Author: kosarev Date: Fri Apr 13 05:46:02 2018 New Revision: 330012 URL: http://llvm.org/viewvc/llvm-project?rev=330012&view=rev Log: [NEON] Support vrndns_f32 intrinsic
Differential Revision: https://reviews.llvm.org/D45515 Modified: cfe/trunk/include/clang/Basic/arm_neon.td cfe/trunk/lib/CodeGen/CGBuiltin.cpp cfe/trunk/test/CodeGen/arm-neon-directed-rounding.c Modified: cfe/trunk/include/clang/Basic/arm_neon.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/arm_neon.td?rev=330012&r1=330011&r2=330012&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/arm_neon.td (original) +++ cfe/trunk/include/clang/Basic/arm_neon.td Fri Apr 13 05:46:02 2018 @@ -1116,6 +1116,12 @@ def SCALAR_FCVTZU_N_U64 : SInst<"vcvt_n_ } //////////////////////////////////////////////////////////////////////////////// +// Scalar Floating-point Round to Integral +let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING)" in { +def SCALAR_FRINTN_S32 : SInst<"vrndn", "ss", "Sf">; +} + +//////////////////////////////////////////////////////////////////////////////// // Scalar Reduce Pairwise Addition (Scalar and Floating Point) def SCALAR_ADDP : SInst<"vpadd", "sd", "SfSHlSHdSHUl">; Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=330012&r1=330011&r2=330012&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original) +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Fri Apr 13 05:46:02 2018 @@ -5590,6 +5590,12 @@ Value *CodeGenFunction::EmitARMBuiltinEx case NEON::BI__builtin_neon_vgetq_lane_f32: return Builder.CreateExtractElement(Ops[0], Ops[1], "vget_lane"); + case NEON::BI__builtin_neon_vrndns_f32: { + Value *Arg = EmitScalarExpr(E->getArg(0)); + llvm::Type *Tys[] = {Arg->getType()}; + Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vrintn, Tys); + return Builder.CreateCall(F, {Arg}, "vrndn"); } + case NEON::BI__builtin_neon_vset_lane_i8: case NEON::BI__builtin_neon_vset_lane_i16: case NEON::BI__builtin_neon_vset_lane_i32: Modified: cfe/trunk/test/CodeGen/arm-neon-directed-rounding.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-neon-directed-rounding.c?rev=330012&r1=330011&r2=330012&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/arm-neon-directed-rounding.c (original) +++ cfe/trunk/test/CodeGen/arm-neon-directed-rounding.c Fri Apr 13 05:46:02 2018 @@ -1,4 +1,6 @@ -// RUN: %clang_cc1 -triple thumbv8-linux-gnueabihf -target-cpu cortex-a57 -ffreestanding -disable-O0-optnone -emit-llvm %s -o - | opt -S -mem2reg | FileCheck %s +// RUN: %clang_cc1 -triple thumbv8-linux-gnueabihf -target-cpu cortex-a57 \ +// RUN: -ffreestanding -disable-O0-optnone -emit-llvm %s -o - | \ +// RUN: opt -S -mem2reg | FileCheck %s #include <arm_neon.h> @@ -85,3 +87,10 @@ float32x2_t test_vrnd_f32(float32x2_t a) float32x4_t test_vrndq_f32(float32x4_t a) { return vrndq_f32(a); } + +// CHECK-LABEL: define float @test_vrndns_f32(float %a) #0 { +// CHECK: [[VRNDN_I:%.*]] = call float @llvm.arm.neon.vrintn.f32(float %a) #2 +// CHECK: ret float [[VRNDN_I]] +float32_t test_vrndns_f32(float32_t a) { + return vrndns_f32(a); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits