Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CodeGen] Use IRBuilder::CreateFNeg for __builtin_conj
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
Showing
2 changed files
with
21 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |