Skip to content

Commit 80c0e8d

Browse files
authored
[x86][Windows] Fix chromium build break (#101268)
Windows does not support float C89 math functions like: - acosf - asinf - atanf - coshf - sinhf - tanhf All 6 are disabled in [TargetLibraryInfo.cpp:293](https://github.com/llvm/llvm-project/blob/39e192b379362e9e645427631c35450d55ed517d/llvm/lib/Analysis/TargetLibraryInfo.cpp#L293C4-L296C41) These 6 libfuncs need to be type promoted. This PR fixes the bug introduced by #98949
1 parent a982cab commit 80c0e8d

File tree

2 files changed

+50
-27
lines changed

2 files changed

+50
-27
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2475,16 +2475,22 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
24752475
(Subtarget.isTargetWindowsMSVC() || Subtarget.isTargetWindowsItanium()))
24762476
// clang-format off
24772477
for (ISD::NodeType Op :
2478-
{ISD::FCEIL, ISD::STRICT_FCEIL,
2478+
{ISD::FACOS, ISD::STRICT_FACOS,
2479+
ISD::FASIN, ISD::STRICT_FASIN,
2480+
ISD::FATAN, ISD::STRICT_FATAN,
2481+
ISD::FCEIL, ISD::STRICT_FCEIL,
24792482
ISD::FCOS, ISD::STRICT_FCOS,
2483+
ISD::FCOSH, ISD::STRICT_FCOSH,
24802484
ISD::FEXP, ISD::STRICT_FEXP,
24812485
ISD::FFLOOR, ISD::STRICT_FFLOOR,
24822486
ISD::FREM, ISD::STRICT_FREM,
24832487
ISD::FLOG, ISD::STRICT_FLOG,
24842488
ISD::FLOG10, ISD::STRICT_FLOG10,
24852489
ISD::FPOW, ISD::STRICT_FPOW,
24862490
ISD::FSIN, ISD::STRICT_FSIN,
2487-
ISD::FTAN, ISD::STRICT_FTAN})
2491+
ISD::FSINH, ISD::STRICT_FSINH,
2492+
ISD::FTAN, ISD::STRICT_FTAN,
2493+
ISD::FTANH, ISD::STRICT_FTANH})
24882494
if (isOperationExpand(Op, MVT::f32))
24892495
setOperationAction(Op, MVT::f32, Promote);
24902496
// clang-format on

llvm/test/CodeGen/X86/fp-strict-libcalls-msvc32.ll

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,15 @@ define float @tan(float %x) #0 {
180180
define float @acos(float %x) #0 {
181181
; CHECK-LABEL: acos:
182182
; CHECK: # %bb.0:
183-
; CHECK-NEXT: pushl %eax
183+
; CHECK-NEXT: subl $12, %esp
184+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
185+
; CHECK-NEXT: fstpl (%esp)
186+
; CHECK-NEXT: wait
187+
; CHECK-NEXT: calll _acos
188+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
184189
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
185-
; CHECK-NEXT: fstps (%esp)
186190
; CHECK-NEXT: wait
187-
; CHECK-NEXT: calll _acosf
188-
; CHECK-NEXT: popl %eax
191+
; CHECK-NEXT: addl $12, %esp
189192
; CHECK-NEXT: retl
190193
%result = call float @llvm.experimental.constrained.acos.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
191194
ret float %result
@@ -194,12 +197,15 @@ define float @acos(float %x) #0 {
194197
define float @asin(float %x) #0 {
195198
; CHECK-LABEL: asin:
196199
; CHECK: # %bb.0:
197-
; CHECK-NEXT: pushl %eax
200+
; CHECK-NEXT: subl $12, %esp
201+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
202+
; CHECK-NEXT: fstpl (%esp)
203+
; CHECK-NEXT: wait
204+
; CHECK-NEXT: calll _asin
205+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
198206
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
199-
; CHECK-NEXT: fstps (%esp)
200207
; CHECK-NEXT: wait
201-
; CHECK-NEXT: calll _asinf
202-
; CHECK-NEXT: popl %eax
208+
; CHECK-NEXT: addl $12, %esp
203209
; CHECK-NEXT: retl
204210
%result = call float @llvm.experimental.constrained.asin.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
205211
ret float %result
@@ -208,12 +214,15 @@ define float @asin(float %x) #0 {
208214
define float @atan(float %x) #0 {
209215
; CHECK-LABEL: atan:
210216
; CHECK: # %bb.0:
211-
; CHECK-NEXT: pushl %eax
217+
; CHECK-NEXT: subl $12, %esp
212218
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
213-
; CHECK-NEXT: fstps (%esp)
219+
; CHECK-NEXT: fstpl (%esp)
214220
; CHECK-NEXT: wait
215-
; CHECK-NEXT: calll _atanf
216-
; CHECK-NEXT: popl %eax
221+
; CHECK-NEXT: calll _atan
222+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
223+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
224+
; CHECK-NEXT: wait
225+
; CHECK-NEXT: addl $12, %esp
217226
; CHECK-NEXT: retl
218227
%result = call float @llvm.experimental.constrained.atan.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
219228
ret float %result
@@ -222,12 +231,15 @@ define float @atan(float %x) #0 {
222231
define float @cosh(float %x) #0 {
223232
; CHECK-LABEL: cosh:
224233
; CHECK: # %bb.0:
225-
; CHECK-NEXT: pushl %eax
234+
; CHECK-NEXT: subl $12, %esp
235+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
236+
; CHECK-NEXT: fstpl (%esp)
237+
; CHECK-NEXT: wait
238+
; CHECK-NEXT: calll _cosh
239+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
226240
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
227-
; CHECK-NEXT: fstps (%esp)
228241
; CHECK-NEXT: wait
229-
; CHECK-NEXT: calll _coshf
230-
; CHECK-NEXT: popl %eax
242+
; CHECK-NEXT: addl $12, %esp
231243
; CHECK-NEXT: retl
232244
%result = call float @llvm.experimental.constrained.cosh.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
233245
ret float %result
@@ -236,26 +248,31 @@ define float @cosh(float %x) #0 {
236248
define float @sinh(float %x) #0 {
237249
; CHECK-LABEL: sinh:
238250
; CHECK: # %bb.0:
239-
; CHECK-NEXT: pushl %eax
251+
; CHECK-NEXT: subl $12, %esp
252+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
253+
; CHECK-NEXT: fstpl (%esp)
254+
; CHECK-NEXT: wait
255+
; CHECK-NEXT: calll _sinh
256+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
240257
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
241-
; CHECK-NEXT: fstps (%esp)
242258
; CHECK-NEXT: wait
243-
; CHECK-NEXT: calll _sinhf
244-
; CHECK-NEXT: popl %eax
259+
; CHECK-NEXT: addl $12, %esp
245260
; CHECK-NEXT: retl
246261
%result = call float @llvm.experimental.constrained.sinh.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
247262
ret float %result
248263
}
249264

250265
define float @tanh(float %x) #0 {
251-
; CHECK-LABEL: tanh:
252266
; CHECK: # %bb.0:
253-
; CHECK-NEXT: pushl %eax
267+
; CHECK-NEXT: subl $12, %esp
254268
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
255-
; CHECK-NEXT: fstps (%esp)
269+
; CHECK-NEXT: fstpl (%esp)
256270
; CHECK-NEXT: wait
257-
; CHECK-NEXT: calll _tanhf
258-
; CHECK-NEXT: popl %eax
271+
; CHECK-NEXT: calll _tanh
272+
; CHECK-NEXT: fstps {{[0-9]+}}(%esp)
273+
; CHECK-NEXT: flds {{[0-9]+}}(%esp)
274+
; CHECK-NEXT: wait
275+
; CHECK-NEXT: addl $12, %esp
259276
; CHECK-NEXT: retl
260277
%result = call float @llvm.experimental.constrained.tanh.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
261278
ret float %result

0 commit comments

Comments
 (0)