Skip to content

Commit 974fe16

Browse files
committed
Fixups
1 parent 86b028b commit 974fe16

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3270,7 +3270,12 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
32703270
case Builtin::BI__builtin_sincos:
32713271
case Builtin::BI__builtin_sincosf:
32723272
case Builtin::BI__builtin_sincosl:
3273-
if (!getTarget().getTriple().isAArch64())
3273+
// Only use the llvm.sincos.* builtin on AArch64 with optimizations.
3274+
// Currently, getting codegen that is no worse than the direct call
3275+
// requires using AA during codegen. This is not done at optlevel=none,
3276+
// and not all targets support this (AArch64 is one of the few known to).
3277+
if (!getTarget().getTriple().isAArch64() ||
3278+
CGM.getCodeGenOpts().OptimizationLevel == 0)
32743279
break;
32753280
emitSincosBuiltin(*this, E, Intrinsic::sincos);
32763281
return RValue::get(nullptr);

clang/test/CodeGen/AArch64/sincos.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm %s -o - | FileCheck --check-prefix=NO-MATH-ERRNO %s
1+
// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -O1 %s -o - | FileCheck --check-prefix=NO-MATH-ERRNO %s
22
// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -fmath-errno %s -o - | FileCheck --check-prefix=MATH-ERRNO %s
33

44
void sincos(double, double*, double*);
55
void sincosf(float, float*, float*);
66
void sincosl(long double, long double*, long double*);
77

88
// NO-MATH-ERRNO-LABEL: @sincos_f32
9-
// NO-MATH-ERRNO: [[SINCOS:%.*]] = call { float, float } @llvm.sincos.f32(float {{.*}})
9+
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { float, float } @llvm.sincos.f32(float {{.*}})
1010
// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { float, float } [[SINCOS]], 0
1111
// NO-MATH-ERRNO-NEXT: [[COS:%.*]] = extractvalue { float, float } [[SINCOS]], 1
1212
// NO-MATH-ERRNO-NEXT: store float [[SIN]], ptr {{.*}}, align 4, !alias.scope [[SINCOS_ALIAS_SCOPE:![0-9]+]]
@@ -20,7 +20,7 @@ void sincos_f32(float x, float* fp0, float* fp1) {
2020
}
2121

2222
// NO-MATH-ERRNO-LABEL: @sincos_f64
23-
// NO-MATH-ERRNO: [[SINCOS:%.*]] = call { double, double } @llvm.sincos.f64(double {{.*}})
23+
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { double, double } @llvm.sincos.f64(double {{.*}})
2424
// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { double, double } [[SINCOS]], 0
2525
// NO-MATH-ERRNO-NEXT: [[COS:%.*]] = extractvalue { double, double } [[SINCOS]], 1
2626
// NO-MATH-ERRNO-NEXT: store double [[SIN]], ptr {{.*}}, align 8, !alias.scope [[SINCOS_ALIAS_SCOPE:![0-9]+]]
@@ -34,7 +34,7 @@ void sincos_f64(double x, double* dp0, double* dp1) {
3434
}
3535

3636
// NO-MATH-ERRNO-LABEL: @sincos_f128
37-
// NO-MATH-ERRNO: [[SINCOS:%.*]] = call { fp128, fp128 } @llvm.sincos.f128(fp128 {{.*}})
37+
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { fp128, fp128 } @llvm.sincos.f128(fp128 {{.*}})
3838
// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { fp128, fp128 } [[SINCOS]], 0
3939
// NO-MATH-ERRNO-NEXT: [[COS:%.*]] = extractvalue { fp128, fp128 } [[SINCOS]], 1
4040
// NO-MATH-ERRNO-NEXT: store fp128 [[SIN]], ptr {{.*}}, align 16, !alias.scope [[SINCOS_ALIAS_SCOPE:![0-9]+]]

0 commit comments

Comments
 (0)