Skip to content

Commit 8510dd0

Browse files
author
git apple-llvm automerger
committed
Merge commit '0109f8d1e3bf' from llvm.org/main into next
2 parents f1991bd + 0109f8d commit 8510dd0

File tree

3 files changed

+4
-7
lines changed

3 files changed

+4
-7
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11035,14 +11035,12 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
1103511035
*this, Intrinsic::fma, Intrinsic::experimental_constrained_fma, HalfTy,
1103611036
{EmitScalarExpr(E->getArg(1)), EmitScalarExpr(E->getArg(2)), Ops[0]});
1103711037
case NEON::BI__builtin_neon_vfmsh_f16: {
11038-
// FIXME: This should be an fneg instruction:
11039-
Value *Zero = llvm::ConstantFP::getZeroValueForNegation(HalfTy);
11040-
Value* Sub = Builder.CreateFSub(Zero, EmitScalarExpr(E->getArg(1)), "vsubh");
11038+
Value* Neg = Builder.CreateFNeg(EmitScalarExpr(E->getArg(1)), "vsubh");
1104111039

1104211040
// NEON intrinsic puts accumulator first, unlike the LLVM fma.
1104311041
return emitCallMaybeConstrainedFPBuiltin(
1104411042
*this, Intrinsic::fma, Intrinsic::experimental_constrained_fma, HalfTy,
11045-
{Sub, EmitScalarExpr(E->getArg(2)), Ops[0]});
11043+
{Neg, EmitScalarExpr(E->getArg(2)), Ops[0]});
1104611044
}
1104711045
case NEON::BI__builtin_neon_vaddd_s64:
1104811046
case NEON::BI__builtin_neon_vaddd_u64:

clang/test/CodeGen/aarch64-v8.2a-fp16-intrinsics-constrained.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,7 @@ float16_t test_vfmah_f16(float16_t a, float16_t b, float16_t c) {
290290
}
291291

292292
// COMMON-LABEL: test_vfmsh_f16
293-
// UNCONSTRAINED: [[SUB:%.*]] = fsub half 0xH8000, %b
294-
// CONSTRAINED: [[SUB:%.*]] = call half @llvm.experimental.constrained.fsub.f16(half 0xH8000, half %b, metadata !"round.tonearest", metadata !"fpexcept.strict")
293+
// COMMONIR: [[SUB:%.*]] = fneg half %b
295294
// UNCONSTRAINED: [[ADD:%.*]] = call half @llvm.fma.f16(half [[SUB]], half %c, half %a)
296295
// CONSTRAINED: [[ADD:%.*]] = call half @llvm.experimental.constrained.fma.f16(half [[SUB]], half %c, half %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
297296
// COMMONIR: ret half [[ADD]]

clang/test/CodeGen/aarch64-v8.2a-fp16-intrinsics.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ float16_t test_vfmah_f16(float16_t a, float16_t b, float16_t c) {
652652
}
653653

654654
// CHECK-LABEL: test_vfmsh_f16
655-
// CHECK: [[SUB:%.*]] = fsub half 0xH8000, %b
655+
// CHECK: [[SUB:%.*]] = fneg half %b
656656
// CHECK: [[ADD:%.*]] = call half @llvm.fma.f16(half [[SUB]], half %c, half %a)
657657
// CHECK: ret half [[ADD]]
658658
float16_t test_vfmsh_f16(float16_t a, float16_t b, float16_t c) {

0 commit comments

Comments
 (0)