[AArch64 NEON] Add ACLE intrinsic vceqz_f64.
llvm-svn: 196361
This commit is contained in:
parent
f9832e8de7
commit
ad53b87c70
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue