summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorKevin Qin <Kevin.Qin@arm.com>2013-12-04 07:53:09 +0000
committerKevin Qin <Kevin.Qin@arm.com>2013-12-04 07:53:09 +0000
commit8903f8df4b56608095f1890588896926d66d64b0 (patch)
tree8108f4cfefd6082e225b4a68aee80845b6166920 /clang/lib
parent06655f357093f25dfdbe83cbc45ef10dd83f7047 (diff)
downloadbcm5719-llvm-8903f8df4b56608095f1890588896926d66d64b0.tar.gz
bcm5719-llvm-8903f8df4b56608095f1890588896926d66d64b0.zip
[AArch64 NEON] Add missing compare intrinsics.
llvm-svn: 196359
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 97252cbfdbe..7ca68f13de0 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -3007,10 +3007,24 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vrecps_v, E);
case AArch64::BI__builtin_neon_vrecpsq_v:
return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vrecpsq_v, E);
+ case AArch64::BI__builtin_neon_vcale_v:
+ if (VTy->getVectorNumElements() == 1) {
+ std::swap(Ops[0], Ops[1]);
+ } else {
+ return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vcale_v, E);
+ }
case AArch64::BI__builtin_neon_vcage_v:
+ if (VTy->getVectorNumElements() == 1) {
+ // Determine the types of this overloaded AArch64 intrinsic
+ SmallVector<llvm::Type *, 3> Tys;
+ Tys.push_back(VTy);
+ VTy = llvm::VectorType::get(DoubleTy, 1);
+ Tys.push_back(VTy);
+ Tys.push_back(VTy);
+ Function *F = CGM.getIntrinsic(Intrinsic::aarch64_neon_vcage, Tys);
+ return EmitNeonCall(F, Ops, "vcage");
+ }
return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vcage_v, E);
- case AArch64::BI__builtin_neon_vcale_v:
- return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vcale_v, E);
case AArch64::BI__builtin_neon_vcaleq_v:
std::swap(Ops[0], Ops[1]);
case AArch64::BI__builtin_neon_vcageq_v: {
@@ -3022,8 +3036,22 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
return EmitNeonCall(F, Ops, "vcage");
}
case AArch64::BI__builtin_neon_vcalt_v:
- return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vcalt_v, E);
+ if (VTy->getVectorNumElements() == 1) {
+ std::swap(Ops[0], Ops[1]);
+ } else {
+ return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vcalt_v, E);
+ }
case AArch64::BI__builtin_neon_vcagt_v:
+ if (VTy->getVectorNumElements() == 1) {
+ // Determine the types of this overloaded AArch64 intrinsic
+ SmallVector<llvm::Type *, 3> Tys;
+ Tys.push_back(VTy);
+ VTy = llvm::VectorType::get(DoubleTy, 1);
+ Tys.push_back(VTy);
+ Tys.push_back(VTy);
+ Function *F = CGM.getIntrinsic(Intrinsic::aarch64_neon_vcagt, Tys);
+ return EmitNeonCall(F, Ops, "vcagt");
+ }
return EmitARMBuiltinExpr(ARM::BI__builtin_neon_vcagt_v, E);
case AArch64::BI__builtin_neon_vcaltq_v:
std::swap(Ops[0], Ops[1]);
OpenPOWER on IntegriCloud