summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGBuiltin.cpp
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2014-02-13 10:44:17 +0000
committerTim Northover <tnorthover@apple.com>2014-02-13 10:44:17 +0000
commit1994fa7d3dcd41ddcf9254f2ce1be76c6a62eaa0 (patch)
tree1d68b3734de96e23cb89c8da43a5aa41bc0c63c3 /clang/lib/CodeGen/CGBuiltin.cpp
parent9e8c1a4b5775624eceec78a5c2cd78ede7acba0f (diff)
downloadbcm5719-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.cpp17
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.
OpenPOWER on IntegriCloud