Skip to content

Commit

Permalink
[CodeGen] Use IRBuilder::CreateFNeg for __builtin_conj
Browse files Browse the repository at this point in the history
This replaces the fsub -0.0 idiom with an fneg instruction. We didn't see to have a test that showed the current codegen. Just some tests for constant folding and a test that was only checking the declare lines for libcalls. The latter just checked that we did not have a declare for @conj when using __builtin_conj.

Differential Revision: https://reviews.llvm.org/D72012
  • Loading branch information
topperc committed Dec 30, 2019
1 parent 8b23b2b commit 70f8dd4
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
7 changes: 1 addition & 6 deletions clang/lib/CodeGen/CGBuiltin.cpp
Expand Up @@ -1942,12 +1942,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
ComplexPairTy ComplexVal = EmitComplexExpr(E->getArg(0));
Value *Real = ComplexVal.first;
Value *Imag = ComplexVal.second;
Value *Zero =
Imag->getType()->isFPOrFPVectorTy()
? llvm::ConstantFP::getZeroValueForNegation(Imag->getType())
: llvm::Constant::getNullValue(Imag->getType());

Imag = Builder.CreateFSub(Zero, Imag, "sub");
Imag = Builder.CreateFNeg(Imag, "neg");
return RValue::getComplex(std::make_pair(Real, Imag));
}
case Builtin::BI__builtin_creal:
Expand Down
20 changes: 20 additions & 0 deletions clang/test/CodeGen/complex-builtins-2.c
@@ -0,0 +1,20 @@
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -w -S -o - -emit-llvm %s | FileCheck %s
// RUN: %clang_cc1 -triple x86_64-unknown-unknown -w -S -o - -emit-llvm -fmath-errno %s | FileCheck %s

float _Complex test__builtin_conjf(float _Complex x) {
// CHECK-LABEL: @test__builtin_conjf(
// CHECK: fneg float %x.imag
return __builtin_conjf(x);
}

double _Complex test__builtin_conj(double _Complex x) {
// CHECK-LABEL: @test__builtin_conj(
// CHECK: fneg double %x.imag
return __builtin_conj(x);
}

long double _Complex test__builtin_conjl(long double _Complex x) {
// CHECK-LABEL: @test__builtin_conjl(
// CHECK: fneg x86_fp80 %x.imag
return __builtin_conjl(x);
}

0 comments on commit 70f8dd4

Please sign in to comment.