Skip to content

Commit 877a98f

Browse files
committed
[IRGen] Emit llvm fneg operation for Builtin.fneg_*
rdar://150722907 The original handling was a workaround before LLVM added the fneg operation. Now that it has it, we should use it.
1 parent 1bff8cd commit 877a98f

File tree

2 files changed

+4
-6
lines changed

2 files changed

+4
-6
lines changed

lib/IRGen/GenBuiltin.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -588,9 +588,7 @@ void irgen::emitBuiltinCall(IRGenFunction &IGF, const BuiltinInfo &Builtin,
588588
}
589589

590590
if (Builtin.ID == BuiltinValueKind::FNeg) {
591-
llvm::Value *rhs = args.claimNext();
592-
llvm::Value *lhs = llvm::ConstantFP::get(rhs->getType(), "-0.0");
593-
llvm::Value *v = IGF.Builder.CreateFSub(lhs, rhs);
591+
llvm::Value *v = IGF.Builder.CreateFNeg(args.claimNext());
594592
return out.add(v);
595593
}
596594
if (Builtin.ID == BuiltinValueKind::AssumeTrue) {

test/IRGen/builtins.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,9 @@ func fneg_test(_ half: Builtin.FPIEEE16,
329329
double: Builtin.FPIEEE64)
330330
-> (Builtin.FPIEEE16, Builtin.FPIEEE32, Builtin.FPIEEE64)
331331
{
332-
// CHECK: fsub half 0xH8000, {{%.*}}
333-
// CHECK: fsub float -0.000000e+00, {{%.*}}
334-
// CHECK: fsub double -0.000000e+00, {{%.*}}
332+
// CHECK: fneg half
333+
// CHECK: fneg float
334+
// CHECK: fneg double
335335
return (Builtin.fneg_FPIEEE16(half),
336336
Builtin.fneg_FPIEEE32(single),
337337
Builtin.fneg_FPIEEE64(double))

0 commit comments

Comments
 (0)