diff options
| author | Kevin Qin <Kevin.Qin@arm.com> | 2013-12-04 07:53:09 +0000 |
|---|---|---|
| committer | Kevin Qin <Kevin.Qin@arm.com> | 2013-12-04 07:53:09 +0000 |
| commit | 8903f8df4b56608095f1890588896926d66d64b0 (patch) | |
| tree | 8108f4cfefd6082e225b4a68aee80845b6166920 /clang/lib | |
| parent | 06655f357093f25dfdbe83cbc45ef10dd83f7047 (diff) | |
| download | bcm5719-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.cpp | 34 |
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]); |

