Skip to content

Commit 8513f38

Browse files
committed
fix tests
1 parent 4e1ffa0 commit 8513f38

File tree

11 files changed

+299
-364
lines changed

11 files changed

+299
-364
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2951,7 +2951,13 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
29512951
CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E);
29522952
Value *Arg1 = EmitScalarExpr(E->getArg(0));
29532953
Value *Arg2 = EmitScalarExpr(E->getArg(1));
2954-
return RValue::get(Builder.CreateFRem(Arg1, Arg2, "fmod"));
2954+
if (Builder.getIsFPConstrained()) {
2955+
Function *F = CGM.getIntrinsic(Intrinsic::experimental_constrained_frem,
2956+
Arg1->getType());
2957+
return RValue::get(Builder.CreateConstrainedFPCall(F, {Arg1, Arg2}));
2958+
} else {
2959+
return RValue::get(Builder.CreateFRem(Arg1, Arg2, "fmod"));
2960+
}
29552961
}
29562962

29572963
case Builtin::BIlog:
@@ -3203,6 +3209,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
32033209
case Builtin::BI__builtin_ldexpl:
32043210
case Builtin::BI__builtin_ldexpf16:
32053211
case Builtin::BI__builtin_ldexpf128: {
3212+
case Builtin::BI__builtin_elementwise_ldexp:
32063213
return RValue::get(emitBinaryExpMaybeConstrainedFPBuiltin(
32073214
*this, E, Intrinsic::ldexp,
32083215
Intrinsic::experimental_constrained_ldexp));

clang/test/CodeGen/fp-contract-fast-pragma.cpp

Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -89,59 +89,17 @@ float fp_contract_6(float a, float b, float c) {
8989

9090

9191
#pragma clang fp contract(fast)
92-
float fp_contract_7(float a, float b, float c) {
92+
float fp_contract_7(float a) {
9393
// COMMON: _Z13fp_contract_7f
9494
// CHECK: tail call contract float @llvm.sqrt.f32(float %a)
95-
// CHECK: tail call contract float @llvm.ceil.f32(float %a)
96-
// CHECK: tail call contract float @llvm.sin.f32(float %a)
97-
// CHECK: tail call contract float @llvm.pow.f32(float %a, float %b)
98-
// CHECK: tail call contract float @llvm.exp.f32(float %a)
99-
// CHECK: tail call contract float @llvm.fma.f32(float %a, float %b, float %c)
100-
// CHECK: tail call contract float @llvm.nearbyint.f32(float %a)
101-
// CHECK: tail call contract float @llvm.log2.f32(float %a)
10295
// STRICT: tail call contract float @llvm.experimental.constrained.sqrt.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
103-
// STRICT: tail call contract float @llvm.experimental.constrained.ceil.f32(float %a, metadata !"fpexcept.strict")
104-
// STRICT: tail call contract float @llvm.experimental.constrained.sin.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
105-
// STRICT: tail call contract float @llvm.experimental.constrained.pow.f32(float %a, float %b, metadata !"round.tonearest", metadata !"fpexcept.strict")
106-
// STRICT: tail call contract float @llvm.experimental.constrained.exp.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
107-
// STRICT: tail call contract float @llvm.experimental.constrained.fma.f32(float %a, float %b, float %c, metadata !"round.tonearest", metadata !"fpexcept.strict")
108-
// STRICT: tail call contract float @llvm.experimental.constrained.nearbyint.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
109-
// STRICT: tail call contract float @llvm.experimental.constrained.log2.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
110-
return __builtin_sqrtf(a) +
111-
__builtin_elementwise_ceil(a) +
112-
__builtin_elementwise_sin(a) +
113-
__builtin_elementwise_pow(a, b) +
114-
__builtin_elementwise_exp(a) +
115-
__builtin_elementwise_fma(a, b, c) +
116-
__builtin_elementwise_nearbyint(a) +
117-
__builtin_elementwise_log2(a);
96+
return __builtin_sqrtf(a);
11897
}
11998

120-
float fp_contract_8(float a, float b, float c) {
99+
float fp_contract_8(float a) {
121100
// COMMON: _Z13fp_contract_8f
122101
// CHECK: tail call float @llvm.sqrt.f32(float %a)
123-
// CHECK: tail call float @llvm.ceil.f32(float %a)
124-
// CHECK: tail call float @llvm.sin.f32(float %a)
125-
// CHECK: tail call float @llvm.pow.f32(float %a, float %b)
126-
// CHECK: tail call float @llvm.exp.f32(float %a)
127-
// CHECK: tail call float @llvm.fma.f32(float %a, float %b, float %c)
128-
// CHECK: tail call float @llvm.nearbyint.f32(float %a)
129-
// CHECK: tail call float @llvm.log2.f32(float %a)
130102
// STRICT: tail call float @llvm.experimental.constrained.sqrt.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
131-
// STRICT: tail call float @llvm.experimental.constrained.ceil.f32(float %a, metadata !"fpexcept.strict")
132-
// STRICT: tail call float @llvm.experimental.constrained.sin.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
133-
// STRICT: tail call float @llvm.experimental.constrained.pow.f32(float %a, float %b, metadata !"round.tonearest", metadata !"fpexcept.strict")
134-
// STRICT: tail call float @llvm.experimental.constrained.exp.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
135-
// STRICT: tail call float @llvm.experimental.constrained.fma.f32(float %a, float %b, float %c, metadata !"round.tonearest", metadata !"fpexcept.strict")
136-
// STRICT: tail call float @llvm.experimental.constrained.nearbyint.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
137-
// STRICT: tail call float @llvm.experimental.constrained.log2.f32(float %a, metadata !"round.tonearest", metadata !"fpexcept.strict")
138-
#pragma clang fp contract(off)
139-
return __builtin_sqrtf(a) +
140-
__builtin_elementwise_ceil(a) +
141-
__builtin_elementwise_sin(a) +
142-
__builtin_elementwise_pow(a, b) +
143-
__builtin_elementwise_exp(a) +
144-
__builtin_elementwise_fma(a, b, c) +
145-
__builtin_elementwise_nearbyint(a) +
146-
__builtin_elementwise_log2(a);
103+
#pragma clang fp contract(off)
104+
return __builtin_sqrtf(a);
147105
}

0 commit comments

Comments
 (0)