diff options
| author | Tim Northover <tnorthover@apple.com> | 2014-02-13 10:44:17 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2014-02-13 10:44:17 +0000 |
| commit | 1994fa7d3dcd41ddcf9254f2ce1be76c6a62eaa0 (patch) | |
| tree | 1d68b3734de96e23cb89c8da43a5aa41bc0c63c3 /clang/lib/CodeGen/CGBuiltin.cpp | |
| parent | 9e8c1a4b5775624eceec78a5c2cd78ede7acba0f (diff) | |
| download | bcm5719-llvm-1994fa7d3dcd41ddcf9254f2ce1be76c6a62eaa0.tar.gz bcm5719-llvm-1994fa7d3dcd41ddcf9254f2ce1be76c6a62eaa0.zip | |
ARM & AArch64 NEON: share the vabs implementation.
This changes ARM to use @llvm.fabs for floating-point vabs. Patterns
already existed in the backend, and it might help mid-end phases since
it's more likely to be understood than @llvm.arm.neon.vabs.
llvm-svn: 201313
Diffstat (limited to 'clang/lib/CodeGen/CGBuiltin.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 740a869e4b8..e25a1aae1b6 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -1777,6 +1777,12 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr(unsigned BuiltinID, unsigned Int; switch (BuiltinID) { default: break; + case NEON::BI__builtin_neon_vabs_v: + case NEON::BI__builtin_neon_vabsq_v: + if (VTy->getElementType()->isFloatingPointTy()) + return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs"); + return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vabs, Ty), Ops, + "vabs"); case NEON::BI__builtin_neon_vaeseq_v: return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_aese), Ops, "aese"); @@ -3979,13 +3985,6 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, Int = Intrinsic::aarch64_neon_vmulx; return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmulx"); } - case NEON::BI__builtin_neon_vabs_v: - case NEON::BI__builtin_neon_vabsq_v: { - if (VTy->getElementType()->isFloatingPointTy()) { - return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs"); - } - return EmitARMBuiltinExpr(NEON::BI__builtin_neon_vabs_v, E); - } case NEON::BI__builtin_neon_vsqadd_v: case NEON::BI__builtin_neon_vsqaddq_v: { Int = Intrinsic::aarch64_neon_usqadd; @@ -4511,10 +4510,6 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, unsigned Int; switch (BuiltinID) { default: return 0; - case NEON::BI__builtin_neon_vabs_v: - case NEON::BI__builtin_neon_vabsq_v: - return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vabs, Ty), - Ops, "vabs"); case NEON::BI__builtin_neon_vld1q_lane_v: // Handle 64-bit integer elements as a special case. Use shuffles of // one-element vectors to avoid poor code for i64 in the backend. |

