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); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
