Skip to content

Commit 3200deb

Browse files
committed
break for exp10 with FPConstrained
1 parent e72e3d6 commit 3200deb

File tree

3 files changed

+12
-19
lines changed

3 files changed

+12
-19
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2847,10 +2847,13 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
28472847
case Builtin::BI__builtin_exp10f16:
28482848
case Builtin::BI__builtin_exp10l:
28492849
case Builtin::BI__builtin_exp10f128:
2850-
case Builtin::BI__builtin_elementwise_exp10:
2850+
case Builtin::BI__builtin_elementwise_exp10: {
28512851
// TODO: strictfp support
2852+
if (Builder.getIsFPConstrained())
2853+
break;
28522854
return RValue::get(
28532855
emitBuiltinWithOneOverloadedType<1>(*this, E, Intrinsic::exp10));
2856+
}
28542857
case Builtin::BIfabs:
28552858
case Builtin::BIfabsf:
28562859
case Builtin::BIfabsl:

clang/test/CodeGen/constrained-math-builtins.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ __builtin_atan2(f,f); __builtin_atan2f(f,f); __builtin_atan2l(f,f);
101101

102102
__builtin_exp10(f); __builtin_exp10f(f); __builtin_exp10l(f); __builtin_exp10f128(f);
103103

104-
// CHECK: call double @llvm.exp10.f64(double %{{.*}})
105-
// CHECK: call float @llvm.exp10.f32(float %{{.*}})
106-
// CHECK: call x86_fp80 @llvm.exp10.f80(x86_fp80 %{{.*}})
107-
// CHECK: call fp128 @llvm.exp10.f128(fp128 %{{.*}})
104+
// CHECK: call double @exp10(double noundef %{{.*}})
105+
// CHECK: call float @exp10f(float noundef %{{.*}})
106+
// CHECK: call x86_fp80 @exp10l(x86_fp80 noundef %{{.*}})
107+
// CHECK: call fp128 @exp10f128(fp128 noundef %{{.*}})
108108

109109
__builtin_floor(f); __builtin_floorf(f); __builtin_floorl(f); __builtin_floorf128(f);
110110

@@ -287,10 +287,10 @@ __builtin_atan2(f,f); __builtin_atan2f(f,f); __builtin_atan2l(f,f);
287287
// CHECK: declare x86_fp80 @llvm.experimental.constrained.exp2.f80(x86_fp80, metadata, metadata)
288288
// CHECK: declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata)
289289

290-
// CHECK: declare double @llvm.exp10.f64(double)
291-
// CHECK: declare float @llvm.exp10.f32(float)
292-
// CHECK: declare x86_fp80 @llvm.exp10.f80(x86_fp80)
293-
// CHECK: declare fp128 @llvm.exp10.f128(fp128)
290+
// CHECK: declare double @exp10(double noundef)
291+
// CHECK: declare float @exp10f(float noundef)
292+
// CHECK: declare x86_fp80 @exp10l(x86_fp80 noundef)
293+
// CHECK: declare fp128 @exp10f128(fp128 noundef)
294294

295295
// CHECK: declare double @llvm.experimental.constrained.floor.f64(double, metadata)
296296
// CHECK: declare float @llvm.experimental.constrained.floor.f32(float, metadata)

clang/test/CodeGen/strictfp-elementwise-builtins.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,6 @@ float4 strict_elementwise_exp2(float4 a) {
127127
return __builtin_elementwise_exp2(a);
128128
}
129129

130-
// CHECK-LABEL: define dso_local noundef <4 x float> @_Z24strict_elementwise_exp10Dv4_f
131-
// CHECK-SAME: (<4 x float> noundef [[A:%.*]]) local_unnamed_addr #[[ATTR2]] {
132-
// CHECK-NEXT: entry:
133-
// CHECK-NEXT: [[TMP0:%.*]] = tail call <4 x float> @llvm.exp10.v4f32(<4 x float> [[A]]) #[[ATTR4]]
134-
// CHECK-NEXT: ret <4 x float> [[TMP0]]
135-
//
136-
float4 strict_elementwise_exp10(float4 a) {
137-
return __builtin_elementwise_exp10(a);
138-
}
139-
140130
// CHECK-LABEL: define dso_local noundef <4 x float> @_Z24strict_elementwise_floorDv4_f
141131
// CHECK-SAME: (<4 x float> noundef [[A:%.*]]) local_unnamed_addr #[[ATTR0]] {
142132
// CHECK-NEXT: entry:

0 commit comments

Comments
 (0)