Skip to content

Commit 58f6a1f

Browse files
author
Chad Rosier
committed
[AArch64] Refactor the Neon vector/scalar floating-point convert intrinsics so
that they use float/double rather than the vector equivalents when appropriate. llvm-svn: 196931
1 parent 7a9bba4 commit 58f6a1f

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2144,38 +2144,38 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF,
21442144
// Scalar Floating-point Converts
21452145
case AArch64::BI__builtin_neon_vcvtxd_f32_f64:
21462146
Int = Intrinsic::aarch64_neon_fcvtxn;
2147-
s = "vcvtxn"; OverloadCvtInt = true; break;
2147+
s = "vcvtxn"; OverloadCvtInt = false; break;
21482148
case AArch64::BI__builtin_neon_vcvtas_s32_f32:
21492149
case AArch64::BI__builtin_neon_vcvtad_s64_f64:
2150-
Int = Intrinsic::arm_neon_vcvtas;
2150+
Int = Intrinsic::aarch64_neon_fcvtas;
21512151
s = "vcvtas"; OverloadCvtInt = true; break;
21522152
case AArch64::BI__builtin_neon_vcvtas_u32_f32:
21532153
case AArch64::BI__builtin_neon_vcvtad_u64_f64:
2154-
Int = Intrinsic::arm_neon_vcvtau;
2154+
Int = Intrinsic::aarch64_neon_fcvtau;
21552155
s = "vcvtau"; OverloadCvtInt = true; break;
21562156
case AArch64::BI__builtin_neon_vcvtms_s32_f32:
21572157
case AArch64::BI__builtin_neon_vcvtmd_s64_f64:
2158-
Int = Intrinsic::arm_neon_vcvtms;
2158+
Int = Intrinsic::aarch64_neon_fcvtms;
21592159
s = "vcvtms"; OverloadCvtInt = true; break;
21602160
case AArch64::BI__builtin_neon_vcvtms_u32_f32:
21612161
case AArch64::BI__builtin_neon_vcvtmd_u64_f64:
2162-
Int = Intrinsic::arm_neon_vcvtmu;
2162+
Int = Intrinsic::aarch64_neon_fcvtmu;
21632163
s = "vcvtmu"; OverloadCvtInt = true; break;
21642164
case AArch64::BI__builtin_neon_vcvtns_s32_f32:
21652165
case AArch64::BI__builtin_neon_vcvtnd_s64_f64:
2166-
Int = Intrinsic::arm_neon_vcvtns;
2166+
Int = Intrinsic::aarch64_neon_fcvtns;
21672167
s = "vcvtns"; OverloadCvtInt = true; break;
21682168
case AArch64::BI__builtin_neon_vcvtns_u32_f32:
21692169
case AArch64::BI__builtin_neon_vcvtnd_u64_f64:
2170-
Int = Intrinsic::arm_neon_vcvtnu;
2170+
Int = Intrinsic::aarch64_neon_fcvtnu;
21712171
s = "vcvtnu"; OverloadCvtInt = true; break;
21722172
case AArch64::BI__builtin_neon_vcvtps_s32_f32:
21732173
case AArch64::BI__builtin_neon_vcvtpd_s64_f64:
2174-
Int = Intrinsic::arm_neon_vcvtps;
2174+
Int = Intrinsic::aarch64_neon_fcvtps;
21752175
s = "vcvtps"; OverloadCvtInt = true; break;
21762176
case AArch64::BI__builtin_neon_vcvtps_u32_f32:
21772177
case AArch64::BI__builtin_neon_vcvtpd_u64_f64:
2178-
Int = Intrinsic::arm_neon_vcvtpu;
2178+
Int = Intrinsic::aarch64_neon_fcvtpu;
21792179
s = "vcvtpu"; OverloadCvtInt = true; break;
21802180
case AArch64::BI__builtin_neon_vcvts_s32_f32:
21812181
case AArch64::BI__builtin_neon_vcvtd_s64_f64:
@@ -2637,8 +2637,7 @@ static Value *EmitAArch64ScalarBuiltinExpr(CodeGenFunction &CGF,
26372637
llvm::VectorType *VTy = llvm::VectorType::get(Ty, 1);
26382638
Tys.push_back(VTy);
26392639
Ty = CGF.ConvertType(Arg->getType());
2640-
VTy = llvm::VectorType::get(Ty, 1);
2641-
Tys.push_back(VTy);
2640+
Tys.push_back(Ty);
26422641

26432642
F = CGF.CGM.getIntrinsic(Int, Tys);
26442643
} else
@@ -3747,7 +3746,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
37473746
llvm::Type *EltTy = FloatTy;
37483747
llvm::Type *ResTy = llvm::VectorType::get(EltTy, 2);
37493748
llvm::Type *Tys[2] = { ResTy, Ty };
3750-
Int = Intrinsic::aarch64_neon_fcvtxn;
3749+
Int = Intrinsic::aarch64_neon_vcvtxn;
37513750
return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vcvtx_f32_f64");
37523751
}
37533752
case AArch64::BI__builtin_neon_vcvt_f64_f32: {

0 commit comments

Comments
 (0)