diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-12-08 00:03:17 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-12-08 00:03:17 +0000 |
commit | d6f42ac4ce92771d486c8ce459d3e1266567c244 (patch) | |
tree | fcd18260ff33c4960f6b1439ab74e09b41f59070 | |
parent | 1ca372f21a27722e79a54df169d09a392e1c8545 (diff) | |
download | clang-d6f42ac4ce92771d486c8ce459d3e1266567c244.tar.gz clang-d6f42ac4ce92771d486c8ce459d3e1266567c244.tar.bz2 clang-d6f42ac4ce92771d486c8ce459d3e1266567c244.tar.xz |
Merging r196361:
------------------------------------------------------------------------
r196361 | kevinqin | 2013-12-04 00:02:11 -0800 (Wed, 04 Dec 2013) | 1 line
[AArch64 NEON] Add ACLE intrinsic vceqz_f64.
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_34@196682 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGBuiltin.cpp | 18 | ||||
-rw-r--r-- | test/CodeGen/aarch64-neon-misc.c | 6 |
2 files changed, 19 insertions, 5 deletions
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 7ca68f13de..7726ad309d 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -1759,6 +1759,7 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, bool ExtendEle = false; bool OverloadInt = false; bool OverloadCmpInt = false; + bool IsFpCmpZInt = false; bool OverloadCvtInt = false; bool OverloadWideInt = false; bool OverloadNarrowInt = false; @@ -2269,7 +2270,8 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, case AArch64::BI__builtin_neon_vceqzd_f64: Int = Intrinsic::aarch64_neon_vceq; s = "vceq"; // Add implicit zero operand. - Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); + Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); + IsFpCmpZInt = true; OverloadCmpInt = true; break; // Scalar Floating-point Compare Greater Than Or Equal case AArch64::BI__builtin_neon_vcges_f32: @@ -2281,7 +2283,8 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, case AArch64::BI__builtin_neon_vcgezd_f64: Int = Intrinsic::aarch64_neon_vcge; s = "vcge"; // Add implicit zero operand. - Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); + Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); + IsFpCmpZInt = true; OverloadCmpInt = true; break; // Scalar Floating-point Compare Greather Than case AArch64::BI__builtin_neon_vcgts_f32: @@ -2293,7 +2296,8 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, case AArch64::BI__builtin_neon_vcgtzd_f64: Int = Intrinsic::aarch64_neon_vcgt; s = "vcgt"; // Add implicit zero operand. - Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); + Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); + IsFpCmpZInt = true; OverloadCmpInt = true; break; // Scalar Floating-point Compare Less Than or Equal case AArch64::BI__builtin_neon_vcles_f32: @@ -2305,7 +2309,8 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, case AArch64::BI__builtin_neon_vclezd_f64: Int = Intrinsic::aarch64_neon_vclez; s = "vcle"; // Add implicit zero operand. - Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); + Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); + IsFpCmpZInt = true; OverloadCmpInt = true; break; // Scalar Floating-point Compare Less Than Zero case AArch64::BI__builtin_neon_vclts_f32: @@ -2317,7 +2322,8 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, case AArch64::BI__builtin_neon_vcltzd_f64: Int = Intrinsic::aarch64_neon_vcltz; s = "vclt"; // Add implicit zero operand. - Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType())); + Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy)); + IsFpCmpZInt = true; OverloadCmpInt = true; break; // Scalar Floating-point Absolute Compare Greater Than Or Equal case AArch64::BI__builtin_neon_vcages_f32: @@ -2601,6 +2607,8 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF, Ty = CGF.ConvertType(Arg->getType()); VTy = llvm::VectorType::get(Ty, 1); Tys.push_back(VTy); + if(IsFpCmpZInt) + VTy = llvm::VectorType::get(CGF.FloatTy, 1); Tys.push_back(VTy); F = CGF.CGM.getIntrinsic(Int, Tys); diff --git a/test/CodeGen/aarch64-neon-misc.c b/test/CodeGen/aarch64-neon-misc.c index f56bf760aa..08174d91f8 100644 --- a/test/CodeGen/aarch64-neon-misc.c +++ b/test/CodeGen/aarch64-neon-misc.c @@ -114,6 +114,12 @@ uint32x2_t test_vceqz_f32(float32x2_t a) { return vceqz_f32(a); } +// CHECK: test_vceqz_f64 +// CHECK: fcmeq {{d[0-9]+}}, {{d[0-9]+}}, #0 +uint64x1_t test_vceqz_f64(float64x1_t a) { + return vceqz_f64(a); +} + // CHECK: test_vceqzq_f32 // CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0 uint32x4_t test_vceqzq_f32(float32x4_t a) { |