[clang] 1c70435 - [clang][AArch64][nfc] Remove redundant truncation for FP16 reduction builtins (#195825)
via cfe-commits
cfe-commits at lists.llvm.org
Wed May 6 02:09:31 PDT 2026
Author: Andrzej WarzyĆski
Date: 2026-05-06T10:09:27+01:00
New Revision: 1c704353aa2cd398c9133fe95f3f89f2e0f06775
URL: https://github.com/llvm/llvm-project/commit/1c704353aa2cd398c9133fe95f3f89f2e0f06775
DIFF: https://github.com/llvm/llvm-project/commit/1c704353aa2cd398c9133fe95f3f89f2e0f06775.diff
LOG: [clang][AArch64][nfc] Remove redundant truncation for FP16 reduction builtins (#195825)
The following non-overloaded NEON builtins already return the expected
result
type, so CodeGen does not need to truncate their results:
* BI__builtin_neon_vmaxv_f16
* BI__builtin_neon_vmaxvq_f16
* BI__builtin_neon_vminv_f16
* BI__builtin_neon_vminvq_f16
* BI__builtin_neon_vmaxnmv_f16
* BI__builtin_neon_vmaxnmvq_f16
* BI__builtin_neon_vminnmv_f16
* BI__builtin_neon_vminnmvq_f16
Remove the redundant truncation from AArch64 CodeGen.
Added:
Modified:
clang/lib/CodeGen/TargetBuiltins/ARM.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/TargetBuiltins/ARM.cpp b/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
index 95aa3c188d8cd..8bfacc5580bd6 100644
--- a/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
+++ b/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
@@ -6512,55 +6512,49 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 4);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
}
case NEON::BI__builtin_neon_vmaxvq_f16: {
Int = Intrinsic::aarch64_neon_fmaxv;
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 8);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxv");
}
case NEON::BI__builtin_neon_vminv_f16: {
Int = Intrinsic::aarch64_neon_fminv;
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 4);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
}
case NEON::BI__builtin_neon_vminvq_f16: {
Int = Intrinsic::aarch64_neon_fminv;
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 8);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminv");
}
case NEON::BI__builtin_neon_vmaxnmv_f16: {
Int = Intrinsic::aarch64_neon_fmaxnmv;
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 4);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
}
case NEON::BI__builtin_neon_vmaxnmvq_f16: {
Int = Intrinsic::aarch64_neon_fmaxnmv;
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 8);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vmaxnmv");
}
case NEON::BI__builtin_neon_vminnmv_f16: {
Int = Intrinsic::aarch64_neon_fminnmv;
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 4);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
return Builder.CreateTrunc(Ops[0], HalfTy);
}
case NEON::BI__builtin_neon_vminnmvq_f16: {
@@ -6568,8 +6562,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
Ty = HalfTy;
VTy = llvm::FixedVectorType::get(HalfTy, 8);
llvm::Type *Tys[2] = {Ty, VTy};
- Ops[0] = EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
- return Builder.CreateTrunc(Ops[0], HalfTy);
+ return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vminnmv");
}
case NEON::BI__builtin_neon_vmul_n_f64: {
Ops[0] = Builder.CreateBitCast(Ops[0], DoubleTy);
More information about the cfe-commits
mailing list